/// <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;
        }
示例#2
0
        /// <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);
        }