    {-# OPTIONS_HADDOCK hide #-}

    module Graphics.Gloss.Internals.Interface.Simulate.State
    	( State (..)
    	, stateInit )
    where

    -- | Simulation state
    data State
     = 	State
    	{ -- | The iteration number we're up to.
    	  stateIteration	:: !Integer

    	-- | Whether the animation is free-running (or single step)
    	, stateRun		:: !Bool

    	-- | Signals to callbackIdle to take a single step of the automation.
    	, stateStep		:: !Bool

    	-- | Signals to callbackIdle to roll-back to the initial world.
    	, stateReset		:: !Bool

    	-- | How many simulation setps to take for each second of real time
    	, stateResolution	:: !Int

    	-- | How many seconds worth of simulation we've done so far
    	, stateSimTime		:: !Float

    	-- | Record how many steps we've been taking per frame
    	, stateStepsPerFrame 	:: !Int  }

    -- | Initial control state
    stateInit :: Int -> State
    stateInit resolution
     	= State
     	{ stateIteration		= 0
    	, stateRun			= True
    	, stateStep			= False
    	, stateReset			= False
    	, stateResolution		= resolution
    	, stateSimTime			= 0
    	, stateStepsPerFrame		= 0 }