module Dodge.Creature.Update where import Dodge.Barreloid import Dodge.Creature.ChainUpdates import Dodge.Creature.Impulse import Dodge.Creature.State import Dodge.Data.World import Dodge.Humanoid import Dodge.Lampoid import LensHelp import System.Random updateCreature :: Creature -> World -> World updateCreature cr = case _crType cr of Lampoid{} -> updateLampoid cr Humanoid{} -> updateHumanoid 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