26 lines
746 B
Haskell
26 lines
746 B
Haskell
module Dodge.PosEvent where
|
|
import Dodge.Data
|
|
import Dodge.Spark
|
|
import Geometry.Data
|
|
import Color
|
|
import LensHelp
|
|
|
|
import Control.Monad.State
|
|
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)
|