module Stage.Loader.Types
  ( Stage
  , Frame

  , FrameResources(..)
  , RunState(..)
  ) where

import Engine.Camera qualified as Camera
import Render.Basic qualified as Basic
import Render.DescSets.Set0 qualified as Set0

import Stage.Loader.UI (UI)
import Stage.Loader.UI qualified as UI

type Stage = Basic.Stage FrameResources RunState

type Frame = Basic.Frame FrameResources

data FrameResources = FrameResources
  { FrameResources -> FrameResource '[Scene]
frSceneUi :: Set0.FrameResource '[Set0.Scene]

  , FrameResources -> Observer
frUI :: UI.Observer
  }

data RunState = RunState
  { RunState -> ProjectionProcess
rsProjectionP :: Camera.ProjectionProcess
  , RunState -> Process
rsSceneUiP    :: Set0.Process

  , RunState -> UI
rsUI :: UI
  }