public override void reset()
 {
     location   = Global.randomTableSpot();
     velocity.X = (float)Global.rand.NextDouble() * .01f;
     velocity.Y = (float)Global.rand.NextDouble() * .01f;
     BounceOnWalls();
     changeState(STATE_ACTIVE);
 }
Exemple #2
0
        public override void reset()
        {
            changeState(STATE_POCKETED);
            while (state == STATE_POCKETED)
            {
                location   = Global.randomTableSpot();
                velocity.X = (float)Global.rand.NextDouble() * .01f;
                velocity.Y = (float)Global.rand.NextDouble() * .01f;
                BounceOnTableWalls();
                changeState(BilliardBall.STATE_ACTIVE);
            }
            oldLocation = location;
            oldVelocity = velocity;

            if (!first)
            {
                SoundEffectInstance plop = Global.PlopSound.CreateInstance();
                plop.Volume = 0.1f;
                float newVol = plop.Volume;
                if (newVol > 1)
                {
                    newVol = 1;
                }
                plop.Volume = newVol;
                plop.Play();
            }
            first = false;
            switch (type)
            {
            case TYPE_TEST_5:
            case TYPE_CUE:
                break;

            case TYPE_SOLID:
                Global.pocketedSolids--;
                break;

            case TYPE_STRIPE:
                Global.pocketedStripes--;
                break;

            case TYPE_8:
                break;
            }
        }
        public override void Update(GameTime gameTime)
        {
            scale = parent.scale;
            base.Update(gameTime);

            switch (state)
            {
            case STATE_KILL:
                changeState(STATE_DEATH);
                break;

            case STATE_DEATH:
                changeState(STATE_INACTIVE);
                break;

            case STATE_INACTIVE:
                break;

            case STATE_ACTIVE:
                changeState(STATE_READY0);
                break;

            case STATE_RUN:
                #region RUN
                GuideWithKeyboard();
                if (autoMode)
                {
                    if (Global.probabilityPerSecond(.5))
                    {
                        parent.velocity = Vector2.Zero;
                        changeState(STATE_AIM0);
                        break;
                    }

                    if (Global.probabilityPerSecond(.01))
                    {
                        changeState(STATE_READY0);
                    }
                }
                else
                {
                    if (Global.mouseState.LeftButton == ButtonState.Pressed)
                    {
                        parent.velocity = Vector2.Zero;
                        changeState(STATE_AIM0);
                        break;
                    }
                }
                switch (facingDirection)
                {
                case DIRECTION_N:
                    animation = Global.Avatar_Run_N;
                    break;

                case DIRECTION_E:
                    animation = Global.Avatar_Run_E;
                    break;

                case DIRECTION_S:
                    animation = Global.Avatar_Run_S;
                    break;

                case DIRECTION_W:
                    animation = Global.Avatar_Run_W;
                    break;

                case DIRECTION_NE:
                    animation = Global.Avatar_Run_NE;
                    break;

                case DIRECTION_SE:
                    animation = Global.Avatar_Run_SE;
                    break;

                case DIRECTION_NW:
                    animation = Global.Avatar_Run_NW;
                    break;

                case DIRECTION_SW:
                    animation = Global.Avatar_Run_SW;
                    break;
                }
                #endregion
                break;

            case STATE_READY0:
                #region READY
                GuideWithKeyboard();
                if (Global.mouseState.LeftButton == ButtonState.Pressed)
                {
                    parent.velocity = Vector2.Zero;
                    changeState(STATE_AIM0);
                    break;
                }

                if (Global.keyboardState.IsKeyDown(Keys.E))
                {
                    changeState(STATE_READY1);
                    parent.location = Global.randomTableSpot();
                    break;
                }
                switch (facingDirection)
                {
                case DIRECTION_N:
                    animation = Global.Avatar_Ready_N;
                    break;

                case DIRECTION_E:
                    animation = Global.Avatar_Ready_E;
                    break;

                case DIRECTION_S:
                    animation = Global.Avatar_Ready_S;
                    break;

                case DIRECTION_W:
                    animation = Global.Avatar_Ready_W;
                    break;

                case DIRECTION_NE:
                    animation = Global.Avatar_Ready_NE;
                    break;

                case DIRECTION_SE:
                    animation = Global.Avatar_Ready_SE;
                    break;

                case DIRECTION_NW:
                    animation = Global.Avatar_Ready_NW;
                    break;

                case DIRECTION_SW:
                    animation = Global.Avatar_Ready_SW;
                    break;
                }
                #endregion
                break;

            case STATE_READY1:
                #region READY
                GuideWithKeyboard();
                if (autoMode)
                {
                    if (Global.probabilityPerSecond(5))
                    {
                        parent.velocity = Vector2.Zero;
                        changeState(STATE_AIM0);
                        break;
                    }

                    if (Global.probabilityPerSecond(.01))
                    {
                        changeState(STATE_READY0);
                    }
                }
                else
                {
                    if (Global.mouseState.LeftButton == ButtonState.Pressed)
                    {
                        parent.velocity = Vector2.Zero;
                        changeState(STATE_AIM0);
                        break;
                    }

                    if (Global.keyboardState.IsKeyUp(Keys.E))
                    {
                        changeState(STATE_READY0);
                    }
                }
                switch (facingDirection)
                {
                case DIRECTION_N:
                    animation = Global.Avatar_Ready_N;
                    break;

                case DIRECTION_E:
                    animation = Global.Avatar_Ready_E;
                    break;

                case DIRECTION_S:
                    animation = Global.Avatar_Ready_S;
                    break;

                case DIRECTION_W:
                    animation = Global.Avatar_Ready_W;
                    break;

                case DIRECTION_NE:
                    animation = Global.Avatar_Ready_NE;
                    break;

                case DIRECTION_SE:
                    animation = Global.Avatar_Ready_SE;
                    break;

                case DIRECTION_NW:
                    animation = Global.Avatar_Ready_NW;
                    break;

                case DIRECTION_SW:
                    animation = Global.Avatar_Ready_SW;
                    break;
                }
                #endregion
                break;

            case STATE_AIM0:
                #region AIM0
                if (parent.hit)
                {
                    parent.hit = false;
                    changeState(STATE_CANCEL);
                    break;
                }
                if (Global.mouseState.RightButton == ButtonState.Pressed)
                {
                    changeState(STATE_CANCEL);
                    break;
                }

                //call parent.getBullet() to add to parent list and subsequently make it a collidable
                curBullet = Global.currentGame.bulletPool.getBullet();
                if (curBullet != null)
                {
                    curBullet.color = Color.LightCyan;
                    curBullet.changeState(Bullet.STATE_CHARGING);
                    curBullet.parent   = this.parent;
                    curBullet.location = new Vector2(50000, 50000);     //so it doesnt run into the player
                }
                else
                {
                    //out of ammo
                    changeState(STATE_CANCEL);
                    break;
                }
                AimWithMouse();
                switch (facingDirection)
                {
                case DIRECTION_N:
                    animation = Global.Avatar_Aim_N;
                    break;

                case DIRECTION_E:
                    animation = Global.Avatar_Aim_E;
                    break;

                case DIRECTION_S:
                    animation = Global.Avatar_Aim_S;
                    break;

                case DIRECTION_W:
                    animation = Global.Avatar_Aim_W;
                    break;

                case DIRECTION_NE:
                    animation = Global.Avatar_Aim_NE;
                    break;

                case DIRECTION_SE:
                    animation = Global.Avatar_Aim_SE;
                    break;

                case DIRECTION_NW:
                    animation = Global.Avatar_Aim_NW;
                    break;

                case DIRECTION_SW:
                    animation = Global.Avatar_Aim_SW;
                    break;
                }
                Global.currentGame.AimStick.state    = ScreenObject.STATE_ACTIVE;
                Global.currentGame.AimStick.location = parent.location;
                animation.Stop();
                animation.Play();
                ChargeSound.Play();
                changeState(STATE_AIM1);
                #endregion
                break;

            case STATE_AIM1:
                #region AIM1
                if (parent.hit)
                {
                    parent.hit = false;
                    changeState(STATE_CANCEL);
                    break;
                }
                if (Global.mouseState.RightButton == ButtonState.Pressed || curBullet.state == ScreenObject.STATE_INACTIVE)
                {
                    changeState(STATE_CANCEL);
                    break;
                }

                if (ChargeSound.State == SoundState.Stopped && ChargeLoopSound.State == SoundState.Stopped)
                {
                    ChargeLoopSound.Play();
                }

                AimWithMouse();
                if (animation.CurrentFrame >= animation.FrameCount - 1)
                {
                    changeState(STATE_HOLD0);
                    break;
                }
                if (Global.mouseState.LeftButton == ButtonState.Released)
                {
                    changeState(STATE_AIM2);
                    break;
                }
                #endregion
                break;

            case STATE_AIM2:
                #region AIM2
                if (parent.hit)
                {
                    parent.hit = false;
                    changeState(STATE_CANCEL);
                    break;
                }
                if (Global.mouseState.RightButton == ButtonState.Pressed || curBullet.state == ScreenObject.STATE_INACTIVE)
                {
                    changeState(STATE_CANCEL);
                    break;
                }

                if (ChargeSound.State == SoundState.Stopped && ChargeLoopSound.State == SoundState.Stopped)
                {
                    ChargeLoopSound.Play();
                }

                AimWithMouse();
                if (animation.CurrentFrame >= animation.FrameCount - 1)
                {
                    changeState(STATE_HOLD0);
                    break;
                }

                if (autoMode)
                {
                    if (Global.probabilityPerSecond(.3))
                    {
                        changeState(STATE_FIRE0);
                        break;
                    }
                }
                else
                {
                    if (Global.mouseState.LeftButton == ButtonState.Pressed)
                    {
                        changeState(STATE_FIRE0);
                        break;
                    }
                }
                #endregion
                break;

            case STATE_HOLD0:
                #region HOLD0
                if (parent.hit)
                {
                    parent.hit = false;
                    changeState(STATE_CANCEL);
                    break;
                }
                if (Global.mouseState.RightButton == ButtonState.Pressed || curBullet.state == ScreenObject.STATE_INACTIVE)
                {
                    changeState(STATE_CANCEL);
                    break;
                }

                if (ChargeSound.State == SoundState.Stopped && ChargeLoopSound.State == SoundState.Stopped)
                {
                    ChargeLoopSound.Play();
                }

                AimWithMouse();
                switch (facingDirection)
                {
                case DIRECTION_N:
                    animation = Global.Avatar_Hold_N;
                    break;

                case DIRECTION_E:
                    animation = Global.Avatar_Hold_E;
                    break;

                case DIRECTION_S:
                    animation = Global.Avatar_Hold_S;
                    break;

                case DIRECTION_W:
                    animation = Global.Avatar_Hold_W;
                    break;

                case DIRECTION_NE:
                    animation = Global.Avatar_Hold_NE;
                    break;

                case DIRECTION_SE:
                    animation = Global.Avatar_Hold_SE;
                    break;

                case DIRECTION_NW:
                    animation = Global.Avatar_Hold_NW;
                    break;

                case DIRECTION_SW:
                    animation = Global.Avatar_Hold_SW;
                    break;
                }

                if (Global.mouseState.LeftButton == ButtonState.Released)
                {
                    changeState(STATE_HOLD1);
                    break;
                }
                #endregion
                break;

            case STATE_HOLD1:
                #region HOLD1
                if (parent.hit)
                {
                    parent.hit = false;
                    changeState(STATE_CANCEL);
                    break;
                }
                if (Global.mouseState.RightButton == ButtonState.Pressed || curBullet.state == ScreenObject.STATE_INACTIVE)
                {
                    changeState(STATE_CANCEL);
                    break;
                }

                if (ChargeSound.State == SoundState.Stopped && ChargeLoopSound.State == SoundState.Stopped)
                {
                    ChargeLoopSound.Play();
                }

                AimWithMouse();
                switch (facingDirection)
                {
                case DIRECTION_N:
                    animation = Global.Avatar_Hold_N;
                    break;

                case DIRECTION_E:
                    animation = Global.Avatar_Hold_E;
                    break;

                case DIRECTION_S:
                    animation = Global.Avatar_Hold_S;
                    break;

                case DIRECTION_W:
                    animation = Global.Avatar_Hold_W;
                    break;

                case DIRECTION_NE:
                    animation = Global.Avatar_Hold_NE;
                    break;

                case DIRECTION_SE:
                    animation = Global.Avatar_Hold_SE;
                    break;

                case DIRECTION_NW:
                    animation = Global.Avatar_Hold_NW;
                    break;

                case DIRECTION_SW:
                    animation = Global.Avatar_Hold_SW;
                    break;
                }

                if (autoMode)
                {
                    if (Global.probabilityPerSecond(1))
                    {
                        changeState(STATE_FIRE0);
                        break;
                    }
                }
                else
                {
                    if (Global.mouseState.LeftButton == ButtonState.Pressed)
                    {
                        changeState(STATE_FIRE0);
                        break;
                    }
                }
                #endregion
                break;

            case STATE_FIRE0:
                #region FIRE0
                AimWithMouse();
                Global.currentGame.AimStick.state = ScreenObject.STATE_INACTIVE;
                ChargeLoopSound.Stop();
                ChargeSound.Stop();
                Global.FireGunSound.Play();
                curBullet.state = Bullet.STATE_FIRING;

                switch (facingDirection)
                {
                case DIRECTION_N:
                    animation = Global.Avatar_Fire_N;
                    break;

                case DIRECTION_E:
                    animation = Global.Avatar_Fire_E;
                    break;

                case DIRECTION_S:
                    animation = Global.Avatar_Fire_S;
                    break;

                case DIRECTION_W:
                    animation = Global.Avatar_Fire_W;
                    break;

                case DIRECTION_NE:
                    animation = Global.Avatar_Fire_NE;
                    break;

                case DIRECTION_SE:
                    animation = Global.Avatar_Fire_SE;
                    break;

                case DIRECTION_NW:
                    animation = Global.Avatar_Fire_NW;
                    break;

                case DIRECTION_SW:
                    animation = Global.Avatar_Fire_SW;
                    break;
                }

                animation.Stop();
                animation.Play();
                changeState(STATE_FIRE1);
                #endregion
                break;

            case STATE_FIRE1:
                #region FIRE1
                if (animation.CurrentFrame >= animation.FrameCount - 1)
                {
                    changeState(STATE_READY0);
                }
                #endregion
                break;

            case STATE_CANCEL:
                #region CANCEL
                Global.currentGame.AimStick.state = ScreenObject.STATE_INACTIVE;
                ChargeSound.Stop();
                ChargeLoopSound.Stop();
                if (curBullet != null)
                {
                    curBullet.state = ScreenObject.STATE_KILL;
                }
                if (Global.mouseState.RightButton == ButtonState.Released)
                {
                    changeState(STATE_READY0);
                    break;
                }
                break;
                #endregion
            }
        }