/// <summary> /// Arcanian spawning state /// </summary> protected void ArcanianSpawningState(GamePadState playerController, int lives) { // Spawn at location indicated by spawn arrow if ((myInput.IsKeyCDown(null)|| playerController.Buttons.A == ButtonState.Pressed || mSpawnTimer == 10 * G.UPDATE_RATE) && lives > 0) { ShowArcanian(); SetSpawningTexture(); mHealth = kHealth; RestoreShield(); mTechnicalPoints = kMaxTechnicalPoints; //mSkill1Available = true; //mSkill2Available = true; mUltimateBar = 0; Velocity = kVelocity; mSpawnTimer = 0; mCurrentState = ArcanianState.ArcanianFalling; } else if (lives > 0) { mSpawnTimer++; CenterX += playerController.ThumbSticks.Left.X * 2; } else { CenterX = 0; } }
private void Initialize() { // Technical Points; mTechnicalPoints = kMaxTechnicalPoints; mRechargeTimer = 0; mRechargeTP = false; mWalkTimer = 0; mFiringDelay = 0; //mSkill1Available = true; //mSkill2Available = true; // Initialize name mName = "Arcanian"; // Initialize Arcanian mCurrentState = ArcanianState.ArcanianInMenu; Velocity = kVelocity; mHealth = kHealth; mFacingLeft = false; mIsBlinking = false; mBlinkTimer = 0; mNumBlink = 0; mPlayShieldRegenCue = false; // Initialize aimer mAimerBar = new XNACS1Rectangle(Center, kAimerBarWidth, kAimerBarHeight); mAimerBar.Color = Color.Transparent; mAimerBar.RotateAngle = kAimerAngle; mAimer = new XNACS1Circle(Center, kAimerRadius); mAimer.Texture = "Arcanian/aimer"; mAimer.RotateAngle = kAimerAngle; // Initialize bound mBoundMin = new XNACS1Rectangle(Center, kBoundWidth, kBoundHeight); mBoundMax = new XNACS1Rectangle(Center, kBoundWidth, kBoundHeight); mBoundMin.Texture = texBound; mBoundMax.Texture = texBound; mBoundMin.RemoveFromAutoDrawSet(); mBoundMax.RemoveFromAutoDrawSet(); // Initialize shield mShield = kShield; mShieldArt = new XNACS1Circle(Center, kShieldRadius); // Hide arcanian at menu/selection screen HideArcanian(); // Temporary til we have a minimap view mMiniMapXPosition = World.World.WorldMax.X / 2; }
/// <summary> /// Arcanian moving state. /// </summary> protected void ArcanianMovingState(GamePadState playerController) { float input = playerController.ThumbSticks.Left.X; if (input < 0.5 && input > -0.5) { input = 0; } if (mHealth <= 0) // Change to dying state when health goes below zero { mCurrentState = ArcanianState.ArcanianDying; } else if (playerController.Buttons.X == ButtonState.Pressed && mTechnicalPoints >= kJumpTP) // Check if arcanian is jumping { mTechnicalPoints -= kJumpTP; VelocityY = kJumpStrength; mCurrentState = ArcanianState.ArcanianJumping; } else if (input == 0 || mTechnicalPoints <= 0) // Change to resting state when stop moving { mCurrentState = ArcanianState.ArcanianResting; } //else if (VelocityY != prevVelocityY) // Determine if Arcanian is falling //{ // mCurrentState = ArcanianState.ArcanianFalling; //} else // Keep moving! { ArcanianMove(input); ShouldTravel = true; prevVelocityY = VelocityY; VelocityY = Gravity.CalcVeloCurrentState(VelocityY); } }
/// <summary> /// Arcanian resting state. /// </summary> protected void ArcanianRestingState(GamePadState playerController) { if (mHealth <= 0) // Check if arcanian is dying { mCurrentState = ArcanianState.ArcanianDying; } else if (playerController.Buttons.X == ButtonState.Pressed && mTechnicalPoints >= kJumpTP) // Check if arcanian is jumping { mTechnicalPoints -= kJumpTP; VelocityY = kJumpStrength; mCurrentState = ArcanianState.ArcanianJumping; } else if (VelocityY != prevVelocityY) // Checks if player is falling { mCurrentState = ArcanianState.ArcanianFalling; } else { ShouldTravel = false; VelocityY = 0; // Arcanian actions if (mTechnicalPoints > 0 && mFiringDelay <= 0) // Check if Arcanian have TP { float input = playerController.ThumbSticks.Left.X; if (input < 0.5 && input > -0.5) { input = 0; } // Checks if player is using a skill if (myInput.IsKeyCDown(PlayerIndex.One) || playerController.Buttons.A == ButtonState.Pressed) { //mCurSkill = mSkillSet.GetSkill1(); if (mTechnicalPoints >= mSkillSet.GetSkill1().GetTechnicalPointsRequired()) { mCurSkill = mSkillSet.GetSkill1(); mPower = kMinPower; mCurrentState = ArcanianState.ArcanianFiring; mRechargeTimer = 0; mRechargeTP = false; } } else if (playerController.Buttons.B == ButtonState.Pressed) { //mCurSkill = mSkillSet.GetSkill2(); if (mTechnicalPoints >= mSkillSet.GetSkill2().GetTechnicalPointsRequired()) { mCurSkill = mSkillSet.GetSkill2(); mPower = kMinPower; mCurrentState = ArcanianState.ArcanianFiring; mRechargeTimer = 0; mRechargeTP = false; } } else if (playerController.Buttons.Y == ButtonState.Pressed && mUltimateBar == kMaxUltimate) { mCurSkill = mSkillSet.GetUltimateSkill(); //mCurSkill = MakeSkill(playerController); mPower = kMinPower; mCurrentState = ArcanianState.ArcanianFiring; mRechargeTimer = 0; mRechargeTP = false; } else if (input != 0) // Checks if player is trying to move { mRechargeTimer = 0; mCurrentState = ArcanianState.ArcanianMoving; //mRechargeTP = false; } } else { mFiringDelay--; } } UpdateRechargeTimer(); }
/// <summary> /// Arcanian firing state /// </summary> protected void ArcanianFiringState(GamePadState playerController) { // Health below zero, transit to dying state if (mHealth <= 0) { mPower = 0; mCurrentState = ArcanianState.ArcanianDying; } else if (VelocityY != prevVelocityY) // Determine if Arcanian is falling { mPower = 0; mCurrentState = ArcanianState.ArcanianFalling; } else if (ReleaseFire(playerController) || mPower >= kMaxPower) // or when max power reached { mTechnicalPoints -= mCurSkill.GetTechnicalPointsRequired(); mSkillSet.useSkill(mCurSkill, mPower, mAimer.RotateAngle, mAimer.Center); //mCurSkill.FireSkill(mPower, mAimer.RotateAngle, mAimer.Center); mPower = 0; /* if (mCurSkill == mSkillSet.GetSkill1() || mTechnicalPoints < mSkillSet.GetSkill1().GetTechnicalPointsRequired()) { mSkill1Available = false; } if (mCurSkill == mSkillSet.GetSkill2() || mTechnicalPoints < mSkillSet.GetSkill2().GetTechnicalPointsRequired()) { mSkill2Available = false; } */ if (mCurSkill == mSkillSet.GetUltimateSkill()) { mUltimateBar = 0; } mAimer.Radius = kAimerRadius; mFiringDelay = G.UPDATE_RATE; mCurrentState = ArcanianState.ArcanianResting; } else { mPower++; UpdateAimerSize(); } }
/// <summary> /// Arcanian jumping state /// </summary> protected void ArcanianJumpingState(GamePadState playerController) { if (mHealth <= 0 || CenterY < World.World.WorldMin.Y - kRadius * 3) // Check if arcanian is dying { mCurrentState = ArcanianState.ArcanianDying; } else { ShouldTravel = true; VelocityY = Gravity.CalcVeloCurrentState(VelocityY); CenterY += VelocityY; VelocityX = playerController.ThumbSticks.Left.X / 2; CenterX += VelocityX; } }
/// <summary> /// Arcanian falling state. /// </summary> protected void ArcanianFallingState(GamePadState playerController) { if (mHealth <= 0 || CenterY < World.World.WorldMin.Y - kRadius * 3) // Health reaches zero or falls below world bottom { mCurrentState = ArcanianState.ArcanianDying; } else if (VelocityY == prevVelocityY || VelocityY == float.Epsilon || VelocityY == 0.0) // Reaches solid, transit to resting state { VelocityY = 0; prevVelocityY = 0; mCurrentState = ArcanianState.ArcanianResting; } else { ShouldTravel = true; prevVelocityY = VelocityY; ArcanianFall(playerController); VelocityX = 0; } }
/// <summary> /// Arcanian dying state. /// </summary> protected void ArcanianDyingState(ref int lives) { if (CenterY >= World.World.WorldMax.Y + 3f) { SetSpawningTexture(); HideArcanian(); lives--; mCurrentState = ArcanianState.ArcanianSpawning; } else { SetDyingTexture(); mAimer.RemoveFromAutoDrawSet(); mShieldArt.RemoveFromAutoDrawSet(); ShouldTravel = false; CenterY += 2.0f; VelocityX = 0; } }
public void TransitToSpawningState() { ShowArcanian(); mCurrentState = ArcanianState.ArcanianSpawning; mHealth = kHealth; }
public override bool IsOnGround(SolidRectangle incRect) { float distanceBetween = CenterY - incRect.CenterY; if (Radius + incRect.Height / 2 <= Math.Abs(distanceBetween) + ERROR_RATE && Radius + incRect.Height / 2 >= Math.Abs(distanceBetween) - ERROR_RATE) { mCurrentState = ArcanianState.ArcanianResting; return true; } else return false; }
public void EnterFallingState() { mCurrentState = ArcanianState.ArcanianFalling; }