-- This module keeps track of all the things that walk/crawl/fly/slither -- around on a level. The term "monster" is just a traditional catch-all -- term, it includes NPCs, pets, even the player's character. module Monsters ( Monster(..), Monsters, new_monsters, add_monster, move_monster ) where import qualified Data.Map as M (empty, insert, lookup, delete, Map) import Util.Grid import Body import Glyph import Language data Monster = Monster { monster_desc :: NounPhrase, monster_body :: Body, monster_glyph :: Glyph } type Monsters = M.Map Position Monster new_monsters :: Monsters new_monsters = M.empty add_monster :: Monster -> Position -> Monsters -> Monsters add_monster m pos ms = M.insert pos m ms move_monster :: Monsters -> Position -> Position -> Monsters move_monster ms oldp newp = case (flip M.lookup) ms oldp of (Just m) -> M.insert newp m ((flip M.delete) ms oldp) Nothing -> ms -- FIXME: warn somehow?