Пример #1
0
 /// <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;
     }
 }
Пример #2
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;
        }
Пример #3
0
        /// <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);
            }
        }
Пример #4
0
        /// <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();
        }
Пример #5
0
 /// <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();
     }
 }
Пример #6
0
 /// <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;
     }
 }
Пример #7
0
 /// <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;
     }
 }
Пример #8
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;
     }
 }
Пример #9
0
 public void TransitToSpawningState()
 {
     ShowArcanian();
     mCurrentState = ArcanianState.ArcanianSpawning;
     mHealth = kHealth;
 }
Пример #10
0
 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;
 }
Пример #11
0
 public void EnterFallingState()
 {
     mCurrentState = ArcanianState.ArcanianFalling;
 }