From a761100cf5cfc79107d1707eed13c82a2e84999f Mon Sep 17 00:00:00 2001 From: Absotively Date: Sat, 13 Dec 2025 12:01:00 -0700 Subject: [PATCH] Hand labeler can always remove labels (#40330) * Hand labeler can always remove labels * Simplify labeling functions * Address review comments * Use Entity more places * Always use default style for remove label verb --- .../EntitySystems/SharedHandLabelerSystem.cs | 83 +++++++++++-------- 1 file changed, 48 insertions(+), 35 deletions(-) diff --git a/Content.Shared/Labels/EntitySystems/SharedHandLabelerSystem.cs b/Content.Shared/Labels/EntitySystems/SharedHandLabelerSystem.cs index 4dc5f86f27..6d4926a6ef 100644 --- a/Content.Shared/Labels/EntitySystems/SharedHandLabelerSystem.cs +++ b/Content.Shared/Labels/EntitySystems/SharedHandLabelerSystem.cs @@ -59,64 +59,77 @@ public abstract class SharedHandLabelerSystem : EntitySystem { } - private void AddLabelTo(EntityUid uid, HandLabelerComponent? handLabeler, EntityUid target, out string? result) + private void AddLabelTo(Entity ent, EntityUid user, EntityUid target) { - if (!Resolve(uid, ref handLabeler)) + if (ent.Comp.AssignedLabel == string.Empty) { - result = null; + RemoveLabelFrom(ent, user, target); return; } - if (handLabeler.AssignedLabel == string.Empty) - { - if (_netManager.IsServer) - _labelSystem.Label(target, null); - result = Loc.GetString("hand-labeler-successfully-removed"); - return; - } if (_netManager.IsServer) - _labelSystem.Label(target, handLabeler.AssignedLabel); - result = Loc.GetString("hand-labeler-successfully-applied"); + _labelSystem.Label(target, ent.Comp.AssignedLabel); + + _popupSystem.PopupClient(Loc.GetString("hand-labeler-successfully-applied"), user, user); + + // Log labeling + _adminLogger.Add(LogType.Action, LogImpact.Low, + $"{ToPrettyString(user):user} labeled {ToPrettyString(target):target} with {ToPrettyString(ent):labeler}"); } - private void OnUtilityVerb(EntityUid uid, HandLabelerComponent handLabeler, GetVerbsEvent args) + private void RemoveLabelFrom(EntityUid uid, EntityUid user, EntityUid target) { - if (args.Target is not { Valid: true } target || _whitelistSystem.IsWhitelistFail(handLabeler.Whitelist, target) || !args.CanAccess) + if (_netManager.IsServer) + _labelSystem.Label(target, null); + + _popupSystem.PopupClient(Loc.GetString("hand-labeler-successfully-removed"), user, user); + + // Log labeling + _adminLogger.Add(LogType.Action, LogImpact.Low, + $"{ToPrettyString(user):user} removed label from {ToPrettyString(target):target} with {ToPrettyString(uid):labeler}"); + } + + private void OnUtilityVerb(Entity ent, ref GetVerbsEvent args) + { + if (args.Target is not { Valid: true } target || _whitelistSystem.IsWhitelistFail(ent.Comp.Whitelist, target) || !args.CanAccess) return; - var labelerText = handLabeler.AssignedLabel == string.Empty ? Loc.GetString("hand-labeler-remove-label-text") : Loc.GetString("hand-labeler-add-label-text"); + var user = args.User; // can't use ref parameter in lambdas - var verb = new UtilityVerb() + if (ent.Comp.AssignedLabel != string.Empty) + { + var labelVerb = new UtilityVerb() + { + Act = () => + { + AddLabelTo(ent, user, target); + }, + Text = Loc.GetString("hand-labeler-add-label-text") + }; + + args.Verbs.Add(labelVerb); + } + + // add the unlabel verb to the menu even when the labeler has text + var unLabelVerb = new UtilityVerb() { Act = () => { - Labeling(uid, target, args.User, handLabeler); + RemoveLabelFrom(ent, user, target); }, - Text = labelerText + Text = Loc.GetString("hand-labeler-remove-label-text"), + Priority = -1, }; - args.Verbs.Add(verb); + args.Verbs.Add(unLabelVerb); } - private void AfterInteractOn(EntityUid uid, HandLabelerComponent handLabeler, AfterInteractEvent args) + private void AfterInteractOn(Entity ent, ref AfterInteractEvent args) { - if (args.Target is not { Valid: true } target || _whitelistSystem.IsWhitelistFail(handLabeler.Whitelist, target) || !args.CanReach) + if (args.Target is not { Valid: true } target || _whitelistSystem.IsWhitelistFail(ent.Comp.Whitelist, target) || !args.CanReach) return; - Labeling(uid, target, args.User, handLabeler); - } - - private void Labeling(EntityUid uid, EntityUid target, EntityUid User, HandLabelerComponent handLabeler) - { - AddLabelTo(uid, handLabeler, target, out var result); - if (result == null) - return; - - _popupSystem.PopupClient(result, User, User); - - // Log labeling - _adminLogger.Add(LogType.Action, LogImpact.Low, - $"{ToPrettyString(User):user} labeled {ToPrettyString(target):target} with {ToPrettyString(uid):labeler}"); + AddLabelTo(ent, args.User, target); } private void OnHandLabelerLabelChanged(EntityUid uid, HandLabelerComponent handLabeler, HandLabelerLabelChangedMessage args) -- 2.52.0