PowerCellSystem.cs 1.9 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768
  1. using Content.Shared.PowerCell;
  2. using Content.Shared.PowerCell.Components;
  3. using JetBrains.Annotations;
  4. using Robust.Client.GameObjects;
  5. namespace Content.Client.PowerCell;
  6. [UsedImplicitly]
  7. public sealed class PowerCellSystem : SharedPowerCellSystem
  8. {
  9. [Dependency] private readonly SharedAppearanceSystem _appearance = default!;
  10. public override void Initialize()
  11. {
  12. base.Initialize();
  13. SubscribeLocalEvent<PowerCellVisualsComponent, AppearanceChangeEvent>(OnPowerCellVisualsChange);
  14. }
  15. /// <inheritdoc/>
  16. public override bool HasActivatableCharge(EntityUid uid, PowerCellDrawComponent? battery = null, PowerCellSlotComponent? cell = null,
  17. EntityUid? user = null)
  18. {
  19. if (!Resolve(uid, ref battery, ref cell, false))
  20. return true;
  21. return battery.CanUse;
  22. }
  23. /// <inheritdoc/>
  24. public override bool HasDrawCharge(
  25. EntityUid uid,
  26. PowerCellDrawComponent? battery = null,
  27. PowerCellSlotComponent? cell = null,
  28. EntityUid? user = null)
  29. {
  30. if (!Resolve(uid, ref battery, ref cell, false))
  31. return true;
  32. return battery.CanDraw;
  33. }
  34. private void OnPowerCellVisualsChange(EntityUid uid, PowerCellVisualsComponent component, ref AppearanceChangeEvent args)
  35. {
  36. if (args.Sprite == null)
  37. return;
  38. if (!args.Sprite.TryGetLayer((int) PowerCellVisualLayers.Unshaded, out var unshadedLayer))
  39. return;
  40. if (_appearance.TryGetData<byte>(uid, PowerCellVisuals.ChargeLevel, out var level, args.Component))
  41. {
  42. if (level == 0)
  43. {
  44. unshadedLayer.Visible = false;
  45. return;
  46. }
  47. unshadedLayer.Visible = true;
  48. args.Sprite.LayerSetState(PowerCellVisualLayers.Unshaded, $"o{level}");
  49. }
  50. }
  51. private enum PowerCellVisualLayers : byte
  52. {
  53. Base,
  54. Unshaded,
  55. }
  56. }