Files
RobustToolbox/Robust.Shared/GameObjects/Systems/SharedTransformSystem.cs
T
Pieter-Jan Briers cecc4dfcf2 Improve SharedTransformSystem:
Do not fire events for deleted entities.
Optimize to remove allocations & LINQ.
2021-02-23 22:05:49 +01:00

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;
}
}
}
}
}