Files
loop/src/Dodge/Laser/Update.hs
T

27 lines
796 B
Haskell

module Dodge.Laser.Update
( updateLaser
) where
import Dodge.Item.Location
import Control.Lens
--import Data.Maybe
import Dodge.Data.World
import Dodge.Item.Weapon.LaserPath
import Dodge.WorldEvent.Damage
import Geometry
updateLaser :: World -> LaserStart -> (World, Laser)
updateLaser w pt =
( case _lpType pt of
DamageLaser dam -> damThingHitWith
(\p1 p2 p3 -> Damage LASERING dam p1 p2 p3 NoDamageEffect) sp xp thHit w
TargetingLaser itid -> w & pointerToItemID itid . itUse . tgPos ?~ last ps
, Laser{_lzPoints = sp : ps, _lzColor = _lpColor pt, _lzType = _lpType pt}
)
where
phasev = _lpPhaseV pt
sp = _lpPos pt
dir = _lpDir pt
xp = sp +.+ 800 *.* unitVectorAtAngle dir
(thHit, ps) = reflectLaserAlong phasev sp xp w