/// <summary> /// Public spawn interface implementation, calls the callback of the subclasses. /// Automatically removes the Spawner from the Field after it has no more enemies to produce because of the RemainingEnemies setter action. /// </summary> /// <param name="spawnCallback">Callback that runs if the conditions for the spawn get fulfilled, e.g. there are remaining enemies.</param> public void Spawn(SpawnCallbackDelegate spawnCallback) { if (UnlimitedEnemies) { spawnCallback(this); } else if (RemainingEnemies > 0) { spawnCallback(this); RemainingEnemies--; } }
protected void AddDualSpawner(float percentDelay, float y, int enemies, SpawnCallbackDelegate spawnCallback) { //Half the enemies for each side int enemiesLeft = enemies / 2; int enemiesRight = enemies - enemiesLeft; //Adds the Spawner to the list of Spawners intended for the game round Spawners.Add ( new DelayedStart ( actsDelay: 0 , percentDelay: percentDelay , spawner: new DualSymmetrySpawner ( y: y , remainingEnemiesLeft: enemiesLeft , remainingEnemiesRight: enemiesRight , equalSpawnCallback: spawnCallback ) ) ); }
public virtual void Spawn(SpawnCallbackDelegate spawnCallback) { Spawner.Spawn(spawnCallback); }
protected AbstractSpawnerStrategy(ISpawner spawner, SpawnCallbackDelegate spawnCallback) { Spawner = spawner; SpawnCallback = spawnCallback; }
public EveryNActs(ISpawner spawner, SpawnCallbackDelegate spawnCallback, int interval) : base(spawner, spawnCallback) { EveryNActsStrategy = new ActorStrategy.EveryNActs(Spawn, interval); }
public EnemySpawner(float x, float y, int remainingEnemies, SpawnCallbackDelegate spawnCallback) : base(x, y, remainingEnemies) { SpawnCallback = spawnCallback; }
public void SetSpawnCallback(SpawnCallbackDelegate equalSpawnCallback) { SetSpawnCallback(equalSpawnCallback, equalSpawnCallback); }
/// <summary> /// Sets new Callbacks, overwriting old ones. /// This is useful for delayed construction of the Spawner when its fields are required within the callback definition. /// </summary> /// <param name="leftSpawnCallback">callback used in the left Spawner</param> /// <param name="rightSpawnCallback">callback used in the right Spawner</param> public void SetSpawnCallback(SpawnCallbackDelegate leftSpawnCallback, SpawnCallbackDelegate rightSpawnCallback) { LeftSpawnCallback = leftSpawnCallback; RightSpawnCallback = rightSpawnCallback; }
//Implicitly uses equal callback on both sides public DualSymmetrySpawner(float y, int remainingEnemiesLeft, int remainingEnemiesRight, SpawnCallbackDelegate equalSpawnCallback) : this(y, remainingEnemiesLeft, remainingEnemiesRight, equalSpawnCallback, equalSpawnCallback) { }
public DualSymmetrySpawner(float y, int remainingEnemiesLeft, int remainingEnemiesRight, SpawnCallbackDelegate leftSpawnCallback, SpawnCallbackDelegate rightSpawnCallback) : base(0, y, remainingEnemiesLeft + remainingEnemiesRight) { RemainingEnemiesLeft = remainingEnemiesLeft; RemainingEnemiesRight = remainingEnemiesRight; SetSpawnCallback(leftSpawnCallback, rightSpawnCallback); }
//Implicitly spawns on top of the game field where y=0 protected void AddDualSpawner(float percentDelay, int enemies, SpawnCallbackDelegate spawnCallback) { AddDualSpawner(percentDelay, 0, enemies, spawnCallback); }
public EveryNPercent(ISpawner spawner, SpawnCallbackDelegate spawnCallback, float percent) : base(spawner, spawnCallback) { this.IntervalPercent = percent; this.StartPercent = Spawner.Field.Percent; }