54 lines
1.5 KiB
Haskell
54 lines
1.5 KiB
Haskell
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
|