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.
160 lines
4.0 KiB
160 lines
4.0 KiB
package wow.doge.mygame.game
|
|
|
|
import scala.concurrent.duration._
|
|
|
|
import akka.actor.typed.SupervisorStrategy
|
|
import akka.actor.typed.scaladsl.Behaviors
|
|
import wow.doge.mygame.game.TickGenerator.Send
|
|
import wow.doge.mygame.implicits._
|
|
import wow.doge.mygame.subsystems.events.EventBus
|
|
import wow.doge.mygame.subsystems.events.EventsModule.GameEventBus
|
|
import wow.doge.mygame.subsystems.events.TickEvent
|
|
import wow.doge.mygame.subsystems.events.TickEvent.PhysicsTick
|
|
import wow.doge.mygame.utils.GenericTimerActor
|
|
|
|
object GameAppActor {
|
|
|
|
sealed trait Command
|
|
case object Start extends Command
|
|
case object Pause extends Command
|
|
case object Stop extends Command
|
|
|
|
case class Props(tickEventBus: GameEventBus[TickEvent]) {
|
|
def behavior =
|
|
Behaviors.setup[Command] { ctx =>
|
|
ctx.log.infoP("Hello from GameAppActor")
|
|
val renderTickGenerator =
|
|
ctx.spawnN(
|
|
Behaviors
|
|
.supervise(renderTickGeneratorBehavior)
|
|
.onFailure[Exception](
|
|
SupervisorStrategy.restart.withLimit(2, 100.millis)
|
|
)
|
|
)
|
|
|
|
val tickGeneratorTimer = ctx.spawnN(
|
|
GenericTimerActor
|
|
.Props(renderTickGenerator, TickGenerator.Send, 10.millis)
|
|
.behavior
|
|
)
|
|
|
|
Behaviors.receiveMessage {
|
|
case Start =>
|
|
tickGeneratorTimer ! GenericTimerActor.Start
|
|
Behaviors.same
|
|
case Pause =>
|
|
tickGeneratorTimer ! GenericTimerActor.Stop
|
|
Behaviors.same
|
|
case Stop =>
|
|
ctx.log.info("Received stop")
|
|
tickGeneratorTimer ! GenericTimerActor.Stop
|
|
Behaviors.stopped
|
|
|
|
}
|
|
}
|
|
|
|
val renderTickGeneratorBehavior =
|
|
Behaviors.receiveMessage[TickGenerator.Command] {
|
|
case Send =>
|
|
tickEventBus ! EventBus.Publish(
|
|
TickEvent.RenderTick,
|
|
"tickGeneratorActor"
|
|
)
|
|
Behaviors.same
|
|
}
|
|
}
|
|
}
|
|
|
|
object TickGenerator {
|
|
sealed trait Command
|
|
case object Send extends Command
|
|
}
|
|
object SubscribingActor {
|
|
def apply() =
|
|
Behaviors.receive[PhysicsTick.type] { (ctx, msg) =>
|
|
ctx.log.debugP(s"received event $msg")
|
|
Behaviors.same
|
|
}
|
|
}
|
|
object Methods {
|
|
|
|
def old() = {
|
|
// val movementActor =
|
|
// ctx.spawn(
|
|
// MovementActor(MovementActor.Props(app, geom)),
|
|
// "movementActor"
|
|
// // DispatcherSelector.fromConfig("jme-dispatcher")
|
|
// )
|
|
|
|
// val movementActorTimer = ctx.spawn(
|
|
// MovementActorTimer(movementActor),
|
|
// "movementActorTimer"
|
|
// )
|
|
}
|
|
|
|
def old2() = {
|
|
// ctx.log.info("here")
|
|
|
|
// {
|
|
// implicit val s = schedulers.async
|
|
// Task
|
|
// .parZip2(
|
|
// loggerL.info("Test").executeOn(app.scheduler),
|
|
// app
|
|
// .enqueueL(() => loggerL.info("here 2").executeOn(app.scheduler))
|
|
// .flatten
|
|
// )
|
|
// .runToFuture
|
|
// }
|
|
|
|
// app
|
|
// .getRootNode()
|
|
// .depthFirst(s =>
|
|
// // s match {
|
|
// // case node: Node =>
|
|
// // println("node" + s.getName() + " children " + node.getChildren())
|
|
// // case g: Geometry => println(s.getName())
|
|
// // }
|
|
// println(s.getName())
|
|
// )
|
|
|
|
// println("----------------")
|
|
|
|
// {
|
|
// app
|
|
// .getRootNode()
|
|
// .observableDepthFirst()
|
|
// .map(s => s.getName())
|
|
// // .takeWhileInclusive(_.getName() != "level")
|
|
// .onErrorHandle(e => e.getMessage())
|
|
// .foreach(println)(schedulers.async)
|
|
|
|
// }
|
|
|
|
// println("----------------")
|
|
|
|
// {
|
|
// app
|
|
// .getRootNode()
|
|
// .observableBreadthFirst()
|
|
// .map(s => s.getName())
|
|
// // .takeWhileInclusive(_.getName() != "level")
|
|
// .onErrorHandle(e => e.getMessage())
|
|
// .foreach(println)(schedulers.async)
|
|
|
|
// }
|
|
|
|
// app.start()
|
|
// Behaviors.same
|
|
}
|
|
}
|
|
|
|
// new PlayerMovementState(
|
|
// // movementActor,
|
|
// // movementActorTimer,
|
|
// imMovementActor,
|
|
// // geom,
|
|
// // camNode,
|
|
// playerNode
|
|
// // ctx.self
|
|
// )
|