/// <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();
        }
Beispiel #2
0
        /// <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);
        }
Beispiel #3
0
        /// <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;
        }
Beispiel #4
0
        /// <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);
 }