Files
OldThink/Content.Client/Overlays/ShowSecurityIconsSystem.cs

155 lines
4.8 KiB
C#
Raw Normal View History

using System.Linq;
using Content.Shared._Miracle.Components;
using Content.Shared.Access.Components;
using Content.Shared.Access.Systems;
using Content.Shared.Humanoid;
using Content.Shared.IdentityManagement.Components;
using Content.Shared.Inventory;
using Content.Shared.Mindshield.Components;
using Content.Shared.Overlays;
using Content.Shared.PDA;
using Content.Shared.Security;
using Content.Shared.StatusIcon;
using Content.Shared.StatusIcon.Components;
using Robust.Shared.Prototypes;
namespace Content.Client.Overlays;
Add health bar overlays for eye equipment (#21980) * PR 1 * fix an error with health bar overlay (#1292) * Revert "Revert "Replace `ResourcePath` with `ResPath` (#15308)" (#155… (#15566) * [1612] change ShowHealthBarsComponent's DamageContainer field to a list (#1662) * fix build * no crit entities from not updating * cleanup * namespace * undu irrelevant changes * undo icon change * make health bar 1 px taller and icon 1 px shorter * fix medibot * fix comment * don't show health bar ratio when in crit * fix build * put the crit bar back * don't render healthbars for mobs that are in containers * draw more boxes without the background sprite * fine status icon for all bio mobs * add wacky mandatory things * attempt 2 * whoops wrong file * cool, this works too * move null check to top * only 1 init * security huds * remove shader * fix build after cleanup * slight cleanup * little more cleanup * Remove clothing grant component system * security HUD now shows a job icon on entities with a body * remove sec stuff and do similar changes to split off PR + remove unused comp * process comments * don't return * update to ComponentAddedOverlaySystemBase * no cache * colors and not rendering out of sight * touch ups * fix build & cleanup * undo * remove shader from icons * process comments * documentation * fix licence * validate prototype id * just use args * rename method and append in method * type * just fucken delete the command * space * undo * remove * don't use LocalPlayer * re-add showhealthbars command, but working * rename icon lists and conform health icon code to the others * space * undo * update command * oops --------- Co-authored-by: Rane <60792108+Elijahrane@users.noreply.github.com> Co-authored-by: metalgearsloth <31366439+metalgearsloth@users.noreply.github.com>
2024-01-04 17:48:57 +01:00
public sealed class ShowSecurityIconsSystem : EquipmentHudSystem<ShowSecurityIconsComponent>
{
[Dependency] private readonly IPrototypeManager _prototypeMan = default!;
[Dependency] private readonly AccessReaderSystem _accessReader = default!;
// WD EDIT START
[Dependency] private readonly IEntityManager _entManager = default!;
[Dependency] private readonly InventorySystem _inventorySystem = default!;
[Dependency] private readonly SharedIdCardSystem _idCard = default!;
// WD EDIT END
[ValidatePrototypeId<StatusIconPrototype>]
private const string JobIconForNoId = "JobIconNoId";
public override void Initialize()
{
base.Initialize();
SubscribeLocalEvent<HumanoidAppearanceComponent, GetStatusIconsEvent>(OnGetStatusIconsEvent);
}
private void OnGetStatusIconsEvent(EntityUid uid, HumanoidAppearanceComponent _, ref GetStatusIconsEvent @event)
{
if (!IsActive || @event.InContainer)
{
return;
}
Add health bar overlays for eye equipment (#21980) * PR 1 * fix an error with health bar overlay (#1292) * Revert "Revert "Replace `ResourcePath` with `ResPath` (#15308)" (#155… (#15566) * [1612] change ShowHealthBarsComponent's DamageContainer field to a list (#1662) * fix build * no crit entities from not updating * cleanup * namespace * undu irrelevant changes * undo icon change * make health bar 1 px taller and icon 1 px shorter * fix medibot * fix comment * don't show health bar ratio when in crit * fix build * put the crit bar back * don't render healthbars for mobs that are in containers * draw more boxes without the background sprite * fine status icon for all bio mobs * add wacky mandatory things * attempt 2 * whoops wrong file * cool, this works too * move null check to top * only 1 init * security huds * remove shader * fix build after cleanup * slight cleanup * little more cleanup * Remove clothing grant component system * security HUD now shows a job icon on entities with a body * remove sec stuff and do similar changes to split off PR + remove unused comp * process comments * don't return * update to ComponentAddedOverlaySystemBase * no cache * colors and not rendering out of sight * touch ups * fix build & cleanup * undo * remove shader from icons * process comments * documentation * fix licence * validate prototype id * just use args * rename method and append in method * type * just fucken delete the command * space * undo * remove * don't use LocalPlayer * re-add showhealthbars command, but working * rename icon lists and conform health icon code to the others * space * undo * update command * oops --------- Co-authored-by: Rane <60792108+Elijahrane@users.noreply.github.com> Co-authored-by: metalgearsloth <31366439+metalgearsloth@users.noreply.github.com>
2024-01-04 17:48:57 +01:00
var securityIcons = DecideSecurityIcon(uid);
Add health bar overlays for eye equipment (#21980) * PR 1 * fix an error with health bar overlay (#1292) * Revert "Revert "Replace `ResourcePath` with `ResPath` (#15308)" (#155… (#15566) * [1612] change ShowHealthBarsComponent's DamageContainer field to a list (#1662) * fix build * no crit entities from not updating * cleanup * namespace * undu irrelevant changes * undo icon change * make health bar 1 px taller and icon 1 px shorter * fix medibot * fix comment * don't show health bar ratio when in crit * fix build * put the crit bar back * don't render healthbars for mobs that are in containers * draw more boxes without the background sprite * fine status icon for all bio mobs * add wacky mandatory things * attempt 2 * whoops wrong file * cool, this works too * move null check to top * only 1 init * security huds * remove shader * fix build after cleanup * slight cleanup * little more cleanup * Remove clothing grant component system * security HUD now shows a job icon on entities with a body * remove sec stuff and do similar changes to split off PR + remove unused comp * process comments * don't return * update to ComponentAddedOverlaySystemBase * no cache * colors and not rendering out of sight * touch ups * fix build & cleanup * undo * remove shader from icons * process comments * documentation * fix licence * validate prototype id * just use args * rename method and append in method * type * just fucken delete the command * space * undo * remove * don't use LocalPlayer * re-add showhealthbars command, but working * rename icon lists and conform health icon code to the others * space * undo * update command * oops --------- Co-authored-by: Rane <60792108+Elijahrane@users.noreply.github.com> Co-authored-by: metalgearsloth <31366439+metalgearsloth@users.noreply.github.com>
2024-01-04 17:48:57 +01:00
@event.StatusIcons.AddRange(securityIcons);
}
private IReadOnlyList<StatusIconPrototype> DecideSecurityIcon(EntityUid uid)
{
var result = new List<StatusIconPrototype>();
var jobIconToGet = JobIconForNoId;
if (_accessReader.FindAccessItemsInventory(uid, out var items))
{
foreach (var item in items)
{
// ID Card
if (TryComp(item, out IdCardComponent? id))
{
jobIconToGet = id.JobIcon;
break;
}
// PDA
if (TryComp(item, out PdaComponent? pda)
&& pda.ContainedId != null
&& TryComp(pda.ContainedId, out id))
{
jobIconToGet = id.JobIcon;
break;
}
}
}
if (_prototypeMan.TryIndex<StatusIconPrototype>(jobIconToGet, out var jobIcon))
result.Add(jobIcon);
else
2024-02-09 16:51:54 +09:00
// WD EDIT START
{
Log.Error($"Invalid job icon prototype: {jobIconToGet}");
result.Add(_prototypeMan.Index<StatusIconPrototype>(JobIconForNoId));
}
// WD EDIT END
if (TryComp<MindShieldComponent>(uid, out var comp))
{
if (_prototypeMan.TryIndex<StatusIconPrototype>(comp.MindShieldStatusIcon.Id, out var icon))
result.Add(icon);
}
// WD EDIT START
string? protoId;
switch (GetRecord(uid))
{
case SecurityStatus.Detained:
protoId = "CriminalRecordIconIncarcerated";
break;
case SecurityStatus.Released:
protoId = "CriminalRecordIconReleased";
break;
case SecurityStatus.Suspected:
protoId = "CriminalRecordIconSuspected";
break;
case SecurityStatus.Wanted:
protoId = "CriminalRecordIconWanted";
break;
case SecurityStatus.None:
default:
return result;
}
if (_prototypeMan.TryIndex<StatusIconPrototype>(protoId, out var recordIcon))
result.Add(recordIcon);
// WD EDIT END
return result;
}
// WD EDIT START
private SecurityStatus GetRecord(EntityUid uid)
{
if (!_entManager.TryGetComponent(uid, out MetaDataComponent? meta))
return SecurityStatus.None;
var name = meta.EntityName;
var ev = new SeeIdentityAttemptEvent();
RaiseLocalEvent(uid, ev);
if (ev.Cancelled)
{
if (_inventorySystem.TryGetSlotEntity(uid, "id", out var idUid) &&
_idCard.TryGetIdCard(idUid.Value, out var idCard))
name = idCard.Comp.FullName;
else
return SecurityStatus.None;
}
if (name == null)
return SecurityStatus.None;
var query = EntityQuery<CriminalStatusDataComponent>();
foreach (var data in query)
{
if (data.Statuses.TryGetValue(name, out var status))
return status;
}
return SecurityStatus.None;
}
// WD EDIT END
}