packages feed

gloss-examples-1.12.0.0: picture/Occlusion/Cell.hs

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  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)