public override void FixedUpdateAbility() { base.FixedUpdateAbility(); if (updatingPosition) { transform.position = Vector3.MoveTowards(transform.position, EnterTargetPosition, deltaPos * Time.deltaTime); transform.rotation = Quaternion.Lerp(transform.rotation, EnterTargetRotation, 0.2f); time += Time.deltaTime; if (Mathf.Approximately(Vector3.Distance(transform.position, EnterTargetPosition), 0) || time > transitionTimeToPosition) { updatingPosition = false; } return; } CurrentCastResult = FoundLadder(); if (CurrentCastResult == LadderCastResult.Both) { transform.position = TargetPosition; transform.rotation = Quaternion.Lerp(transform.rotation, GetRotationFromDirection(m_CurrentLadderCollider.transform.forward), 0.2f); } }
public override bool TryEnterAbility() { if (AbilityExitFixedTime + 0.1f > Time.fixedTime) { return(false); } LadderCastResult result = FoundLadder(); if (result == LadderCastResult.Both) { if (m_System.ActiveAbility is ClimbJump) { if (m_ClimbJump.JumpType != ClimbJumpType.FromGroundToHang || m_ClimbJump.JumpType != ClimbJumpType.FromGroundToLower) { if (m_ClimbJump.JumpTimeToTarget * 0.8f + m_ClimbJump.AbilityEnterFixedTime > Time.fixedTime) { return(false); } } } return(m_LastLadderCollider != m_CurrentLadderCollider && m_CurrentLadderCollider != null); } else if (result != LadderCastResult.Top) { m_LastLadderCollider = null; } return(base.TryEnterAbility()); }
public override void OnEnterAbility() { base.OnEnterAbility(); m_System.m_Rigidbody.useGravity = false; m_System.m_Rigidbody.velocity = Vector3.zero; updatingPosition = true; EnterTargetPosition = TargetPosition; if (EnterTargetPosition.y < m_CurrentLadderCollider.bounds.min.y) { EnterTargetPosition.y = m_CurrentLadderCollider.bounds.min.y; } EnterTargetRotation = GetRotationFromDirection(m_CurrentLadderCollider.transform.forward); deltaPos = Vector3.Distance(EnterTargetPosition, transform.position) / transitionTimeToPosition; time = 0; m_JumpDirection = ClimbJumpType.Noone; CurrentCastResult = LadderCastResult.Both; }