packages feed

piyo-0.1.0.0: src/Piyo/Game.hs

-- | Game class.
-- Functions are called in order of update, draw, sound every frame.
module Piyo.Game
    ( Game(..)
    )
where

import           Control.Monad.IO.Class         ( MonadIO )
import           Piyo.Internal.Types

-- | Game class.
-- s is a state that user can flexibly define.
class Game s where
    -- | Update state.
    -- The state next frame is determined by keyboard input and previous state. 
    -- There is no side effect in this function.
    update :: [Input] -> s -> s
    update _ = id

    -- | Draw.
    -- Oprations are determined by state.
    draw :: MonadIO m => s -> [DrawOp m]
    draw _ = []

    -- | Sound.
    -- Oprations are determined by state.
    sound :: MonadIO m => s -> [SoundOp m]
    sound _ = []