packages feed

bearlibterminal-0.1.0.0: omni/Omni/Tilesets.hs

module Omni.Tilesets where

import BearLibTerminal
import Control.Monad

tilesets :: IO ()
tilesets = do
  terminalComposition CompositionOn
  terminalSet_ "window.title='Omni: tilesets"
  terminalSet_ "U+E100: Media/Runic.png, size=8x16"
  terminalSet_ "U+E200: Media/Tiles.png, size=32x32, align=top-left"
  terminalSet_ "U+E300: Media/fontawesome-webfont.ttf, size=24x24, spacing=3x2, codepage=Media/fontawesome-codepage.txt"
  terminalSet_ "zodiac font: Media/Zodiac-S.ttf, size=24x36, spacing=3x3, codepage=437"

  terminalClear
  terminalColorName "white"

  terminalPrint_ 2 1 "[color=orange]1.[/color] Of course, there is default font tileset."

  terminalPrint_ 2 3 "[color=orange]2.[/color] You can load some arbitrary tiles and use them as glyphs:"
  terminalPrint_ (2+3) 4 $ "Fire rune ([color=red][U+E102][/color]), " <> "water rune ([color=lighter blue][U+E103][/color]), " <> "earth rune ([color=darker green][U+E104][/color])"

  terminalPrint_ 2 6 "[color=orange]3.[/color] Tiles are not required to be of the same size as font symbols:"
  terminalPutInt (2+3+0) 7 (0xE200+7)
  terminalPutInt (2+3+5) 7 (0xE200+8)
  terminalPutInt (2+3+10) 7 (0xE200+9)

  terminalPrint_ 2 10 "[color=orange]4.[/color] Like font characters, tiles may be freely colored and combined:"
  terminalPutInt (2+3+0) 11 (0xE200+8)
  terminalColorName "lighter orange"
  terminalPutInt (2+3+5) 11 (0xE200+8)
  terminalColorName "orange"
  terminalPutInt (2+3+10) 11 (0xE200+8)
  terminalColorName "dark orange"
  terminalPutInt (2+3+15) 11 (0xE200+8)

  terminalColorName "white"
  let order = zip [0..] [11, 10, 14, 12, 13]
  forM_ order $ \(i, o) -> do
    terminalPutInt (2+3+25+i*4) 11 (0xE200+o)
    terminalPutInt (2+3+25+(length order +1)*4) 11 (0xE200+o)
  terminalPutInt (2+3+25+length order*4) 11 (0xE200+15)

  terminalPrint_ 2 14 "[color=orange]5.[/color] And tiles can even come from TrueType fonts like this:"
  forM_ [0..5] $ \i -> terminalPutInt (2+3+i*5) 15 (0xE300+i)

  terminalPrint_ (2+3) 18 "...or like this:\n[font=zodiac]D F G S C"

  terminalRefresh

  c <- terminalRead
  case c of
    TkClose -> finish
    TkEscape -> finish
    _ -> tilesets
  where
    finish = do
      terminalSet_ "U+E100: none; U+E200: none; U+E300: none; zodiac font: none"
      terminalComposition CompositionOff