using System.Collections.Generic; namespace Robust.Shared.GameObjects { internal class SharedTransformSystem : EntitySystem { private readonly Queue _gridMoves = new(); private readonly Queue _otherMoves = new(); public void DeferMoveEvent(MoveEvent moveEvent) { if (moveEvent.Sender.HasComponent()) _gridMoves.Enqueue(moveEvent); else _otherMoves.Enqueue(moveEvent); } public override void Update(float frameTime) { base.Update(frameTime); // Process grid moves first. Process(_gridMoves); Process(_otherMoves); void Process(Queue queue) { while (queue.TryDequeue(out var ev)) { if (ev.Sender.Deleted) continue; RaiseLocalEvent(ev); ev.Handled = true; } } } } }