scroll-1.20150313: Monster.hs
module Monster where
import qualified Data.Set as S
import Control.Monad.State.Strict
import Types
import World
monsterPos :: Monster -> Pos
monsterPos (Bug p) = p
monsterPos (Mold p) = p
moveMonster :: Monster -> Pos -> M ()
moveMonster m p = do
removeMonster m
addMonster $ case m of
Bug _ -> Bug p
Mold _ -> Mold p
addMonster :: Monster -> M ()
addMonster m = do
writeActor (monsterPos m) (AMonster m)
changeMonsters (S.insert m)
removeMonster :: Monster -> M ()
removeMonster m = do
writeActor (monsterPos m) Empty
changeMonsters (S.delete m)
changeMonsters :: (S.Set Monster -> S.Set Monster) -> M ()
changeMonsters f = modify $ \s -> s { monsters = f (monsters s) }