From 083f830b283db25a8d8f12a1ba6299c1cd25fc3c Mon Sep 17 00:00:00 2001 From: wixoa Date: Sat, 5 Oct 2024 13:41:50 -0400 Subject: [PATCH] Fix gliding (#2016) --- OpenDreamClient/Rendering/AtomGlideSystem.cs | 10 +++++++--- 1 file changed, 7 insertions(+), 3 deletions(-) diff --git a/OpenDreamClient/Rendering/AtomGlideSystem.cs b/OpenDreamClient/Rendering/AtomGlideSystem.cs index 72a3ba8edb..ba75f5fc6f 100644 --- a/OpenDreamClient/Rendering/AtomGlideSystem.cs +++ b/OpenDreamClient/Rendering/AtomGlideSystem.cs @@ -27,8 +27,9 @@ private sealed class Glide(TransformComponent transform, DMISpriteComponent spri private bool _ignoreMoveEvent; public override void Initialize() { - _spriteQuery = _entityManager.GetEntityQuery(); + UpdatesBefore.Add(typeof(SharedTransformSystem)); + _spriteQuery = _entityManager.GetEntityQuery(); _transformSystem.OnGlobalMoveEvent += OnTransformMove; } @@ -38,6 +39,11 @@ public override void Shutdown() { } public override void FrameUpdate(float frameTime) { + // As of writing, Reset() does nothing but clear the transform system's _lerpingTransforms list + // We update before SharedTransformSystem so this serves to disable RT's lerping, which fights our gliding + // TODO: This kinda fights RT. Would be nice to modify RT to make it play nicer. + _transformSystem.Reset(); + _ignoreMoveEvent = false; for (int i = 0; i < _currentGlides.Count; i++) { @@ -81,7 +87,6 @@ public override void FrameUpdate(float frameTime) { } } - // TODO: This kinda fights RT. Would be nice to modify RT to make it play nicer. /// /// Disables RT lerping and sets up the entity's glide /// @@ -123,7 +128,6 @@ private void OnTransformMove(ref MoveEvent e) { } // Move the transform to our starting point - // Also serves the function of disabling RT's lerp _transformSystem.SetLocalPositionNoLerp(e.Sender, startingFrom, e.Component); glide.EndPos = glidingTo;