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