Resolves SmesVisualizer is Obsolete (#13899)

Co-authored-by: metalgearsloth <comedian_vs_clown@hotmail.com>
This commit is contained in:
TemporalOroboros
2023-05-06 20:43:41 -07:00
committed by GitHub
parent 5628ee36dd
commit 6ff63a6ee7
8 changed files with 120 additions and 97 deletions

View File

@@ -0,0 +1,28 @@
namespace Content.Client.Power.SMES;
[RegisterComponent]
public sealed class SmesComponent : Component
{
/// <summary>
/// The prefix used for the RSI states of the sprite layers indicating the charge level of the SMES.
/// </summary>
[DataField("chargeOverlayPrefix")]
[ViewVariables(VVAccess.ReadWrite)]
public string ChargeOverlayPrefix = "smes-og";
/// <summary>
/// The prefix used for the RSI states of the sprite layers indicating the input state of the SMES.
/// Actually bundled together with the output indicator light.
/// </summary>
[DataField("inputOverlayPrefix")]
[ViewVariables(VVAccess.ReadWrite)]
public string InputOverlayPrefix = "smes-oc";
/// <summary>
/// The prefix used for the RSI states of the sprite layers indicating the output state of the SMES.
/// Actually bundled together with the input indicator light.
/// </summary>
[DataField("outputOverlayPrefix")]
[ViewVariables(VVAccess.ReadWrite)]
public string OutputOverlayPrefix = "smes-op";
}

View File

@@ -0,0 +1,50 @@
using Content.Shared.Power;
using Content.Shared.SMES;
using Robust.Client.GameObjects;
namespace Content.Client.Power.SMES;
public sealed class SmesVisualizerSystem : VisualizerSystem<SmesComponent>
{
protected override void OnAppearanceChange(EntityUid uid, SmesComponent comp, ref AppearanceChangeEvent args)
{
if (args.Sprite == null)
return;
if (!AppearanceSystem.TryGetData<int>(uid, SmesVisuals.LastChargeLevel, out var level, args.Component) || level == 0)
{
args.Sprite.LayerSetVisible(SmesVisualLayers.Charge, false);
}
else
{
args.Sprite.LayerSetVisible(SmesVisualLayers.Charge, true);
args.Sprite.LayerSetState(SmesVisualLayers.Charge, $"{comp.ChargeOverlayPrefix}{level}");
}
if (!AppearanceSystem.TryGetData<ChargeState>(uid, SmesVisuals.LastChargeState, out var state, args.Component))
state = ChargeState.Still;
switch (state)
{
case ChargeState.Still:
args.Sprite.LayerSetState(SmesVisualLayers.Input, $"{comp.InputOverlayPrefix}0");
args.Sprite.LayerSetState(SmesVisualLayers.Output, $"{comp.OutputOverlayPrefix}1");
break;
case ChargeState.Charging:
args.Sprite.LayerSetState(SmesVisualLayers.Input, $"{comp.InputOverlayPrefix}1");
args.Sprite.LayerSetState(SmesVisualLayers.Output, $"{comp.OutputOverlayPrefix}1");
break;
case ChargeState.Discharging:
args.Sprite.LayerSetState(SmesVisualLayers.Input, $"{comp.InputOverlayPrefix}0");
args.Sprite.LayerSetState(SmesVisualLayers.Output, $"{comp.OutputOverlayPrefix}2");
break;
}
}
}
enum SmesVisualLayers : byte
{
Input,
Charge,
Output,
}

View File

@@ -1,77 +0,0 @@
using Content.Shared.Power;
using Content.Shared.SMES;
using JetBrains.Annotations;
using Robust.Client.GameObjects;
using Robust.Shared.GameObjects;
using Robust.Shared.IoC;
namespace Content.Client.Power.SMES
{
[UsedImplicitly]
public sealed class SmesVisualizer : AppearanceVisualizer
{
[Obsolete("Subscribe to your component being initialised instead.")]
public override void InitializeEntity(EntityUid entity)
{
base.InitializeEntity(entity);
var sprite = IoCManager.Resolve<IEntityManager>().GetComponent<SpriteComponent>(entity);
sprite.LayerMapSet(Layers.Input, sprite.AddLayerState("smes-oc0"));
sprite.LayerSetShader(Layers.Input, "unshaded");
sprite.LayerMapSet(Layers.Charge, sprite.AddLayerState("smes-og1"));
sprite.LayerSetShader(Layers.Charge, "unshaded");
sprite.LayerSetVisible(Layers.Charge, false);
sprite.LayerMapSet(Layers.Output, sprite.AddLayerState("smes-op0"));
sprite.LayerSetShader(Layers.Output, "unshaded");
}
[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<int>(SmesVisuals.LastChargeLevel, out var level) || level == 0)
{
sprite.LayerSetVisible(Layers.Charge, false);
}
else
{
sprite.LayerSetVisible(Layers.Charge, true);
sprite.LayerSetState(Layers.Charge, $"smes-og{level}");
}
if (component.TryGetData<ChargeState>(SmesVisuals.LastChargeState, out var state))
{
switch (state)
{
case ChargeState.Still:
sprite.LayerSetState(Layers.Input, "smes-oc0");
sprite.LayerSetState(Layers.Output, "smes-op1");
break;
case ChargeState.Charging:
sprite.LayerSetState(Layers.Input, "smes-oc1");
sprite.LayerSetState(Layers.Output, "smes-op1");
break;
case ChargeState.Discharging:
sprite.LayerSetState(Layers.Input, "smes-oc0");
sprite.LayerSetState(Layers.Output, "smes-op2");
break;
}
}
else
{
sprite.LayerSetState(Layers.Input, "smes-oc0");
sprite.LayerSetState(Layers.Output, "smes-op1");
}
}
enum Layers : byte
{
Input,
Charge,
Output,
}
}
}