Files
tbd-station-14/Content.Client/Lock/Visualizers/LockVisualizerSystem.cs
MilenVolf c7870882f6 LockVisualizer (#25224)
* LockVisualizer

* Fix state

* Clean some code

* Make it component, fix tests fail

* Fix for StateUnlocked

Now it is possible to manually set the unlocked state and it will work!

* Optimize LockVisualizer, add check for unlocked state

* No todo I guess
2024-02-16 16:52:31 -07:00

39 lines
1.3 KiB
C#

using Content.Shared.Storage;
using Content.Shared.Lock;
using Robust.Client.GameObjects;
namespace Content.Client.Lock.Visualizers;
public sealed class LockVisualizerSystem : VisualizerSystem<LockVisualsComponent>
{
protected override void OnAppearanceChange(EntityUid uid, LockVisualsComponent comp, ref AppearanceChangeEvent args)
{
if (args.Sprite == null
|| !AppearanceSystem.TryGetData<bool>(uid, LockVisuals.Locked, out _, args.Component))
return;
// Lock state for the entity.
if (!AppearanceSystem.TryGetData<bool>(uid, LockVisuals.Locked, out var locked, args.Component))
locked = true;
var unlockedStateExist = args.Sprite.BaseRSI?.TryGetState(comp.StateUnlocked, out _);
if (AppearanceSystem.TryGetData<bool>(uid, StorageVisuals.Open, out var open, args.Component))
{
args.Sprite.LayerSetVisible(LockVisualLayers.Lock, !open);
}
else if (!(bool) unlockedStateExist!)
args.Sprite.LayerSetVisible(LockVisualLayers.Lock, locked);
if (!open && (bool) unlockedStateExist!)
{
args.Sprite.LayerSetState(LockVisualLayers.Lock, locked ? comp.StateLocked : comp.StateUnlocked);
}
}
}
public enum LockVisualLayers : byte
{
Lock
}