LockVisualizerSystem.cs 1.3 KB

1234567891011121314151617181920212223242526272829303132333435363738
  1. using Content.Shared.Storage;
  2. using Content.Shared.Lock;
  3. using Robust.Client.GameObjects;
  4. namespace Content.Client.Lock.Visualizers;
  5. public sealed class LockVisualizerSystem : VisualizerSystem<LockVisualsComponent>
  6. {
  7. protected override void OnAppearanceChange(EntityUid uid, LockVisualsComponent comp, ref AppearanceChangeEvent args)
  8. {
  9. if (args.Sprite == null
  10. || !AppearanceSystem.TryGetData<bool>(uid, LockVisuals.Locked, out _, args.Component))
  11. return;
  12. // Lock state for the entity.
  13. if (!AppearanceSystem.TryGetData<bool>(uid, LockVisuals.Locked, out var locked, args.Component))
  14. locked = true;
  15. var unlockedStateExist = args.Sprite.BaseRSI?.TryGetState(comp.StateUnlocked, out _);
  16. if (AppearanceSystem.TryGetData<bool>(uid, StorageVisuals.Open, out var open, args.Component))
  17. {
  18. args.Sprite.LayerSetVisible(LockVisualLayers.Lock, !open);
  19. }
  20. else if (!(bool) unlockedStateExist!)
  21. args.Sprite.LayerSetVisible(LockVisualLayers.Lock, locked);
  22. if (!open && (bool) unlockedStateExist!)
  23. {
  24. args.Sprite.LayerSetState(LockVisualLayers.Lock, locked ? comp.StateLocked : comp.StateUnlocked);
  25. }
  26. }
  27. }
  28. public enum LockVisualLayers : byte
  29. {
  30. Lock
  31. }