module Gamgine.State.State where
import qualified Gamgine.Math.Vect as V
import qualified Gamgine.State.RenderState as RS
import qualified Gamgine.State.InputInfo as II
import qualified Gamgine.State.KeyInfo as KI
import qualified Gamgine.State.MouseInfo as MI
data State a = State {
enter :: II.MousePos -> a -> Maybe (a, State a),
leave :: a -> (a, State a),
update :: a -> (a, State a),
render :: RS.RenderState -> a -> IO (a, State a),
keyEvent :: KI.KeyInfo -> a -> (a, State a),
mouseEvent :: MI.MouseInfo -> a -> (a, State a),
mouseMoved :: II.MousePos -> a -> (a, State a)
}