Testing out JmonkeyEngine to make a game in Scala with Akka Actors within a pure FP layer
You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.

35 lines
1.0 KiB

4 years ago
  1. package wow.doge.mygame.game
  2. import cats.effect.concurrent.Ref
  3. import com.jme3.app.state.AppStateManager
  4. import com.jme3.asset.AssetManager
  5. import com.jme3.input.InputManager
  6. import monix.bio.IO
  7. import monix.bio.Task
  8. sealed trait Error
  9. case object FlyCamNotExists extends Error
  10. class GameApp2(app: GameApp) {
  11. def stateManager: Task[AppStateManager] = Task(app.getStateManager())
  12. def inputManager: Task[InputManager] = Task(app.getInputManager())
  13. def assetManager: Task[AssetManager] = Task(app.getAssetManager())
  14. def guiNode = Ref[Task].of(app.getGuiNode())
  15. def flyCam =
  16. IO(app.getFlyByCamera()).onErrorHandleWith(_ =>
  17. IO.raiseError(FlyCamNotExists)
  18. )
  19. def camera = Task(app.getCamera())
  20. def viewPort = Task(app.getViewPort())
  21. def rootNode = Ref[Task].of(app.getRootNode())
  22. def enqueue(cb: () => Unit) =
  23. app.enqueue(new Runnable {
  24. override def run() = cb()
  25. })
  26. def enqueueL[T](cb: () => T): Task[T] = app.enqueueL(cb)
  27. def start = Task(app.start())
  28. def stop = Task(app.stop())
  29. def scheduler = app.scheduler
  30. }