/// <summary> /// Initializes a new instance of the <see cref="BattleStatus"/> class. /// Assigns all entities participating in the fight based on their leaders. /// </summary> /// <param name="leaderPlayer">The leader player</param> /// <param name="leaderEnemy">The leader enemy</param> public BattleStatus(PlayerBattleDriver leaderPlayer, EnemyBattleDriver leaderEnemy) { this.DeactivatableGameObjects = new List <GameObject>(); this.FindFightingPlayers(leaderPlayer); this.FindFightingEnemies(leaderEnemy); this.AssignFighters(); this.highestTurnSpeed = this.GetHightestTurnSpeed(); }
/// <summary> /// Starts a turn-based battle /// </summary> /// <param name="leaderPlayer">The leading player</param> /// <param name="leaderEnemy">The leading enemy</param> public static void StartNewBattle(PlayerBattleDriver leaderPlayer, EnemyBattleDriver leaderEnemy) { if (MainManager.Instance == null) { throw new RPGException(RPGException.Cause.MainManagerNoActiveInstance); } if (BattleManager.Instance != null) { return; } MainManager.Instance.gameObject.AddComponent <BattleManager>().NewPreferThis(); BattleManager.Instance.StartBattleMode(leaderPlayer, leaderEnemy); }
/// <summary> /// Starts a turn-based battle in this instance /// </summary> /// <param name="leaderPlayer">The leading player driver</param> /// <param name="leaderEnemy">The leading enemy driver</param> public void StartBattleMode(PlayerBattleDriver leaderPlayer, EnemyBattleDriver leaderEnemy) { if (this.Initialized) { throw new RPGException(RPGException.Cause.BattleManagerCantStartInitialized); } this.battleStatus = new BattleStatus(leaderPlayer, leaderEnemy); this.battleFlow = new BattleFlow(this, this.battleStatus); // Disable activity handling ActivityHandler.Enabled = false; // Deactivate unneeded GameObjects foreach (GameObject gameObject in this.battleStatus.DeactivatableGameObjects) { gameObject.SetActive(false); } this.SetupEntities(battleStarts: true); BaseBattleDriver.HighestTurnSpeed = this.battleStatus.HighestTurnSpeed; this.hudParent = MonoBehaviour.Instantiate(GenericPrefab.Panel, HudManager.BattleHud.transform).transform; // Create the status bars (HUD) leaderPlayer.CreateStatusBars(this.hudParent, GenericPrefab.StatusDisplayPlayer); leaderEnemy.CreateStatusBars(this.hudParent, GenericPrefab.StatusDisplayEnemy); // Deduplicate names to make them easier to tell apart leaderPlayer.DeduplicateBattleNamesInAllies(); leaderEnemy.DeduplicateBattleNamesInAllies(); // Start the battle on all entities foreach (BaseBattleDriver battleDriver in this.battleStatus.AllFightingEntities) { battleDriver.OnBattleStart(); } this.Initialized = true; }
/// <summary> /// Calls <seealso cref="StartBattleMode(PlayerBattleDriver, EnemyBattleDriver)"/> next frame /// </summary> /// <param name="leaderPlayer">The leading player</param> /// <param name="leaderEnemy">The leading enemy</param> /// <returns>An iterator</returns> private IEnumerator StartBattleNextFrame(PlayerBattleDriver leaderPlayer, EnemyBattleDriver leaderEnemy) { yield return(null); this.StartBattleMode(leaderPlayer, leaderEnemy); }
/// <summary> /// Gets all player fighters and deactivates the ones not participating. /// Assigns <seealso cref="fightingPlayers"/>. /// </summary> /// <param name="leaderPlayer">The leader player</param> private void FindFightingPlayers(PlayerBattleDriver leaderPlayer) { this.FightingPlayers = this.FindFighters(leaderPlayer); }