IEnumerator takeTurn() { yield return(null); CombatLogger.instance.logEffectString(EncountersManager.instance.currentEncounter.into); yield return(CombatLogger.instance.isDisplaying()); while (!isCombatOver()) { TurnManagerGUI.instance.updateTurnOrder(getNext3Orders()); current = turnOrder.Dequeue(); while (current.health.isDead()) { current = turnOrder.Dequeue(); } TurnManagerGUI.instance.setCurrentCharacter(current.name); StatsPanelGUI.instance.initStatsPanel(current.stats); yield return(current.health.resolveEffects()); target = null; ability = null; if (!current.skipTurn && !current.health.isDead()) { yield return(current.takeTurn(target, ability)); Debug.Log(current.name + " targeted " + target.name); ability.useAbilty(target); } else { current.skipTurn = false; } yield return(CombatLogger.instance.isDisplaying()); turnOrder.Enqueue(current); TurnManagerGUI.instance.updateTurnOrder(getNext3Orders()); yield return(null); } for (int i = 0; i < PartyGUI.instance.party.Count; i++) { PartyGUI.instance.party[i].health.clearStatuses(); } Debug.Log("Combat over"); if (onCombatOver != null) { onCombatOver(); } }