--------------------------------------------------------------------------------
-- |
-- Module      :  Terminal.Game
-- Copyright   :  © 2017-2018 Francesco Ariis
-- License     :  GPLv3 (see LICENSE file)
--
-- Maintainer  :  Francesco Ariis <fa-ml@ariis.it>
-- Stability   :  provisional
-- Portability :  portable
--
-- Machinery and utilities for 2D terminal games.
--
--------------------------------------------------------------------------------

-- Basic col-on-black ASCII terminal, operations.
-- Only module to be imported.

-- todo color [release]
-- todo resize screen corruption [grave]
-- add docs [release]

module Terminal.Game ( -- * Game Loop
                       gameLoop,
                       -- * Plane
                       Plane,                  -- types
                       Coords, Width, Height,
                       stringPlane,            -- crea
                       blankPlane, addVitrum,
                       copyPlane, pastePlane,  -- slice
                       planeSize, paperPlane,  -- info
                       -- * Draw
                       (%), (&), cell,         -- draw
                       box, textBox,
                       -- * Animations
                       Animation, Loop(..),    -- types
                       creaAni,
                       tick, reset,            -- operate
                                             -- xxx metti fetchframe in
                                             --     documentation
                                             --     e anche isexpired
                       getFrames,
                       encodeAni,              -- serialise
                       decodeAni,
                       -- * Timers
                       Timed,                  -- types
                       ExpBehaviour(..),
                       creaTimer,              -- crea
                       creaBoolTimer,
                       fetchFrame, isExpired,  -- operate
                       -- * Utils
                       screenSize
                     )
    where

import Terminal.Game.GameLoop
import Terminal.Game.Plane
import Terminal.Game.Draw
-- xxx rivedi gli export di animation, encapsula tutto il possibile
import Terminal.Game.Animation
import Terminal.Game.Timer
import Terminal.Game.Utils

-- todo text deve essere gestito da una cosa smart, pensa a pp leijin

-- todo [post-first-release] setTitle hSupportsANSI bold? italics? intensity

-- todo geekosaur threaded shit bug

--    geekosaur f-a, a. heh. so the thoguht I had turned out to
--           be correct:
--           Control.Concurent.rtsSupportsBoundThreads (because
--           green threads can't be usefully bound)
--            x hiratara
--              [~hiratara@240f:7:4708:1:47a:b8c4:d18a:d063]
--              has left Ping timeout: 276 seconds [#haskell]
--    geekosaur so if that produces True, it's using the
--              threaded runtime; if False, you can say
--              something useful instead of hanging