Slight status icons performance improvement. (#18076)

This commit is contained in:
Leon Friedrich
2023-07-17 20:22:35 +12:00
committed by GitHub
parent 10f5a5a17a
commit 8143b9d87a
3 changed files with 17 additions and 8 deletions

View File

@@ -35,19 +35,23 @@ public sealed class StatusIconOverlay : Overlay
var scaleMatrix = Matrix3.CreateScale(new Vector2(1, 1)); var scaleMatrix = Matrix3.CreateScale(new Vector2(1, 1));
var rotationMatrix = Matrix3.CreateRotation(-eyeRot); var rotationMatrix = Matrix3.CreateRotation(-eyeRot);
var query = _entity.AllEntityQueryEnumerator<StatusIconComponent, SpriteComponent, TransformComponent>(); var query = _entity.AllEntityQueryEnumerator<StatusIconComponent, SpriteComponent, TransformComponent, MetaDataComponent>();
while (query.MoveNext(out var uid, out var comp, out var sprite, out var xform)) while (query.MoveNext(out var uid, out var comp, out var sprite, out var xform, out var meta))
{ {
if (xform.MapID != args.MapId) if (xform.MapID != args.MapId)
continue; continue;
var icons = _statusIcon.GetStatusIcons(uid); var icons = _statusIcon.GetStatusIcons(uid, meta);
if (icons.Count == 0) if (icons.Count == 0)
continue; continue;
var bounds = comp.Bounds ?? sprite.Bounds; var bounds = comp.Bounds ?? sprite.Bounds;
var worldPos = _transform.GetWorldPosition(xform, xformQuery); var worldPos = _transform.GetWorldPosition(xform, xformQuery);
if (!bounds.Translated(worldPos).Intersects(args.WorldAABB))
continue;
var worldMatrix = Matrix3.CreateTranslation(worldPos); var worldMatrix = Matrix3.CreateTranslation(worldPos);
Matrix3.Multiply(scaleMatrix, worldMatrix, out var scaledWorld); Matrix3.Multiply(scaleMatrix, worldMatrix, out var scaledWorld);
Matrix3.Multiply(rotationMatrix, scaledWorld, out var matty); Matrix3.Multiply(rotationMatrix, scaledWorld, out var matty);

View File

@@ -53,12 +53,17 @@ public sealed class StatusIconSystem : SharedStatusIconSystem
_overlay.AddOverlay(new StatusIconOverlay()); _overlay.AddOverlay(new StatusIconOverlay());
} }
public List<StatusIconData> GetStatusIcons(EntityUid uid) public List<StatusIconData> GetStatusIcons(EntityUid uid, MetaDataComponent? meta = null)
{ {
if (!Exists(uid) || Terminating(uid)) var list = new List<StatusIconData>();
return new(); if (!Resolve(uid, ref meta))
return list;
var ev = new GetStatusIconsEvent(new()); if (meta.EntityLifeStage >= EntityLifeStage.Terminating)
return list;
var inContainer = (meta.Flags & MetaDataFlags.InContainer) != 0;
var ev = new GetStatusIconsEvent(list, inContainer);
RaiseLocalEvent(uid, ref ev); RaiseLocalEvent(uid, ref ev);
return ev.StatusIcons; return ev.StatusIcons;
} }

View File

@@ -24,4 +24,4 @@ public sealed partial class StatusIconComponent : Component
/// </summary> /// </summary>
/// <param name="StatusIcons"></param> /// <param name="StatusIcons"></param>
[ByRefEvent] [ByRefEvent]
public record struct GetStatusIconsEvent(List<StatusIconData> StatusIcons); public record struct GetStatusIconsEvent(List<StatusIconData> StatusIcons, bool InContainer);