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)