} //stops the phase ability

        //!check to see if the player is in phase strike mode
        public bool CheckTackle()
        {
            if (StateInfo.IsName("Tackle"))
            {
                //we might have Tackled during a jump so stop the jump animation
                if (PlayerJumpState == JumpingState.IsJumping)
                {
                    StopJump();
                }

                if (hit == true && StateInfo.normalizedTime > .30f)
                {
                    X8Animator.SetBool("Tackle", false);
                }



                if (StateInfo.normalizedTime > .65)
                {
                    if (hit == true)
                    {
                        hit = false; //reset the hit
                    }
                }
                if (StateInfo.normalizedTime > .01f && StateInfo.normalizedTime < .65 && X8Animator.GetBool("Tackle") == true)
                {//&& StateInfo.normalizedTime < .65 )
                    FaceMe(p_fCameraAngleTheta);
                    // Debug.Log("hit  is" + hit.ToString());

                    //player is in tackle mode
                    //the Direction of attack is the same as the direction of fire without the vertical direction
                    Vector3 TackleDirection = Vector3.zero;

                    if (hit == false)
                    {
                        if (EnemyAI == null) //if this is a real player an not an Enemy AI
                        {
                            TackleDirection = Controls.ShootDirection.normalized * .45f;
                        }
                        else
                        {
                            //with enemy AI the vector will be from the enemy to the player
                            TackleDirection = (EnemyAI.Player.position - this.transform.position).normalized * .45f;
                        }
                    }
                    //zero out the y direction because the we dont want any vertical movement

                    TackleDirection.y = 0;
                    //add the tackle vector the player position
                    PlayerTackleState = TackleState.IsTackling;
                    //  Debug.Log("Tackle:  " + TackleDirection.normalized.ToString());
                    if (StateInfo.normalizedTime > .30f && StateInfo.normalizedTime < .65f)
                    {
                        this.transform.position += (TackleDirection.normalized * .55f);
                    }

                    return(true);
                }
                else
                {
                    PlayerTackleState = TackleState.IsNotTackling; //player is no longer in tackle mode
                    if (StateInfo.normalizedTime > .99f)
                    {
                        X8Animator.SetBool("Tackle", false);
                    }

                    return(false);
                }
            }


            return(false);
        }
 //!checks to see if the player is tackling
 void StopTackle()
 {
     X8Animator.SetBool("Tackle", false);
     PlayerTackleState = TackleState.IsNotTackling;
 }
        public X8Timer ShootTimer = new X8Timer(.5f);          //this will time how longer the player faces the recticle
        void Start()
        {
            innerShield = gameObject.GetComponentInChildren <RaydraShield>(); //!search for the sheild in the children of the parent object

            _myCamera = this.GetComponentInChildren <Camera>();               //get the camera that is connected to this game object
            bool ScoreMode = false;                                           //initally we are not in score mode

            //!the player info that unity will keep tract of
            p_fCameraAngleTheta        = 43f;                              //!initialize the angle that player if facing
            p_fCameraAnglePhi          = 45f;                              //!The camera is initially yyyyin this state
            p_fPlayerToFocusAngleTheta = 43f;                              //!initialize the angle that player if facing
            p_fPlayerToFocusAnglePhi   = 45f;                              //!//!initialize the angle that player if facing in the upward direction
            p_fJumpVelocity            = .40f;                             //!initialize the upward jump force
            ForceOfGravity             = 1f / 60f;                         //!this will have a unit per second force of gravity, in the downward direction
            p_fOrientationAngle        = 90f;                              //!Angle that the player is facing in degrees
            p_v3OrientationVect        = new Vector3(0, 0, 1f);            //!Direction player is facing represented as an angle
            p_v3PlayerToFocusVect      = new Vector3(0, 0, 0);             //!The vector the represents the direction the camera if facing
            p_v3PlayerToCameraVect     = new Vector3(0, 0, 0);             //!The Vector Data the represent the player to camera direction
            PlayerMovementState        = MovingState.IsStandingStill;      //!Intially the player is not moving
            PlayerJumpState            = JumpingState.NotJumping;          //!initlialize the the player is not jumping
            PlayerTackleHitState       = TackeHitState.NoContact;          //!Initial the tackle state of the player
            PlayerTackleState          = TackleState.IsNotTackling;        //!Initial the tackle state of the player
            PlayerAttackState          = AttackMode.NotFiringAbility;      //!Initial the shoot state of the player
            PlayerRaydraState          = RaydraState.NotInRaydraMode;      //!initailly the player is not in Raydra Mode
            PlayerCameraState          = CameraPerspective.Normal;         //!initially the camera to do nothing
            PlayerPhaseState           = PhaseState.IsNotPhasing;
            PlayerBallThrowState       = BallThrowingState.NotBeingThrown; //!Initial the vertical state of the player
            PlayerBallPossessionState  = BallPossessionState.HasBall;      //!Initial the Possession State of the player                                                         //	PlayerMotionVector = new Vector3 (this.transform.position.x,.transform.position.y,playerData.transform.position.z);
            p_v3PlayerVectorDirection  = Vector3.zero;                     //! This is direction that te player is headed as a vector
            _armWeapon    = this.GetComponentInChildren <RaydraWeapon>();  //!reference to the arm weapon on the player which is null to begin with
            p_bFacePlayer = false;                                         //! variable that determines weather or not to face the player, this variable determine weather or not this medthod is recursive
            p_fMass       = 0f;                                            //!initialize the mass of the player
            p_StateTime   = 0f;                                            // Time elasped in current state
            p_Collider    = null;                                          //initialize the first collider connect to this body
            pRidgidBody   = null;


            Controls = GetComponent <RaydraControls>();
            if (CameraFocusOverHead != null)
            {
                p_v3PlayerToCameraVect = CameraFocusOverHead.transform.position - _myCamera.transform.position;
            }
            p_fCameraAnglePhi          = Vector3.Angle(new Vector3(0, 1, 0), p_v3PlayerToCameraVect);
            p_fCameraAngleTheta        = Vector3.Angle(new Vector3(1, 0, 0), p_v3PlayerToCameraVect);
            p_fPlayerToFocusAnglePhi   = Vector3.Angle(new Vector3(0, 1, 0), p_v3PlayerToFocusVect);
            p_fPlayerToFocusAngleTheta = Vector3.Angle(new Vector3(1, 0, 0), p_v3PlayerToFocusVect);
            X8Animator = GetComponent <Animator>();
            isGrounded = false;
            if (p_v3PlayerToFocusVect.z < 0)
            {
                p_fPlayerToFocusAngleTheta = 360 - p_fPlayerToFocusAngleTheta; //make sure that the angle is at the correct corridinate
            }
            if (p_v3PlayerToCameraVect.z < 0)
            {
                p_fCameraAngleTheta = 360 - p_fCameraAngleTheta; //make sure that the angle is at the correct corridinate
            }
            TheBall    = FindObjectOfType <RaydraCellz>();
            X8Animator = GetComponent <Animator>(); //get the reference to the animator

            PlayerMovementState = MovingState.IsStandingStill;

            EnemyAI = GetComponent <Ai>(); //get the ai script attached to the player (if there is one)

            if (EnemyAI != null)
            {
                Debug.Log("enemy AI" + EnemyAI.ToString());
            }
        }