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.

90 lines
3.0 KiB

4 years ago
4 years ago
4 years ago
4 years ago
4 years ago
  1. package wow.doge.mygame.game.nodes
  2. import akka.actor.typed.ActorRef
  3. import akka.actor.typed.scaladsl.Behaviors
  4. import wow.doge.mygame.subsystems.movement.ImMovementActor
  5. import org.slf4j.event.Level
  6. import akka.actor.typed.LogOptions
  7. import wow.doge.mygame.subsystems.events.EntityMovementEvent.PlayerMovementEvent
  8. import com.typesafe.scalalogging.Logger
  9. import wow.doge.mygame.subsystems.events.PlayerCameraEvent
  10. import wow.doge.mygame.subsystems.events.PlayerCameraEvent.CameraMovedUp
  11. import wow.doge.mygame.subsystems.events.PlayerCameraEvent.CameraMovedDown
  12. import com.jme3.scene.CameraNode
  13. import wow.doge.mygame.game.GameApp
  14. import wow.doge.mygame.implicits._
  15. object PlayerMovementEventListener {
  16. import PlayerMovementEvent._
  17. def apply(movementActor: ActorRef[ImMovementActor.Command]) =
  18. Behaviors.logMessages(
  19. LogOptions()
  20. .withLevel(Level.TRACE)
  21. .withLogger(
  22. Logger[PlayerMovementEventListener.type].underlying
  23. ),
  24. Behaviors.setup[PlayerMovementEvent](ctx =>
  25. Behaviors.receiveMessage {
  26. case PlayerMovedLeft(pressed) =>
  27. movementActor ! ImMovementActor.MovedLeft(pressed)
  28. Behaviors.same
  29. case PlayerMovedRight(pressed) =>
  30. movementActor ! ImMovementActor.MovedRight(pressed)
  31. Behaviors.same
  32. case PlayerMovedForward(pressed) =>
  33. movementActor ! ImMovementActor.MovedUp(pressed)
  34. Behaviors.same
  35. case PlayerMovedBackward(pressed) =>
  36. movementActor ! ImMovementActor.MovedDown(pressed)
  37. Behaviors.same
  38. case PlayerJumped =>
  39. movementActor ! ImMovementActor.Jump
  40. Behaviors.same
  41. case PlayerRotatedRight =>
  42. // ctx.log.warn("right rotate not implemented yet")
  43. movementActor ! ImMovementActor.RotateRight
  44. Behaviors.same
  45. case PlayerRotatedLeft =>
  46. // ctx.log.warn("left rotate not implemented yet")
  47. movementActor ! ImMovementActor.RotateLeft
  48. Behaviors.same
  49. case PlayerCameraUp =>
  50. ctx.log.warn("camera up not implemented yet")
  51. Behaviors.same
  52. case PlayerCameraDown =>
  53. ctx.log.warn("camera down not implemented yet")
  54. Behaviors.same
  55. }
  56. )
  57. )
  58. }
  59. object PlayerCameraEventListener {
  60. def apply(
  61. camNode: CameraNode,
  62. enqueueR: Function1[() => Unit, Unit]
  63. ) =
  64. Behaviors.logMessages(
  65. LogOptions()
  66. .withLevel(Level.TRACE)
  67. .withLogger(
  68. Logger[PlayerCameraEventListener.type].underlying
  69. ),
  70. Behaviors.setup[PlayerCameraEvent](ctx =>
  71. Behaviors.receiveMessage {
  72. case CameraMovedUp =>
  73. enqueueR(() => {
  74. camNode.move(0, 1, 0)
  75. })
  76. Behaviors.same
  77. case CameraMovedDown =>
  78. enqueueR(() => {
  79. camNode.move(0, -1, 0)
  80. })
  81. Behaviors.same
  82. }
  83. )
  84. )
  85. }