Fix error when starting a DoAfter while handling one on the same entity (#24218)

* Fix error when starting a DoAfter while handling one on the same entity

* Reuse array
This commit is contained in:
DrSmugleaf
2024-01-18 00:01:58 -08:00
committed by GitHub
parent eefec0029d
commit 9ad1ae5d96

View File

@@ -9,6 +9,8 @@ public abstract partial class SharedDoAfterSystem : EntitySystem
[Dependency] private readonly IDynamicTypeFactory _factory = default!;
[Dependency] private readonly SharedGravitySystem _gravity = default!;
private DoAfter[] _doAfters = Array.Empty<DoAfter>();
public override void Update(float frameTime)
{
base.Update(frameTime);
@@ -34,8 +36,15 @@ public abstract partial class SharedDoAfterSystem : EntitySystem
{
var dirty = false;
foreach (var doAfter in comp.DoAfters.Values)
var values = comp.DoAfters.Values;
var count = values.Count;
if (_doAfters.Length < count)
_doAfters = new DoAfter[count];
values.CopyTo(_doAfters, 0);
for (var i = 0; i < count; i++)
{
var doAfter = _doAfters[i];
if (doAfter.CancelledTime != null)
{
if (time - doAfter.CancelledTime.Value > ExcessTime)