26 lines
755 B
Haskell
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)
|