Esempio n. 1
0
        /// <summary>
        /// Updates the LaserDrone
        /// </summary>
        /// <param name="elapsedTime">The in-game time between the previous and current frame</param>
        public override void Update(float elapsedTime)
        {
            // Sense the Player's position
            PlayerShip Player         = ScrollingShooterGame.Game.Player;
            Vector2    PlayerPosition = new Vector2(Player.Bounds.Center.X, Player.Bounds.Center.Y);

            switch (aiState)
            {
            case AIState.Chasing:
                getInPosition(PlayerPosition, elapsedTime);
                if (Math.Abs(PlayerPosition.X - Bounds.Center.X) < 40 && Bounds.Center.Y < PlayerPosition.Y)
                {
                    //transition to firing state
                    fireTimeRemaining = FIRE_TIME;
                    aiState           = AIState.Firing;
                    currentSpeed      = MAX_MOVE_SPEED * 0.66f;
                    if (droneLaser == null)
                    {
                        droneLaser = (DroneLaser)ScrollingShooterGame.GameObjectManager.CreateProjectile(ProjectileType.DroneLaser, Vector2.Zero);
                    }
                    droneLaser.isOn       = true;
                    droneLaser.laserPower = WeaponChargeLevel.Full;
                    droneLaser.updatePosition(position.X + 23, position.Y + 30);
                }
                break;

            case AIState.Firing:
                fireTimeRemaining -= elapsedTime;

                //change to medium charge sprite when halfway depleted
                if (weaponChargeLevel == WeaponChargeLevel.Full && fireTimeRemaining / FIRE_TIME < 0.66)
                {
                    weaponChargeLevel = droneLaser.laserPower = WeaponChargeLevel.Medium;
                }
                else if (weaponChargeLevel == WeaponChargeLevel.Medium && fireTimeRemaining / FIRE_TIME < 0.33)
                {
                    weaponChargeLevel = droneLaser.laserPower = WeaponChargeLevel.Low;
                }

                if (fireTimeRemaining <= 0)
                {
                    //transition to recharging state
                    aiState               = AIState.Recharging;
                    currentSpeed          = MAX_MOVE_SPEED * 0.33f;
                    rechargeTimeRemaining = RECHARGE_TIME;
                    weaponChargeLevel     = WeaponChargeLevel.Low;
                    droneLaser.isOn       = false;
                }

                getInPosition(PlayerPosition, elapsedTime);
                droneLaser.updatePosition(position.X + 23, position.Y + 30);

                break;

            case AIState.Recharging:
                rechargeTimeRemaining -= elapsedTime;

                if (weaponChargeLevel == WeaponChargeLevel.Low && rechargeTimeRemaining / RECHARGE_TIME < 0.66)
                {
                    weaponChargeLevel = WeaponChargeLevel.Medium;
                }
                if (weaponChargeLevel == WeaponChargeLevel.Medium && rechargeTimeRemaining / RECHARGE_TIME < 0.33)
                {
                    weaponChargeLevel = WeaponChargeLevel.Full;
                }

                if (rechargeTimeRemaining <= 0)
                {
                    aiState           = AIState.Chasing;
                    currentSpeed      = MAX_MOVE_SPEED;
                    weaponChargeLevel = WeaponChargeLevel.Full;
                }

                moveAwayFrom(PlayerPosition, elapsedTime);

                break;
            }
        }
Esempio n. 2
0
        /// <summary>
        /// Updates the Dart ship
        /// </summary>
        /// <param name="elapsedTime">The in-game time between the previous and current frame</param>
        public override void Update(float elapsedTime)
        {
            switch (BES)
            {
            case birdEntranceState.flyOver:
                this.position.Y -= elapsedTime * 500;

                if (position.Y <= 3892)     // -200
                {
                    BES = birdEntranceState.enter;
                }
                break;

            case birdEntranceState.enter:
                this.position.Y += elapsedTime * 100;
                if (position.Y >= 0)
                {
                    BES = birdEntranceState.normal;
                }
                ScrollingShooterGame.LevelManager.Scrolling = false;
                break;

            case birdEntranceState.normal:
                fireTimer  += elapsedTime;
                laserTimer += elapsedTime;

                float velocity = 1;
                // Sense the player's position
                PlayerShip player         = ScrollingShooterGame.Game.Player;
                Vector2    playerPosition = new Vector2(player.Bounds.Center.X, player.Bounds.Center.Y);


                if (playerPosition.X - Bounds.Center.X < -20)
                {
                    this.position.X -= elapsedTime * 40 * velocity;
                }
                else
                {
                    if (playerPosition.X - Bounds.Center.X > 20)
                    {
                        this.position.X += elapsedTime * 40 * velocity;
                    }
                    else
                    {
                        if (fireTimer > 0.6f)
                        {
                            ScrollingShooterGame.GameObjectManager.CreateProjectile(ProjectileType.BirdWrath, position + beakPosition);
                            fireTimer = 0f;
                        }
                    }
                }

                if (fireTimer > 1.5f)
                {
                    ScrollingShooterGame.GameObjectManager.CreateProjectile(ProjectileType.BirdWrath, position + beakPosition);
                    fireTimer = 0f;
                }

                //Firein Mah Lazars!!
                switch (laserState)
                {
                case LaserState.off:
                    if (laserTimer > 3f)
                    {
                        laserState     = LaserState.turningOn;
                        laserAnimState = 0;
                    }
                    break;

                case LaserState.turningOn:
                    laserAnimState++;
                    if (laserAnimState == NUMBER_OF_ANIM_STATES_LASER - 1)
                    {
                        laserState = LaserState.on;
                        laserTimer = 0f;
                    }
                    break;

                case LaserState.on:
                    LeftLaser.isOn  = true;
                    RightLaser.isOn = true;
                    LeftLaser.updatePosition(position.X + LeftLaserPosition.X, position.Y + LeftLaserPosition.Y);
                    RightLaser.updatePosition(position.X + RightLaserPosition.X, position.Y + RightLaserPosition.Y);
                    if (laserTimer > 3f)
                    {
                        LeftLaser.isOn  = false;
                        RightLaser.isOn = false;
                        laserState      = LaserState.turningOff;
                    }
                    break;

                case LaserState.turningOff:
                    laserAnimState--;
                    if (laserAnimState == 0)
                    {
                        laserState = LaserState.off;
                        laserTimer = 0f;
                    }
                    break;
                }
                break;

            case birdEntranceState.exit:
                this.position.Y += elapsedTime * 500;
                ScrollingShooterGame.LevelManager.Scrolling = true;
                break;
            }
        }