]> git.smokeofanarchy.ru Git - space-station-14.git/commitdiff
Fix ghost FOV bug (#21614)
authorLeon Friedrich <60421075+ElectroJr@users.noreply.github.com>
Sun, 12 Nov 2023 18:36:00 +0000 (05:36 +1100)
committerGitHub <noreply@github.com>
Sun, 12 Nov 2023 18:36:00 +0000 (05:36 +1100)
Content.Client/Ghost/GhostSystem.cs
Content.Client/Movement/Systems/ContentEyeSystem.cs
Content.Shared/Chemistry/Components/Solution.cs
Content.Shared/Ghost/GhostComponent.cs
Content.Shared/Movement/Systems/SharedContentEyeSystem.cs

index 1a82be3da4ede46bb09024c020159a5475010c35..f6913d2578648763ec2364f2a96a4334f39f0945 100644 (file)
@@ -14,8 +14,8 @@ namespace Content.Client.Ghost
         [Dependency] private readonly IClientConsoleHost _console = default!;
         [Dependency] private readonly IPlayerManager _playerManager = default!;
         [Dependency] private readonly SharedActionsSystem _actions = default!;
-        [Dependency] private readonly ILightManager _lightManager = default!;
         [Dependency] private readonly ContentEyeSystem _contentEye = default!;
+        [Dependency] private readonly EyeSystem _eye = default!;
 
         public int AvailableGhostRoleCount { get; private set; }
 
@@ -36,7 +36,7 @@ namespace Content.Client.Ghost
                 var query = AllEntityQuery<GhostComponent, SpriteComponent>();
                 while (query.MoveNext(out var uid, out _, out var sprite))
                 {
-                    sprite.Visible = value || uid == _playerManager.LocalPlayer?.ControlledEntity;
+                    sprite.Visible = value || uid == _playerManager.LocalEntity;
                 }
             }
         }
@@ -62,39 +62,37 @@ namespace Content.Client.Ghost
             SubscribeLocalEvent<GhostComponent, LocalPlayerAttachedEvent>(OnGhostPlayerAttach);
             SubscribeLocalEvent<GhostComponent, LocalPlayerDetachedEvent>(OnGhostPlayerDetach);
 
-            SubscribeLocalEvent<LocalPlayerAttachedEvent>(OnPlayerAttach);
-
             SubscribeNetworkEvent<GhostWarpsResponseEvent>(OnGhostWarpsResponse);
             SubscribeNetworkEvent<GhostUpdateGhostRoleCountEvent>(OnUpdateGhostRoleCount);
 
-            SubscribeLocalEvent<GhostComponent, ToggleLightingActionEvent>(OnToggleLighting);
-            SubscribeLocalEvent<GhostComponent, ToggleFoVActionEvent>(OnToggleFoV);
+            SubscribeLocalEvent<EyeComponent, ToggleLightingActionEvent>(OnToggleLighting);
+            SubscribeLocalEvent<EyeComponent, ToggleFoVActionEvent>(OnToggleFoV);
             SubscribeLocalEvent<GhostComponent, ToggleGhostsActionEvent>(OnToggleGhosts);
         }
 
         private void OnStartup(EntityUid uid, GhostComponent component, ComponentStartup args)
         {
             if (TryComp(uid, out SpriteComponent? sprite))
-                sprite.Visible = GhostVisibility;
+                sprite.Visible = GhostVisibility || uid == _playerManager.LocalEntity;
         }
 
-        private void OnToggleLighting(EntityUid uid, GhostComponent component, ToggleLightingActionEvent args)
+        private void OnToggleLighting(EntityUid uid, EyeComponent component, ToggleLightingActionEvent args)
         {
             if (args.Handled)
                 return;
 
             Popup.PopupEntity(Loc.GetString("ghost-gui-toggle-lighting-manager-popup"), args.Performer);
-            _lightManager.Enabled = !_lightManager.Enabled;
+            _contentEye.RequestToggleLight(uid, component);
             args.Handled = true;
         }
 
-        private void OnToggleFoV(EntityUid uid, GhostComponent component, ToggleFoVActionEvent args)
+        private void OnToggleFoV(EntityUid uid, EyeComponent component, ToggleFoVActionEvent args)
         {
             if (args.Handled)
                 return;
 
             Popup.PopupEntity(Loc.GetString("ghost-gui-toggle-fov-popup"), args.Performer);
-            _contentEye.RequestToggleFov(uid);
+            _contentEye.RequestToggleFov(uid, component);
             args.Handled = true;
         }
 
@@ -105,7 +103,7 @@ namespace Content.Client.Ghost
 
             Popup.PopupEntity(Loc.GetString("ghost-gui-toggle-ghost-visibility-popup"), args.Performer);
 
-            if (uid == _playerManager.LocalPlayer?.ControlledEntity)
+            if (uid == _playerManager.LocalEntity)
                 ToggleGhostVisibility();
 
             args.Handled = true;
@@ -118,26 +116,16 @@ namespace Content.Client.Ghost
             _actions.RemoveAction(uid, component.ToggleGhostsActionEntity);
             _actions.RemoveAction(uid, component.ToggleGhostHearingActionEntity);
 
-            if (uid != _playerManager.LocalPlayer?.ControlledEntity)
+            if (uid != _playerManager.LocalEntity)
                 return;
 
-            _lightManager.Enabled = true;
-
-            if (component.IsAttached)
-            {
-                GhostVisibility = false;
-            }
-
+            GhostVisibility = false;
             PlayerRemoved?.Invoke(component);
         }
 
         private void OnGhostPlayerAttach(EntityUid uid, GhostComponent component, LocalPlayerAttachedEvent localPlayerAttachedEvent)
         {
-            if (uid != _playerManager.LocalPlayer?.ControlledEntity)
-                return;
-
             GhostVisibility = true;
-            component.IsAttached = true;
             PlayerAttached?.Invoke(component);
         }
 
@@ -146,32 +134,16 @@ namespace Content.Client.Ghost
             if (TryComp<SpriteComponent>(uid, out var sprite))
                 sprite.LayerSetColor(0, component.color);
 
-            if (uid != _playerManager.LocalPlayer?.ControlledEntity)
+            if (uid != _playerManager.LocalEntity)
                 return;
 
             PlayerUpdated?.Invoke(component);
         }
 
-        private bool PlayerDetach(EntityUid uid)
+        private void OnGhostPlayerDetach(EntityUid uid, GhostComponent component, LocalPlayerDetachedEvent args)
         {
-            if (uid != _playerManager.LocalPlayer?.ControlledEntity)
-                return false;
-
             GhostVisibility = false;
             PlayerDetached?.Invoke();
-            return true;
-        }
-
-        private void OnGhostPlayerDetach(EntityUid uid, GhostComponent component, LocalPlayerDetachedEvent args)
-        {
-            if (PlayerDetach(uid))
-                component.IsAttached = false;
-        }
-
-        private void OnPlayerAttach(LocalPlayerAttachedEvent ev)
-        {
-            if (!HasComp<GhostComponent>(ev.Entity))
-                PlayerDetach(ev.Entity);
         }
 
         private void OnGhostWarpsResponse(GhostWarpsResponseEvent msg)
index 4056f5fd8594539076879824f4ef261b3a02d50d..d8f73b0057e0603ad7bf554d9f13975cec9e56d5 100644 (file)
@@ -30,14 +30,18 @@ public sealed class ContentEyeSystem : SharedContentEyeSystem
     public void RequestToggleFov(EntityUid uid, EyeComponent? eye = null)
     {
         if (Resolve(uid, ref eye, false))
-            RequestFov(!eye.DrawFov);
+            RequestEye(!eye.DrawFov, eye.DrawLight);
     }
 
-    public void RequestFov(bool value)
+    public void RequestToggleLight(EntityUid uid, EyeComponent? eye = null)
     {
-        RaisePredictiveEvent(new RequestFovEvent()
-        {
-            Fov = value,
-        });
+        if (Resolve(uid, ref eye, false))
+            RequestEye(eye.DrawFov, !eye.DrawLight);
+    }
+
+
+    public void RequestEye(bool drawFov, bool drawLight)
+    {
+        RaisePredictiveEvent(new RequestEyeEvent(drawFov, drawLight));
     }
 }
index d793d3f70c92835a38e0946a2fdfe9bc0b4537ff..ca597710d48a2058694944828fe57ff2eecaad3e 100644 (file)
@@ -301,6 +301,18 @@ namespace Content.Shared.Chemistry.Components
             return total;
         }
 
+        public FixedPoint2 GetTotalPrototypeQuantity(string id)
+        {
+            var total = FixedPoint2.Zero;
+            foreach (var (reagent, quantity) in Contents)
+            {
+                if (id == reagent.Prototype)
+                    total += quantity;
+            }
+
+            return total;
+        }
+
         public ReagentId? GetPrimaryReagentId()
         {
             if (Contents.Count == 0)
index 9090af4dbaae2528f6ded12208b1bc861ff12bad..15d177f069c6afa99b33fc44c90aaf531ee0d18e 100644 (file)
@@ -8,10 +8,6 @@ namespace Content.Shared.Ghost;
 [AutoGenerateComponentState(true)]
 public sealed partial class GhostComponent : Component
 {
-    // I have no idea what this means I just wanted to kill comp references.
-    [ViewVariables]
-    public bool IsAttached;
-
     // Actions
     [DataField]
     public EntProtoId ToggleLightingAction = "ActionToggleLighting";
index 4b81619fd07214ad9b9bd7ede17503848ae538e1..d5dcaf0cbf4aea17fb1196103dc0b20f1644526f 100644 (file)
@@ -28,7 +28,7 @@ public abstract class SharedContentEyeSystem : EntitySystem
         base.Initialize();
         SubscribeLocalEvent<ContentEyeComponent, ComponentStartup>(OnContentEyeStartup);
         SubscribeAllEvent<RequestTargetZoomEvent>(OnContentZoomRequest);
-        SubscribeAllEvent<RequestFovEvent>(OnRequestFov);
+        SubscribeAllEvent<RequestEyeEvent>(OnRequestEye);
 
         CommandBinds.Builder
             .Bind(ContentKeyFunctions.ZoomIn, InputCmdHandler.FromDelegate(ZoomIn, handle:false))
@@ -89,7 +89,7 @@ public abstract class SharedContentEyeSystem : EntitySystem
             SetZoom(args.SenderSession.AttachedEntity.Value, msg.TargetZoom, ignoreLimit, eye: content);
     }
 
-    private void OnRequestFov(RequestFovEvent msg, EntitySessionEventArgs args)
+    private void OnRequestEye(RequestEyeEvent msg, EntitySessionEventArgs args)
     {
         if (args.SenderSession.AttachedEntity is not { } player)
             return;
@@ -99,7 +99,8 @@ public abstract class SharedContentEyeSystem : EntitySystem
 
         if (TryComp<EyeComponent>(player, out var eyeComp))
         {
-            _eye.SetDrawFov(player, msg.Fov, eyeComp);
+            _eye.SetDrawFov(player, msg.DrawFov, eyeComp);
+            _eye.SetDrawLight((player, eyeComp), msg.DrawLight);
         }
     }
 
@@ -141,8 +142,15 @@ public abstract class SharedContentEyeSystem : EntitySystem
     /// Sendable from client to server to request changing fov.
     /// </summary>
     [Serializable, NetSerializable]
-    public sealed class RequestFovEvent : EntityEventArgs
+    public sealed class RequestEyeEvent : EntityEventArgs
     {
-        public bool Fov;
+        public readonly bool DrawFov;
+        public readonly bool DrawLight;
+
+        public RequestEyeEvent(bool drawFov, bool drawLight)
+        {
+            DrawFov = drawFov;
+            DrawLight = drawLight;
+        }
     }
 }