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.
|
|
package wow.doge.mygame
import game.GameApp import com.jme3.app.StatsAppState
import akka.actor.typed.ActorSystem import akka.actor.typed.SpawnProtocol import akka.actor.typed.scaladsl.Behaviors import akka.actor.typed.Behavior import akka.util.Timeout import com.jme3.system.AppSettings import wow.doge.mygame.game.GameAppActor import wow.doge.mygame.scriptsystem.ScriptCachingActor object Main extends App { import java.util.logging.{Logger, Level} Logger.getLogger("").setLevel(Level.SEVERE)
// runner.runCode("""|println("starting scala script engine")""".stripMargin)
val gameApp = new GameApp( // new EntityDataState(),
// new TestAppState(),
// new PlayerMovementState(),
// new FlyCamAppState(),
new StatsAppState() ) val settings = new AppSettings(true) // settings.setVSync(true)
settings.setFrameRate(144) gameApp.setSettings(settings) val actorSystem = ActorSystem(RootActor(gameApp), "rootActor") // actorSystem.eventStream
// gameApp.start()
println("here 1") // actorSystem.terminate()
// JMEExecutorService.shutdown()
// println("here 2")
//FIXME remove this
// System.exit(0)
}
object RootActor { def apply(app: GameApp): Behavior[SpawnProtocol.Command] = Behaviors.setup { ctx => ctx.log.debug("Starting root actor") val testActor = ctx.spawn(TestActor(), "testActor") val _ = ctx.spawn(GameAppActor(app), "gameAppActor")
testActor ! TestActor.Test SpawnProtocol() } }
object TestActor { sealed trait Command case object Test extends Command private case object Done extends Command // sealed trait Result
// case object Done extends Result
import scala.concurrent.duration._ implicit val timeout = Timeout(15.seconds) // implicit val scheduler =
def apply(): Behavior[Command] = Behaviors.setup { ctx => ctx.spawn(ScriptCachingActor(), "scriptCacher") Behaviors.receiveMessage { msg => msg match { case Test => // ctx.ask(
// router,
// ScriptActor.Compile(
// // os.pwd / "some.sc",
// os.pwd / "src" / "main" / "resources" / "hello2.main.kts",
// _
// )
// ) {
// case Success(value) =>
// ctx.log.debug("Received Value")
// ctx.log.debug(value.toString())
// Done
// case Failure(exception) =>
// ctx.log.debug(s"Received Error ${exception.getMessage()}")
// Done
// }
// val x = scriptStorer
// .askT(
// ScriptStoringActor
// .Get(os.pwd / "src" / "main" / "resources" / "hello2.sc", _)
// )(timeout, ctx.system.scheduler)
// ctx.ask(
// scriptStorer,
// ScriptStoringActor
// .Get(os.pwd / "src" / "main" / "resources" / "hello2.sc", _)
// ) {
// case Success(value) => {
// ctx.log.debug(value.toString())
// ctx.ask(
// scriptStorer,
// ScriptStoringActor
// .Get(os.pwd / "src" / "main" / "resources" / "hello2.sc", _)
// ) {
// case Success(value) => {
// ctx.log.debug(value.toString())
// Done
// }
// case Failure(exception) =>
// ctx.log.debug(exception.getMessage())
// Done
// }
// Done
// }
// case Failure(exception) =>
// ctx.log.debug(exception.getMessage())
// Done
// }
Behaviors.same case Done => Behaviors.same }
// SpawnProtocol()
// Behaviors.same
} } }
|