Files
wwdpublic/Content.Shared/IdentityManagement/SharedIdentitySystem.cs
SimpleStation14 375b1c0739 Mirror: Criminal record hud icons (#144)
## Mirror of PR #25192: [Criminal record hud
icons](https://github.com/space-wizards/space-station-14/pull/25192)
from <img src="https://avatars.githubusercontent.com/u/10567778?v=4"
alt="space-wizards" width="22"/>
[space-wizards](https://github.com/space-wizards)/[space-station-14](https://github.com/space-wizards/space-station-14)

###### `60b9d89e4dbdd8aaad4992a105628297d9480617`

PR opened by <img
src="https://avatars.githubusercontent.com/u/137322659?v=4"
width="16"/><a href="https://github.com/Arendian"> Arendian</a> at
2024-02-13 19:39:59 UTC
PR merged by <img
src="https://avatars.githubusercontent.com/u/19864447?v=4"
width="16"/><a href="https://github.com/web-flow"> web-flow</a> at
2024-03-11 03:12:52 UTC

---

PR changed 19 files with 230 additions and 40 deletions.

The PR had the following labels:
- Changes: UI
- Changes: Sprites
- Status: Needs Review


---

<details open="true"><summary><h1>Original Body</h1></summary>

> <!-- Please read these guidelines before opening your PR:
https://docs.spacestation14.io/en/getting-started/pr-guideline -->
> <!-- The text between the arrows are comments - they will not be
visible on your PR. -->
> 
> ## About the PR
> <!-- What did you change in this PR? -->
> Added three more statuses to the criminal record console: Paroled,
Suspect, Discharged.
> Entities now have a hud icon based on the criminal record linked to
the name they are currently showing.
> If "Urist McHands" is wanted, anyone that currently shows as being
"Urist McHands", even when their real name is not Urist McHands, will
show the relevant hud icon to entities wearing a security hud. If Urist
McHands is disguised as someone without a criminal record or has no
name(middle-aged captain man etc.), they won't show an icon.
> 
> ## Why / Balance
> <!-- Why was it changed? Link any discussions or issues here. Please
discuss how this would affect game balance. -->
> Icons showing on sechuds will make sechuds more usefull, it will
(hopefully) improve security coordination by allowing officers to more
easily see who they need to keep track of.
> It also gives warden something extra to do.
> 
> ## Technical details
> <!-- If this is a code change, summarize at high level how your new
code works. This makes it easier to review. -->
> 
> When a criminal record is changed, every entity with an
IdentityComponent will have their name checked to see if it equals the
name of the changed criminal record, if it's equal the person will get
the CriminalRecordComponent which holds the icon that needs to be shown
on the entity.
> If a criminal record is removed, the CriminalRecordComponent will be
removed from all entities that currently have the visible name
associated with the criminal record.
> 
> If an entity changes identity, all criminal records will be searched
to see if the name has a criminal record attached to it. If the name has
a record attached to it, the entity will get the CriminalRecordComponent
and the corresponding criminal record hud icon until they change their
identity again or the criminal record gets removed.
> 
> ## Media
> <!-- 
> PRs which make ingame changes (adding clothing, items, new features,
etc) are required to have media attached that showcase the changes.
> Small fixes/refactors are exempt.
> Any media may be used in SS14 progress reports, with clear credit
given.
> 
> If you're unsure whether your PR will require media, ask a maintainer.
> 
> Check the box below to confirm that you have in fact seen this (put an
X in the brackets, like [X]):
> -->
> 
>
https://github.com/space-wizards/space-station-14/assets/137322659/3c9422e6-897f-456f-b54b-8fdc053cb4e1
> 
> 
> - [X] I have added screenshots/videos to this PR showcasing its
changes ingame, **or** this PR does not require an ingame showcase
> 
> **Changelog**
> <!--
> Make players aware of new features and changes that could affect how
they play the game by adding a Changelog entry. Please read the
Changelog guidelines located at:
https://docs.spacestation14.io/en/getting-started/pr-guideline#changelog
> -->
> 
> 🆑 Dygon
> - add: The following criminal record statuses have been added:
Suspect, Discharged, Paroled.
> - add: Security huds now show an icon on entities that have a visible
name linked to a criminal record.
> 


</details>

Co-authored-by: Arendian <137322659+Arendian@users.noreply.github.com>
2024-05-04 19:38:47 -04:00

48 lines
1.7 KiB
C#

using Content.Shared.Clothing;
using Content.Shared.IdentityManagement.Components;
using Content.Shared.Inventory;
using Robust.Shared.Containers;
namespace Content.Shared.IdentityManagement;
public abstract class SharedIdentitySystem : EntitySystem
{
[Dependency] private readonly SharedContainerSystem _container = default!;
private static string SlotName = "identity";
public override void Initialize()
{
base.Initialize();
SubscribeLocalEvent<IdentityComponent, ComponentInit>(OnComponentInit);
SubscribeLocalEvent<IdentityBlockerComponent, SeeIdentityAttemptEvent>(OnSeeIdentity);
SubscribeLocalEvent<IdentityBlockerComponent, InventoryRelayedEvent<SeeIdentityAttemptEvent>>((e, c, ev) => OnSeeIdentity(e, c, ev.Args));
SubscribeLocalEvent<IdentityBlockerComponent, ItemMaskToggledEvent>(OnMaskToggled);
}
private void OnSeeIdentity(EntityUid uid, IdentityBlockerComponent component, SeeIdentityAttemptEvent args)
{
if (component.Enabled)
{
args.TotalCoverage |= component.Coverage;
if(args.TotalCoverage == IdentityBlockerCoverage.FULL)
args.Cancel();
}
}
protected virtual void OnComponentInit(EntityUid uid, IdentityComponent component, ComponentInit args)
{
component.IdentityEntitySlot = _container.EnsureContainer<ContainerSlot>(uid, SlotName);
}
private void OnMaskToggled(Entity<IdentityBlockerComponent> ent, ref ItemMaskToggledEvent args)
{
ent.Comp.Enabled = !args.IsToggled;
}
}
/// <summary>
/// Gets called whenever an entity changes their identity.
/// </summary>
[ByRefEvent]
public record struct IdentityChangedEvent(EntityUid CharacterEntity, EntityUid IdentityEntity);