Files
tbd-station-14/Content.Client/Overlays/ShowSecurityIconsSystem.cs
PrPleGoo 67e4b626c1 Hunger and thirst HUDs (#18066)
* security HUD now shows a job icon on entities with a body

* thirst goggles

* set starting hud gear
2023-07-18 00:01:22 -06:00

91 lines
2.9 KiB
C#

using Content.Shared.Access.Components;
using Content.Shared.Body.Components;
using Content.Shared.Inventory;
using Content.Shared.Overlays;
using Content.Shared.PDA;
using Content.Shared.StatusIcon;
using Content.Shared.StatusIcon.Components;
using Robust.Shared.Prototypes;
namespace Content.Client.Overlays
{
public sealed class ShowSecurityIconsSystem : ComponentAddedOverlaySystemBase<ShowSecurityIconsComponent>
{
[Dependency] private readonly IPrototypeManager _prototypeMan = default!;
[Dependency] private readonly IEntityManager _entManager = default!;
[Dependency] private readonly InventorySystem _inventorySystem = default!;
private Dictionary<string, StatusIconPrototype> _jobIcons = new();
public override void Initialize()
{
base.Initialize();
SubscribeLocalEvent<BodyComponent, GetStatusIconsEvent>(OnGetStatusIconsEvent);
}
private void OnGetStatusIconsEvent(EntityUid uid, BodyComponent _, ref GetStatusIconsEvent @event)
{
if (!IsActive)
return;
var healthIcons = DecideSecurityIcon(uid);
@event.StatusIcons.AddRange(healthIcons);
}
private IReadOnlyList<StatusIconPrototype> DecideSecurityIcon(EntityUid uid)
{
var result = new List<StatusIconPrototype>();
if (_entManager.TryGetComponent<MetaDataComponent>(uid, out var metaDataComponent) &&
metaDataComponent.Flags.HasFlag(MetaDataFlags.InContainer))
{
return result;
}
var iconToGet = "NoId";
if (_inventorySystem.TryGetSlotEntity(uid, "id", out var idUid))
{
// PDA
if (EntityManager.TryGetComponent(idUid, out PdaComponent? pda))
{
iconToGet = pda.ContainedId?.JobTitle ?? string.Empty;
}
// ID Card
else if (EntityManager.TryGetComponent(idUid, out IdCardComponent? id))
{
iconToGet = id.JobTitle ?? string.Empty;
}
iconToGet = iconToGet.Replace(" ", "");
}
iconToGet = EnsureIcon(iconToGet, _jobIcons);
result.Add(_jobIcons[iconToGet]);
// Add arrest icons here, WYCI.
return result;
}
private string EnsureIcon(string iconKey, Dictionary<string, StatusIconPrototype> icons)
{
if (!icons.ContainsKey(iconKey))
{
if (_prototypeMan.TryIndex<StatusIconPrototype>($"JobIcon_{iconKey}", out var securityIcon))
{
icons.Add(iconKey, securityIcon);
return iconKey;
}
}
else
{
return iconKey;
}
iconKey = "Unknown";
return EnsureIcon(iconKey, icons);
}
}
}