27 lines
796 B
Haskell
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
|