]> git.smokeofanarchy.ru Git - space-station-14.git/commitdiff
Fix zoom command for aghost (#15687)
authormetalgearsloth <31366439+metalgearsloth@users.noreply.github.com>
Sun, 23 Apr 2023 08:28:51 +0000 (18:28 +1000)
committerGitHub <noreply@github.com>
Sun, 23 Apr 2023 08:28:51 +0000 (18:28 +1000)
Content.Client/Commands/ZoomCommand.cs
Content.Client/Movement/Systems/ContentEyeSystem.cs
Content.Server/Movement/Systems/ContentEyeSystem.cs
Content.Shared/Movement/Components/ActiveContentEyeComponent.cs [deleted file]
Content.Shared/Movement/Components/ContentEyeComponent.cs
Content.Shared/Movement/Systems/SharedContentEyeSystem.cs

index f3adb61ae2f4961b31f10e1f2ede56a06e9a7809..bdcfdaa6fa0d59e81e666ec8eab27cb916f66fb8 100644 (file)
@@ -1,5 +1,9 @@
+using Content.Client.Movement.Systems;
+using Content.Shared.Movement.Components;
+using Content.Shared.Movement.Systems;
 using JetBrains.Annotations;
 using Robust.Client.Graphics;
+using Robust.Client.Player;
 using Robust.Shared.Console;
 
 namespace Content.Client.Commands;
@@ -7,7 +11,9 @@ namespace Content.Client.Commands;
 [UsedImplicitly]
 public sealed class ZoomCommand : IConsoleCommand
 {
+    [Dependency] private readonly IEntityManager _entManager = default!;
     [Dependency] private readonly IEyeManager _eyeMan = default!;
+    [Dependency] private readonly IPlayerManager _playerManager = default!;
 
     public string Command => "zoom";
     public string Description => Loc.GetString("zoom-command-description");
@@ -53,6 +59,14 @@ public sealed class ZoomCommand : IConsoleCommand
             }
         }
 
+        var player = _playerManager.LocalPlayer?.ControlledEntity;
+
+        if (_entManager.TryGetComponent<ContentEyeComponent>(player, out var content))
+        {
+            _entManager.System<ContentEyeSystem>().RequestZoom(player.Value, zoom, content);
+            return;
+        }
+
         _eyeMan.CurrentEye.Zoom = zoom;
     }
 }
index 7ed0c771e1a46663626164db255ab711aa294a5b..9e7345e199778a9c9cbbefa8527af7fccbac3b32 100644 (file)
@@ -9,6 +9,17 @@ public sealed class ContentEyeSystem : SharedContentEyeSystem
 {
     [Dependency] private readonly IPlayerManager _player = default!;
 
+    public void RequestZoom(EntityUid uid, Vector2 zoom, ContentEyeComponent? content = null)
+    {
+        if (!Resolve(uid, ref content, false))
+            return;
+
+        RaisePredictiveEvent(new RequestTargetZoomEvent()
+        {
+            TargetZoom = zoom,
+        });
+    }
+
     public override void Update(float frameTime)
     {
         base.Update(frameTime);
index 9076028b50edee8273d8bff4be36ff38ece0dc84..54428d9bee4b45418452e0c801091915ed613b80 100644 (file)
@@ -9,19 +9,12 @@ public sealed class ContentEyeSystem : SharedContentEyeSystem
     {
         base.Update(frameTime);
 
-        var eyeQuery = GetEntityQuery<SharedEyeComponent>();
+        var query = AllEntityQuery<ContentEyeComponent, SharedEyeComponent>();
 
-        foreach (var (_, comp) in EntityQuery<ActiveContentEyeComponent, ContentEyeComponent>(true))
+        while (query.MoveNext(out var uid, out var comp, out var eyeComp))
         {
-            var uid = comp.Owner;
-
-            // Use a separate query jjuussstt in case any actives mistakenly hang around.
-            if (!eyeQuery.TryGetComponent(comp.Owner, out var eyeComp) ||
-                eyeComp.Zoom.Equals(comp.TargetZoom))
-            {
-                RemComp<ActiveContentEyeComponent>(comp.Owner);
+            if (eyeComp.Zoom.Equals(comp.TargetZoom))
                 continue;
-            }
 
             UpdateEye(uid, comp, eyeComp, frameTime);
         }
diff --git a/Content.Shared/Movement/Components/ActiveContentEyeComponent.cs b/Content.Shared/Movement/Components/ActiveContentEyeComponent.cs
deleted file mode 100644 (file)
index d81af98..0000000
+++ /dev/null
@@ -1,7 +0,0 @@
-namespace Content.Shared.Movement.Components;
-
-[RegisterComponent]
-public sealed class ActiveContentEyeComponent : Component
-{
-
-}
index 4af15ace858fa6d887b92782739da5b36f05202b..eac58161988caa1bb98d9f624fc0b007ef2980a2 100644 (file)
@@ -1,3 +1,4 @@
+using Content.Shared.Movement.Systems;
 using Robust.Shared.GameStates;
 
 namespace Content.Shared.Movement.Components;
@@ -5,18 +6,18 @@ namespace Content.Shared.Movement.Components;
 /// <summary>
 /// Holds SS14 eye data not relevant for engine, e.g. lerp targets.
 /// </summary>
-[RegisterComponent, NetworkedComponent]
-public sealed class ContentEyeComponent : Component
+[RegisterComponent, NetworkedComponent, AutoGenerateComponentState, Access(typeof(SharedContentEyeSystem))]
+public sealed partial class ContentEyeComponent : Component
 {
     /// <summary>
     /// Zoom we're lerping to.
     /// </summary>
-    [DataField("targetZoom")]
+    [DataField("targetZoom"), AutoNetworkedField]
     public Vector2 TargetZoom = Vector2.One;
 
     /// <summary>
     /// How far we're allowed to zoom out.
     /// </summary>
-    [ViewVariables(VVAccess.ReadWrite), DataField("maxZoom")]
+    [ViewVariables(VVAccess.ReadWrite), DataField("maxZoom"), AutoNetworkedField]
     public Vector2 MaxZoom = Vector2.One;
 }
index 1131beaa96590a9ae5ecc9dfc3b9c95c03d06f91..e58a7f81d75e8b7826f564787c6a1185b983f3aa 100644 (file)
@@ -1,11 +1,9 @@
 using Content.Shared.Input;
 using Content.Shared.Movement.Components;
-using Robust.Shared.GameStates;
 using Robust.Shared.Input;
 using Robust.Shared.Input.Binding;
 using Robust.Shared.Players;
 using Robust.Shared.Serialization;
-using Robust.Shared.Timing;
 
 namespace Content.Shared.Movement.Systems;
 
@@ -24,9 +22,8 @@ public abstract class SharedContentEyeSystem : EntitySystem
     public override void Initialize()
     {
         base.Initialize();
-        SubscribeLocalEvent<ContentEyeComponent, ComponentGetState>(OnGetState);
-        SubscribeLocalEvent<ContentEyeComponent, ComponentHandleState>(OnHandleState);
         SubscribeLocalEvent<ContentEyeComponent, ComponentStartup>(OnContentEyeStartup);
+        SubscribeAllEvent<RequestTargetZoomEvent>(OnContentZoomRequest);
 
         CommandBinds.Builder
             .Bind(ContentKeyFunctions.ZoomIn,  new ScrollInputCmdHandler(true, this))
@@ -37,6 +34,15 @@ public abstract class SharedContentEyeSystem : EntitySystem
         Sawmill.Level = LogLevel.Info;
     }
 
+    private void OnContentZoomRequest(RequestTargetZoomEvent msg, EntitySessionEventArgs args)
+    {
+        if (!TryComp<ContentEyeComponent>(args.SenderSession.AttachedEntity, out var content))
+            return;
+
+        content.TargetZoom = msg.TargetZoom;
+        Dirty(content);
+    }
+
     public override void Shutdown()
     {
         base.Shutdown();
@@ -52,24 +58,6 @@ public abstract class SharedContentEyeSystem : EntitySystem
         Dirty(component);
     }
 
-    private void OnGetState(EntityUid uid, ContentEyeComponent component, ref ComponentGetState args)
-    {
-        args.State = new ContentEyeComponentState()
-        {
-            TargetZoom = component.TargetZoom,
-            MaxZoom = component.MaxZoom,
-        };
-    }
-
-    private void OnHandleState(EntityUid uid, ContentEyeComponent component, ref ComponentHandleState args)
-    {
-        if (args.Current is not ContentEyeComponentState state)
-            return;
-
-        component.TargetZoom = state.TargetZoom;
-        component.MaxZoom = state.MaxZoom;
-    }
-
     protected void UpdateEye(EntityUid uid, ContentEyeComponent content, SharedEyeComponent eye, float frameTime)
     {
         var diff = content.TargetZoom - eye.Zoom;
@@ -78,7 +66,6 @@ public abstract class SharedContentEyeSystem : EntitySystem
         {
             eye.Zoom = content.TargetZoom;
             Dirty(eye);
-            RemComp<ActiveContentEyeComponent>(uid);
             return;
         }
 
@@ -102,7 +89,6 @@ public abstract class SharedContentEyeSystem : EntitySystem
             return;
 
         component.TargetZoom = Vector2.One;
-        EnsureComp<ActiveContentEyeComponent>(uid);
         Dirty(component);
     }
 
@@ -129,18 +115,10 @@ public abstract class SharedContentEyeSystem : EntitySystem
             return;
 
         component.TargetZoom = actual;
-        EnsureComp<ActiveContentEyeComponent>(uid);
         Dirty(component);
         Sawmill.Debug($"Set target zoom to {actual}");
     }
 
-    [Serializable, NetSerializable]
-    private sealed class ContentEyeComponentState : ComponentState
-    {
-        public Vector2 TargetZoom;
-        public Vector2 MaxZoom;
-    }
-
     private sealed class ResetZoomInputCmdHandler : InputCmdHandler
     {
         private readonly SharedContentEyeSystem _system;
@@ -192,4 +170,13 @@ public abstract class SharedContentEyeSystem : EntitySystem
             return false;
         }
     }
+
+    /// <summary>
+    /// Sendable from client to server to request a target zoom.
+    /// </summary>
+    [Serializable, NetSerializable]
+    public sealed class RequestTargetZoomEvent : EntityEventArgs
+    {
+        public Vector2 TargetZoom;
+    }
 }