module Dodge.Debug where import Dodge.Data import Dodge.Base import Geometry.Data import Picture import Control.Lens import qualified Data.IntMap.Strict as IM drawCircleAtFor :: Point2 -> Int -> World -> World drawCircleAtFor p t w = w & projectiles %~ IM.insert k Projectile { _pjPos = p , _pjStartPos = p , _pjVel = (0,0) , _pjPict = onLayer PtLayer $ uncurry translate p $ color white $ circleSolid 20 , _pjID = k , _pjUpdate = pjTimer t k } where k = newKey $ _projectiles w drawCircleAtForCol :: Point2 -> Int -> Color -> World -> World drawCircleAtForCol p t col w = w & projectiles %~ IM.insert k Projectile { _pjPos = p , _pjStartPos = p , _pjVel = (0,0) , _pjPict = onLayer PtLayer $ uncurry translate p $ color col $ circleSolid 20 , _pjID = k , _pjUpdate = pjTimer t k } where k = newKey $ _projectiles w drawLineForCol :: [Point2] -> Int -> Color -> World -> World drawLineForCol ps t col w = w & projectiles %~ IM.insert k Projectile { _pjPos = head ps , _pjStartPos = head ps , _pjVel = (0,0) , _pjPict = onLayer PtLayer $ color col $ lineOfThickness 5 ps , _pjID = k , _pjUpdate = pjTimer t k } where k = newKey $ _projectiles w pjTimer :: Int -> Int -> World -> World pjTimer 0 i = projectiles %~ IM.delete i pjTimer time i = projectiles . ix i . pjUpdate .~ pjTimer (time - 1) i