packages feed

brillo-examples-2.0.0: picture/Occlusion/Cell.hs

module Cell (
  Cell (..),
  readCell,
  pictureOfCell,
  cellShape,
)
where

import Brillo
import Data.Char


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