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