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.

88 lines
2.9 KiB

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