module Engine.App
( engineMain
, engineMainWith
) where
import RIO
import RIO.App (appMain)
import Engine.Run (runStack)
import Engine.Setup (setup)
import Engine.Types qualified as Engine
import Engine.Types.Options (Options(..), getOptions)
import Engine.Stage.Bootstrap.Setup qualified as Bootstrap
engineMain :: Engine.StackStage -> IO ()
engineMain :: StackStage -> IO ()
engineMain StackStage
initialStage = forall a. (a -> StackStage) -> StageSetupRIO a -> IO ()
engineMainWith (\() -> StackStage
initialStage) (forall (f :: * -> *) a. Applicative f => a -> f a
pure ())
engineMainWith :: (a -> Engine.StackStage) -> Engine.StageSetupRIO a -> IO ()
engineMainWith :: forall a. (a -> StackStage) -> StageSetupRIO a -> IO ()
engineMainWith a -> StackStage
handoff StageSetupRIO a
action =
forall options env st.
IO options
-> (options -> Bool)
-> (options -> RIO SetupApp (env, st))
-> RIO (App env st) ()
-> IO ()
appMain IO Options
getOptions Options -> Bool
optionsVerbose forall env.
(HasLogFunc env, MonadResource (RIO env)) =>
Options -> RIO env (GlobalHandles, Maybe SwapchainResources)
setup forall a b. (a -> b) -> a -> b
$ StageStack -> StageRIO (Maybe SwapchainResources) ()
runStack
[
forall a. (a -> StackStage) -> StageSetupRIO a -> StackStage
Bootstrap.stackStage a -> StackStage
handoff StageSetupRIO a
action
]