{-|
Module      : Game.GoreAndAsh.Core
Description : Engine Core that controls modules execution
Copyright   : (c) Anton Gushcha, 2015-2016
                  Oganyan Levon, 2016
License     : BSD3
Maintainer  : ncrashed@gmail.com
Stability   : experimental
Portability : POSIX

The core of all engine. It contains generic arrow operations and helpers,
definition of core module system, game session declaration and utilities
to control main loop of application.
-}
module Game.GoreAndAsh.Core(
  -- * Reexports of used time types
    GameTime
  , GameSession
  , NominalDiffTime
  -- * Game loop control
  , GameState
  , stepGame
  , newGameState
  , newGameStateM
  , cleanupGameState
  -- * Core module definition
  , GameMonadT
  , GameModule(..)
  , ModuleStack
  -- * Arrow combinators and helpers
  , GameWire
  -- ** Lifting monad to arrow
  , liftGameMonad
  , liftGameMonad1
  , liftGameMonad2
  , liftGameMonad3
  , liftGameMonad4
  , liftGameMonadOnce
  , liftGameMonad1Once
  , liftGameMonad2Once
  , liftGameMonad3Once
  , liftGameMonad4Once
  -- ** Event functions
  , once'
  , mapE
  , filterE
  , filterEG
  , filterEGM
  , filterJustE
  , filterJustLE
  , liftGameMonadEvent1
  , changes
  -- ** Helpers
  , stateWire
  , chainWires
  , dispense
  , dDispense
  , withInit
  , nothingInhibit
  -- ** Time utilities
  , deltaTime
  ) where

import Game.GoreAndAsh.Core.Arrow as X
import Game.GoreAndAsh.Core.Monad as X
import Game.GoreAndAsh.Core.Session as X
import Game.GoreAndAsh.Core.State as X