public Enemy SpawnEnemy(EnemyType newType, Vector2 position) { Enemy newEnemy = null; switch (newType) { case (EnemyType.Slicer): newEnemy = new Slicer(manager.thisScene, position); break; case (EnemyType.Tortoise): newEnemy = new Tortoise(manager.thisScene, position); break; case (EnemyType.Dragonfly): newEnemy = new Dragonfly(manager.thisScene, position); break; case (EnemyType.Komodo): newEnemy = new Komodo(manager.thisScene, position); break; case (EnemyType.Phantom): newEnemy = new Phantom(manager.thisScene, position); break; default: break; } return(newEnemy); }
public override IEnumerator <float> LevelScript() { manager.thisScene.fader.LerpColor(Color.Transparent, 1f); // Time remaining: 65 seconds. Enemy e; AudioManager.PlaySong(Level2Theme, false, .5f); TitleShown = true; manager.thisScene.LerpTitleColor(Color.White, 1f); yield return(1f); yield return(2f); manager.thisScene.LerpTitleColor(Color.Transparent, 1f); yield return(1f); TitleShown = false; // Time remaining: 61 seconds // Begin spawning two columns of dragonflies from the sides for (int i = 0; i < 10; i++) { e = new Dragonfly(manager.thisScene, new Vector2(100, 700)); scriptManager.Execute(ColumnDragonfly, e); e = new Dragonfly(manager.thisScene, new Vector2(600, 700)); scriptManager.Execute(ColumnDragonfly, e); yield return(.4f); } // Time remaining: 57 seconds e = SpawnStrafingSlicer(new Vector2(780, 70f), (float)(Math.PI / 8f) * 7); scriptManager.Execute(SimpleStrafe, e); yield return(.5f); e = SpawnStrafingSlicer(new Vector2(-80, 90f), (float)(Math.PI / 8f) * 1); scriptManager.Execute(SimpleStrafe, e); yield return(.5f); e = SpawnStrafingSlicer(new Vector2(780, 150f), (float)(Math.PI / 8f) * 7); scriptManager.Execute(SimpleStrafe, e); yield return(.5f); e = SpawnStrafingSlicer(new Vector2(-80, 150f), (float)(Math.PI / 8f) * 1); scriptManager.Execute(SimpleStrafe, e); yield return(.5f); e = SpawnStrafingSlicer(new Vector2(780, 70f), (float)(Math.PI / 8f) * 7); scriptManager.Execute(SimpleStrafe, e); yield return(.5f); e = SpawnStrafingSlicer(new Vector2(-80, 90f), (float)(Math.PI / 8f) * 1); scriptManager.Execute(SimpleStrafe, e); yield return(.5f); e = SpawnStrafingSlicer(new Vector2(780, 150f), (float)(Math.PI / 8f) * 7); scriptManager.Execute(SimpleStrafe, e); yield return(.5f); e = SpawnStrafingSlicer(new Vector2(-80, 150f), (float)(Math.PI / 8f) * 1); scriptManager.Execute(SimpleStrafe, e); yield return(.5f); yield return(4f); e = SpawnEnemy(EnemyType.Tortoise, new Vector2(350, -50)); e.CustomValue1 = 1.5f; scriptManager.Execute(EasyTortoise, e); e = SpawnEnemy(EnemyType.Tortoise, new Vector2(300, -80)); e.CustomValue1 = 3f; scriptManager.Execute(EasyTortoise, e); e = SpawnEnemy(EnemyType.Tortoise, new Vector2(400, -80)); e.CustomValue1 = 3f; scriptManager.Execute(EasyTortoise, e); yield return(3f); for (int i = 0; i < 6; i++) { e = SpawnEnemyAtAngle(EnemyType.Dragonfly, new Vector2(25, -50), (float)Math.PI / 10 * 3f, 180f); e.LerpVelocity(90f, 3.5f); e.LerpRotation(VectorMathHelper.GetAngleTo(new Vector2(0, 0), manager.thisScene.player.InnerHitbox.Center), 3.5f); yield return(.5f); } // Time remaining: 44 seconds yield return(1f); // Time remaining: 43 seconds // Spawn several stabbing slicers at the side for (int i = 0; i < 5; i++) { e = SpawnEnemyAtAngle(EnemyType.Slicer, new Vector2(700, new Random().Next(25, 600)), 0f, 100f); scriptManager.Execute(StabbingSlicer, e); yield return(1f); } // Time remaining 36 seconds Enemy firstKomodo = SpawnEnemy(EnemyType.Komodo, new Vector2(350, -50)); firstKomodo.Health = 60; scriptManager.Execute(FirstKomodo, firstKomodo); yield return(8f); if (firstKomodo == null || firstKomodo.Health <= 0) { e = SpawnEnemyAtAngle(EnemyType.Tortoise, new Vector2(-50, 500), 0f, 55f); e.CustomValue2 = ((float)Math.PI / 8f) * 15; e.DeletionBoundary = new Vector2(200, 200); scriptManager.Execute(EasyTortoise, e); yield return(2f); e = SpawnEnemyAtAngle(EnemyType.Tortoise, new Vector2(730, 500), (float)Math.PI, 55f); e.CustomValue2 = ((float)Math.PI / 8f) * 9; e.DeletionBoundary = new Vector2(200, 200); scriptManager.Execute(EasyTortoise, e); yield return(2f); } else { yield return(4f); } // Remaining time: 24 if (firstKomodo != null || firstKomodo.Health > 0) { scriptManager.AbortObjectScripts(firstKomodo); firstKomodo.Rotation = ((float)Math.PI / 2f) * 3; firstKomodo.LerpVelocity(70f, 2f); } for (int i = 0; i < 6; i++) { e = SpawnEnemyAtAngle(EnemyType.Dragonfly, new Vector2(730, 25), (float)Math.PI / 8 * 7f, 180f); e.LerpVelocity(90f, 3.5f); e.LerpRotation(VectorMathHelper.GetAngleTo(new Vector2(700, 0), manager.thisScene.player.InnerHitbox.Center), 3.5f); yield return(.5f); } yield return(3f); // Remaining time 18 e = SpawnEnemyAtAngle(EnemyType.Tortoise, new Vector2(-50, 500), 0f, 55f); e.CustomValue2 = ((float)Math.PI / 8f) * 15; e.DeletionBoundary = new Vector2(200, 200); scriptManager.Execute(EasyTortoise, e); yield return(2f); e = SpawnEnemyAtAngle(EnemyType.Tortoise, new Vector2(730, 500), (float)Math.PI, 55f); e.CustomValue2 = ((float)Math.PI / 8f) * 9; e.DeletionBoundary = new Vector2(200, 200); scriptManager.Execute(EasyTortoise, e); yield return(4f); Enemy secondKomodo = SpawnEnemy(EnemyType.Komodo, new Vector2(350, -50f)); scriptManager.Execute(SecondKomodo, secondKomodo); // Remaining time 12 yield return(10f); manager.thisScene.PlayBossWarning(); yield return(6.6f); //SPAWN THE BOSS Boss boss = new PhantomBoss(manager.thisScene, new Vector2(300f, 100f)); BeginBossBattle(boss); yield return(1.5f); bossTheme = AudioManager.PlaySong(BossTheme); while (boss.Health > 0) { yield return(.03f); } // Stop the boss theme and hide the health bar bossTheme.Dispose(); manager.thisScene.HideBossHealthbar(); // Explode the boss!! scriptManager.AbortObjectScripts(boss); manager.thisScene.player.Phasing = true; foreach (GameObject b in manager.thisScene.gameObjects.FindAll(x => x is Bullet)) { scriptManager.AbortObjectScripts(b); b.Phasing = true; b.LerpColor(Color.Transparent, 1f); } scriptManager.Execute(manager.thisScene.BossExplosion, boss); yield return(3.3f); yield return(2f); manager.thisScene.fader.LerpColor(Color.Transparent, 3f); yield return(3f); manager.thisScene.fader.LerpColor(Color.Black, 2f); yield return(2f); manager.thisScene.player.Phasing = false; manager.SetLevel(3); }