1
0

EntityStorageVisualizerSystem.cs 2.7 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677787980
  1. using Content.Shared.Storage;
  2. using Robust.Client.GameObjects;
  3. namespace Content.Client.Storage.Visualizers;
  4. public sealed class EntityStorageVisualizerSystem : VisualizerSystem<EntityStorageVisualsComponent>
  5. {
  6. public override void Initialize()
  7. {
  8. base.Initialize();
  9. SubscribeLocalEvent<EntityStorageVisualsComponent, ComponentInit>(OnComponentInit);
  10. }
  11. /// <summary>
  12. /// Sets the base sprite to this layer. Exists to make the inheritance tree less boilerplate-y.
  13. /// </summary>
  14. private void OnComponentInit(EntityUid uid, EntityStorageVisualsComponent comp, ComponentInit args)
  15. {
  16. if (comp.StateBaseClosed == null)
  17. return;
  18. comp.StateBaseOpen ??= comp.StateBaseClosed;
  19. if (!TryComp<SpriteComponent>(uid, out var sprite))
  20. return;
  21. sprite.LayerSetState(StorageVisualLayers.Base, comp.StateBaseClosed);
  22. }
  23. protected override void OnAppearanceChange(EntityUid uid, EntityStorageVisualsComponent comp, ref AppearanceChangeEvent args)
  24. {
  25. if (args.Sprite == null
  26. || !AppearanceSystem.TryGetData<bool>(uid, StorageVisuals.Open, out var open, args.Component))
  27. return;
  28. // Open/Closed state for the storage entity.
  29. if (args.Sprite.LayerMapTryGet(StorageVisualLayers.Door, out _))
  30. {
  31. if (open)
  32. {
  33. if (comp.OpenDrawDepth != null)
  34. args.Sprite.DrawDepth = comp.OpenDrawDepth.Value;
  35. if (comp.StateDoorOpen != null)
  36. {
  37. args.Sprite.LayerSetState(StorageVisualLayers.Door, comp.StateDoorOpen);
  38. args.Sprite.LayerSetVisible(StorageVisualLayers.Door, true);
  39. }
  40. else
  41. {
  42. args.Sprite.LayerSetVisible(StorageVisualLayers.Door, false);
  43. }
  44. if (comp.StateBaseOpen != null)
  45. args.Sprite.LayerSetState(StorageVisualLayers.Base, comp.StateBaseOpen);
  46. }
  47. else
  48. {
  49. if (comp.ClosedDrawDepth != null)
  50. args.Sprite.DrawDepth = comp.ClosedDrawDepth.Value;
  51. if (comp.StateDoorClosed != null)
  52. {
  53. args.Sprite.LayerSetState(StorageVisualLayers.Door, comp.StateDoorClosed);
  54. args.Sprite.LayerSetVisible(StorageVisualLayers.Door, true);
  55. }
  56. else
  57. args.Sprite.LayerSetVisible(StorageVisualLayers.Door, false);
  58. if (comp.StateBaseClosed != null)
  59. args.Sprite.LayerSetState(StorageVisualLayers.Base, comp.StateBaseClosed);
  60. }
  61. }
  62. }
  63. }
  64. public enum StorageVisualLayers : byte
  65. {
  66. Base,
  67. Door
  68. }