public override void AddedToFieldHook() { base.AddedToFieldHook(); //Is always shooting downwards AddStrategy(new Shooting ( owner: this , shootingInterval: 10 , weaponCallback: () => Weapon , bulletFocusPosition: () => BulletFocusPosition , angleCallback: () => Utility.RandomBetween(160, 200) ) { IsShooting = true }); //Immediately rotates towards the vertical orientation direction AddStrategy(new TargetAngleRotation ( owner: this , verticalOrientation: Direction.Vertical , angleDeltaCount: 1 , maxAngleDegrees: 0 ) { TargetAngleRadians = AbstractRotation.DegreesToRadians(0) }); AddStrategy(new EveryNActs ( callback: () => { var bomb = new Doomday(Field.Player); bomb.X = BulletFocusPosition.X + Utility.RandomBetween(-1, 1) * (float)bomb.Width; bomb.Y = BulletFocusPosition.Y; bomb.Speed = 0.4f * Utility.RandomBetween(1, 5); Field.AddActor(bomb); } , interval: 80 )); //Custom Thrust new Thrust(this); }
private void FirstWave() { //First greeting enemy (plan is to display a greeting message using black_old_face.png within the UI) Spawners.Add ( new EnemySpawner ( x: (float)Field.Size.Width / 2 , y: 20 , remainingEnemies: 1 , spawnCallback: spawner => spawner.PlaceActor(new Lakebeam()) ) ); //First Bomb to give Player some small target to fire on AddDualSpawner ( percentDelay: 2 , enemies: 1 , spawnCallback: spawner => { var enemy = new Doomday(Field.Player); spawner.PlaceActor(enemy); } ); //Wave of Lakebeams for the opportunity of quickly upgrading the basic weapon AddDualSpawner ( percentDelay: 6 , enemies: 4 , spawnCallback: spawner => { var enemy = new Lakebeam(); spawner.PlaceActor(enemy); } ); //Wave of bombs AddDualSpawner ( percentDelay: 16 , enemies: 5 , spawnCallback: spawner => { var enemy = new Doomday(Field.Player); spawner.PlaceActor(enemy); } ); //Two Venomflares to make it more interesting Spawners.Add ( new DelayedStart ( actsDelay: 0 , percentDelay: 26 , spawner: new EnemySpawner ( //Spawns in the 1/3 of the Field x: (float)Field.Size.Width / 3 , y: 0 , remainingEnemies: 1 , spawnCallback: spawner => spawner.PlaceActor(new Venomflare()) ) ) ); Spawners.Add ( new DelayedStart ( actsDelay: 0 , percentDelay: 26 , spawner: new EnemySpawner ( //Spawns in the 2/3 of the Field x: 2 * (float)Field.Size.Width / 3 , y: 0 , remainingEnemies: 1 , spawnCallback: spawner => spawner.PlaceActor(new Venomflare()) ) ) ); //Waveghosts that will rotate around AddDualSpawner ( percentDelay: 36 , y: (float)Field.Size.Height / 2 , enemies: 2 , spawnCallback: spawner => spawner.PlaceActor(new Waveghost()) ); //Larger wave of Lakebeams AddDualSpawner ( percentDelay: 50 , enemies: 8 , spawnCallback: spawner => { var enemy = new Lakebeam(); spawner.PlaceActor(enemy); } ); //Last small wave of bombs AddDualSpawner ( percentDelay: 60 , enemies: 4 , spawnCallback: spawner => { var enemy = new Doomday(Field.Player); spawner.PlaceActor(enemy); } ); //Final battle before boss appears AddDualSpawner ( percentDelay: 75 , y: (float)Field.Size.Height / 2 , enemies: 4 , spawnCallback: spawner => spawner.PlaceActor(new Waveghost()) ); //The Boss Spawners.Add ( new DelayedStart ( actsDelay: 0 , percentDelay: 95 , spawner: new EnemySpawner ( x: (float)Field.Size.Width / 2 , y: 0 , remainingEnemies: 1 , spawnCallback: spawner => { var boss = new DarkspringTheTwisted(); spawner.PlaceActor(boss); //Boss will be spawned outside of the field and comes in afterwards boss.Y -= (float)boss.Height / 2; } ) ) ); }