Resolves GravityGeneratorVisualizer is Obsolete (#13885)

This commit is contained in:
TemporalOroboros
2023-03-30 22:04:53 -07:00
committed by GitHub
parent ad02129045
commit 76212b877e
5 changed files with 99 additions and 104 deletions

View File

@@ -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
}
}
}

View File

@@ -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
}

View File

@@ -7,6 +7,41 @@ namespace Content.Shared.Gravity
[Virtual]
public class SharedGravityGeneratorComponent : Component
{
/// <summary>
/// A map of the sprites used by the gravity generator given its status.
/// </summary>
[DataField("spriteMap")]
[Access(typeof(SharedGravitySystem))]
public Dictionary<GravityGeneratorStatus, string> SpriteMap = new();
/// <summary>
/// The sprite used by the core of the gravity generator when the gravity generator is starting up.
/// </summary>
[DataField("coreStartupState")]
[ViewVariables(VVAccess.ReadWrite)]
public string CoreStartupState = "startup";
/// <summary>
/// The sprite used by the core of the gravity generator when the gravity generator is idle.
/// </summary>
[DataField("coreIdleState")]
[ViewVariables(VVAccess.ReadWrite)]
public string CoreIdleState = "idle";
/// <summary>
/// The sprite used by the core of the gravity generator when the gravity generator is activating.
/// </summary>
[DataField("coreActivatingState")]
[ViewVariables(VVAccess.ReadWrite)]
public string CoreActivatingState = "activating";
/// <summary>
/// The sprite used by the core of the gravity generator when the gravity generator is active.
/// </summary>
[DataField("coreActivatedState")]
[ViewVariables(VVAccess.ReadWrite)]
public string CoreActivatedState = "activated";
/// <summary>
/// Sent to the server to set whether the generator should be on or off
/// </summary>

View File

@@ -88,17 +88,18 @@ namespace Content.Shared.Gravity
private void OnGravityChange(ref GravityChangedEvent ev)
{
foreach (var (comp, xform) in EntityQuery<AlertsComponent, TransformComponent>(true))
var alerts = AllEntityQuery<AlertsComponent, TransformComponent>();
while(alerts.MoveNext(out var uid, out var comp, out var xform))
{
if (xform.GridUid != ev.ChangedGridIndex) continue;
if (!ev.HasGravity)
{
_alerts.ShowAlert(comp.Owner, AlertType.Weightless);
_alerts.ShowAlert(uid, AlertType.Weightless);
}
else
{
_alerts.ClearAlert(comp.Owner, AlertType.Weightless);
_alerts.ClearAlert(uid, AlertType.Weightless);
}
}
}
@@ -117,7 +118,7 @@ namespace Content.Shared.Gravity
private void OnAlertsParentChange(EntityUid uid, AlertsComponent component, ref EntParentChangedMessage args)
{
if (IsWeightless(component.Owner))
if (IsWeightless(uid))
{
_alerts.ShowAlert(uid, AlertType.Weightless);
}

View File

@@ -56,18 +56,16 @@
activePower: 2500
lightRadiusMin: 0.75
lightRadiusMax: 2.5
- type: UserInterface
interfaces:
- key: enum.GravityGeneratorUiKey.Key
type: GravityGeneratorBoundUserInterface
- type: Appearance
visuals:
- type: GravityGeneratorVisualizer
spritemap:
broken: "broken"
unpowered: "off"
off: "off"
on: "on"
- type: UserInterface
interfaces:
- key: enum.GravityGeneratorUiKey.Key
type: GravityGeneratorBoundUserInterface
- type: Appearance
- type: PointLight
radius: 2.5
energy: 0.5