31 lines
867 B
Haskell
31 lines
867 B
Haskell
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
|