Files
OldThink/Content.Shared/CriminalRecords/Systems/SharedCriminalRecordsConsoleSystem.cs
keslik 775fd5e96c [Tweak] Security statuses micro update (#629)
* Tweak: Sec statuses update WIP

* fix: Для новых статусов требуется указать причину

* Fix: for review
2024-08-16 23:46:26 +03:00

57 lines
2.1 KiB
C#

using Content.Shared.IdentityManagement;
using Content.Shared.IdentityManagement.Components;
using Content.Shared.Security;
using Content.Shared.Security.Components;
namespace Content.Shared.CriminalRecords.Systems;
public abstract class SharedCriminalRecordsConsoleSystem : EntitySystem
{
/// <summary>
/// Any entity that has a the name of the record that was just changed as their visible name will get their icon
/// updated with the new status, if the record got removed their icon will be removed too.
/// </summary>
public void UpdateCriminalIdentity(string name, SecurityStatus status)
{
var query = EntityQueryEnumerator<IdentityComponent>();
while (query.MoveNext(out var uid, out _))
{
if (!Identity.Name(uid, EntityManager).Equals(name))
continue;
if (status == SecurityStatus.None)
RemComp<CriminalRecordComponent>(uid);
else
SetCriminalIcon(name, status, uid);
}
}
/// <summary>
/// Decides the icon that should be displayed on the entity based on the security status
/// </summary>
public void SetCriminalIcon(string name, SecurityStatus status, EntityUid characterUid)
{
EnsureComp<CriminalRecordComponent>(characterUid, out var record);
var previousIcon = record.StatusIcon;
record.StatusIcon = status switch
{
SecurityStatus.Paroled => "SecurityIconParoled",
SecurityStatus.Wanted => "SecurityIconWanted",
SecurityStatus.Detained => "SecurityIconIncarcerated",
SecurityStatus.Demote => "SecurityIconDemote",
SecurityStatus.Suspected => "SecurityIconSuspected",
SecurityStatus.Execute => "SecurityIconExecute", // WD start
SecurityStatus.Released => "SecurityIconReleased",
SecurityStatus.Monitoring => "SecurityIconMonitoring",
SecurityStatus.Search => "SecurityIconSearch", // WD end
_ => record.StatusIcon
};
if(previousIcon != record.StatusIcon)
Dirty(characterUid, record);
}
}