//Move up, down ladder //Called for every fixedupdate that this module is active public override void FixedUpdateModule() { if (m_CanPassThroughOneWayPlatforms) { TryDisablingPlatforms(); } if (m_CanJumpFromLadder) { if (TryLadderJump()) { EndModule(); return; } } if (m_CanReleaseLadderWithButton) { if (DoesInputExist("ClimbRelease") && GetButtonInput("ClimbRelease").m_WasJustPressed) { m_ControlledCollider.SetVelocity(Vector2.zero); EndModule(); return; } } Ladder ladder = FindLadder(); if (ladder == null) { return; } Vector2 newVel = Vector2.zero; if (GetDirInput("Move").m_Direction == DirectionInput.Direction.Down || GetDirInput("Move").m_Direction == DirectionInput.Direction.Up) { newVel = ladder.GetUpDirection() * GetDirInput("Move").m_ClampedInput.y *m_Speed; } m_ControlledCollider.UpdateWithVelocity(newVel); Vector3 position = m_ControlledCollider.GetCapsuleTransform().GetPosition(); if (!m_CanExitTopOfLadder) { if (ladder.HasExceededUpperBound(position)) { Vector3 newPosition = ladder.GetClosestPointOnLadder(position); m_ControlledCollider.GetCapsuleTransform().SetPosition(newPosition); m_ControlledCollider.UpdateContextInfo(); } } if (!m_CanExitBottomOfLadder) { if (ladder.HasExceededLowerBound(position)) { Vector3 newPosition = ladder.GetClosestPointOnLadder(position); m_ControlledCollider.GetCapsuleTransform().SetPosition(newPosition); m_ControlledCollider.UpdateContextInfo(); } } }
//Called whenever this module is started (was inactive, now is active) protected override void StartModuleImpl() { if (m_CanPassThroughOneWayPlatforms) { TryDisablingPlatforms(); } Ladder ladder = FindLadder(); if (ladder) { Vector3 newPoint = ladder.GetClosestPointOnLadder(m_ControlledCollider.GetCapsuleTransform().GetPosition()); m_ControlledCollider.GetCapsuleTransform().SetPosition(newPoint); } }
//Character needs to be touching a Ladder object public override bool IsApplicable() { if (!m_IsActive && Time.time - m_LastLadderClimbTime < m_LadderClimbCoolDown) { return(false); } if (m_ControlledCollider.IsGrounded() && GetDirInput("Move").m_Direction != DirectionInput.Direction.Up) { if (!m_CanPassThroughOneWayPlatforms || !m_ControlledCollider.GetGroundedInfo().GetGroundTransform().GetComponentInChildren <OneWayPlatform>()) { return(false); } } Ladder ladder = FindLadder(); if (ladder) { if (!m_IsActive) { if (GetDirInput("Move").m_Direction == DirectionInput.Direction.Down || GetDirInput("Move").m_Direction == DirectionInput.Direction.Up) { Vector3 newPoint = ladder.GetClosestPointOnLadder(m_ControlledCollider.GetCapsuleTransform().GetPosition()); if (m_ControlledCollider.GetCapsuleTransform().CanMove(newPoint - m_ControlledCollider.GetCapsuleTransform().GetPosition())) { return(true); } } } else { if (m_CanExitSidesOfLadder && (GetDirInput("Move").m_Direction == DirectionInput.Direction.Left || GetDirInput("Move").m_Direction == DirectionInput.Direction.Right)) { return(false); } return(true); } } return(false); }