Beispiel #1
0
    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);
    }
Beispiel #2
0
    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);
    }
Beispiel #3
0
    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);
    }