public void ShowTimeForAllWaves() { StringBuilder sb = new StringBuilder(); for (int wcount = 0; wcount < Moon.Instance.Waves.Count; wcount++) { float total = 0f; float full_total = 0f; for (int wletCount = 0; wletCount < Moon.Instance.Waves[wcount].wavelets.Count; wletCount++) { WaveletStatDetails details = calculateStats(Moon.Instance.Waves[wcount].wavelets[wletCount], false); WaveletStatDetails details_full = calculateStats(Moon.Instance.Waves[wcount].wavelets[wletCount], true); sb.Append("W: "); sb.Append(wcount); sb.Append(" WLET: "); sb.Append(wletCount); sb.Append(" TIME: "); sb.Append(details.summary.time); sb.Append(" FULL: "); sb.Append(details_full.summary.time); sb.Append("\n"); total += details.summary.time; full_total += details_full.summary.time; } sb.Append($"WAVE:\t{wcount}\tTOTAL:\t{total}\tFULL:\n"); } summary[0].text = sb.ToString(); Debug.Log(summary[0].text); }
public void ShowStats() { foreach (Text t in summary) { t.text = ""; } if (!AnyValid()) { return; } String log = ""; WaveletStatDetails stats = calculateStats(generateWavelet(), false); StringBuilder sb = new StringBuilder(); //sb.Append($"DPS: {Get.Round(stats.summary.mass_per_second, 1)}\n"); //sb.Append($"Total: {Get.Round(stats.summary.total_modified_mass, 1)}\n"); sb.Append($"Time: {stats.summary.time}\n"); sb.Append($"Count: {stats.summary.count}\n"); summary[0].text = sb.ToString(); log += sb.ToString().Replace("\n", "\t"); log += "\n"; int i = 1; foreach (WaveStat s in stats.details) { //summary[i].text = $"{s.name}\nC: {s.count}\nDPS: {Get.Round(s.mass_per_second,1)}\nTotal: {Get.Round(s.total_modified_mass,1)}\nTime: {s.time}\n"; summary[i].text = $"{s.name}\nC: {s.count}\nTime: {s.time}\n"; log += summary[i].text.Replace("\n", "\t"); log += "\n"; i++; } Debug.Log(log); }
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); }