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