packages feed

DefendTheKing-0.1: src/ChessFont.hs

module ChessFont (DrawPos, PiecePix(..), piecePix) where

import Chess (PieceType(..))

import Graphics.UI.GLUT (GLfloat)

type DrawPos = (GLfloat, GLfloat)

data PiecePix = PiecePix {
  pixBody :: [[DrawPos]],
  pixOutline :: [[DrawPos]]
}

piecePix :: PieceType -> PiecePix
piecePix Pawn =
  PiecePix r r
  where
    r = [[(-s, -s), (-s, s), (s, s), (s, -s)]]
    s = 0.6
piecePix Rook = PiecePix {
  pixBody = [thing, othing, [(-s, -s), (-s, s), (s, s), (s, -s)]],
  pixOutline = [thing ++ othing]
  }
  where
    s = 0.5
    thing = [(-s, s), (-1, 1), (1, 1), (s, s)]
    othing = map r thing
    r (x, y) = (-x, -y)
piecePix Knight = PiecePix {
  pixBody = [[a, b, e] ,[b, c, d]],
  pixOutline = [outline]
  }
  where
    outline = [(-1, 0), (1, 1), (0.5, -1), (-1, -1), (0, 0)]
    [a, b, c, d, e] = outline
piecePix Bishop = PiecePix {
  pixBody = [[a, b, d], [b, c, d]],
  pixOutline = [outline]
  }
  where
    outline = [(-1, -1), (0, 1), (1, -1), (0, -0.5)]
    [a, b, c, d] = outline
piecePix King = PiecePix {
  pixBody = [leye, reye, [a, b, e], [c, d, e]],
  pixOutline = [reverse leye, reye, mouthline]
  }
  where
    reye = [(0.25, 0.5), (0.5, 0.75), (0.75, 0.5), (0.5, 0.25)]
    leye = map m reye
    m (x, y) = (-x, y)
    mouthline =
      [(-0.75, -0.75), (-0.75, -0.25)
      ,(0, -0.5)
      ,(0.75, -0.25), (0.75, -0.75)]
    [a, b, c, d, e] = mouthline
piecePix Queen = PiecePix {
  pixBody = [[a, b, j], [d, e, f], [c, h, i], [c, g, h]],
  pixOutline = [outline]
  }
  where
    outline =
      [(-1, 1), (-0.25, 0.5), (0, 1), (0.25, 0.5), (1, 1)
      ,(0.5, 0), (1, -1), (0, -0.5), (-1, -1), (-0.5, 0)]
    [a, b, c, d, e, f, g, h, i, j] = outline