67 lines
2.4 KiB
C#
67 lines
2.4 KiB
C#
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
|
|
}
|