module Dodge.Debug where import Dodge.Data import Dodge.Zone import Dodge.Base import Geometry.Zone import Geometry.Data import Geometry import Picture import qualified IntMapHelp as IM import qualified Data.IntSet as IS import Control.Lens drawCircleAtFor :: Point2 -> Int -> World -> World drawCircleAtFor p t = drawCircleAtForCol p t white drawCircleAtForCol :: Point2 -> Int -> Color -> World -> World drawCircleAtForCol p t col w = w & props %~ IM.insert k Projectile { _pjPos = p , _pjStartPos = p , _pjVel = V2 0 0 , _prDraw = \_ -> (,) mempty $ setDepth 20 $ uncurryV translate p $ color col $ circleSolid 20 , _pjID = k , _pjUpdate = \_ -> pjTimerF t k } where k = IM.newKey $ _props w drawLineForCol :: [Point2] -> Int -> Color -> World -> World drawLineForCol ps t col w = w & props %~ IM.insert k Projectile { _pjPos = head ps , _pjStartPos = head ps , _pjVel = V2 0 0 , _prDraw = \_ -> (,) mempty $ setDepth 20 $ color col $ thickLine 5 ps , _pjID = k , _pjUpdate = \_ -> pjTimerF t k } where k = IM.newKey $ _props w pjTimerF :: Int -> Int -> World -> World pjTimerF 0 i = props %~ IM.delete i pjTimerF time i = props . ix i . pjUpdate .~ (\_ -> pjTimerF (time - 1) i) drawDDA :: IM.IntMap IS.IntSet -> Picture drawDDA = setLayer BloomLayer . color (withAlpha 0.5 green) . IM.foldlWithKey' f blank where f pic x' ys' = concatMapPic (\y -> polygon (rectNSEW (y+50) y (x+50) x)) ys `appendPic` pic where x = 50 * fromIntegral x' ys = map ((50 *) . fromIntegral) $ IS.toList ys' debugWallZoningPic :: World -> Picture debugWallZoningPic w = setLayer BloomLayer $ zonesPic `appendPic` wallsPic where wallsPic = setDepth 25 . color yellow . concatMapPic (drawTheWall . _wlLine) $ IM.elems theWalls drawTheWall (a,b) = thickLine 20 [a,b] theWalls = wallsAlongLine sp ep w zonesPic = setDepth 20 $ drawDDA zones zones = ddaExt zoneSize sp ep sp = _crPos $ you w ep = mouseWorldPos w