]> git.smokeofanarchy.ru Git - space-station-14.git/commitdiff
Resolves ThrusterVisualizer is Obsolete (#13904)
authorTemporalOroboros <TemporalOroboros@gmail.com>
Sun, 7 May 2023 13:37:28 +0000 (06:37 -0700)
committerGitHub <noreply@github.com>
Sun, 7 May 2023 13:37:28 +0000 (23:37 +1000)
Co-authored-by: metalgearsloth <comedian_vs_clown@hotmail.com>
Content.Client/Shuttles/ThrusterComponent.cs [new file with mode: 0644]
Content.Client/Shuttles/ThrusterSystem.cs [new file with mode: 0644]
Content.Client/Shuttles/ThrusterVisualizer.cs [deleted file]
Content.Server/Shuttles/Components/ThrusterComponent.cs
Resources/Prototypes/Entities/Structures/Shuttles/thrusters.yml

diff --git a/Content.Client/Shuttles/ThrusterComponent.cs b/Content.Client/Shuttles/ThrusterComponent.cs
new file mode 100644 (file)
index 0000000..85795b2
--- /dev/null
@@ -0,0 +1,12 @@
+using Robust.Shared.GameStates;
+
+namespace Content.Client.Shuttles;
+
+/// <summary>
+/// A component that emits a visible exhaust plume if the entity is an active thruster.
+/// Managed by <see cref="ThrusterSystem"/>
+/// </summary>
+[RegisterComponent, NetworkedComponent, Access(typeof(ThrusterSystem))]
+public sealed class ThrusterComponent : Component
+{
+}
diff --git a/Content.Client/Shuttles/ThrusterSystem.cs b/Content.Client/Shuttles/ThrusterSystem.cs
new file mode 100644 (file)
index 0000000..afa5b77
--- /dev/null
@@ -0,0 +1,51 @@
+using Content.Shared.Shuttles.Components;
+using Robust.Client.GameObjects;
+
+namespace Content.Client.Shuttles;
+
+/// <summary>
+/// Handles making a thruster visibly turn on/emit an exhaust plume according to its state. 
+/// </summary>
+public sealed class ThrusterSystem : VisualizerSystem<ThrusterComponent>
+{
+    /// <summary>
+    /// Updates whether or not the thruster is visibly active/thrusting.
+    /// </summary>
+    protected override void OnAppearanceChange(EntityUid uid, ThrusterComponent comp, ref AppearanceChangeEvent args)
+    {
+        if (args.Sprite == null
+        || !AppearanceSystem.TryGetData<bool>(uid, ThrusterVisualState.State, out var state, args.Component))
+            return;
+
+        args.Sprite.LayerSetVisible(ThrusterVisualLayers.ThrustOn, state);
+        SetThrusting(
+            uid,
+            state && AppearanceSystem.TryGetData<bool>(uid, ThrusterVisualState.Thrusting, out var thrusting, args.Component) && thrusting,
+            args.Sprite
+        );
+    }
+
+    /// <summary>
+    /// Sets whether or not the exhaust plume of the thruster is visible or not.
+    /// </summary>
+    private static void SetThrusting(EntityUid _, bool value, SpriteComponent sprite)
+    {
+        if (sprite.LayerMapTryGet(ThrusterVisualLayers.Thrusting, out var thrustingLayer))
+        {
+            sprite.LayerSetVisible(thrustingLayer, value);
+        }
+
+        if (sprite.LayerMapTryGet(ThrusterVisualLayers.ThrustingUnshaded, out var unshadedLayer))
+        {
+            sprite.LayerSetVisible(unshadedLayer, value);
+        }
+    }
+}
+
+public enum ThrusterVisualLayers : byte
+{
+    Base,
+    ThrustOn,
+    Thrusting,
+    ThrustingUnshaded,
+}
diff --git a/Content.Client/Shuttles/ThrusterVisualizer.cs b/Content.Client/Shuttles/ThrusterVisualizer.cs
deleted file mode 100644 (file)
index 3e56ef4..0000000
+++ /dev/null
@@ -1,71 +0,0 @@
-using Content.Shared.Shuttles.Components;
-using Robust.Client.GameObjects;
-using Robust.Shared.GameObjects;
-using Robust.Shared.IoC;
-
-namespace Content.Client.Shuttles
-{
-    public sealed class ThrusterVisualizer : AppearanceVisualizer
-    {
-        [Obsolete("Subscribe to AppearanceChangeEvent instead.")]
-        public override void OnChangeData(AppearanceComponent component)
-        {
-            base.OnChangeData(component);
-
-            var entities = IoCManager.Resolve<IEntityManager>();
-            if (!entities.TryGetComponent(component.Owner, out SpriteComponent? spriteComponent)) return;
-
-            component.TryGetData(ThrusterVisualState.State, out bool state);
-
-            switch (state)
-            {
-                case true:
-                    spriteComponent.LayerSetVisible(ThrusterVisualLayers.ThrustOn, true);
-
-                    if (component.TryGetData(ThrusterVisualState.Thrusting, out bool thrusting) && thrusting)
-                    {
-                        if (spriteComponent.LayerMapTryGet(ThrusterVisualLayers.Thrusting, out _))
-                        {
-                            spriteComponent.LayerSetVisible(ThrusterVisualLayers.Thrusting, true);
-                        }
-
-                        if (spriteComponent.LayerMapTryGet(ThrusterVisualLayers.ThrustingUnshaded, out _))
-                        {
-                            spriteComponent.LayerSetVisible(ThrusterVisualLayers.ThrustingUnshaded, true);
-                        }
-                    }
-                    else
-                    {
-                        DisableThrusting(component, spriteComponent);
-                    }
-
-                    break;
-                case false:
-                    spriteComponent.LayerSetVisible(ThrusterVisualLayers.ThrustOn, false);
-                    DisableThrusting(component, spriteComponent);
-                    break;
-            }
-        }
-
-        private void DisableThrusting(AppearanceComponent component, SpriteComponent spriteComponent)
-        {
-            if (spriteComponent.LayerMapTryGet(ThrusterVisualLayers.Thrusting, out _))
-            {
-                spriteComponent.LayerSetVisible(ThrusterVisualLayers.Thrusting, false);
-            }
-
-            if (spriteComponent.LayerMapTryGet(ThrusterVisualLayers.ThrustingUnshaded, out _))
-            {
-                spriteComponent.LayerSetVisible(ThrusterVisualLayers.ThrustingUnshaded, false);
-            }
-        }
-    }
-
-    public enum ThrusterVisualLayers : byte
-    {
-        Base,
-        ThrustOn,
-        Thrusting,
-        ThrustingUnshaded,
-    }
-}
index a7713473c0dfd04fd0d3426ec5801e4ea05764a8..4adf3d7b8001e14a547fd6d5dc172966d8a2f7e1 100644 (file)
@@ -1,12 +1,13 @@
 using Content.Server.Shuttles.Systems;
 using Content.Shared.Construction.Prototypes;
 using Content.Shared.Damage;
+using Robust.Shared.GameStates;
 using Robust.Shared.Serialization.TypeSerializers.Implementations.Custom;
 using Robust.Shared.Serialization.TypeSerializers.Implementations.Custom.Prototype;
 
 namespace Content.Server.Shuttles.Components
 {
-    [RegisterComponent]
+    [RegisterComponent, NetworkedComponent]
     [Access(typeof(ThrusterSystem))]
     public sealed class ThrusterComponent : Component
     {
index f423f2b8e04d614e026ba18b6601b47a8ae5e662..c50c67adb7bf1ffe7b071daf92c2dccf56d03749 100644 (file)
@@ -23,8 +23,7 @@
     - type: Sprite
       netsync: false
     - type: Appearance
-      visuals:
-      - type: ThrusterVisualizer
+    - type: ThrusterVisuals
     - type: ApcPowerReceiver
       powerLoad: 1500
     - type: ExtensionCableReceiver
     - state: thrust
       map: ["enum.ThrusterVisualLayers.ThrustOn"]
       shader: unshaded
+      visible: false
     - state: thrust_burn_unshaded
       map: ["enum.ThrusterVisualLayers.ThrustingUnshaded"]
       shader: unshaded
+      visible: false
       offset: 0, 1
 
 - type: entity
     - state: thrust
       map: ["enum.ThrusterVisualLayers.ThrustOn"]
       shader: unshaded
+      visible: false
     - state: thrust_burn_unshaded
       map: ["enum.ThrusterVisualLayers.ThrustingUnshaded"]
       shader: unshaded
+      visible: false
       offset: 0, 1
 
 - type: entity
     - state: thrust
       map: ["enum.ThrusterVisualLayers.ThrustOn"]
       shader: unshaded
+      visible: false
     - state: thrust_burn
       map: [ "enum.ThrusterVisualLayers.Thrusting" ]
+      visible: false
     - state: thrust_burn_unshaded
       map: ["enum.ThrusterVisualLayers.ThrustingUnshaded"]
       shader: unshaded
+      visible: false
   - type: PointLight
     radius: 1.3
     energy: 0.8
     - state: thrust
       map: ["enum.ThrusterVisualLayers.ThrustOn"]
       shader: unshaded
+      visible: false
     - state: thrust_burn_unshaded
       map: ["enum.ThrusterVisualLayers.ThrustingUnshaded"]
       shader: unshaded
+      visible: false
       offset: 0, 1