IEnumerator StartBattle(List <EnemyStats> enemies) { DisableCommandCanvas(); // Reset values battleEnded = false; playerTeam.Clear(); allAllies.Clear(); enemyTeam.Clear(); allEnemies.Clear(); turnOrder.Clear(); statsPanels.Clear(); turnIndex = -1; foreach (Transform child in statsPanel) { Destroy(child.gameObject); } // Initialise party members foreach (PlayerStats player in PartyManager.instance.partyMembers) { PlayerStats temp = Instantiate(player); temp.InitialiseCharacter(); CharacterPanel panel = Instantiate(statsPrefab, statsPanel).GetComponent <CharacterPanel>(); panel.UpdateStats(temp); statsPanels[temp] = panel; allAllies.Add(temp); if (!player.isDead) { playerTeam.Add(temp); } } foreach (StatsBase player in playerTeam) { turnOrder.Add(player); } if (enemies != null) { AddSetEnemies(enemies); } else { AddRandomEnemies(); } // Sort by agility turnOrder = turnOrder.OrderByDescending(stat => stat.currentAGI).ToList(); // Generate first message messageText.text = ""; for (int i = 0; i < enemyTeam.Count; i++) { if (enemyTeam.Count == 1) { messageText.text += "A "; } messageText.text += enemyTeam[i].characterName; if (i < enemyTeam.Count - 2) { messageText.text += ", "; } else if (i == enemyTeam.Count - 2) { messageText.text += " and "; } } if (enemyTeam.Count > 1) { messageText.text += " appear!"; } else { messageText.text += " appears!"; } UpdateAllStats(); spriteManager.SetSprites(enemyTeam); while (!GameManager.instance.transition.textureHidden) { yield return(null); } yield return(new WaitForSeconds(timeToWait * Mathf.CeilToInt(enemyTeam.Count / 2))); NextTurn(); }