private string EnumerateSolutionIssues(int waveIndex, WaveSolution solution) { bool issuesFound = false; string issuesString = ""; WaveStats stats = WaveStatList[waveIndex]; // // Is it possible to afford this solution? // if (stats.CoinAvail < stats.CoinNeeded) { issuesFound = true; issuesString += "Can't afford at start of wave "; } // // Are all the enemies killed in simulation? // if (LevelDesc.Waves[waveIndex].Count > stats.FullSimulation.EnemiesKilled) { issuesFound = true; issuesString += "Enemies survived simulation "; } if (!issuesFound) { return("<span foreground='green'>None</span>"); } return("<span foreground='red'>" + issuesString + "</span>"); }
private void CalculateStatsForWaves(List <TurretStats> Turrets) { WaveStatList = new List <WaveStats>(); float maxDPSOverall = 0.0F; int coinNeeded = 0; for (int j = 0; j < Turrets.Count; j++) { maxDPSOverall += Turrets[j].MaxDPSOverall; coinNeeded += Turrets[j].t.Cost; } int maxCoinEarned = LevelDesc.StartingCoins; for (int i = 0; i < LevelDesc.Waves.Count; i++) { EnemyWave wave = LevelDesc.Waves[i]; EnemyDescription enemyDesc = LevelManager.LookupEnemy(wave.Enemy); WaveSolution solution = GenerateWaveSolution(); WaveStats stats = new WaveStats(); WaveSimulatorDamageStats singleEnemyStats = SimulateWave(enemyDesc, solution, 1, true); WaveSimulatorDamageStats fullWaveStats = SimulateWave(enemyDesc, solution, wave.Count, false); EnemyDescription enemy = LevelManager.LookupEnemy(wave.Enemy); stats.MaxDmgDealtSingleEnemy = singleEnemyStats.DamageDealt; stats.MaxDPSOverall = maxDPSOverall; stats.MaxHPPSProducted = EnemyEditLayout.CalculateDPSforWave(enemy); stats.FullSimulation = fullWaveStats; stats.CoinNeeded = coinNeeded; stats.CoinAvail = maxCoinEarned; maxCoinEarned += (enemy.Coins * wave.Count); WaveStatList.Add(stats); } }