{-# LANGUAGE FlexibleInstances #-} module Types.Map where data TileState = Wall -- | Wind | Door | Hall | Offi | Toil | Kitc | Elev | Unde deriving (Ord, Eq) instance Show TileState where show Wall = "#" -- show Wind = "~" show Door = "+" show Hall = "_" show Offi = "." show Toil = "o" show Kitc = "k" show Elev = "x" show Unde = " " data FloorConfig = FloorConfig { fcElevator :: (Int, Int) , fcFacilities :: [(Int, Int)] , fcSize :: (Int, Int) } deriving (Show) data Boundaries a = Boundaries { matmin :: (a, a) , matmax :: (a, a) } deriving (Show, Eq) instance Size (Boundaries Int) where size (Boundaries (minr, minc) (maxr, maxc)) = fromIntegral ((maxr - minr) * (maxc - minc)) instance Size (Boundaries Double) where size (Boundaries (minr, minc) (maxr, maxc)) = (maxr - minr) * (maxc - minc) data GraphDirection = North | South | East | West deriving (Show, Eq) data Graph = GHall { connects :: [Graph] } | GRoom { neighbs :: [(GraphDirection, TileState)] , bounds :: Boundaries Int } deriving (Show, Eq) graphIsRoom :: Graph -> Bool graphIsRoom (GRoom _ _) = True graphIsRoom _ = False class Size a where size :: a -> Double