From 23f1dc46439e84533ce435b183bb3106a4823155 Mon Sep 17 00:00:00 2001 From: TemporalOroboros Date: Sat, 11 Feb 2023 03:41:16 -0800 Subject: [PATCH] Resolves SingularityVisualizer is Obsolete (#13906) * Split SingularityVisualizer into Component/System pair * Server ignore SingularityVisualizer * Update YAML * Move to SingularityComponent --- .../Singularity/Systems/SingularitySystem.cs | 35 ++++++++++++++- .../Visualizers/SingularityVisualizer.cs | 43 ------------------- .../Components/SingularityComponent.cs | 17 ++++++++ .../Generation/Singularity/singularity.yml | 2 - 4 files changed, 51 insertions(+), 46 deletions(-) delete mode 100644 Content.Client/Singularity/Visualizers/SingularityVisualizer.cs diff --git a/Content.Client/Singularity/Systems/SingularitySystem.cs b/Content.Client/Singularity/Systems/SingularitySystem.cs index fc242a2066..afc9c5bb22 100644 --- a/Content.Client/Singularity/Systems/SingularitySystem.cs +++ b/Content.Client/Singularity/Systems/SingularitySystem.cs @@ -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; /// public sealed class SingularitySystem : SharedSingularitySystem { + [Dependency] private readonly AppearanceSystem _appearanceSystem = default!; + public override void Initialize() { base.Initialize(); SubscribeLocalEvent(HandleSingularityState); + SubscribeLocalEvent(OnAppearanceChange); } /// @@ -30,4 +36,31 @@ public sealed class SingularitySystem : SharedSingularitySystem SetLevel(uid, state.Level, comp); } + + /// + /// Handles ensuring that the singularity has a sprite to see. + /// + protected override void OnSingularityStartup(EntityUid uid, SingularityComponent comp, ComponentStartup args) + { + base.OnSingularityStartup(uid, comp, args); + if (TryComp(uid, out var sprite)) + { + sprite.LayerMapReserveBlank(comp.Layer); + } + } + + /// + /// Handles updating the visible state of the singularity to reflect its current level. + /// + private void OnAppearanceChange(EntityUid uid, SingularityComponent comp, ref AppearanceChangeEvent args) + { + if (args.Sprite == null) + return; + + if(!_appearanceSystem.TryGetData(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 index 01f95323df..0000000000 --- a/Content.Client/Singularity/Visualizers/SingularityVisualizer.cs +++ /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().GetComponentOrNull(entity)?.LayerMapReserveBlank(Layer); - } - - [Obsolete("Subscribe to AppearanceChangeEvent instead.")] - public override void OnChangeData(AppearanceComponent component) - { - base.OnChangeData(component); - - if (!IoCManager.Resolve().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)); - } - } -} diff --git a/Content.Shared/Singularity/Components/SingularityComponent.cs b/Content.Shared/Singularity/Components/SingularityComponent.cs index 64ac2d6ef0..8753a88609 100644 --- a/Content.Shared/Singularity/Components/SingularityComponent.cs +++ b/Content.Shared/Singularity/Components/SingularityComponent.cs @@ -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 + + /// + /// The sprite layer the singularity appearance is attached to. + /// + [DataField("layer")] + public int Layer { get; } = 0; + + /// + /// The base sprite file and state of the singularity. + /// + [DataField("baseSprite")] + public SpriteSpecifier.Rsi BaseSprite = new SpriteSpecifier.Rsi(new ResourcePath("Structures/Power/Generation/Singularity/singularity"), "singularity"); + + #endregion Appearance + #region Update Timing /// diff --git a/Resources/Prototypes/Entities/Structures/Power/Generation/Singularity/singularity.yml b/Resources/Prototypes/Entities/Structures/Power/Generation/Singularity/singularity.yml index bd0a411b4f..69e4a442f1 100644 --- a/Resources/Prototypes/Entities/Structures/Power/Generation/Singularity/singularity.yml +++ b/Resources/Prototypes/Entities/Structures/Power/Generation/Singularity/singularity.yml @@ -45,7 +45,5 @@ enabled: true radius: 10 - type: Appearance - visuals: - - type: SingularityVisualizer - type: GuideHelp guides: [ Singularity, Power ] -- 2.52.0