/// <summary>
        /// Update function for Warming up: Transition state
        /// </summary>
        private void UpdateTransitionState()
        {
            SpinTheArrow();

            if (mSpinRate < kMaxSpinRate)
            {
                mSpinRate += kDeltaSpin;
            }
            else
            {
                // Transition to Spin state
                mArrowState = SpinningArrowState.ArrowSpinning;
            }
        }
        /// <summary>
        /// Update function to track the hero. If hero gets too far, transit back to
        /// "warm-up" state.
        /// </summary>
        /// <param name="toHero">vector point to the hero.</param>
        private void UpdatePointToHero(Vector2 toHero)
        {
            float dist = toHero.Length();

            if (dist < kHeroTriggerDistance)
            {
                FrontDirection = toHero;
            }
            else
            {
                // Go back to TransitionState for spinning up the arrow
                mArrowState = SpinningArrowState.ArrowTransition;
            }
        }
        /// <summary>
        /// Update function for steady state spinning, capable of detecting the hero
        /// </summary>
        /// <param name="hero">if hero gets too close, hero will be tracked</param>
        private void UpdateSpinningState(TexturedPrimitive hero)
        {
            SpinTheArrow();

            // Check for hero ...
            Vector2 toHero = hero.Position - Position;

            if (toHero.Length() < kHeroTriggerDistance)
            {
                // Transition to PointsToHeroState
                mSpinRate   = 0f;
                mArrowState = SpinningArrowState.ArrowPointsToHero;
            }
        }
        /// <summary>
        /// Update function for Warming up: Transition state
        /// </summary>
        private void UpdateTransitionState()
        {
            SpinTheArrow();

            if (mSpinRate < kMaxSpinRate)
            {
                mSpinRate += kDeltaSpin;
            }
            else
            {
                // Transition to Spin state
                mArrowState = SpinningArrowState.ArrowSpinning;
                mImage      = Game1.sContent.Load <Texture2D>("RightArrow");
            }
        }
        /// <summary>
        /// Update function to track the hero. If hero gets too far, transit back to
        /// "warm-up" state.
        /// </summary>
        /// <param name="toHero">vector point to the hero.</param>
        private void UpdatePointToHero(Vector2 toHero)
        {
            float dist = toHero.Length();

            if (dist < kHeroTriggerDistance)
            {
                FrontDirection = toHero;
            }
            else
            {
                // Go back to TransitionState for spinning up the arrow
                mArrowState = SpinningArrowState.ArrowTransition;
                mImage      = Game1.sContent.Load <Texture2D>("TransientArrow");
            }
        }