public void DoCombat(bool retreat) { Round++; Enemies[0].Combat(Party.ToArray(), retreat); var dead = new List <Puppet>(); int deathCount = 0; for (int i = 0; i < Party.Count; i++) { if (Party[i].State == PuppetState.Dead && !knownDead[i]) { dead.Add(Party[i]); knownDead[i] = true; } if (knownDead[i]) { deathCount++; } } if (dead.Count > 0) { OnPuppetDies?.Invoke(this, new BattleEventArgs(Enemies, dead.ToArray(), Round)); } if (deathCount == Party.Count) { OnBattleLost?.Invoke(this, new BattleEventArgs(Enemies, Party.ToArray(), Round)); Ended = true; } else if (Enemies[0].State == PuppetState.Dead) { GenerateRelics(); OnEnemyDies?.Invoke(this, new BattleEventArgs(Enemies, Party.ToArray(), Round)); Ended = true; } else if (retreat) { OnRetreated?.Invoke(this, new BattleEventArgs(Enemies, Party.ToArray(), Round)); Ended = true; } else { OnNextRound?.Invoke(this, new BattleEventArgs(Enemies, Party.ToArray(), Round)); } }
private void Die() { OnEnemyDies?.Invoke(this, EventArgs.Empty); }