Optimise do_after a bit (#5776)

This commit is contained in:
metalgearsloth
2021-12-14 00:51:10 +11:00
committed by GitHub
parent 5a4c08ccdf
commit bd51b15af8

View File

@@ -5,6 +5,7 @@ using Robust.Client.GameObjects;
using Robust.Client.Graphics; using Robust.Client.Graphics;
using Robust.Shared.GameObjects; using Robust.Shared.GameObjects;
using Robust.Shared.IoC; using Robust.Shared.IoC;
using Robust.Shared.Map;
using Robust.Shared.Timing; using Robust.Shared.Timing;
namespace Content.Client.DoAfter namespace Content.Client.DoAfter
@@ -55,28 +56,29 @@ namespace Content.Client.DoAfter
return; return;
var viewbox = _eyeManager.GetWorldViewport().Enlarged(2.0f); var viewbox = _eyeManager.GetWorldViewport().Enlarged(2.0f);
var entXform = Transform(entity);
var playerPos = entXform.MapPosition;
foreach (var comp in EntityManager.EntityQuery<DoAfterComponent>(true)) foreach (var (comp, xform) in EntityManager.EntityQuery<DoAfterComponent, TransformComponent>(true))
{ {
var doAfters = comp.DoAfters.ToList(); var doAfters = comp.DoAfters.ToList();
var compPos = EntityManager.GetComponent<TransformComponent>(comp.Owner).WorldPosition; var compPos = xform.MapPosition;
if (doAfters.Count == 0 || if (doAfters.Count == 0 ||
EntityManager.GetComponent<TransformComponent>(comp.Owner).MapID != EntityManager.GetComponent<TransformComponent>(entity).MapID || compPos.MapId != entXform.MapID ||
!viewbox.Contains(compPos)) !viewbox.Contains(compPos.Position))
{ {
comp.Disable(); comp.Disable();
continue; continue;
} }
var range = (compPos - EntityManager.GetComponent<TransformComponent>(entity).WorldPosition).Length + var range = (compPos.Position - playerPos.Position).Length + 0.01f;
0.01f;
if (comp.Owner != _attachedEntity && if (comp.Owner != _attachedEntity &&
!ExamineSystemShared.InRangeUnOccluded( !ExamineSystemShared.InRangeUnOccluded(
EntityManager.GetComponent<TransformComponent>(entity).MapPosition, playerPos,
EntityManager.GetComponent<TransformComponent>(comp.Owner).MapPosition, range, compPos, range,
entity => entity == comp.Owner || entity == _attachedEntity)) ent => ent == comp.Owner || ent == _attachedEntity))
{ {
comp.Disable(); comp.Disable();
continue; continue;
@@ -84,7 +86,7 @@ namespace Content.Client.DoAfter
comp.Enable(); comp.Enable();
var userGrid = EntityManager.GetComponent<TransformComponent>(comp.Owner).Coordinates; var userGrid = xform.Coordinates;
// Check cancellations / finishes // Check cancellations / finishes
foreach (var (id, doAfter) in doAfters) foreach (var (id, doAfter) in doAfters)
@@ -117,7 +119,7 @@ namespace Content.Client.DoAfter
if (doAfter.BreakOnTargetMove) if (doAfter.BreakOnTargetMove)
{ {
if (EntityManager.EntityExists(doAfter.TargetUid) && if (EntityManager.EntityExists(doAfter.TargetUid) &&
!EntityManager.GetComponent<TransformComponent>(doAfter.TargetUid).Coordinates.InRange(EntityManager, doAfter.TargetGrid, !Transform(doAfter.TargetUid).Coordinates.InRange(EntityManager, doAfter.TargetGrid,
doAfter.MovementThreshold)) doAfter.MovementThreshold))
{ {
comp.Cancel(id, currentTime); comp.Cancel(id, currentTime);