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.

127 lines
3.8 KiB

4 years ago
  1. package wow.doge.mygame
  2. import game.GameApp
  3. import com.jme3.app.StatsAppState
  4. import akka.actor.typed.ActorSystem
  5. import akka.actor.typed.SpawnProtocol
  6. import akka.actor.typed.scaladsl.Behaviors
  7. import akka.actor.typed.Behavior
  8. import akka.util.Timeout
  9. import com.jme3.system.AppSettings
  10. import wow.doge.mygame.game.GameAppActor
  11. import wow.doge.mygame.scriptsystem.ScriptCachingActor
  12. object Main extends App {
  13. import java.util.logging.{Logger, Level}
  14. Logger.getLogger("").setLevel(Level.SEVERE)
  15. // runner.runCode("""|println("starting scala script engine")""".stripMargin)
  16. val gameApp = new GameApp(
  17. // new EntityDataState(),
  18. // new TestAppState(),
  19. // new PlayerMovementState(),
  20. // new FlyCamAppState(),
  21. new StatsAppState()
  22. )
  23. val settings = new AppSettings(true)
  24. // settings.setVSync(true)
  25. settings.setFrameRate(144)
  26. gameApp.setSettings(settings)
  27. val actorSystem = ActorSystem(RootActor(gameApp), "rootActor")
  28. // actorSystem.eventStream
  29. // gameApp.start()
  30. println("here 1")
  31. // actorSystem.terminate()
  32. // JMEExecutorService.shutdown()
  33. // println("here 2")
  34. //FIXME remove this
  35. // System.exit(0)
  36. }
  37. object RootActor {
  38. def apply(app: GameApp): Behavior[SpawnProtocol.Command] =
  39. Behaviors.setup { ctx =>
  40. ctx.log.debug("Starting root actor")
  41. val testActor = ctx.spawn(TestActor(), "testActor")
  42. val _ = ctx.spawn(GameAppActor(app), "gameAppActor")
  43. testActor ! TestActor.Test
  44. SpawnProtocol()
  45. }
  46. }
  47. object TestActor {
  48. sealed trait Command
  49. case object Test extends Command
  50. private case object Done extends Command
  51. // sealed trait Result
  52. // case object Done extends Result
  53. import scala.concurrent.duration._
  54. implicit val timeout = Timeout(15.seconds)
  55. // implicit val scheduler =
  56. def apply(): Behavior[Command] =
  57. Behaviors.setup { ctx =>
  58. ctx.spawn(ScriptCachingActor(), "scriptCacher")
  59. Behaviors.receiveMessage { msg =>
  60. msg match {
  61. case Test =>
  62. // ctx.ask(
  63. // router,
  64. // ScriptActor.Compile(
  65. // // os.pwd / "some.sc",
  66. // os.pwd / "src" / "main" / "resources" / "hello2.main.kts",
  67. // _
  68. // )
  69. // ) {
  70. // case Success(value) =>
  71. // ctx.log.debug("Received Value")
  72. // ctx.log.debug(value.toString())
  73. // Done
  74. // case Failure(exception) =>
  75. // ctx.log.debug(s"Received Error ${exception.getMessage()}")
  76. // Done
  77. // }
  78. // val x = scriptStorer
  79. // .askT(
  80. // ScriptStoringActor
  81. // .Get(os.pwd / "src" / "main" / "resources" / "hello2.sc", _)
  82. // )(timeout, ctx.system.scheduler)
  83. // ctx.ask(
  84. // scriptStorer,
  85. // ScriptStoringActor
  86. // .Get(os.pwd / "src" / "main" / "resources" / "hello2.sc", _)
  87. // ) {
  88. // case Success(value) => {
  89. // ctx.log.debug(value.toString())
  90. // ctx.ask(
  91. // scriptStorer,
  92. // ScriptStoringActor
  93. // .Get(os.pwd / "src" / "main" / "resources" / "hello2.sc", _)
  94. // ) {
  95. // case Success(value) => {
  96. // ctx.log.debug(value.toString())
  97. // Done
  98. // }
  99. // case Failure(exception) =>
  100. // ctx.log.debug(exception.getMessage())
  101. // Done
  102. // }
  103. // Done
  104. // }
  105. // case Failure(exception) =>
  106. // ctx.log.debug(exception.getMessage())
  107. // Done
  108. // }
  109. Behaviors.same
  110. case Done => Behaviors.same
  111. }
  112. // SpawnProtocol()
  113. // Behaviors.same
  114. }
  115. }
  116. }