Resolves SingularityVisualizer is Obsolete (#13906)

* Split SingularityVisualizer into Component/System pair

* Server ignore SingularityVisualizer

* Update YAML

* Move to SingularityComponent
This commit is contained in:
TemporalOroboros
2023-02-11 03:41:16 -08:00
committed by GitHub
parent 00b2f2dcec
commit 23f1dc4643
4 changed files with 51 additions and 46 deletions

View 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}"));
}
}