Files
loop/src/Dodge/PosEvent.hs
T

26 lines
755 B
Haskell

module Dodge.PosEvent where
import Color
import Control.Monad.State
import Dodge.Data.World
import Dodge.Spark
import Geometry.Data
import LensHelp
import RandomHelp
updatePosEvent :: World -> PosEvent -> (World, Maybe PosEvent)
updatePosEvent w pv
| _pvTimer pv < 1 = (w, Nothing)
| otherwise = (posEventEffect pv w, Just $ pv & pvTimer -~ 1)
posEventEffect :: PosEvent -> World -> World
posEventEffect pv = case _pvType pv of
SparkSpawner -> spawnElectricalSparks (_pvPos pv)
spawnElectricalSparks :: Point2 -> World -> World
spawnElectricalSparks = randSpark ELECTRICAL rspeed rcol rdir
where
rspeed = state (randomR (3, 6))
rcol = brightX 100 1.5 <$> takeOne [white, azure, blue, cyan]
rdir = state $ randomR (0, 2 * pi)