/// <summary> /// Factory method for spawning a projectile /// </summary> /// <param name="projectileType">The type of projectile to create</param> /// <param name="position">The position of the projectile in the game world</param> /// <returns>The game object id of the projectile</returns> public Projectile CreateProjectile(ProjectileType projectileType, Vector2 position, Vector2 velocity) { Projectile projectile = null; uint id = NextID(); switch (projectileType) { case ProjectileType.Bullet: projectile = new Bullet(id, content, position); break; case ProjectileType.Fireball: projectile = new Fireball(id, content, position); break; case ProjectileType.BubbleBullet: projectile = new BubbleBullet(id, content, position); break; case ProjectileType.Bomb: projectile = new Bomb(id, content, position, true); break; case ProjectileType.Blades: projectile = new Blades(id, content); break; case ProjectileType.DroneLaser: projectile = new DroneLaser(id, content, position); break; case ProjectileType.ToPlayerBullet: projectile = new ToPlayerBullet(id, content, position); break; case ProjectileType.ArrowProjectile: projectile = new ArrowProjectile(id, content, position); break; case ProjectileType.BirdCrap: projectile = new BirdCrap(id, content, position); break; case ProjectileType.EBullet: projectile = new EBullet(id, content, position); break; case ProjectileType.Frostball: projectile = new Frostball(id, content, position); break; case ProjectileType.BlueBeam: projectile = new blueBeam(id, content, position); break; //This method doesn't fit the trishield very well, so this code is a bit poor in quality. case ProjectileType.TrishieldBall: for (int i = 0; i < 2; i++) { projectile = new TriShieldBall(id, content, 2 * MathHelper.Pi / 3 * i); QueueGameObjectForCreation(projectile); id = NextID(); } projectile = new TriShieldBall(id, content, 4 * MathHelper.Pi / 3); break; case ProjectileType.GenericEnemyBullet: projectile = new GenericEnemyBullet(id, content, position); break; case ProjectileType.DroneWave: // waveIndex helps draw the wave to the left and right of the ship, while waveSpacing holds the vector difference of space between each drone. // Drone count is managed by 2*i. Vector2 waveIndex = new Vector2(-1, 1); Vector2 waveSpacing = new Vector2(40,30); for (int i = 0; i < 5; i++) { projectile = new DroneWave(id, content, position + waveSpacing * waveIndex * i); QueueGameObjectForCreation(projectile); id = NextID(); projectile = new DroneWave(id, content, position + waveSpacing * i); QueueGameObjectForCreation(projectile); id = NextID(); } break; case ProjectileType.TurretFireball: projectile = new TurretFireball(id, content, position); break; case ProjectileType.JetMinionBullet: projectile = new JetMinionBullet(id, content, position); break; case ProjectileType.EnergyBlast: projectile = new EnergyBlast(id, content, position, ScrollingShooterGame.Game.Player.energyBlastLevel); break; case ProjectileType.EnemyBullet: // Bullet velocity float bulletVel = 200f; //ScrollingShooterGame.Game.projectiles.Add(new EnemyBullet(ScrollingShooterGame.Game.Content, this.position + offset, bulletVel * toPlayer)); Vector2 toPlayer = (new Vector2(ScrollingShooterGame.Game.Player.Bounds.Center.X, ScrollingShooterGame.Game.Player.Bounds.Center.Y) - position); toPlayer.Normalize(); projectile = new EnemyBullet(id, content, position, bulletVel * toPlayer); break; case ProjectileType.EnemyBomb: projectile = new Bomb(id, content, position, false); break; case ProjectileType.ShotgunBullet: projectile = new ShotgunBullet(id, content, position, BulletDirection.Straight); QueueGameObjectForCreation(new ShotgunBullet(NextID(), content, position, BulletDirection.Left)); QueueGameObjectForCreation(new ShotgunBullet(NextID(), content, position, BulletDirection.Right)); QueueGameObjectForCreation(new ShotgunBullet(NextID(), content, position, BulletDirection.HardLeft)); QueueGameObjectForCreation(new ShotgunBullet(NextID(), content, position, BulletDirection.HardRight)); break; case ProjectileType.BlimpShotgun: projectile = new BlimpShotgun(id, content, position, BulletDirection.Straight); QueueGameObjectForCreation(new BlimpShotgun(NextID(), content, position, BulletDirection.Left)); QueueGameObjectForCreation(new BlimpShotgun(NextID(), content, position, BulletDirection.Right)); QueueGameObjectForCreation(new BlimpShotgun(NextID(), content, position, BulletDirection.HardLeft)); QueueGameObjectForCreation(new BlimpShotgun(NextID(), content, position, BulletDirection.HardRight)); break; case ProjectileType.Meteor: projectile = new Meteor(id, content, position); break; case ProjectileType.BigMeteor: projectile = new BigMeteor(id, content, position); break; case ProjectileType.EnemyFlameball: projectile = new EnemyFlameball(id, content, position); break; case ProjectileType.RGSabot: projectile = new RGSabot(id, content, position); break; case ProjectileType.BlimpBullet: projectile = new BlimpBullet(id, content, position); break; case ProjectileType.BirdWrath: projectile = new BirdWrath(id, content, position); break; case ProjectileType.FreezewaveProjectile: projectile = new FreezewaveProjectile(id, content, position); break; case ProjectileType.Photon: projectile = new Photon(id, content, position); break; case ProjectileType.Pincher: projectile = new Pincher(id, content, position); break; case ProjectileType.GreenOrb: projectile = new GreenOrb(id, content, position); break; case ProjectileType.AlienTurretOrb: projectile = new AlienTurretOrb(id, content, position); break; case ProjectileType.TwinJetMissile: projectile = new Boss_TwinJetMissile(id, content, position); break; case ProjectileType.TwinJetBullet: projectile = new Boss_TwinJetBullet(id, content, position); break; case ProjectileType.HomingMissile: projectile = new HomingMissileProjectile(content, position, 1, id); break; case ProjectileType.EnemyPsyBall: projectile = new EnemyPsiBall(id, content, position); break; case ProjectileType.EnemyLightningZap: projectile = new EnemyLightningZap(id, content, position); break; default: throw new NotImplementedException("The projectile type " + Enum.GetName(typeof(ProjectileType), projectileType) + " is not supported"); } if ((int)projectileType < 100) projectile.ObjectType = ObjectType.PlayerProjectile; else projectile.ObjectType = ObjectType.EnemyProjectile; QueueGameObjectForCreation(projectile); return projectile; }
/// <summary> /// Factory method for spawning a projectile /// </summary> /// <param name="projectileType">The type of projectile to create</param> /// <param name="position">The position of the projectile in the game world</param> /// <returns>The game object id of the projectile</returns> public Projectile CreateProjectile(ProjectileType projectileType, Vector2 position, Vector2 velocity) { Projectile projectile = null; uint id = NextID(); switch (projectileType) { case ProjectileType.Bullet: projectile = new Bullet(id, content, position); break; case ProjectileType.Fireball: projectile = new Fireball(id, content, position); break; case ProjectileType.BubbleBullet: projectile = new BubbleBullet(id, content, position); break; case ProjectileType.Bomb: projectile = new Bomb(id, content, position, true); break; case ProjectileType.Blades: projectile = new Blades(id, content); break; case ProjectileType.DroneLaser: projectile = new DroneLaser(id, content, position); break; case ProjectileType.ToPlayerBullet: projectile = new ToPlayerBullet(id, content, position); break; case ProjectileType.ArrowProjectile: projectile = new ArrowProjectile(id, content, position); break; case ProjectileType.BirdCrap: projectile = new BirdCrap(id, content, position); break; case ProjectileType.EBullet: projectile = new EBullet(id, content, position); break; case ProjectileType.Frostball: projectile = new Frostball(id, content, position); break; case ProjectileType.BlueBeam: projectile = new blueBeam(id, content, position); break; //This method doesn't fit the trishield very well, so this code is a bit poor in quality. case ProjectileType.TrishieldBall: for (int i = 0; i < 2; i++) { projectile = new TriShieldBall(id, content, 2 * MathHelper.Pi / 3 * i); QueueGameObjectForCreation(projectile); id = NextID(); } projectile = new TriShieldBall(id, content, 4 * MathHelper.Pi / 3); break; case ProjectileType.GenericEnemyBullet: projectile = new GenericEnemyBullet(id, content, position); break; case ProjectileType.DroneWave: // waveIndex helps draw the wave to the left and right of the ship, while waveSpacing holds the vector difference of space between each drone. // Drone count is managed by 2*i. Vector2 waveIndex = new Vector2(-1, 1); Vector2 waveSpacing = new Vector2(40, 30); for (int i = 0; i < 5; i++) { projectile = new DroneWave(id, content, position + waveSpacing * waveIndex * i); QueueGameObjectForCreation(projectile); id = NextID(); projectile = new DroneWave(id, content, position + waveSpacing * i); QueueGameObjectForCreation(projectile); id = NextID(); } break; case ProjectileType.TurretFireball: projectile = new TurretFireball(id, content, position); break; case ProjectileType.JetMinionBullet: projectile = new JetMinionBullet(id, content, position); break; case ProjectileType.EnergyBlast: projectile = new EnergyBlast(id, content, position, ScrollingShooterGame.Game.Player.energyBlastLevel); break; case ProjectileType.EnemyBullet: // Bullet velocity float bulletVel = 200f; //ScrollingShooterGame.Game.projectiles.Add(new EnemyBullet(ScrollingShooterGame.Game.Content, this.position + offset, bulletVel * toPlayer)); Vector2 toPlayer = (new Vector2(ScrollingShooterGame.Game.Player.Bounds.Center.X, ScrollingShooterGame.Game.Player.Bounds.Center.Y) - position); toPlayer.Normalize(); projectile = new EnemyBullet(id, content, position, bulletVel * toPlayer); break; case ProjectileType.EnemyBomb: projectile = new Bomb(id, content, position, false); break; case ProjectileType.ShotgunBullet: projectile = new ShotgunBullet(id, content, position, BulletDirection.Straight); QueueGameObjectForCreation(new ShotgunBullet(NextID(), content, position, BulletDirection.Left)); QueueGameObjectForCreation(new ShotgunBullet(NextID(), content, position, BulletDirection.Right)); QueueGameObjectForCreation(new ShotgunBullet(NextID(), content, position, BulletDirection.HardLeft)); QueueGameObjectForCreation(new ShotgunBullet(NextID(), content, position, BulletDirection.HardRight)); break; case ProjectileType.BlimpShotgun: projectile = new BlimpShotgun(id, content, position, BulletDirection.Straight); QueueGameObjectForCreation(new BlimpShotgun(NextID(), content, position, BulletDirection.Left)); QueueGameObjectForCreation(new BlimpShotgun(NextID(), content, position, BulletDirection.Right)); QueueGameObjectForCreation(new BlimpShotgun(NextID(), content, position, BulletDirection.HardLeft)); QueueGameObjectForCreation(new BlimpShotgun(NextID(), content, position, BulletDirection.HardRight)); break; case ProjectileType.Meteor: projectile = new Meteor(id, content, position); break; case ProjectileType.BigMeteor: projectile = new BigMeteor(id, content, position); break; case ProjectileType.EnemyFlameball: projectile = new EnemyFlameball(id, content, position); break; case ProjectileType.RGSabot: projectile = new RGSabot(id, content, position); break; case ProjectileType.BlimpBullet: projectile = new BlimpBullet(id, content, position); break; case ProjectileType.BirdWrath: projectile = new BirdWrath(id, content, position); break; case ProjectileType.FreezewaveProjectile: projectile = new FreezewaveProjectile(id, content, position); break; case ProjectileType.Photon: projectile = new Photon(id, content, position); break; case ProjectileType.Pincher: projectile = new Pincher(id, content, position); break; case ProjectileType.GreenOrb: projectile = new GreenOrb(id, content, position); break; case ProjectileType.AlienTurretOrb: projectile = new AlienTurretOrb(id, content, position); break; case ProjectileType.TwinJetMissile: projectile = new Boss_TwinJetMissile(id, content, position); break; case ProjectileType.TwinJetBullet: projectile = new Boss_TwinJetBullet(id, content, position); break; case ProjectileType.HomingMissile: projectile = new HomingMissileProjectile(content, position, 1, id); break; case ProjectileType.EnemyPsyBall: projectile = new EnemyPsiBall(id, content, position); break; case ProjectileType.EnemyLightningZap: projectile = new EnemyLightningZap(id, content, position); break; default: throw new NotImplementedException("The projectile type " + Enum.GetName(typeof(ProjectileType), projectileType) + " is not supported"); } if ((int)projectileType < 100) { projectile.ObjectType = ObjectType.PlayerProjectile; } else { projectile.ObjectType = ObjectType.EnemyProjectile; } QueueGameObjectForCreation(projectile); return(projectile); }