Fix NPCs stalling when too many exist (#37056)
Fix NPC stalling when too many exist
This commit is contained in:
@@ -180,11 +180,24 @@ public sealed class HTNSystem : EntitySystem
|
|||||||
_planQueue.Process();
|
_planQueue.Process();
|
||||||
var query = EntityQueryEnumerator<ActiveNPCComponent, HTNComponent>();
|
var query = EntityQueryEnumerator<ActiveNPCComponent, HTNComponent>();
|
||||||
|
|
||||||
|
// Move ahead "count" entries in the query.
|
||||||
|
// This is to ensure that if we didn't process all the npcs the first time,
|
||||||
|
// we get to the remaining ones instead of iterating over the beginning again.
|
||||||
|
for (var i = 0; i < count; i++)
|
||||||
|
{
|
||||||
|
query.MoveNext(out _, out _);
|
||||||
|
}
|
||||||
|
|
||||||
|
// the amount of updates we've processed during this iteration.
|
||||||
|
var updates = 0;
|
||||||
while (query.MoveNext(out var uid, out _, out var comp))
|
while (query.MoveNext(out var uid, out _, out var comp))
|
||||||
{
|
{
|
||||||
// If we're over our max count or it's not MapInit then ignore the NPC.
|
// If we're over our max count or it's not MapInit then ignore the NPC.
|
||||||
if (count >= maxUpdates)
|
if (updates >= maxUpdates)
|
||||||
break;
|
{
|
||||||
|
// Intentional return. We don't want to go to the end logic and reset count.
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
if (!comp.Enabled)
|
if (!comp.Enabled)
|
||||||
continue;
|
continue;
|
||||||
@@ -274,7 +287,12 @@ public sealed class HTNSystem : EntitySystem
|
|||||||
|
|
||||||
Update(comp, frameTime);
|
Update(comp, frameTime);
|
||||||
count++;
|
count++;
|
||||||
|
updates++;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// only reset our counter back to 0 if we finish iterating.
|
||||||
|
// otherwise it lets us know where we left off.
|
||||||
|
count = 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
private void AppendDebugText(HTNTask task, StringBuilder text, List<int> planBtr, List<int> btr, ref int level)
|
private void AppendDebugText(HTNTask task, StringBuilder text, List<int> planBtr, List<int> btr, ref int level)
|
||||||
|
|||||||
@@ -136,7 +136,6 @@ namespace Content.Server.NPC.Systems
|
|||||||
if (!Enabled)
|
if (!Enabled)
|
||||||
return;
|
return;
|
||||||
|
|
||||||
_count = 0;
|
|
||||||
// Add your system here.
|
// Add your system here.
|
||||||
_htn.UpdateNPC(ref _count, _maxUpdates, frameTime);
|
_htn.UpdateNPC(ref _count, _maxUpdates, frameTime);
|
||||||
}
|
}
|
||||||
|
|||||||
Reference in New Issue
Block a user