SmesSystem.cs 1.8 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950
  1. using Content.Shared.Power;
  2. using Content.Shared.SMES;
  3. using Robust.Client.GameObjects;
  4. namespace Content.Client.Power.SMES;
  5. public sealed class SmesVisualizerSystem : VisualizerSystem<SmesComponent>
  6. {
  7. protected override void OnAppearanceChange(EntityUid uid, SmesComponent comp, ref AppearanceChangeEvent args)
  8. {
  9. if (args.Sprite == null)
  10. return;
  11. if (!AppearanceSystem.TryGetData<int>(uid, SmesVisuals.LastChargeLevel, out var level, args.Component) || level == 0)
  12. {
  13. args.Sprite.LayerSetVisible(SmesVisualLayers.Charge, false);
  14. }
  15. else
  16. {
  17. args.Sprite.LayerSetVisible(SmesVisualLayers.Charge, true);
  18. args.Sprite.LayerSetState(SmesVisualLayers.Charge, $"{comp.ChargeOverlayPrefix}{level}");
  19. }
  20. if (!AppearanceSystem.TryGetData<ChargeState>(uid, SmesVisuals.LastChargeState, out var state, args.Component))
  21. state = ChargeState.Still;
  22. switch (state)
  23. {
  24. case ChargeState.Still:
  25. args.Sprite.LayerSetState(SmesVisualLayers.Input, $"{comp.InputOverlayPrefix}0");
  26. args.Sprite.LayerSetState(SmesVisualLayers.Output, $"{comp.OutputOverlayPrefix}1");
  27. break;
  28. case ChargeState.Charging:
  29. args.Sprite.LayerSetState(SmesVisualLayers.Input, $"{comp.InputOverlayPrefix}1");
  30. args.Sprite.LayerSetState(SmesVisualLayers.Output, $"{comp.OutputOverlayPrefix}1");
  31. break;
  32. case ChargeState.Discharging:
  33. args.Sprite.LayerSetState(SmesVisualLayers.Input, $"{comp.InputOverlayPrefix}0");
  34. args.Sprite.LayerSetState(SmesVisualLayers.Output, $"{comp.OutputOverlayPrefix}2");
  35. break;
  36. }
  37. }
  38. }
  39. enum SmesVisualLayers : byte
  40. {
  41. Input,
  42. Charge,
  43. Output,
  44. }