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)