module Dodge.Creature.Update where import Dodge.Data import Dodge.Creature.State import Dodge.Creature.Impulse import Dodge.Creature.ChainUpdates import Dodge.Lampoid import Dodge.Humanoid import Dodge.Turretoid import Dodge.Barreloid import LensHelp import System.Random updateCreature :: Creature -> World -> World updateCreature cr = case _crType cr of Lampoid{} -> updateLampoid cr Humanoid{} -> updateHumanoid cr Turretoid{} -> updateTurretoid cr Barreloid{} -> updateBarreloid cr NonDrawnCreature -> id -- bit of a hack to get new random generators after each creature's update defaultImpulsive :: [World -> Creature -> Creature] -> Creature -> World -> World defaultImpulsive = fmap (fmap updateRandGen) . stateUpdate . impulsiveAIBefore . chainCreatureUpdates where updateRandGen w = let (_,g) = randomR (0,1::Int) (_randGen w) in w & randGen .~ g