module Game.LambdaHack.Color
(
Color(..), defBG, defFG, isBright, legalBG, colorToRGB
, Attr(..), defaultAttr, AttrChar(..), SingleFrame(..), Animation
) where
import Data.Binary
import qualified Data.IntMap as IM
data Color =
Black
| Red
| Green
| Brown
| Blue
| Magenta
| Cyan
| White
| BrBlack
| BrRed
| BrGreen
| BrYellow
| BrBlue
| BrMagenta
| BrCyan
| BrWhite
deriving (Show, Eq, Ord, Enum, Bounded)
instance Binary Color where
put = putWord8 . toEnum . fromEnum
get = fmap (toEnum . fromEnum) getWord8
defBG, defFG :: Color
defBG = Black
defFG = White
data Attr = Attr
{ fg :: !Color
, bg :: !Color
}
deriving (Show, Eq, Ord)
instance Binary Attr where
put Attr{..} = do
put fg
put bg
get = do
fg <- get
bg <- get
return Attr{..}
defaultAttr :: Attr
defaultAttr = Attr defFG defBG
data AttrChar = AttrChar
{ acAttr :: !Attr
, acChar :: !Char
}
deriving (Show, Eq)
instance Binary AttrChar where
put AttrChar{..} = do
put acAttr
put acChar
get = do
acAttr <- get
acChar <- get
return AttrChar{..}
data SingleFrame = SingleFrame
{ sfLevel :: ![[AttrChar]]
, sfTop :: String
, sfBottom :: String
}
deriving Eq
type Animation = [IM.IntMap AttrChar]
isBright :: Color -> Bool
isBright c = c >= BrBlack
legalBG :: [Color]
legalBG = [Black, White, Blue, Magenta]
colorToRGB :: Color -> String
colorToRGB Black = "#000000"
colorToRGB Red = "#D50000"
colorToRGB Green = "#00AA00"
colorToRGB Brown = "#AA5500"
colorToRGB Blue = "#203AF0"
colorToRGB Magenta = "#AA00AA"
colorToRGB Cyan = "#00AAAA"
colorToRGB White = "#C5BCB8"
colorToRGB BrBlack = "#6F5F5F"
colorToRGB BrRed = "#FF5555"
colorToRGB BrGreen = "#75FF45"
colorToRGB BrYellow = "#FFE855"
colorToRGB BrBlue = "#4090FF"
colorToRGB BrMagenta = "#FF77FF"
colorToRGB BrCyan = "#60FFF0"
colorToRGB BrWhite = "#FFFFFF"
_olorToRGB :: Color -> String
_olorToRGB Black = "#000000"
_olorToRGB Red = "#AA0000"
_olorToRGB Green = "#00AA00"
_olorToRGB Brown = "#AA5500"
_olorToRGB Blue = "#0000AA"
_olorToRGB Magenta = "#AA00AA"
_olorToRGB Cyan = "#00AAAA"
_olorToRGB White = "#AAAAAA"
_olorToRGB BrBlack = "#555555"
_olorToRGB BrRed = "#FF5555"
_olorToRGB BrGreen = "#55FF55"
_olorToRGB BrYellow = "#FFFF55"
_olorToRGB BrBlue = "#5555FF"
_olorToRGB BrMagenta = "#FF55FF"
_olorToRGB BrCyan = "#55FFFF"
_olorToRGB BrWhite = "#FFFFFF"