]> git.smokeofanarchy.ru Git - space-station-14.git/commitdiff
Verb tweaks (#31309)
authormetalgearsloth <31366439+metalgearsloth@users.noreply.github.com>
Sun, 25 Aug 2024 12:05:39 +0000 (22:05 +1000)
committerGitHub <noreply@github.com>
Sun, 25 Aug 2024 12:05:39 +0000 (22:05 +1000)
* Verb tweaks

Remove the LOS check because this is already done above in CanExamine.

* Fix outlines

* import

Content.Client/Commands/SetMenuVisibilityCommand.cs
Content.Client/ContextMenu/UI/EntityMenuUIController.cs
Content.Client/Verbs/VerbSystem.cs
Content.Shared/Verbs/SharedVerbSystem.cs

index ddfb0b16920628a247fe64d6a48197396fe6ed7a..17a544dabaf37fc3c7f83e5d949ad9b1a2263caf 100644 (file)
@@ -1,4 +1,5 @@
 using Content.Client.Verbs;
+using Content.Shared.Verbs;
 using JetBrains.Annotations;
 using Robust.Shared.Console;
 
index 0462c095ba898e4b40dd813025a54869ad205060..bda831394d3f5428c23ae4c703a7139569770b8d 100644 (file)
@@ -9,6 +9,7 @@ using Content.Shared.CCVar;
 using Content.Shared.Examine;
 using Content.Shared.IdentityManagement;
 using Content.Shared.Input;
+using Content.Shared.Verbs;
 using Robust.Client.GameObjects;
 using Robust.Client.Graphics;
 using Robust.Client.Input;
@@ -194,8 +195,20 @@ namespace Content.Client.ContextMenu.UI
                 return;
 
             // Do we need to do in-range unOccluded checks?
-            var ignoreFov = !_eyeManager.CurrentEye.DrawFov ||
-                (_verbSystem.Visibility & MenuVisibility.NoFov) == MenuVisibility.NoFov;
+            var visibility = _verbSystem.Visibility;
+
+            if (!_eyeManager.CurrentEye.DrawFov)
+            {
+                visibility &= ~MenuVisibility.NoFov;
+            }
+
+            var ev = new MenuVisibilityEvent()
+            {
+                Visibility = visibility,
+            };
+
+            _entityManager.EventBus.RaiseLocalEvent(player, ref ev);
+            visibility = ev.Visibility;
 
             _entityManager.TryGetComponent(player, out ExaminerComponent? examiner);
             var xformQuery = _entityManager.GetEntityQuery<TransformComponent>();
@@ -209,7 +222,7 @@ namespace Content.Client.ContextMenu.UI
                     continue;
                 }
 
-                if (ignoreFov)
+                if ((visibility & MenuVisibility.NoFov) == MenuVisibility.NoFov)
                     continue;
 
                 var pos = new MapCoordinates(_xform.GetWorldPosition(xform, xformQuery), xform.MapID);
index 5f1f49e5fd08b3cfd81354b6f38d862fb9fa2b2e..c3e03528a79232539a334edbad8c8b2df64310b1 100644 (file)
@@ -67,6 +67,14 @@ namespace Content.Client.Verbs
                 ? Visibility
                 : Visibility | MenuVisibility.NoFov;
 
+            var ev = new MenuVisibilityEvent()
+            {
+                TargetPos = targetPos,
+                Visibility = visibility,
+            };
+
+            RaiseLocalEvent(player.Value, ref ev);
+            visibility = ev.Visibility;
 
             // Get entities
             List<EntityUid> entities;
@@ -77,13 +85,8 @@ namespace Content.Client.Verbs
                 var entitiesUnderMouse = gameScreenBase.GetClickableEntities(targetPos).ToHashSet();
                 bool Predicate(EntityUid e) => e == player || entitiesUnderMouse.Contains(e);
 
-                // first check the general location.
-                if (!_examine.CanExamine(player.Value, targetPos, Predicate))
-                    return false;
-
                 TryComp(player.Value, out ExaminerComponent? examiner);
 
-                // Then check every entity
                 entities = new();
                 foreach (var ent in _entityLookup.GetEntitiesInRange(targetPos, EntityMenuLookupSize))
                 {
@@ -137,27 +140,6 @@ namespace Content.Client.Verbs
                 }
             }
 
-            // Remove any entities that do not have LOS
-            if ((visibility & MenuVisibility.NoFov) == 0)
-            {
-                var xformQuery = GetEntityQuery<TransformComponent>();
-                var playerPos = _transform.GetMapCoordinates(player.Value, xform: xformQuery.GetComponent(player.Value));
-
-                for (var i = entities.Count - 1; i >= 0; i--)
-                {
-                    var entity = entities[i];
-
-                    if (!_examine.InRangeUnOccluded(
-                        playerPos,
-                        _transform.GetMapCoordinates(entity, xform: xformQuery.GetComponent(entity)),
-                        ExamineSystemShared.ExamineRange,
-                        null))
-                    {
-                        entities.RemoveSwap(i);
-                    }
-                }
-            }
-
             if (entities.Count == 0)
                 return false;
 
@@ -229,15 +211,4 @@ namespace Content.Client.Verbs
             OnVerbsResponse?.Invoke(msg);
         }
     }
-
-    [Flags]
-    public enum MenuVisibility
-    {
-        // What entities can a user see on the entity menu?
-        Default = 0,          // They can only see entities in FoV.
-        NoFov = 1 << 0,         // They ignore FoV restrictions
-        InContainer = 1 << 1,   // They can see through containers.
-        Invisible = 1 << 2,   // They can see entities without sprites and the "HideContextMenu" tag is ignored.
-        All = NoFov | InContainer | Invisible
-    }
 }
index 319f927c7b3d415f636b3b16106b28ac5e4cb1bf..db17599d87f3292cdb3efa7826d010474a0c6b53 100644 (file)
@@ -3,6 +3,7 @@ using Content.Shared.Hands.Components;
 using Content.Shared.Interaction;
 using Content.Shared.Inventory.VirtualItem;
 using Robust.Shared.Containers;
+using Robust.Shared.Map;
 
 namespace Content.Shared.Verbs
 {
@@ -173,4 +174,27 @@ namespace Content.Shared.Verbs
                 _interactionSystem.DoContactInteraction(user, target);
         }
     }
+
+    // Does nothing on server
+    /// <summary>
+    /// Raised directed when trying to get the entity menu visibility for entities.
+    /// </summary>
+    [ByRefEvent]
+    public record struct MenuVisibilityEvent
+    {
+        public MapCoordinates TargetPos;
+        public MenuVisibility Visibility;
+    }
+
+    // Does nothing on server
+    [Flags]
+    public enum MenuVisibility
+    {
+        // What entities can a user see on the entity menu?
+        Default = 0,          // They can only see entities in FoV.
+        NoFov = 1 << 0,         // They ignore FoV restrictions
+        InContainer = 1 << 1,   // They can see through containers.
+        Invisible = 1 << 2,   // They can see entities without sprites and the "HideContextMenu" tag is ignored.
+        All = NoFov | InContainer | Invisible
+    }
 }