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.

86 lines
2.8 KiB

4 years ago
4 years ago
4 years ago
4 years ago
4 years ago
4 years ago
4 years ago
4 years ago
4 years ago
  1. package wow.doge.mygame.game.entities
  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.PlayerCameraEvent
  9. import wow.doge.mygame.subsystems.events.PlayerCameraEvent.CameraMovedDown
  10. import wow.doge.mygame.subsystems.events.PlayerCameraEvent.CameraMovedUp
  11. import wow.doge.mygame.subsystems.events.PlayerMovementEvent
  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. movementActor ! ImMovementActor.RotateRight
  41. Behaviors.same
  42. case PlayerRotatedLeft =>
  43. movementActor ! ImMovementActor.RotateLeft
  44. Behaviors.same
  45. case PlayerCameraUp =>
  46. ctx.log.warn("camera up not implemented yet")
  47. Behaviors.same
  48. case PlayerCameraDown =>
  49. ctx.log.warn("camera down not implemented yet")
  50. Behaviors.same
  51. }
  52. )
  53. )
  54. }
  55. object PlayerCameraEventListener {
  56. def apply(
  57. camNode: CameraNode,
  58. enqueueR: Function1[() => Unit, Unit]
  59. ) =
  60. Behaviors.logMessages(
  61. LogOptions()
  62. .withLevel(Level.TRACE)
  63. .withLogger(
  64. Logger[PlayerCameraEventListener.type].underlying
  65. ),
  66. Behaviors.setup[PlayerCameraEvent](ctx =>
  67. Behaviors.receiveMessagePartial {
  68. case CameraMovedUp =>
  69. enqueueR(() => {
  70. camNode.move(0, 1, 0)
  71. })
  72. Behaviors.same
  73. case CameraMovedDown =>
  74. enqueueR(() => {
  75. camNode.move(0, -1, 0)
  76. })
  77. Behaviors.same
  78. }
  79. )
  80. )
  81. }