Slight status icons performance improvement. (#18076)
This commit is contained in:
@@ -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);
|
||||||
|
|||||||
@@ -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;
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -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);
|
||||||
|
|||||||
Reference in New Issue
Block a user