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.game.nodes
import akka.actor.typed.ActorRef import akka.actor.typed.LogOptions import akka.actor.typed.scaladsl.Behaviors import com.jme3.scene.CameraNode import com.typesafe.scalalogging.Logger import org.slf4j.event.Level import wow.doge.mygame.subsystems.events.EntityMovementEvent.PlayerMovementEvent import wow.doge.mygame.subsystems.events.PlayerCameraEvent import wow.doge.mygame.subsystems.events.PlayerCameraEvent.CameraMovedDown import wow.doge.mygame.subsystems.events.PlayerCameraEvent.CameraMovedUp import wow.doge.mygame.subsystems.movement.ImMovementActor
object PlayerMovementEventListener { import PlayerMovementEvent._ def apply(movementActor: ActorRef[ImMovementActor.Command]) = Behaviors.logMessages( LogOptions() .withLevel(Level.TRACE) .withLogger( Logger[PlayerMovementEventListener.type].underlying ), Behaviors.setup[PlayerMovementEvent](ctx => Behaviors.receiveMessagePartial { case PlayerMovedLeft(pressed) => movementActor ! ImMovementActor.MovedLeft(pressed) Behaviors.same case PlayerMovedRight(pressed) => movementActor ! ImMovementActor.MovedRight(pressed) Behaviors.same case PlayerMovedForward(pressed) => movementActor ! ImMovementActor.MovedUp(pressed) Behaviors.same case PlayerMovedBackward(pressed) => movementActor ! ImMovementActor.MovedDown(pressed) Behaviors.same case PlayerJumped => movementActor ! ImMovementActor.Jump Behaviors.same case PlayerRotatedRight => // ctx.log.warn("right rotate not implemented yet")
movementActor ! ImMovementActor.RotateRight Behaviors.same case PlayerRotatedLeft => // ctx.log.warn("left rotate not implemented yet")
movementActor ! ImMovementActor.RotateLeft Behaviors.same case PlayerCameraUp => ctx.log.warn("camera up not implemented yet") Behaviors.same case PlayerCameraDown => ctx.log.warn("camera down not implemented yet") Behaviors.same } ) ) }
object PlayerCameraEventListener { def apply( camNode: CameraNode, enqueueR: Function1[() => Unit, Unit] ) = Behaviors.logMessages( LogOptions() .withLevel(Level.TRACE) .withLogger( Logger[PlayerCameraEventListener.type].underlying ), Behaviors.setup[PlayerCameraEvent](ctx => Behaviors.receiveMessagePartial { case CameraMovedUp => enqueueR(() => {
camNode.move(0, 1, 0) }) Behaviors.same case CameraMovedDown => enqueueR(() => {
camNode.move(0, -1, 0) }) Behaviors.same } ) ) }
|