public IEnumerator battleLoop() { while (battlers.Count > 0) { battlers.Sort(); int delayRecoveryAmount = battlers[0].delay; Debug.Log("extracted delay " + delayRecoveryAmount); foreach (var battler in battlers) { battler.delay -= delayRecoveryAmount; strainAccumulator += delayRecoveryAmount; battler.recoverStrain(strainAccumulator / strainRecovThreshold); strainAccumulator = strainAccumulator % strainRecovThreshold; } for (int i = 0; i < turnPanelHolder.childCount; i++) { Destroy(turnPanelHolder.GetChild(i).gameObject); } foreach (var battler in battlers) { TurnPanel panel = Instantiate(turnPanelPrefab, turnPanelHolder); panel.updateVal(battler); } yield return(StartCoroutine(battlers[0].executeTurn())); bool allPLayerDead = true; foreach (var playerPartyBattler in playerParty.battlers) { if (!playerPartyBattler.isDead()) { allPLayerDead = false; } else { playerPartyBattler.setState(PlayerCharState.dead); } } if (allPLayerDead) { Debug.Log("Player Loses"); failScreenLoader.SetActive(true); break; } else { bool allEnemiesDead = true; for (int i = enemies.Count - 1; i >= 0; i--) { var enemyBattler = enemies[i]; if (!enemyBattler.isDead()) { allEnemiesDead = false; } else if (battlers.Contains(enemyBattler)) { enemyBattler.showDead(); battlers.Remove(enemyBattler); } } if (allEnemiesDead) { Debug.Log("Player wins"); nextSceneLoader.SetActive(true); break; } } } }