2018-03-03 16:03:17 +00:00
|
|
|
{-# LANGUAGE FlexibleInstances #-}
|
2018-02-17 01:36:06 +00:00
|
|
|
module Types.Map where
|
|
|
|
|
|
|
|
data TileState
|
|
|
|
= Wall
|
|
|
|
-- | Wind
|
|
|
|
| Door
|
|
|
|
| Hall
|
|
|
|
| Offi
|
|
|
|
| Toil
|
|
|
|
| Kitc
|
|
|
|
| Elev
|
|
|
|
| Unde
|
2018-03-03 16:03:17 +00:00
|
|
|
deriving (Ord, Eq)
|
2018-02-17 01:36:06 +00:00
|
|
|
|
|
|
|
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
|
2018-03-03 16:03:17 +00:00
|
|
|
{ fcElevator :: (Int, Int)
|
|
|
|
, fcFacilities :: [(Int, Int)]
|
|
|
|
, fcSize :: (Int, Int)
|
2018-02-17 01:36:06 +00:00
|
|
|
} deriving (Show)
|
|
|
|
|
2018-03-03 16:03:17 +00:00
|
|
|
data Boundaries a = Boundaries
|
|
|
|
{ matmin :: (a, a)
|
|
|
|
, matmax :: (a, a)
|
2018-02-17 01:36:06 +00:00
|
|
|
} deriving (Show, Eq)
|
|
|
|
|
2018-03-03 16:03:17 +00:00
|
|
|
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)
|
|
|
|
|
2018-02-17 01:36:06 +00:00
|
|
|
data GraphDirection = North | South | East | West
|
|
|
|
deriving (Show, Eq)
|
|
|
|
|
|
|
|
data Graph
|
|
|
|
= GHall
|
|
|
|
{ connects :: [Graph]
|
|
|
|
}
|
|
|
|
| GRoom
|
|
|
|
{ neighbs :: [(GraphDirection, TileState)]
|
2018-03-03 16:03:17 +00:00
|
|
|
, bounds :: Boundaries Int
|
2018-02-17 01:36:06 +00:00
|
|
|
}
|
|
|
|
deriving (Show, Eq)
|
2018-03-03 16:03:17 +00:00
|
|
|
|
|
|
|
class Size a where
|
|
|
|
size :: a -> Double
|