{-|
  This module need not be used directly. Refer to @'FRP.Spice.Engine'@ instead.
-}
module FRP.Spice.Engine.Driver where

--------------------
-- Global Imports --
import FRP.Spice.Engine.RenderWrapper
import FRP.Spice.Game

----------
-- Code --

{-|
  Driving a network created with the @'FRP.Spice.Engine.Network.makeNetwork'@
  function and a function such as @'FRP.Spice.Engine.RunInput.runInput'@.
-}
driveNetwork :: Game a => (Float -> IO a) -> IO (Maybe Float) -> IO ()
driveNetwork network iomdriver = do
  mdriver <- iomdriver

  case mdriver of
    Just driver -> do state <- network driver
                      renderWrapper $ render state
                      driveNetwork network iomdriver
    Nothing     -> return ()