module Cell
( Cell (..)
, readCell
, pictureOfCell
, cellShape)
where
import Data.Char
import Graphics.Gloss
-- | A terrain cell in the world.
data Cell
= CellEmpty
| CellWall
deriving (Show, Eq)
-- | Read a cell from a character.
readCell :: Char -> Cell
readCell c
= case c of
'.' -> CellEmpty
'#' -> CellWall
_ -> error $ "readCell: no match for char " ++ show (ord c) ++ " " ++ show c
-- | The basic shape of a cell.
cellShape :: Int -> Int -> Int -> Picture
cellShape cellSize posXi posYi
= let cs = fromIntegral cellSize
posX = fromIntegral posXi
posY = fromIntegral posYi
x1 = posX
x2 = posX + 1
y1 = posY
y2 = posY + 1
in Polygon [(x1, y1), (x1, y2), (x2, y2), (x2, y1)]
-- | Convert a cell to a picture, based on a primitive shape.
-- We pass the shape in to avoid recomputing it for each cell.
pictureOfCell :: Int -> Int -> Int -> Cell -> Picture
pictureOfCell cellSize posX posY cell
= case cell of
CellEmpty -> Color (greyN 0.2) (cellShape cellSize posX posY)
CellWall -> Color white (cellShape cellSize posX posY)