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.subsystems.events
import scala.concurrent.duration._
import akka.actor.typed.ActorRef import akka.actor.typed.ActorSystem import akka.actor.typed.LogOptions import akka.actor.typed.Props import akka.actor.typed.SpawnProtocol import akka.actor.typed.SupervisorStrategy import akka.actor.typed.scaladsl.Behaviors import akka.util.Timeout import com.typesafe.scalalogging.{Logger => SLogger} import org.slf4j.event.Level import wow.doge.mygame.implicits._ import wow.doge.mygame.subsystems.events.Event import wow.doge.mygame.subsystems.events.EventBus import wow.doge.mygame.subsystems.events.TickEvent
class EventsModule(spawnProtocol: ActorSystem[SpawnProtocol.Command]) { implicit lazy val s = spawnProtocol.scheduler
implicit lazy val timeout = Timeout(1.second)
lazy val eventBusLogger = SLogger[EventBus[_]]
lazy val playerMovementEventBusTask = createEventBus[PlayerMovementEvent]("movementEventBus")
lazy val playerCameraEventBusTask = createEventBus[PlayerCameraEvent]("playerCameraEventBus", Level.DEBUG)
lazy val tickEventBusTask = createEventBus[TickEvent]("tickEventBus", Level.TRACE)
lazy val mainEventBusTask = createEventBus[Event]("mainEventBus")
def createEventBus[T](busName: String, logLevel: Level = Level.DEBUG) = spawnProtocol.askL( SpawnProtocol.Spawn[EventBus.Command[T]]( Behaviors.logMessages( logOptions = LogOptions() .withLevel(logLevel) .withLogger(eventBusLogger.underlying), Behaviors .supervise(EventBus[T]()) .onFailure[Exception](SupervisorStrategy.restart) ), busName, Props.empty, _ ) ) }
object EventsModule { type GameEventBus[T] = ActorRef[EventBus.Command[T]] }
|