animate-preview-0.0.0: library/Animate/Preview/State.hs
{-# LANGUAGE TemplateHaskell #-}
{-# LANGUAGE ConstraintKinds #-}
module Animate.Preview.State where
import Control.Lens
import Control.Monad.State (MonadState)
import Linear
import Animate.Preview.Input
import Animate.Preview.Color
import Animate.Preview.Scalar
import Animate.Preview.Mode
data Vars = Vars
{ vInput :: Input
, vBackground :: Mono
, vOriginColor :: Maybe Color
, vOutlineColor :: Maybe Color
, vOrigin :: V2 Int
, vAccel :: Scalar
, vScale :: Scalar
, vInfoShown :: Bool
, vMode :: Mode
, vDrawSize :: V2 Int
, vWinSize :: V2 Int
}
initVars :: V2 Int -> V2 Int -> Vars
initVars winSize drawSize = Vars
{ vInput = initInput
, vBackground = Mono'Gray
, vOriginColor = Just Color'Red
, vOutlineColor = Just Color'Green
, vOrigin = div <$> drawSize <*> 2
, vAccel = Scalar'None
, vScale = Scalar'None
, vInfoShown = True
, vMode = Mode'Playback
, vWinSize = winSize
, vDrawSize = drawSize
}
makeClassy ''Vars
type S m = MonadState Vars m