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.

67 lines
1.8 KiB

4 years ago
  1. package wow.doge.mygame.game
  2. import akka.actor.typed.scaladsl.Behaviors
  3. import wow.doge.mygame.state.MovementActor
  4. import wow.doge.mygame.state.PlayerMovementState2
  5. import wow.doge.mygame.state.MovementActorTimer
  6. import com.jme3.scene.shape.Box
  7. import com.jme3.scene.Geometry
  8. import wow.doge.mygame.implicits._
  9. import wow.doge.mygame.events.EventBus
  10. import wow.doge.mygame.events.Events
  11. import wow.doge.mygame.state.ImMovementActor
  12. object GameAppActor {
  13. sealed trait Command
  14. def apply(app: GameApp) =
  15. Behaviors.setup[Command] { ctx =>
  16. lazy val b = new Box(1, 1, 1)
  17. lazy val geom = new Geometry("Box", b)
  18. val movementActor =
  19. ctx.spawn(
  20. MovementActor(MovementActor.Props(app, geom)),
  21. "movementActor"
  22. // DispatcherSelector.fromConfig("jme-dispatcher")
  23. )
  24. val movementActorTimer = ctx.spawn(
  25. MovementActorTimer(movementActor),
  26. "movementActorTimer"
  27. )
  28. val imMovementActor = ctx.spawn(
  29. ImMovementActor(ImMovementActor.Props(app, geom)),
  30. "imMovementActor"
  31. )
  32. val subscribingActor = ctx.spawn(SubscribingActor(), "subscriber-1")
  33. val eventBus =
  34. ctx.spawn(Behaviors.logMessages(EventBus[Events.Tick]()), "eventBus1")
  35. eventBus ! EventBus.Subscribe(subscribingActor)
  36. eventBus ! EventBus.Publish(Events.PhysicsTick, ctx.self)
  37. app
  38. .getStateManager()
  39. .attach(
  40. new PlayerMovementState2(
  41. movementActor,
  42. movementActorTimer,
  43. imMovementActor,
  44. geom
  45. )
  46. )
  47. app.start()
  48. Behaviors.stopped
  49. }
  50. }
  51. object SubscribingActor {
  52. def apply() =
  53. Behaviors.receive[Events.PhysicsTick.type] { (ctx, msg) =>
  54. ctx.log.debug(s"received event $msg")
  55. Behaviors.same
  56. }
  57. }