Resolves GravityGeneratorVisualizer is Obsolete (#13885)
This commit is contained in:
@@ -1,93 +0,0 @@
|
||||
using System.Linq;
|
||||
using Content.Shared.Gravity;
|
||||
using JetBrains.Annotations;
|
||||
using Robust.Client.GameObjects;
|
||||
|
||||
namespace Content.Client.Gravity
|
||||
{
|
||||
[UsedImplicitly]
|
||||
public sealed class GravityGeneratorVisualizer : AppearanceVisualizer
|
||||
{
|
||||
[DataField("spritemap")]
|
||||
private Dictionary<string, string> _rawSpriteMap
|
||||
{
|
||||
get => _spriteMap.ToDictionary(x => x.Key.ToString().ToLower(), x => x.Value);
|
||||
set
|
||||
{
|
||||
_spriteMap.Clear();
|
||||
// Get Sprites for each status
|
||||
foreach (var status in (GravityGeneratorStatus[]) Enum.GetValues(typeof(GravityGeneratorStatus)))
|
||||
{
|
||||
if (value.TryGetValue(status.ToString().ToLower(), out var sprite))
|
||||
{
|
||||
_spriteMap[status] = sprite;
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
private Dictionary<GravityGeneratorStatus, string> _spriteMap = new();
|
||||
|
||||
[Obsolete("Subscribe to your component being initialised instead.")]
|
||||
public override void InitializeEntity(EntityUid entity)
|
||||
{
|
||||
base.InitializeEntity(entity);
|
||||
|
||||
if (!IoCManager.Resolve<IEntityManager>().TryGetComponent(entity, out SpriteComponent? sprite))
|
||||
return;
|
||||
|
||||
sprite.LayerMapReserveBlank(GravityGeneratorVisualLayers.Base);
|
||||
sprite.LayerMapReserveBlank(GravityGeneratorVisualLayers.Core);
|
||||
}
|
||||
|
||||
[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(GravityGeneratorVisuals.State, out GravityGeneratorStatus state))
|
||||
{
|
||||
if (_spriteMap.TryGetValue(state, out var spriteState))
|
||||
{
|
||||
var layer = sprite.LayerMapGet(GravityGeneratorVisualLayers.Base);
|
||||
sprite.LayerSetState(layer, spriteState);
|
||||
}
|
||||
}
|
||||
|
||||
if (component.TryGetData(GravityGeneratorVisuals.Charge, out float charge))
|
||||
{
|
||||
var layer = sprite.LayerMapGet(GravityGeneratorVisualLayers.Core);
|
||||
switch (charge)
|
||||
{
|
||||
case < 0.2f:
|
||||
sprite.LayerSetVisible(layer, false);
|
||||
break;
|
||||
case >= 0.2f and < 0.4f:
|
||||
sprite.LayerSetVisible(layer, true);
|
||||
sprite.LayerSetState(layer, "startup");
|
||||
break;
|
||||
case >= 0.4f and < 0.6f:
|
||||
sprite.LayerSetVisible(layer, true);
|
||||
sprite.LayerSetState(layer, "idle");
|
||||
break;
|
||||
case >= 0.6f and < 0.8f:
|
||||
sprite.LayerSetVisible(layer, true);
|
||||
sprite.LayerSetState(layer, "activating");
|
||||
break;
|
||||
default:
|
||||
sprite.LayerSetVisible(layer, true);
|
||||
sprite.LayerSetState(layer, "activated");
|
||||
break;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
public enum GravityGeneratorVisualLayers : byte
|
||||
{
|
||||
Base,
|
||||
Core
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -1,12 +1,66 @@
|
||||
using Content.Shared.Gravity;
|
||||
using Robust.Client.GameObjects;
|
||||
|
||||
namespace Content.Client.Gravity;
|
||||
|
||||
public sealed partial class GravitySystem : SharedGravitySystem
|
||||
{
|
||||
[Dependency] private readonly AppearanceSystem _appearanceSystem = default!;
|
||||
public override void Initialize()
|
||||
{
|
||||
base.Initialize();
|
||||
SubscribeLocalEvent<SharedGravityGeneratorComponent, AppearanceChangeEvent>(OnAppearanceChange);
|
||||
InitializeShake();
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// Ensures that the visible state of gravity generators are synced with their sprites.
|
||||
/// </summary>
|
||||
private void OnAppearanceChange(EntityUid uid, SharedGravityGeneratorComponent comp, ref AppearanceChangeEvent args)
|
||||
{
|
||||
if (args.Sprite == null)
|
||||
return;
|
||||
|
||||
if (_appearanceSystem.TryGetData<GravityGeneratorStatus>(uid, GravityGeneratorVisuals.State, out var state, args.Component))
|
||||
{
|
||||
if (comp.SpriteMap.TryGetValue(state, out var spriteState))
|
||||
{
|
||||
var layer = args.Sprite.LayerMapGet(GravityGeneratorVisualLayers.Base);
|
||||
args.Sprite.LayerSetState(layer, spriteState);
|
||||
}
|
||||
}
|
||||
|
||||
if (_appearanceSystem.TryGetData<float>(uid, GravityGeneratorVisuals.Charge, out var charge, args.Component))
|
||||
{
|
||||
var layer = args.Sprite.LayerMapGet(GravityGeneratorVisualLayers.Core);
|
||||
switch (charge)
|
||||
{
|
||||
case < 0.2f:
|
||||
args.Sprite.LayerSetVisible(layer, false);
|
||||
break;
|
||||
case >= 0.2f and < 0.4f:
|
||||
args.Sprite.LayerSetVisible(layer, true);
|
||||
args.Sprite.LayerSetState(layer, comp.CoreStartupState);
|
||||
break;
|
||||
case >= 0.4f and < 0.6f:
|
||||
args.Sprite.LayerSetVisible(layer, true);
|
||||
args.Sprite.LayerSetState(layer, comp.CoreIdleState);
|
||||
break;
|
||||
case >= 0.6f and < 0.8f:
|
||||
args.Sprite.LayerSetVisible(layer, true);
|
||||
args.Sprite.LayerSetState(layer, comp.CoreActivatingState);
|
||||
break;
|
||||
default:
|
||||
args.Sprite.LayerSetVisible(layer, true);
|
||||
args.Sprite.LayerSetState(layer, comp.CoreActivatedState);
|
||||
break;
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
public enum GravityGeneratorVisualLayers : byte
|
||||
{
|
||||
Base,
|
||||
Core
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user