module Dodge.WorldEvent.Cloud where import Dodge.Data import Dodge.Base --import Geometry import Picture import qualified IntMapHelp as IM import Control.Lens makeCloudAt :: Float -> Int -> (Cloud -> Picture) -> Point2 -> World -> World makeCloudAt rad t drawFunc p w = w & clouds %~ IM.insert i theCloud where i = IM.newKey $ _clouds w theCloud = Cloud { _clID = i , _clPos = p , _clVel = (0,0) , _clPict = drawFunc , _clRad = rad , _clTimer = t , _clEffect = const id } drawCloudWith :: Float -> Float -> Color -> Cloud -> Picture drawCloudWith radMult fadet col cl = setLayer 2 . setDepth (-0.5) $ circleSolidCol (withAlpha 0 col) (withAlpha a col) (radMult * _clRad cl) -- . color (withAlpha a col) -- $ circleSolid (radMult * _clRad cl) where a = min 1 $ fromIntegral (_clTimer cl) / fadet makeThickSmokeAt :: Point2 -> World -> World makeThickSmokeAt = makeCloudAt 3 50 (drawCloudWith 4 50 black) makeThinSmokeAt :: Point2 -> World -> World makeThinSmokeAt = makeCloudAt 5 400 (drawCloudWith 4 400 (withAlpha 0.05 black)) makeSmokeCloudAt :: Point2 -> World -> World --makeSmokeCloudAt = makeCloudAt 10 200 (drawCloudWith 2 200 (greyN 0.5)) makeSmokeCloudAt = makeCloudAt 15 400 (drawCloudWith (4/3) 800 (greyN 0.5)) makeFlamerSmokeAt :: Point2 -> World -> World makeFlamerSmokeAt = makeCloudAt 3 200 (drawCloudWith 4 200 (greyN 0.5)) spawnSmokeAtCursor :: World -> World spawnSmokeAtCursor w = makeSmokeCloudAt (mouseWorldPos w) w