module Graphics.Proc.Core.State.Elements.Frame(
    FrameState(..), LoopMode(..),
    updateFrameCount
) where

import Control.Monad.Trans.State.Strict
import Data.Default 

data FrameState = FrameState 
  { frameCount :: Int
  , frameRate  :: Float
  , frameLoop  :: LoopMode
  }

instance Default FrameState where
  def = FrameState 0 60 Loop

data LoopMode = Loop | NoLoop | Redraw
  deriving (Show, Eq, Enum, Bounded)

instance Default LoopMode where
    def = Loop  

updateFrameCount :: State FrameState ()
updateFrameCount = modify $ \x -> x { frameCount = succ (frameCount x) }