public override void OnExitAbility()
        {
            if (m_ClimbIK != null)
            {
                m_ClimbIK.OnHang = false;
            }

            if (m_HasJumpFromLedge && m_ClimbJumpType != ClimbJumpType.Drop)
            {
                if (m_ClimbJumpType == ClimbJumpType.Up)
                {
                    m_ClimbJump.StartHopUp(GrabPosition, transform.position + transform.forward * characterOffset.z +
                                           Vector3.up * m_VerticalLinecastStartPoint, UseLaunchMath);
                }
                else
                {
                    m_ClimbJump.StartClimbJump(m_ClimbJumpType, m_JumpDirection, GrabPosition, m_VerticalLinecastStartPoint,
                                               UseLaunchMath, CurrentLedgeTransform.GetComponent <Collider>());
                }
            }

            m_FinishOnAnimationEnd = false;
            m_SideAdjustment       = false;
            m_JumpDirection        = Vector3.zero;
            m_ClimbJumpType        = ClimbJumpType.Back;

            m_System.UpdatePositionOnMovableObject(null);

            base.OnExitAbility();
        }
예제 #2
0
        public override void OnExitAbility()
        {
            base.OnExitAbility();
            m_System.m_Rigidbody.useGravity = true;
            m_System.m_Capsule.enabled      = true;

            m_LastLadderCollider = m_CurrentLadderCollider;

            switch (m_JumpDirection)
            {
            case ClimbJumpType.Up:
                m_ClimbJump.StartHopUp(GrabPosition - Vector3.up * m_System.m_Capsule.radius, GrabPosition + transform.forward * m_OffsetFromLadder, m_UseLaunchMath);
                m_LastLadderCollider = null;
                break;

            case ClimbJumpType.Right:
                m_ClimbJump.StartClimbJump(m_JumpDirection, transform.right, GrabPosition, m_System.m_Capsule.height, m_UseLaunchMath);
                break;

            case ClimbJumpType.Left:
                m_ClimbJump.StartClimbJump(m_JumpDirection, -transform.right, GrabPosition, m_System.m_Capsule.height, m_UseLaunchMath);
                break;

            case ClimbJumpType.Back:
                break;

            case ClimbJumpType.Drop:
                break;

            case ClimbJumpType.Noone:
                break;

            default:
                break;
            }
        }
예제 #3
0
        public override void FixedUpdateAbility()
        {
            base.FixedUpdateAbility();

            // Set Position
            if (m_System.IsCoroutinePlaying)
            {
                transform.position = Vector3.MoveTowards(transform.position, targetPosition, step * Time.deltaTime);
                transform.rotation = Quaternion.Lerp(transform.rotation, targetRotation, 0.2f);

                if (Vector3.Distance(transform.position, targetPosition) < 0.05f)
                {
                    m_System.IsCoroutinePlaying = false;
                }
                return;
            }

            float verticalInput = 0;

            if (m_InputManager.Move.y > 0.2f)
            {
                verticalInput = 1;
            }
            if (m_InputManager.Move.y < -0.2f)
            {
                verticalInput = -1;
            }

            if (Mathf.Approximately(verticalInput, 0))
            {
                if (Mathf.Abs(m_AnimatorManager.GetNormalizedTime(0, true) - m_NormalizedTimeToStop) > 0.1f &&
                    Mathf.Abs(m_AnimatorManager.GetNormalizedTime(0, true)) > 0.05f)
                {
                    verticalInput = m_AnimatorManager.GetAnimationMultiplierParameter();
                }
            }

            RaycastHit bottom, top;

            if (FoundWall(out bottom, out top))
            {
                SetCharacterPosition(bottom, true);         // Set character position on wall
                CurrentCollider = bottom.collider;
            }
            else
            {
                if (top.collider == null && verticalInput > 0)
                {
                    if (FreeAbove())
                    {
                        // Climb up
                        SetState(m_ClimbUpState);
                        m_System.m_Capsule.enabled = false;
                        return;
                    }

                    verticalInput = 0;

                    // Hop Up
                    if (m_InputManager.jumpButton.WasPressed)
                    {
                        m_ClimbJump.StartHopUp(GrabPosition, GrabPosition, true);
                    }
                }

                // Stop Movement
                if (bottom.collider == null && verticalInput < 0)
                {
                    verticalInput = 0;
                }
            }

            m_AnimatorManager.SetAnimationMultiplierParameter(verticalInput, 0);


            if (verticalInput == 0)
            {
                if (m_InputManager.jumpButton.WasPressed)
                {
                    if (m_InputManager.Move.x > 0.2f)
                    {
                        m_ClimbJump.StartClimbJump(ClimbJumpType.Right, transform.right, GrabPosition, m_System.CapsuleOriginalHeight, true);
                    }
                    if (m_InputManager.Move.x < -0.2f)
                    {
                        m_ClimbJump.StartClimbJump(ClimbJumpType.Left, -transform.right, GrabPosition, m_System.CapsuleOriginalHeight, true);
                    }
                }
            }
        }