mirror of
https://github.com/space-wizards/RobustToolbox.git
synced 2026-09-02 10:07:15 +02:00
Do not fire events for deleted entities. Optimize to remove allocations & LINQ.
40 lines
1.0 KiB
C#
40 lines
1.0 KiB
C#
using System.Collections.Generic;
|
|
|
|
namespace Robust.Shared.GameObjects
|
|
{
|
|
internal class SharedTransformSystem : EntitySystem
|
|
{
|
|
private readonly Queue<MoveEvent> _gridMoves = new();
|
|
private readonly Queue<MoveEvent> _otherMoves = new();
|
|
|
|
public void DeferMoveEvent(MoveEvent moveEvent)
|
|
{
|
|
if (moveEvent.Sender.HasComponent<IMapGridComponent>())
|
|
_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<MoveEvent> queue)
|
|
{
|
|
while (queue.TryDequeue(out var ev))
|
|
{
|
|
if (ev.Sender.Deleted)
|
|
continue;
|
|
|
|
RaiseLocalEvent(ev);
|
|
ev.Handled = true;
|
|
}
|
|
}
|
|
}
|
|
}
|
|
}
|