content: {-# OPTIONS_HADDOCK hide #-}
  
  module Graphics.Gloss.Internals.Interface.Animate.State
          ( State (..)
          , stateInit )
  where
  
  -- | Animation State
  data State
          = State
          {
          -- | Whether the animation is running.
            stateAnimate                  :: !Bool
  
          -- | How many times we've entered the animation loop.
          , stateAnimateCount             :: !Integer
  
          -- | Whether this is the first frame of the animation.
          , stateAnimateStart             :: !Bool
  
          -- | Number of msec the animation has been running for
          , stateAnimateTime              :: !Double
  
          -- | The time when we entered the display callback for the current frame.
          , stateDisplayTime              :: !Double
          , stateDisplayTimeLast          :: !Double
  
          -- | Clamp the minimum time between frames to this value (in seconds)
          --      Setting this to < 10ms probably isn't worthwhile.
          , stateDisplayTimeClamp         :: !Double
  
          -- | The time when the last call to the users render function finished.
          , stateGateTimeStart            :: !Double
  
          -- | The time when displayInWindow last finished (after sleeping to clamp fps).
          , stateGateTimeEnd              :: !Double
  
          -- | How long it took to draw this frame
          , stateGateTimeElapsed          :: !Double }
  
  
  stateInit :: State
  stateInit
          = State
          { stateAnimate                  = True
          , stateAnimateCount             = 0
          , stateAnimateStart             = True
          , stateAnimateTime              = 0
          , stateDisplayTime              = 0
          , stateDisplayTimeLast          = 0
          , stateDisplayTimeClamp         = 0.01
          , stateGateTimeStart            = 0
          , stateGateTimeEnd              = 0
          , stateGateTimeElapsed          = 0 }
  