package wow.doge.mygame.game import cats.effect.concurrent.Ref import com.jme3.app.state.AppStateManager import com.jme3.asset.AssetManager import com.jme3.input.InputManager import monix.bio.IO import monix.bio.Task sealed trait Error case object FlyCamNotExists extends Error class GameApp2(app: GameApp) { def stateManager: Task[AppStateManager] = Task(app.getStateManager()) def inputManager: Task[InputManager] = Task(app.getInputManager()) def assetManager: Task[AssetManager] = Task(app.getAssetManager()) def guiNode = Ref[Task].of(app.getGuiNode()) def flyCam = IO(app.getFlyByCamera()).onErrorHandleWith(_ => IO.raiseError(FlyCamNotExists) ) def camera = Task(app.getCamera()) def viewPort = Task(app.getViewPort()) def rootNode = Ref[Task].of(app.getRootNode()) def enqueue(cb: () => Unit) = app.enqueue(new Runnable { override def run() = cb() }) def enqueueL[T](cb: () => T): Task[T] = app.enqueueL(cb) def start = Task(app.start()) def stop = Task(app.stop()) def scheduler = app.scheduler }