forked from nova/jmonkey-test
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
67 lines
1.8 KiB
package wow.doge.mygame.game
|
|
|
|
import akka.actor.typed.scaladsl.Behaviors
|
|
import wow.doge.mygame.state.MovementActor
|
|
import wow.doge.mygame.state.PlayerMovementState2
|
|
import wow.doge.mygame.state.MovementActorTimer
|
|
import com.jme3.scene.shape.Box
|
|
import com.jme3.scene.Geometry
|
|
import wow.doge.mygame.implicits._
|
|
import wow.doge.mygame.events.EventBus
|
|
import wow.doge.mygame.events.Events
|
|
import wow.doge.mygame.state.ImMovementActor
|
|
|
|
object GameAppActor {
|
|
|
|
sealed trait Command
|
|
def apply(app: GameApp) =
|
|
Behaviors.setup[Command] { ctx =>
|
|
lazy val b = new Box(1, 1, 1)
|
|
lazy val geom = new Geometry("Box", b)
|
|
val movementActor =
|
|
ctx.spawn(
|
|
MovementActor(MovementActor.Props(app, geom)),
|
|
"movementActor"
|
|
// DispatcherSelector.fromConfig("jme-dispatcher")
|
|
)
|
|
|
|
val movementActorTimer = ctx.spawn(
|
|
MovementActorTimer(movementActor),
|
|
"movementActorTimer"
|
|
)
|
|
val imMovementActor = ctx.spawn(
|
|
ImMovementActor(ImMovementActor.Props(app, geom)),
|
|
"imMovementActor"
|
|
)
|
|
|
|
val subscribingActor = ctx.spawn(SubscribingActor(), "subscriber-1")
|
|
|
|
val eventBus =
|
|
ctx.spawn(Behaviors.logMessages(EventBus[Events.Tick]()), "eventBus1")
|
|
|
|
eventBus ! EventBus.Subscribe(subscribingActor)
|
|
|
|
eventBus ! EventBus.Publish(Events.PhysicsTick, ctx.self)
|
|
|
|
app
|
|
.getStateManager()
|
|
.attach(
|
|
new PlayerMovementState2(
|
|
movementActor,
|
|
movementActorTimer,
|
|
imMovementActor,
|
|
geom
|
|
)
|
|
)
|
|
app.start()
|
|
Behaviors.stopped
|
|
}
|
|
}
|
|
|
|
object SubscribingActor {
|
|
def apply() =
|
|
Behaviors.receive[Events.PhysicsTick.type] { (ctx, msg) =>
|
|
ctx.log.debug(s"received event $msg")
|
|
Behaviors.same
|
|
}
|
|
}
|