Files
tbd-station-14/Content.Client/Shuttles/ThrusterVisualizer.cs
2021-11-23 18:22:59 +11:00

69 lines
2.4 KiB
C#

using Content.Shared.Shuttles.Components;
using Robust.Client.GameObjects;
using Robust.Shared.GameObjects;
namespace Content.Client.Shuttles
{
public sealed class ThrusterVisualizer : AppearanceVisualizer
{
public override void OnChangeData(AppearanceComponent component)
{
base.OnChangeData(component);
if (!component.Owner.TryGetComponent(out SpriteComponent? spriteComponent)) return;
component.TryGetData(ThrusterVisualState.State, out bool state);
switch (state)
{
case true:
spriteComponent.LayerSetVisible(ThrusterVisualLayers.ThrustOn, true);
if (component.TryGetData(ThrusterVisualState.Thrusting, out bool thrusting) && thrusting)
{
if (spriteComponent.LayerMapTryGet(ThrusterVisualLayers.Thrusting, out _))
{
spriteComponent.LayerSetVisible(ThrusterVisualLayers.Thrusting, true);
}
if (spriteComponent.LayerMapTryGet(ThrusterVisualLayers.ThrustingUnshaded, out _))
{
spriteComponent.LayerSetVisible(ThrusterVisualLayers.ThrustingUnshaded, true);
}
}
else
{
DisableThrusting(component, spriteComponent);
}
break;
case false:
spriteComponent.LayerSetVisible(ThrusterVisualLayers.ThrustOn, false);
DisableThrusting(component, spriteComponent);
break;
}
}
private void DisableThrusting(AppearanceComponent component, SpriteComponent spriteComponent)
{
if (spriteComponent.LayerMapTryGet(ThrusterVisualLayers.Thrusting, out _))
{
spriteComponent.LayerSetVisible(ThrusterVisualLayers.Thrusting, false);
}
if (spriteComponent.LayerMapTryGet(ThrusterVisualLayers.ThrustingUnshaded, out _))
{
spriteComponent.LayerSetVisible(ThrusterVisualLayers.ThrustingUnshaded, false);
}
}
}
public enum ThrusterVisualLayers : byte
{
Base,
ThrustOn,
Thrusting,
ThrustingUnshaded,
}
}