public override bool Update() { if (advance.ShouldAdvance()) { if (groupNum >= world.Waves.Count) { if (advance is TimeElapsedAdvancer) if (!string.IsNullOrEmpty(world.NextWorld)) GameManager.Navigate(new PlayState(world.NextWorld)); else GameManager.Navigate(new IntroState()); else advance = new TimeElapsedAdvancer(5); } else Spawn(); } return true; }
private void Spawn() { WaveGroup group = world.Waves[groupNum]; foreach(WaveSpawn spawn in group.Spawns) { GameManager.State.Instantiate(new LevelSpawner(spawn.Interval, spawn.Number, new Vector2(spawn.Position.X, spawn.Position.Y), spawn.Identifier, spawn.SubType)); } groupNum++; if (groupNum >= world.Waves.Count) advance = new WaveRemainingAdvancer(0); else { group = world.Waves[groupNum]; switch (group.AdvanceType) { case AdvanceTypes.EnemiesLeft: int rem; if (!Int32.TryParse(group.AdvanceArgs, out rem)) rem = 0; advance = new WaveRemainingAdvancer(rem); break; case AdvanceTypes.TimeElapsed: float delay; if (!float.TryParse(group.AdvanceArgs, out delay)) delay = 5; advance = new TimeElapsedAdvancer(delay); break; } } }
/// <summary> /// Construct a PagedEnumerator based on the specified /// <see cref="IAdvancer"/>. /// </summary> /// <param name="advancer"> /// The underlying <b>IAdvancer</b>. /// </param> public PagedEnumerator(IAdvancer advancer) { Debug.Assert(advancer != null); m_advancer = advancer; }