public WaveStat getWaveStat(int level, int wave, int wavelet, string name) { foreach (WaveStat check in stats) { if (check.level != level) { continue; } if (check.wave != wave) { continue; } if (check.wavelet != wavelet) { continue; } if (!check.name.Equals(name)) { continue; } return(check); } WaveStat hey = new WaveStat(level, wave, wavelet, name); stats.Add(hey); return(hey); }
public void AssignWaveStat(Dictionary <string, IntFloat> monster_count, int wave, int wavelet) { float total_mass = 0; float total_time = 0; foreach (string name in monster_count.Keys) { int count = monster_count[name].myInt; enemyStats stat = Central.Instance.getEnemy(name); if (stat != null) { WaveStat wavestat = getWaveStat(Central.Instance.current_lvl, wave, wavelet, name); wavestat.speed = stat.speed; wavestat.total_modified_mass = stat.getModifiedMass() * count; wavestat.time = monster_count[name].myFloat; total_mass += wavestat.total_modified_mass; total_time += wavestat.time; } else { Debug.Log("Count not assign a WaveStat for " + name + "\n"); } } WaveStat total_wavestat = getWaveStat(Central.Instance.current_lvl, wave, wavelet, all); total_wavestat.speed = -1; total_wavestat.total_modified_mass = total_mass; total_wavestat.time = total_time; }
public void calcExtra(WaveStat stat) { stat.mass_per_second = (stat.time > 0) ? stat.total_modified_mass / stat.time : 0f; if (stat.wavelet > -1) { return; } if (stat.wave == 0) { return; } if (!stat.name.Equals(all)) { return; } WaveStat previous_stat = getWaveStat(stat.level, stat.wave - 1, -1, all); stat.mass_increase = stat.total_modified_mass / previous_stat.total_modified_mass - 1f; float prev_mass_per_second = (previous_stat.time > 0) ? previous_stat.total_modified_mass / previous_stat.time : 0f; stat.mass_per_second_increase = (prev_mass_per_second > 0)? stat.mass_per_second / prev_mass_per_second - 1 : 0f; }
public WaveletStatDetails calculateStats(InitWavelet wavelet, bool include_end_time) { WaveletStatDetails details = new WaveletStatDetails(); details.details = new List <WaveStat>(); WaveStat summary = new WaveStat(); int max = (repeatTimes > 0)? wavelet.enemies.Length / repeatTimes : wavelet.enemies.Length; for (int x = 0; x < max; x++) { InitEnemyCount i = wavelet.enemies[x]; WaveStat subStat = new WaveStat(); float mass = EnemyStore.getEffectiveMass(EnumUtil.EnumFromString(i.name, EnemyType.Null)); float speed = EnemyStore.getSpeed(EnumUtil.EnumFromString(i.name, EnemyType.Null)); // Debug.Log($"BEFORE {i.name} Mass {mass} Speed {speed}\n"); //if (speed == 0) Debug.LogError($"Trying to get speed for an unsupported enemy {i.name}\n"); float time = i.c * wavelet.interval; if (i.name.Equals("Tank")) { mass += EnemyStore.getEffectiveMass(EnemyType.TinyTank); float speed_adjusted = EnemyStore.getSpeed(EnemyType.Tank) * EnemyStore.getEffectiveMass(EnemyType.Tank) + EnemyStore.getSpeed(EnemyType.TinyTank) * EnemyStore.getEffectiveMass(EnemyType.TinyTank); speed_adjusted /= mass; speed = speed_adjusted; } if (i.name.Equals("SturdyTank")) { mass += EnemyStore.getEffectiveMass(EnemyType.Tank) + EnemyStore.getEffectiveMass(EnemyType.TinyTank); float speed_adjusted = EnemyStore.getSpeed(EnemyType.SturdyTank) * EnemyStore.getEffectiveMass(EnemyType.SturdyTank) + EnemyStore.getSpeed(EnemyType.Tank) * EnemyStore.getEffectiveMass(EnemyType.Tank) + EnemyStore.getSpeed(EnemyType.TinyTank) * EnemyStore.getEffectiveMass(EnemyType.TinyTank); speed_adjusted /= mass; speed = speed_adjusted; } if (i.name.Equals("ImpossibleTank")) { mass += EnemyStore.getEffectiveMass(EnemyType.SturdyTank) + EnemyStore.getEffectiveMass(EnemyType.Tank) + EnemyStore.getEffectiveMass(EnemyType.TinyTank); float speed_adjusted = EnemyStore.getSpeed(EnemyType.SturdyTank) * EnemyStore.getEffectiveMass(EnemyType.SturdyTank) + EnemyStore.getSpeed(EnemyType.Tank) * EnemyStore.getEffectiveMass(EnemyType.Tank) + EnemyStore.getSpeed(EnemyType.TinyTank) * EnemyStore.getEffectiveMass(EnemyType.TinyTank) + EnemyStore.getSpeed(EnemyType.ImpossibleTank) * EnemyStore.getEffectiveMass(EnemyType.ImpossibleTank); speed_adjusted /= mass; speed = speed_adjusted; } if (i.name.Equals("Turtle")) { mass += 8 * EnemyStore.getEffectiveMass(EnemyType.TinyPlane); } // Debug.Log($"AFTER {i.name} Mass {mass} Speed {speed}\n"); summary.count += i.c * repeatTimes; summary.total_modified_mass += i.c * mass * repeatTimes; // Debug.Log($"{i.c - 1} * {wavelet.interval} * {repeatTimes}\n"); summary.time += ((i.c - 1) * wavelet.interval) * repeatTimes; summary.speed += speed * i.c * repeatTimes; subStat.speed = speed; subStat.time = time; subStat.count = i.c; subStat.total_modified_mass = mass * i.c; subStat.name = i.name; subStat.mass_per_second = speed * i.c * mass / time; details.details.Add(subStat); } float extra = (include_end_time) ? wavelet.end_wait : 0; summary.speed /= summary.count; summary.time += (wavelet.enemies.Length - 1) * wavelet.lull + extra; // Debug.Log($" + {wavelet.enemies.Length - 1} * {wavelet.lull} + {extra}\n"); // Debug.Log($"Speed: {summary.speed} Mass: {summary.total_modified_mass} Time: {summary.time}\n"); summary.mass_per_second = summary.speed * summary.total_modified_mass / summary.time; details.summary = summary; return(details); }