public void BeginEncounter(Campaign owner, EncounterDescriptor descriptor) { this.owner = owner; this.descriptor = descriptor; // setup opponent opponentStats = gameObject.AddComponent <VesselStats>(); InitialiseOpponentStats(); opponentStatus = gameObject.AddComponent <VesselStatus>(); InitialiseOpponentStatus(); // activate page pageEncounter = (PageEncounter)Game.Instance.pageManager.PushPage("Encounter"); // disable input pageEncounter.IsInputEnabled = false; // initialise health bars pageEncounter.healthBarPlayer.SetFill(owner.playerStatus.GetHealthPercentage()); pageEncounter.healthBarOpponent.SetFill(opponentStatus.GetHealthPercentage()); // setup vessel encounters playerEncounter = new VesselEncounter(true, "player", this, owner.gameBalance, pageEncounter.playerVisuals, owner.playerStats, owner.playerStatus, descriptor.playerModifiers); opponentEncounter = new VesselEncounter(false, "opponent", this, owner.gameBalance, pageEncounter.opponentVisuals, opponentStats, opponentStatus, descriptor.enemyModifiers); VesselEncounter.SetOpponents(playerEncounter, opponentEncounter); opponentAiBehaviour = Instantiate(descriptor.enemyAiBehaviour, transform); // start BeginPlayerTurn(); }
public void OnVesselEndTurn(VesselEncounter vessel) { Debug.Assert(turnState == TurnState.Deciding); // disable input pageEncounter.IsInputEnabled = false; // enqueue health bar animations EnqueueAnimation(CoroutineComposer.MakeParallel( this, pageEncounter.healthBarPlayer.AnimateFill(owner.playerStatus.GetHealthPercentage(), 1), pageEncounter.healthBarOpponent.AnimateFill(opponentStatus.GetHealthPercentage(), 1) )); // luck roll to prevent player death if (playerEncounter.Status.health <= 0) { float luckRoll = playerEncounter.Stats.RollLuck(); Debug.Log($"Anti-death luck roll: {luckRoll}"); if (luckRoll > 0.9f) { // repair playerEncounter.Status.Repair(true); // repair and health bar animations EnqueueAnimation(CoroutineComposer.MakeParallel(this, Game.Instance.effects.Create <EffectRepair>("Repair").Setup(pageEncounter.playerVisuals.transform.position, pageEncounter.playerVisuals.hull.sprite.rect).Run(), pageEncounter.healthBarPlayer.AnimateFill(owner.playerStatus.GetHealthPercentage(), 1) )); } } // enqueue end of turn pendingCoroutines.Add(CoroutineComposer.MakeAction(OnFinishAnimating)); // run coroutines turnState = TurnState.Animating; StartCoroutine(CoroutineComposer.MakeSequence(pendingCoroutines.ToArray())); }