]> git.smokeofanarchy.ru Git - space-station-14.git/commitdiff
Resolves GravityGeneratorVisualizer is Obsolete (#13885)
authorTemporalOroboros <TemporalOroboros@gmail.com>
Fri, 31 Mar 2023 05:04:53 +0000 (22:04 -0700)
committerGitHub <noreply@github.com>
Fri, 31 Mar 2023 05:04:53 +0000 (16:04 +1100)
Content.Client/Gravity/GravityGeneratorVisualizer.cs [deleted file]
Content.Client/Gravity/GravitySystem.cs
Content.Shared/Gravity/SharedGravityGeneratorComponent.cs
Content.Shared/Gravity/SharedGravitySystem.cs
Resources/Prototypes/Entities/Structures/Machines/gravity_generator.yml

diff --git a/Content.Client/Gravity/GravityGeneratorVisualizer.cs b/Content.Client/Gravity/GravityGeneratorVisualizer.cs
deleted file mode 100644 (file)
index f3f90fe..0000000
+++ /dev/null
@@ -1,93 +0,0 @@
-using System.Linq;
-using Content.Shared.Gravity;
-using JetBrains.Annotations;
-using Robust.Client.GameObjects;
-
-namespace Content.Client.Gravity
-{
-    [UsedImplicitly]
-    public sealed class GravityGeneratorVisualizer : AppearanceVisualizer
-    {
-        [DataField("spritemap")]
-        private Dictionary<string, string> _rawSpriteMap
-        {
-            get => _spriteMap.ToDictionary(x => x.Key.ToString().ToLower(), x => x.Value);
-            set
-            {
-                _spriteMap.Clear();
-                // Get Sprites for each status
-                foreach (var status in (GravityGeneratorStatus[]) Enum.GetValues(typeof(GravityGeneratorStatus)))
-                {
-                    if (value.TryGetValue(status.ToString().ToLower(), out var sprite))
-                    {
-                        _spriteMap[status] = sprite;
-                    }
-                }
-            }
-        }
-
-        private Dictionary<GravityGeneratorStatus, string> _spriteMap = new();
-
-        [Obsolete("Subscribe to your component being initialised instead.")]
-        public override void InitializeEntity(EntityUid entity)
-        {
-            base.InitializeEntity(entity);
-
-            if (!IoCManager.Resolve<IEntityManager>().TryGetComponent(entity, out SpriteComponent? sprite))
-                return;
-
-            sprite.LayerMapReserveBlank(GravityGeneratorVisualLayers.Base);
-            sprite.LayerMapReserveBlank(GravityGeneratorVisualLayers.Core);
-        }
-
-        [Obsolete("Subscribe to AppearanceChangeEvent instead.")]
-        public override void OnChangeData(AppearanceComponent component)
-        {
-            base.OnChangeData(component);
-
-            var sprite = IoCManager.Resolve<IEntityManager>().GetComponent<SpriteComponent>(component.Owner);
-
-            if (component.TryGetData(GravityGeneratorVisuals.State, out GravityGeneratorStatus state))
-            {
-                if (_spriteMap.TryGetValue(state, out var spriteState))
-                {
-                    var layer = sprite.LayerMapGet(GravityGeneratorVisualLayers.Base);
-                    sprite.LayerSetState(layer, spriteState);
-                }
-            }
-
-            if (component.TryGetData(GravityGeneratorVisuals.Charge, out float charge))
-            {
-                var layer = sprite.LayerMapGet(GravityGeneratorVisualLayers.Core);
-                switch (charge)
-                {
-                    case < 0.2f:
-                        sprite.LayerSetVisible(layer, false);
-                        break;
-                    case >= 0.2f and < 0.4f:
-                        sprite.LayerSetVisible(layer, true);
-                        sprite.LayerSetState(layer, "startup");
-                        break;
-                    case >= 0.4f and < 0.6f:
-                        sprite.LayerSetVisible(layer, true);
-                        sprite.LayerSetState(layer, "idle");
-                        break;
-                    case >= 0.6f and < 0.8f:
-                        sprite.LayerSetVisible(layer, true);
-                        sprite.LayerSetState(layer, "activating");
-                        break;
-                    default:
-                        sprite.LayerSetVisible(layer, true);
-                        sprite.LayerSetState(layer, "activated");
-                        break;
-                }
-            }
-        }
-
-        public enum GravityGeneratorVisualLayers : byte
-        {
-            Base,
-            Core
-        }
-    }
-}
index 346c7d79eb9c8671e4140bb2d288bc2f6503edc2..3e87f76ba2bf3641cac2bf4369890dc0b6af7a80 100644 (file)
@@ -1,12 +1,66 @@
 using Content.Shared.Gravity;
+using Robust.Client.GameObjects;
 
 namespace Content.Client.Gravity;
 
 public sealed partial class GravitySystem : SharedGravitySystem
 {
+    [Dependency] private readonly AppearanceSystem _appearanceSystem = default!;
     public override void Initialize()
     {
         base.Initialize();
+        SubscribeLocalEvent<SharedGravityGeneratorComponent, AppearanceChangeEvent>(OnAppearanceChange);
         InitializeShake();
     }
+
+    /// <summary>
+    /// Ensures that the visible state of gravity generators are synced with their sprites.
+    /// </summary>
+    private void OnAppearanceChange(EntityUid uid, SharedGravityGeneratorComponent comp, ref AppearanceChangeEvent args)
+    {
+        if (args.Sprite == null)
+            return;
+
+        if (_appearanceSystem.TryGetData<GravityGeneratorStatus>(uid, GravityGeneratorVisuals.State, out var state, args.Component))
+        {
+            if (comp.SpriteMap.TryGetValue(state, out var spriteState))
+            {
+                var layer = args.Sprite.LayerMapGet(GravityGeneratorVisualLayers.Base);
+                args.Sprite.LayerSetState(layer, spriteState);
+            }
+        }
+
+        if (_appearanceSystem.TryGetData<float>(uid, GravityGeneratorVisuals.Charge, out var charge, args.Component))
+        {
+            var layer = args.Sprite.LayerMapGet(GravityGeneratorVisualLayers.Core);
+            switch (charge)
+            {
+                case < 0.2f:
+                    args.Sprite.LayerSetVisible(layer, false);
+                    break;
+                case >= 0.2f and < 0.4f:
+                    args.Sprite.LayerSetVisible(layer, true);
+                    args.Sprite.LayerSetState(layer, comp.CoreStartupState);
+                    break;
+                case >= 0.4f and < 0.6f:
+                    args.Sprite.LayerSetVisible(layer, true);
+                    args.Sprite.LayerSetState(layer, comp.CoreIdleState);
+                    break;
+                case >= 0.6f and < 0.8f:
+                    args.Sprite.LayerSetVisible(layer, true);
+                    args.Sprite.LayerSetState(layer, comp.CoreActivatingState);
+                    break;
+                default:
+                    args.Sprite.LayerSetVisible(layer, true);
+                    args.Sprite.LayerSetState(layer, comp.CoreActivatedState);
+                    break;
+            }
+        }
+    }
+}
+
+public enum GravityGeneratorVisualLayers : byte
+{
+    Base,
+    Core
 }
index 78bec68e944d18b45967ed79e9fbf74d37765ccc..4b96a42da85375bbdef996d0ddb59ae5f0028d3c 100644 (file)
@@ -7,6 +7,41 @@ namespace Content.Shared.Gravity
     [Virtual]
     public class SharedGravityGeneratorComponent : Component
     {
+        /// <summary>
+        /// A map of the sprites used by the gravity generator given its status.
+        /// </summary>
+        [DataField("spriteMap")]
+        [Access(typeof(SharedGravitySystem))]
+        public Dictionary<GravityGeneratorStatus, string> SpriteMap = new();
+        
+        /// <summary>
+        /// The sprite used by the core of the gravity generator when the gravity generator is starting up.
+        /// </summary>
+        [DataField("coreStartupState")]
+        [ViewVariables(VVAccess.ReadWrite)]
+        public string CoreStartupState = "startup";
+        
+        /// <summary>
+        /// The sprite used by the core of the gravity generator when the gravity generator is idle.
+        /// </summary>
+        [DataField("coreIdleState")]
+        [ViewVariables(VVAccess.ReadWrite)]
+        public string CoreIdleState = "idle";
+        
+        /// <summary>
+        /// The sprite used by the core of the gravity generator when the gravity generator is activating.
+        /// </summary>
+        [DataField("coreActivatingState")]
+        [ViewVariables(VVAccess.ReadWrite)]
+        public string CoreActivatingState = "activating";
+        
+        /// <summary>
+        /// The sprite used by the core of the gravity generator when the gravity generator is active.
+        /// </summary>
+        [DataField("coreActivatedState")]
+        [ViewVariables(VVAccess.ReadWrite)]
+        public string CoreActivatedState = "activated";
+
         /// <summary>
         ///     Sent to the server to set whether the generator should be on or off
         /// </summary>
index 901461d157ed2b84c0ab50ed3b9457a5cd3d2c26..a65c386ae569762129958523e373797bed4c7875 100644 (file)
@@ -88,17 +88,18 @@ namespace Content.Shared.Gravity
 
         private void OnGravityChange(ref GravityChangedEvent ev)
         {
-            foreach (var (comp, xform) in EntityQuery<AlertsComponent, TransformComponent>(true))
+            var alerts = AllEntityQuery<AlertsComponent, TransformComponent>();
+            while(alerts.MoveNext(out var uid, out var comp, out var xform))
             {
                 if (xform.GridUid != ev.ChangedGridIndex) continue;
 
                 if (!ev.HasGravity)
                 {
-                    _alerts.ShowAlert(comp.Owner, AlertType.Weightless);
+                    _alerts.ShowAlert(uid, AlertType.Weightless);
                 }
                 else
                 {
-                    _alerts.ClearAlert(comp.Owner, AlertType.Weightless);
+                    _alerts.ClearAlert(uid, AlertType.Weightless);
                 }
             }
         }
@@ -117,7 +118,7 @@ namespace Content.Shared.Gravity
 
         private void OnAlertsParentChange(EntityUid uid, AlertsComponent component, ref EntParentChangedMessage args)
         {
-            if (IsWeightless(component.Owner))
+            if (IsWeightless(uid))
             {
                 _alerts.ShowAlert(uid, AlertType.Weightless);
             }
index 5e8dd326f64cda15d19af88fdef63cf2797b9212..5c8db0638f3e492517f9d27d09ac3a578c7dc6bb 100644 (file)
     activePower: 2500
     lightRadiusMin: 0.75
     lightRadiusMax: 2.5
+    spritemap:
+      broken: "broken"
+      unpowered: "off"
+      off: "off"
+      on: "on"
   - type: UserInterface
     interfaces:
       - key: enum.GravityGeneratorUiKey.Key
         type: GravityGeneratorBoundUserInterface
   - type: Appearance
-    visuals:
-    - type: GravityGeneratorVisualizer
-      spritemap:
-        broken: "broken"
-        unpowered: "off"
-        off: "off"
-        on: "on"
   - type: PointLight
     radius: 2.5
     energy: 0.5