packages feed

animate-preview-0.0.0: library/Animate/Preview/Runner.hs

{-# LANGUAGE TemplateHaskell #-}
module Animate.Preview.Runner where

import Control.Monad (unless)
import Control.Monad.State (gets)
import KeyState

import Animate.Preview.Config
import Animate.Preview.Logger
import Animate.Preview.Renderer
import Animate.Preview.Input
import Animate.Preview.Scene
import Animate.Preview.ManagerInput
import Animate.Preview.State
import Animate.Preview.Timer

mainLoop :: (R m, S m, Logger m, Renderer m, HasInput m, Scene m, Timer m) => m ()
mainLoop = do
  ticks <- startTicks
  updateScreenInfo
  drawSize <- gets vDrawSize
  background <- gets vBackground
  updateInput
  input <- getInput
  clearScreen
  drawBackground drawSize background
  sceneStep
  drawScreen
  let quit = iQuit input || ksStatus (iEscape input) == KeyStatus'Pressed
  delayTicks ticks
  unless quit mainLoop