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(); }
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; } }
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); } } } }