]> git.smokeofanarchy.ru Git - space-station-14.git/commitdiff
Resolves SingularityVisualizer is Obsolete (#13906)
authorTemporalOroboros <TemporalOroboros@gmail.com>
Sat, 11 Feb 2023 11:41:16 +0000 (03:41 -0800)
committerGitHub <noreply@github.com>
Sat, 11 Feb 2023 11:41:16 +0000 (11:41 +0000)
* Split SingularityVisualizer into Component/System pair

* Server ignore SingularityVisualizer

* Update YAML

* Move to SingularityComponent

Content.Client/Singularity/Systems/SingularitySystem.cs
Content.Client/Singularity/Visualizers/SingularityVisualizer.cs [deleted file]
Content.Shared/Singularity/Components/SingularityComponent.cs
Resources/Prototypes/Entities/Structures/Power/Generation/Singularity/singularity.yml

index fc242a20661421b75f9834e2ed732ae6dc2ae15f..afc9c5bb22b40b58a38197692294b1af065f535f 100644 (file)
@@ -1,6 +1,9 @@
-using Robust.Shared.GameStates;
+using Content.Shared.Singularity;
 using Content.Shared.Singularity.Components;
 using Content.Shared.Singularity.EntitySystems;
+using Robust.Client.GameObjects;
+using Robust.Shared.GameStates;
+using Robust.Shared.Utility;
 
 namespace Content.Client.Singularity.EntitySystems;
 
@@ -10,11 +13,14 @@ namespace Content.Client.Singularity.EntitySystems;
 /// </summary>
 public sealed class SingularitySystem : SharedSingularitySystem
 {
+    [Dependency] private readonly AppearanceSystem _appearanceSystem = default!;
+
     public override void Initialize()
     {
         base.Initialize();
 
         SubscribeLocalEvent<SingularityComponent, ComponentHandleState>(HandleSingularityState);
+        SubscribeLocalEvent<SingularityComponent, AppearanceChangeEvent>(OnAppearanceChange);
     }
 
     /// <summary>
@@ -30,4 +36,31 @@ public sealed class SingularitySystem : SharedSingularitySystem
 
         SetLevel(uid, state.Level, comp);
     }
+
+    /// <summary>
+    /// Handles ensuring that the singularity has a sprite to see.
+    /// </summary>
+    protected override void OnSingularityStartup(EntityUid uid, SingularityComponent comp, ComponentStartup args)
+    {
+        base.OnSingularityStartup(uid, comp, args);
+        if (TryComp<SpriteComponent>(uid, out var sprite))
+        {
+            sprite.LayerMapReserveBlank(comp.Layer);
+        }
+    }
+
+    /// <summary>
+    /// Handles updating the visible state of the singularity to reflect its current level.
+    /// </summary>
+    private void OnAppearanceChange(EntityUid uid, SingularityComponent comp, ref AppearanceChangeEvent args)
+    {
+        if (args.Sprite == null)
+            return;
+
+        if(!_appearanceSystem.TryGetData<byte>(uid, SingularityVisuals.Level, out var level, args.Component))
+            return;
+
+        args.Sprite.LayerSetSprite(comp.Layer,
+            new SpriteSpecifier.Rsi(new ResourcePath($"{comp.BaseSprite.RsiPath}_{level}.rsi"), $"{comp.BaseSprite.RsiState}_{level}"));
+    }
 }
diff --git a/Content.Client/Singularity/Visualizers/SingularityVisualizer.cs b/Content.Client/Singularity/Visualizers/SingularityVisualizer.cs
deleted file mode 100644 (file)
index 01f9532..0000000
+++ /dev/null
@@ -1,43 +0,0 @@
-using Content.Shared.Singularity;
-using JetBrains.Annotations;
-using Robust.Client.GameObjects;
-using Robust.Shared.GameObjects;
-using Robust.Shared.IoC;
-using Robust.Shared.Serialization.Manager.Attributes;
-using Robust.Shared.Utility;
-
-namespace Content.Client.Singularity.Visualizers
-{
-    [UsedImplicitly]
-    public sealed class SingularityVisualizer : AppearanceVisualizer
-    {
-        [DataField("layer")]
-        private int Layer { get; } = 0;
-
-        [Obsolete("Subscribe to your component being initialised instead.")]
-        public override void InitializeEntity(EntityUid entity)
-        {
-            base.InitializeEntity(entity);
-
-            IoCManager.Resolve<IEntityManager>().GetComponentOrNull<SpriteComponent>(entity)?.LayerMapReserveBlank(Layer);
-        }
-
-        [Obsolete("Subscribe to AppearanceChangeEvent instead.")]
-        public override void OnChangeData(AppearanceComponent component)
-        {
-            base.OnChangeData(component);
-
-            if (!IoCManager.Resolve<IEntityManager>().TryGetComponent(component.Owner, out SpriteComponent? sprite))
-            {
-                return;
-            }
-
-            if (!component.TryGetData(SingularityVisuals.Level, out byte level))
-            {
-                return;
-            }
-
-            sprite.LayerSetSprite(Layer, new SpriteSpecifier.Rsi(new ResourcePath("Structures/Power/Generation/Singularity/singularity_" + level + ".rsi"), "singularity_" + level));
-        }
-    }
-}
index 64ac2d6ef061d385cc7d0252a79ec5d51a5c6137..8753a886095ff16b4776d263d19f2e017d595fe8 100644 (file)
@@ -2,6 +2,7 @@ using Robust.Shared.GameStates;
 
 using Content.Shared.Singularity.EntitySystems;
 using Robust.Shared.Audio;
+using Robust.Shared.Utility;
 
 namespace Content.Shared.Singularity.Components;
 
@@ -81,6 +82,22 @@ public sealed class SingularityComponent : Component
 
     #endregion Audio
 
+    #region Appearance
+
+    /// <summary>
+    /// The sprite layer the singularity appearance is attached to.
+    /// </summary>
+    [DataField("layer")]
+    public int Layer { get; } = 0;
+
+    /// <summary>
+    /// The base sprite file and state of the singularity.
+    /// </summary>
+    [DataField("baseSprite")]
+    public SpriteSpecifier.Rsi BaseSprite = new SpriteSpecifier.Rsi(new ResourcePath("Structures/Power/Generation/Singularity/singularity"), "singularity");
+
+    #endregion Appearance
+
     #region Update Timing
 
     /// <summary>
index bd0a411b4f849f13a60276d4fede3c35257f6d96..69e4a442f1ee90c5ea385f7a8cc3aebec8cd987f 100644 (file)
@@ -45,7 +45,5 @@
     enabled: true
     radius: 10
   - type: Appearance
-    visuals:
-    - type: SingularityVisualizer
   - type: GuideHelp
     guides: [ Singularity, Power ]