Optimize doafters (#7428)

This commit is contained in:
mirrorcult
2022-04-04 22:48:56 -07:00
committed by GitHub
parent d1c980fe41
commit 53bea6c015
2 changed files with 18 additions and 1 deletions

View File

@@ -11,4 +11,10 @@ namespace Content.Server.DoAfter
// we'll just send them the index. Doesn't matter if it wraps around.
public byte RunningIndex;
}
/// <summary>
/// Added to entities that are currently performing any doafters.
/// </summary>
[RegisterComponent]
public sealed class ActiveDoAfterComponent : Component {}
}

View File

@@ -26,6 +26,7 @@ namespace Content.Server.DoAfter
public void Add(DoAfterComponent component, DoAfter doAfter)
{
component.DoAfters.Add(doAfter, component.RunningIndex);
EnsureComp<ActiveDoAfterComponent>(component.Owner);
component.RunningIndex++;
Dirty(component);
}
@@ -37,6 +38,11 @@ namespace Content.Server.DoAfter
component.DoAfters.Remove(doAfter);
if (component.DoAfters.Count == 0)
{
RemComp<ActiveDoAfterComponent>(component.Owner);
}
RaiseNetworkEvent(new CancelledDoAfterMessage(component.Owner, index));
}
@@ -50,6 +56,11 @@ namespace Content.Server.DoAfter
return;
component.DoAfters.Remove(doAfter);
if (component.DoAfters.Count == 0)
{
RemComp<ActiveDoAfterComponent>(component.Owner);
}
}
private void OnDoAfterGetState(EntityUid uid, DoAfterComponent component, ref ComponentGetState args)
@@ -105,7 +116,7 @@ namespace Content.Server.DoAfter
{
base.Update(frameTime);
foreach (var comp in EntityManager.EntityQuery<DoAfterComponent>())
foreach (var (_, comp) in EntityManager.EntityQuery<ActiveDoAfterComponent, DoAfterComponent>())
{
foreach (var (doAfter, _) in comp.DoAfters.ToArray())
{