module Main ( main ) where import BearLibTerminal import Control.Monad import Control.Exception import Data.Text ( Text ) import qualified Data.Text as T import Omni.BasicOutput import qualified Data.Map as M import Omni.DefaultFont (defaultFont) import Omni.Tilesets import Omni.ManualCellsize main :: IO () main = do bracket_ (terminalOpen_ >> resetTerminal) terminalClose runLoop runLoop :: IO () runLoop = do terminalClear printEntries void $ terminalPrint 2 23 "[color=orange]ESC.[/color] Exit" void $ terminalPrintExt 77 22 0 0 (Just AlignRight) "library version 0.1.0.0" void $ terminalPrintExt 77 23 0 0 (Just AlignRight) "BearLibTerminal (Hello from Haskell!)" terminalRefresh c <- terminalRead case c of TkEscape ->return () TkClose -> return () x -> maybe runLoop (>> runLoop) (M.lookup x entryMap ) entryPresses :: [Keycode] entryPresses = [ Tk1 .. Tk9 ] <> [TkA .. TkK] entryMap :: M.Map Keycode (IO ()) entryMap = M.fromList $ zip entryPresses (map snd entries) entries :: [(Text, IO ())] entries = [ ("Basic output", basicOutput) , ("Default font", defaultFont) , ("Tilesets", tilesets) , ("Sprites", return ()) -- TODO , ("Manual cellsize", manualCellsize) , ("Auto-generated tileset", return ()) -- TODO , ("Multiple fonts", return ()) -- TODO , ("Text alignment", return ()) -- TODO , ("Formatted log", return ()) -- TODO , ("Layers", return ()) -- TODO , ("Extended 1: basics", return ()) -- TODO , ("Extended 2: smooth scroll", return ()) -- TODO , ("Dynamic sprites", return ()) -- TODO , ("Speed", return ()) -- TODO , ("Input 1: keyboard", return ()) -- TODO , ("Input 2: mouse", return ()) -- TODO , ("Input 3: text input", return ()) -- TODO , ("Input 4: filtering", return ()) -- TODO , ("Window resizing", return ()) -- TODO , ("Examining cell contents", return ()) -- TODO ] printEntry :: (Int, (Text, IO ())) -> IO () printEntry (i, (n, _)) = do let shortcut = toEnum $ if i < 9 then fromEnum '1' + i else fromEnum 'a' + (i-9) let col = if i `elem` ([0..2] <> [4]) then "white" else "gray" void $ terminalPrint 2 (1+i) (mconcat ["[color=orange]", T.singleton shortcut, ".[/color][color="<>col<>"]", n]) printEntries :: IO () printEntries = mapM_ printEntry (zip [0..] entries) resetTerminal :: IO () resetTerminal = do -- TODO: I moved all the actual helper stuff to roguefunctor.. -- todo: font:default, input filter to keyboard --void $ terminalSetText "" defaultWindowOptions { title = Just "Omni: menu" } terminalColorName "white"