* Add unanchor attempt check * Combine shared component and server component - Combines SharedGravityGeneratorComponent and GravityGeneratorComponent - AutoNetworked the GravityActiveBool * Remove SharedGravityGeneratorComponent * Update to SharedGravityGeneratorComponent * Fix to be a complete sentence * Dirty GravityActive whenever changed * Rename component and remove view variables * Update referenced component name * Move unanchor attempt to shared system * Add client system * Revert popup to PopupEntity * Fix popup to be PopupClient * Set access restriction on GravityActive
70 lines
2.7 KiB
C#
70 lines
2.7 KiB
C#
using Content.Shared.Gravity;
|
|
using Content.Shared.Power;
|
|
using Robust.Client.GameObjects;
|
|
|
|
namespace Content.Client.Gravity;
|
|
|
|
public sealed partial class GravitySystem : SharedGravitySystem
|
|
{
|
|
[Dependency] private readonly AppearanceSystem _appearanceSystem = default!;
|
|
[Dependency] private readonly SpriteSystem _sprite = default!;
|
|
|
|
public override void Initialize()
|
|
{
|
|
base.Initialize();
|
|
SubscribeLocalEvent<GravityGeneratorComponent, AppearanceChangeEvent>(OnAppearanceChange);
|
|
InitializeShake();
|
|
}
|
|
|
|
/// <summary>
|
|
/// Ensures that the visible state of gravity generators are synced with their sprites.
|
|
/// </summary>
|
|
private void OnAppearanceChange(EntityUid uid, GravityGeneratorComponent comp, ref AppearanceChangeEvent args)
|
|
{
|
|
if (args.Sprite == null)
|
|
return;
|
|
|
|
if (_appearanceSystem.TryGetData<PowerChargeStatus>(uid, PowerChargeVisuals.State, out var state, args.Component))
|
|
{
|
|
if (comp.SpriteMap.TryGetValue(state, out var spriteState))
|
|
{
|
|
var layer = _sprite.LayerMapGet((uid, args.Sprite), GravityGeneratorVisualLayers.Base);
|
|
_sprite.LayerSetRsiState((uid, args.Sprite), layer, spriteState);
|
|
}
|
|
}
|
|
|
|
if (_appearanceSystem.TryGetData<float>(uid, PowerChargeVisuals.Charge, out var charge, args.Component))
|
|
{
|
|
var layer = _sprite.LayerMapGet((uid, args.Sprite), GravityGeneratorVisualLayers.Core);
|
|
switch (charge)
|
|
{
|
|
case < 0.2f:
|
|
_sprite.LayerSetVisible((uid, args.Sprite), layer, false);
|
|
break;
|
|
case >= 0.2f and < 0.4f:
|
|
_sprite.LayerSetVisible((uid, args.Sprite), layer, true);
|
|
_sprite.LayerSetRsiState((uid, args.Sprite), layer, comp.CoreStartupState);
|
|
break;
|
|
case >= 0.4f and < 0.6f:
|
|
_sprite.LayerSetVisible((uid, args.Sprite), layer, true);
|
|
_sprite.LayerSetRsiState((uid, args.Sprite), layer, comp.CoreIdleState);
|
|
break;
|
|
case >= 0.6f and < 0.8f:
|
|
_sprite.LayerSetVisible((uid, args.Sprite), layer, true);
|
|
_sprite.LayerSetRsiState((uid, args.Sprite), layer, comp.CoreActivatingState);
|
|
break;
|
|
default:
|
|
_sprite.LayerSetVisible((uid, args.Sprite), layer, true);
|
|
_sprite.LayerSetRsiState((uid, args.Sprite), layer, comp.CoreActivatedState);
|
|
break;
|
|
}
|
|
}
|
|
}
|
|
}
|
|
|
|
public enum GravityGeneratorVisualLayers : byte
|
|
{
|
|
Base,
|
|
Core
|
|
}
|