module Classes.Scene where import Affection import Control.Concurrent.STM import qualified SDL -- internal imports import Types.Util class Scene a where -- | Perform initialization and output a (possibly empty) data container. initScene :: IO a -- | Load actual data into the initialized container. loadScene :: a -> TMVar Progress -> IO a -- | Query whether loading data is finished. isSceneLoaded :: a -> Affection Bool -- | Run updates on the data given the time elapsed since last frame update :: a -> Float -> Affection () -- | Handle input events onEvents :: a -> [SDL.EventPayload] -> Affection () -- | perform the drawing render :: a -> Affection ()