|
|
@ -23,7 +23,6 @@ class IdleBehaviorFactory( |
|
|
|
deadState: Behavior[PlayerActor.Command], |
|
|
|
consumptionMultiplier: Int => Int |
|
|
|
)(implicit timeout: Timeout) { |
|
|
|
import IdleBehaviorFactory.IdleBehavior |
|
|
|
import env._ |
|
|
|
|
|
|
|
implicit val sched = ctx.system.scheduler |
|
|
@ -32,11 +31,46 @@ class IdleBehaviorFactory( |
|
|
|
IdleBehavior( |
|
|
|
Behaviors |
|
|
|
.receiveMessage[PlayerActor.Command] { |
|
|
|
|
|
|
|
case PlayerActor.HandleMovement(curStats, pressed) => |
|
|
|
if (curStats.stamina.toInt > 0) { |
|
|
|
children.movementActor ! ImMovementActor.MoveLeft(pressed) |
|
|
|
if (pressed) nextStateFn(AliveSubstate.Moving(Walking)) |
|
|
|
else nextStateFn(AliveSubstate.Idle) |
|
|
|
} else Behaviors.same |
|
|
|
|
|
|
|
case PlayerActor.MoveLeft(pressed) => |
|
|
|
children.movementActor ! ImMovementActor.MoveLeft(pressed) |
|
|
|
if (pressed) |
|
|
|
nextStateFn(AliveSubstate.Moving(Walking)) |
|
|
|
implicit val ec = props.scheduler.value |
|
|
|
for { |
|
|
|
curStats <- children.statsActor.ask(StatsActor.CurrentStats) |
|
|
|
res <- Future.successful( |
|
|
|
ctx.self ! PlayerActor.HandleMovement(curStats, pressed) |
|
|
|
) |
|
|
|
} yield res |
|
|
|
Behaviors.same |
|
|
|
|
|
|
|
case PlayerActor.MoveRight(pressed) => |
|
|
|
children.movementActor ! ImMovementActor.MoveRight(pressed) |
|
|
|
if (pressed) nextStateFn(AliveSubstate.Moving(Walking)) |
|
|
|
else nextStateFn(AliveSubstate.Idle) |
|
|
|
|
|
|
|
case PlayerActor.MoveUp(pressed) => |
|
|
|
children.movementActor ! ImMovementActor.MoveUp(pressed) |
|
|
|
if (pressed) nextStateFn(AliveSubstate.Moving(Walking)) |
|
|
|
else nextStateFn(AliveSubstate.Idle) |
|
|
|
|
|
|
|
case PlayerActor.MoveDown(pressed) => |
|
|
|
children.movementActor ! ImMovementActor.MoveDown(pressed) |
|
|
|
if (pressed) nextStateFn(AliveSubstate.Moving(Walking)) |
|
|
|
else nextStateFn(AliveSubstate.Idle) |
|
|
|
|
|
|
|
case PlayerActor.Jump => |
|
|
|
children.movementActor ! ImMovementActor.Jump |
|
|
|
ctx.self.ask( |
|
|
|
PlayerActor.ConsumeStamina(CharacterStats.DamageStamina(10), _) |
|
|
|
) |
|
|
|
Behaviors.same |
|
|
|
|
|
|
|
case PlayerActor.TakeDamage(value, replyTo) => |
|
|
|
implicit val ec = props.scheduler.value |
|
|
|
for { |
|
|
@ -47,6 +81,7 @@ class IdleBehaviorFactory( |
|
|
|
) |
|
|
|
} yield () |
|
|
|
Behaviors.same |
|
|
|
|
|
|
|
case PlayerActor.ConsumeStamina(value, replyTo) => |
|
|
|
implicit val ec = props.scheduler.value |
|
|
|
val newValue = |
|
|
@ -60,15 +95,19 @@ class IdleBehaviorFactory( |
|
|
|
.StatsResponse(response, replyTo) |
|
|
|
} yield () |
|
|
|
Behaviors.same |
|
|
|
|
|
|
|
case PlayerActor.CurrentStats(replyTo) => |
|
|
|
children.statsActor ! StatsActor.CurrentStats(replyTo) |
|
|
|
Behaviors.same |
|
|
|
|
|
|
|
case PlayerActor.Heal(value) => |
|
|
|
children.statsActor ! StatsActor.HealResult(value) |
|
|
|
Behaviors.same |
|
|
|
|
|
|
|
case PlayerActor.GetStatus(replyTo) => |
|
|
|
replyTo ! PlayerActor.Status.Alive |
|
|
|
Behaviors.same |
|
|
|
|
|
|
|
case PlayerActor.GetStatsObservable(replyTo) => |
|
|
|
import monix.{eval => me} |
|
|
|
replyTo ! |
|
|
@ -82,6 +121,7 @@ class IdleBehaviorFactory( |
|
|
|
) |
|
|
|
|
|
|
|
Behaviors.same |
|
|
|
|
|
|
|
case PlayerActor.StatsResponse(response, replyTo) => |
|
|
|
response match { |
|
|
|
case (dead, stats) => |
|
|
@ -94,8 +134,9 @@ class IdleBehaviorFactory( |
|
|
|
}(props.scheduler.value) |
|
|
|
} |
|
|
|
Behaviors.same |
|
|
|
// nextStateFn(InCombat(Moving(Walking))) |
|
|
|
|
|
|
|
case PlayerActor.Die => deadState |
|
|
|
|
|
|
|
case PlayerActor.LogError(ex) => |
|
|
|
ctx.log.error(ex.getMessage) |
|
|
|
Behaviors.same |
|
|
@ -108,8 +149,4 @@ class IdleBehaviorFactory( |
|
|
|
) |
|
|
|
} |
|
|
|
|
|
|
|
object IdleBehaviorFactory { |
|
|
|
final case class IdleBehavior( |
|
|
|
value: Behavior[PlayerActor.Command] |
|
|
|
) |
|
|
|
} |
|
|
|
final case class IdleBehavior(value: Behavior[PlayerActor.Command]) |