Files
loop/src/Dodge/PosEvent.hs
T
2025-06-07 10:08:20 +01:00

24 lines
691 B
Haskell

module Dodge.PosEvent (updatePosEvent) where
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 ElectricSpark rspeed rdir
where
rspeed = state (randomR (3, 6))
rdir = state $ randomR (0, 2 * pi)