]> git.smokeofanarchy.ru Git - space-station-14.git/commitdiff
Hand labeler can always remove labels (#40330)
authorAbsotively <jen@jenpollock.ca>
Sat, 13 Dec 2025 19:01:00 +0000 (12:01 -0700)
committerGitHub <noreply@github.com>
Sat, 13 Dec 2025 19:01:00 +0000 (19:01 +0000)
* Hand labeler can always remove labels

* Simplify labeling functions

* Address review comments

* Use Entity<Component> more places

* Always use default style for remove label verb

Content.Shared/Labels/EntitySystems/SharedHandLabelerSystem.cs

index 4dc5f86f2718d4fa197e04b75cae03ec12c64f5d..6d4926a6ef7956b6295de63b99154f0df8bc5078 100644 (file)
@@ -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<HandLabelerComponent> 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<UtilityVerb> 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<HandLabelerComponent> ent, ref GetVerbsEvent<UtilityVerb> 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<HandLabelerComponent> 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)