--------------------------------------------------------------------------------
-- |
-- Module      :  Terminal.Game
-- Copyright   :  © 2017-2019 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.
--
-- Before continuing, __please read this__: to use @ansi-terminal-game@,
-- you need to compile your programs with @-threaded@; if you do not do
-- this the program will crash at start-up. Just add:
--
-- @
--      ghc-options:      -threaded
-- @
--
-- in your @.cabal@ file and you will be fine!
--
--------------------------------------------------------------------------------

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

-- todo add docs [release]

module Terminal.Game ( -- * Game Loop
                       MonadGameIO,
                       FPS,
                       runGame,
                       Event(..),
                       -- * Plane
                       Plane,
                       Coords,
                       Row, Column,
                       Width, Height,
                       stringPlane,
                       stringPlaneTrans,
                       blankPlane, addVitrum,
                       pastePlane,
                       planeSize, paperPlane,
                       -- * Draw
                       Draw,
                       (%), (#), (&),
                       mergePlanes,
                       cell, box, textBox,
                       bold, invert,
                       -- * Animations
                       Animation, Loop(..),
                       creaAni,
                       tick, reset,
                       getFrames,
                       -- * Timers
                       Timed,
                       ExpBehaviour(..),
                       creaTimer,
                       creaBoolTimer,
                       fetchFrame, isExpired,

                       -- * Utils
                       -- screenSize
                     )
    where

import Terminal.Game.Layer.Imperative
import Terminal.Game.Layer.Object
import Terminal.Game.Layer.Object.Display ()
import Terminal.Game.Plane
import Terminal.Game.Draw
import Terminal.Game.Animation