* Initial commit. * review --------- Co-authored-by: metalgearsloth <comedian_vs_clown@hotmail.com> Co-authored-by: metalgearsloth <31366439+metalgearsloth@users.noreply.github.com>
61 lines
1.8 KiB
C#
61 lines
1.8 KiB
C#
using Content.Shared.Access.Components;
|
|
using Content.Shared.Access.Systems;
|
|
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 ShowJobIconsSystem : EquipmentHudSystem<ShowJobIconsComponent>
|
|
{
|
|
[Dependency] private readonly IPrototypeManager _prototype = default!;
|
|
[Dependency] private readonly AccessReaderSystem _accessReader = default!;
|
|
|
|
[ValidatePrototypeId<StatusIconPrototype>]
|
|
private const string JobIconForNoId = "JobIconNoId";
|
|
|
|
public override void Initialize()
|
|
{
|
|
base.Initialize();
|
|
|
|
SubscribeLocalEvent<StatusIconComponent, GetStatusIconsEvent>(OnGetStatusIconsEvent);
|
|
}
|
|
|
|
private void OnGetStatusIconsEvent(EntityUid uid, StatusIconComponent _, ref GetStatusIconsEvent ev)
|
|
{
|
|
if (!IsActive || ev.InContainer)
|
|
return;
|
|
|
|
var iconId = JobIconForNoId;
|
|
|
|
if (_accessReader.FindAccessItemsInventory(uid, out var items))
|
|
{
|
|
foreach (var item in items)
|
|
{
|
|
// ID Card
|
|
if (TryComp<IdCardComponent>(item, out var id))
|
|
{
|
|
iconId = id.JobIcon;
|
|
break;
|
|
}
|
|
|
|
// PDA
|
|
if (TryComp<PdaComponent>(item, out var pda)
|
|
&& pda.ContainedId != null
|
|
&& TryComp(pda.ContainedId, out id))
|
|
{
|
|
iconId = id.JobIcon;
|
|
break;
|
|
}
|
|
}
|
|
}
|
|
|
|
if (_prototype.TryIndex<StatusIconPrototype>(iconId, out var iconPrototype))
|
|
ev.StatusIcons.Add(iconPrototype);
|
|
else
|
|
Log.Error($"Invalid job icon prototype: {iconPrototype}");
|
|
}
|
|
}
|