private void ExecuteMovement()
    {
        m_isGrounded = m_characterController.isGrounded;

        if (m_moving)
        {
            this.transform.eulerAngles = new Vector3(transform.eulerAngles.x, m_camera.transform.eulerAngles.y, transform.eulerAngles.z);
        }

        if (m_isGrounded && !m_shouldSlide)
        {
            m_moveDirection[1] = 0;
        }

        if (m_isGroundedRaycast)
        {
            if (m_jumping)
            {
                m_jumping = false;
            }

            if (!m_wallJumping)
            {
                m_moveDirection = new Vector3(m_horizontalInput, m_moveDirection.y, m_verticalInput);
            }

            m_moveDirection = Vector3.ClampMagnitude(m_moveDirection, 1);

            if (Mathf.Abs(m_horizontalInput) == 1f && Mathf.Abs(m_verticalInput) == 1f)
            {
                m_moveDirection.Normalize();
            }
            m_moveDirection  = transform.TransformDirection(m_moveDirection);
            m_moveDirection *= m_speed;

            if (InputManager.Instance.AButton)
            {
                m_moveDirection.y = m_jumpSpeed;
                m_jumping         = true;
            }
        }
        else
        {
            m_moveDirection = new Vector3(m_horizontalInput, m_moveDirection.y, m_verticalInput);

            m_moveDirection    = transform.TransformDirection(m_moveDirection);
            m_moveDirection.x *= m_speed;
            m_moveDirection.z *= m_speed;
        }

        if (m_isGroundedRaycast && m_groundHitAngle > 20 && !m_jumping)
        {
            m_moveDirection[1] = -20.0f;
        }

        m_moveDirection.y -= m_gravity * Time.deltaTime;

        m_characterController.Move(m_moveDirection * Time.deltaTime);

        m_cameraScript.ExecuteMovement();

        if (!m_sliding && !m_shouldHoldOntoLedge)
        {
            m_lookDirection = m_moveDirection;
        }

        if (m_moving)
        {
            transform.rotation = Quaternion.LookRotation(new Vector3(m_lookDirection.x, 0, m_lookDirection.z) * Time.deltaTime, Vector3.up);
        }

        Quaternion tilt = Quaternion.FromToRotation(Vector3.up, m_groundHit.normal);

        if (m_shouldSlide)
        {
            transform.Translate(new Vector3(0, 0.1f, 0) - transform.forward);
        }
    }