From 4701b853ef3cc2aac4a777f194ac26760d2235be Mon Sep 17 00:00:00 2001 From: metalgearsloth <31366439+metalgearsloth@users.noreply.github.com> Date: Tue, 24 Oct 2023 21:44:09 +1100 Subject: [PATCH] Fix 0-length climbs (#21224) --- .../Climbing/Systems/ClimbSystem.cs | 20 ++++++++++++++----- 1 file changed, 15 insertions(+), 5 deletions(-) diff --git a/Content.Shared/Climbing/Systems/ClimbSystem.cs b/Content.Shared/Climbing/Systems/ClimbSystem.cs index 511149f8f9..46255e4337 100644 --- a/Content.Shared/Climbing/Systems/ClimbSystem.cs +++ b/Content.Shared/Climbing/Systems/ClimbSystem.cs @@ -257,15 +257,25 @@ public sealed partial class ClimbSystem : VirtualController // Need direction relative to climber's parent. var localDirection = (-parentRot).RotateVec(worldDirection); - climbing.IsClimbing = true; - var climbDuration = TimeSpan.FromSeconds(distance / climbing.TransitionRate); - climbing.NextTransition = _timing.CurTime + climbDuration; + // On top of it already so just do it in place. + if (localDirection.LengthSquared() < 0.01f) + { + climbing.NextTransition = null; + } + // VirtualController over to the thing. + else + { + var climbDuration = TimeSpan.FromSeconds(distance / climbing.TransitionRate); + climbing.NextTransition = _timing.CurTime + climbDuration; + + climbing.Direction = localDirection.Normalized() * climbing.TransitionRate; + _actionBlockerSystem.UpdateCanMove(uid); + } - climbing.Direction = localDirection.Normalized() * climbing.TransitionRate; + climbing.IsClimbing = true; Dirty(uid, climbing); _audio.PlayPredicted(comp.FinishClimbSound, climbable, user); - _actionBlockerSystem.UpdateCanMove(uid); var startEv = new StartClimbEvent(climbable); var climbedEv = new ClimbedOnEvent(uid, user); -- 2.51.2