Files
loop/src/Dodge/Laser/Update.hs
T
2025-06-07 14:26:00 +01:00

40 lines
1006 B
Haskell

module Dodge.Laser.Update (
updateLaser,
) where
import Control.Lens
--import Data.Maybe
import Dodge.Data.World
import Dodge.Item.Location
import Dodge.Item.Weapon.LaserPath
import Dodge.WorldEvent.Damage
import Geometry
import Picture.Base
updateLaser :: World -> Laser -> (World, Picture)
updateLaser w pt =
( case _lpType pt of
DamageLaser dam ->
damThingHitWith
(\p1 p2 p3 -> Lasering dam p2 (p3 - p2))
sp
xp
thHit
w
TargetingLaser itid -> w & pointerToItemID itid . itTargeting . itTgPos ?~ last ps
, drawLaser (_lpColor pt) (sp : ps)
)
where
phasev = _lpPhaseV pt
sp = _lpPos pt
dir = _lpDir pt
xp = sp +.+ 800 *.* unitVectorAtAngle dir
(thHit, ps) = reflectLaserAlong phasev sp xp w
drawLaser :: Color -> [Point2] -> Picture
drawLaser col =
setLayer BloomNoZWrite
. setDepth 19.5
. color (brightX 10 1 col)
. thickLine 3