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); }
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 } }