wave getWave() { wave new_wave = new wave(); InitWavelet wavelet = generateWavelet(); new_wave.add_wavelet(wavelet, false); new_wave.monster_count = wavelet.GetMonsterCount(); new_wave.time_name_start = (day) ? TimeName.Day : TimeName.Night; new_wave.time_name_end = (day) ? TimeName.Day : TimeName.Night; return(new_wave); }
void Update() { if (!WaveInProgress) { return; } Sun.Instance.SetTime(); TIME += Time.deltaTime; do_xp = true; if (monsters_transform.childCount == 0 && (wait - TIME) > Get.getSkipForwardGap(Central.Instance.current_lvl)) { int buffer = 2; Debug.Log($"!!!!! {current_wave}.{current_wavelet} wavelet defined {my_wavelet!=null} SKIPPED {TIME - wait - buffer} seconds!\n"); Tracker.Log(PlayerEvent.WaveTiming, true, new Dictionary <string, string> { { "attribute_1", $"{current_wave}.{current_wavelet} wavelet defined {my_wavelet!=null}" }, { "attribute_2", "SKIPPED" } }, new Dictionary <string, double> { { "metric_1", (TIME - wait - buffer) } }); TIME = wait - buffer; // if we ran out of enemies, let's speed things along do_xp = false; } if (my_wavelet == null) { if (monsters_transform.childCount >= 3) { extra_end_wait += Time.deltaTime; return; } TIME = wait; Debug.Log($"!!!!! Extra end wait {current_wave}.{current_wavelet} wavelet defined {my_wavelet != null} was {extra_end_wait}\n"); Tracker.Log(PlayerEvent.WaveTiming, true, new Dictionary <string, string> { { "attribute_1", $"{current_wave}.{current_wavelet} wavelet defined {my_wavelet != null}" }, { "attribute_2", "WAITED" } }, new Dictionary <string, double>() { { "metric_1", extra_end_wait } }); extra_end_wait = 0f; do_xp = false; } if (!LevelBalancer.Instance.am_enabled) { if (do_xp) { if (TIME > xp_timer) { // Debug.Log($"Wave {current_wave} doing XP assignment {time_based_xp} {Time.realtimeSinceStartup} TIME {TIME} xp_timer {xp_timer}\n"); onTimeBasedXpAssigned?.Invoke(time_based_xp); xp_timer += xp_grant_interval; } } else { xp_timer = TIME + xp_grant_interval; } } if (wait > 0 && TIME < wait) { return; } if (!done) { if (my_wavelet == null || my_wavelet.GetMonsterCount() == 0) { if (current_wavelet < my_wave.wavelets.Count) { my_wavelet = my_wave.wavelets[current_wavelet]; Noisemaker.Instance.Play("wavelet_start"); //if (!balanceMode()) SetWavelet(current_wavelet + 1); // Debug.Log("Wavelet start end " + " Duration.time " + Duration.time + " SUN " + Sun.Instance.current_time_of_day + "\n"); m_count = 0; e_count = 0; if (current_wavelet == my_wave.wavelets.Count) { Peripheral.Instance.level_state = LState.OnLastWavelet; Peripheral.Instance.Wave_interval = my_wavelet.getEndWait(); if (onLastWavelet != null) { onLastWavelet(current_wave); } } } else { done = true; // Debug.Log("Wave end " + " Duration.time " + Duration.time + "\n"); Noisemaker.Instance.Play("wave_end"); } } if (!done) { bool reset = (m_count >= my_wavelet.enemies[e_count].c); bool last = (m_count == my_wavelet.enemies[e_count].c - 1); if (reset) { m_count = 0; e_count++; } if (e_count < my_wavelet.enemies.Length) { if (last) { incrementWait(my_wavelet.lull); } else { incrementWait(my_wavelet.interval); } StartCoroutine(makeMonster(my_wavelet.enemies[e_count].name, my_wavelet.enemies[e_count].p)); m_count++; } else { if (current_wavelet != my_wave.wavelets.Count) { incrementWait(my_wavelet.end_wait); } my_wavelet = null; } } return; } else { if (Peripheral.Instance.Wave_interval < 0 && monsters_transform.childCount > 0) { return; } done = true; Noisemaker.Instance.Play("wave_end"); if (onWaveEnd != null) { onWaveEnd(current_wave); } if (!balanceMode()) { SetWave(current_wave + 1, 0); } WaveInProgress = false; Peripheral.Instance.level_state = LState.WaveEnded; } }
public void add_wavelet(InitWavelet w, bool old_school) { wavelets.Add(w); monster_count += w.GetMonsterCount(); total_run_time += w.GetTotalRunTime(old_school); }