public void ProcessWave(float elapseSeconds, float realElapseSeconds) { if (Finish) { return; } timer += elapseSeconds; if (waveElements.Count > 0) { if (timer > waveElements.Peek().CumulativeTime) { WaveElement waveElement = waveElements.Dequeue(); int enemyId = waveElement.EnemyId; ReferencePool.Release(waveElement); waveElement = null; CurrentEnemyIndex++; GameEntry.Event.Fire(this, SpawnEnemyEventArgs.Create(enemyId)); } } else if (!Finish && timer >= NextWaveTime) { Finish = true; } }
public static WaveElement Create(WaveElementData waveElementData, float cumulativeTime) { WaveElement waveElement = ReferencePool.Acquire <WaveElement>(); waveElement.waveElementData = waveElementData; waveElement.CumulativeTime = cumulativeTime; return(waveElement); }
public void Clear() { while (waveElements.Count > 0) { WaveElement waveElement = waveElements.Dequeue(); ReferencePool.Release(waveElement); } waveData = null; waveElements.Clear(); CurrentEnemyIndex = 1; TotalSpawnTime = 0f; NextWaveTime = 0f; timer = 0; Finish = false; }
public static Wave Create(WaveData waveData) { Wave wave = ReferencePool.Acquire <Wave>(); wave.waveData = waveData; WaveElementData[] waveElementDatas = waveData.WaveElementDatas; float timer = 0; foreach (var waveElementData in waveElementDatas) { timer += waveElementData.SpawnTime; wave.waveElements.Enqueue(WaveElement.Create(waveElementData, timer)); } wave.TotalSpawnTime = timer; wave.NextWaveTime = timer + waveData.FinishWaitTIme; return(wave); }