1
0

PowerCellSystem.Draw.cs 2.1 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172
  1. using Content.Server.Power.Components;
  2. using Content.Shared.PowerCell;
  3. using Content.Shared.PowerCell.Components;
  4. namespace Content.Server.PowerCell;
  5. public sealed partial class PowerCellSystem
  6. {
  7. /*
  8. * Handles PowerCellDraw
  9. */
  10. public override void Update(float frameTime)
  11. {
  12. base.Update(frameTime);
  13. var query = EntityQueryEnumerator<PowerCellDrawComponent, PowerCellSlotComponent>();
  14. while (query.MoveNext(out var uid, out var comp, out var slot))
  15. {
  16. if (!comp.Enabled)
  17. continue;
  18. if (Timing.CurTime < comp.NextUpdateTime)
  19. continue;
  20. comp.NextUpdateTime += comp.Delay;
  21. if (!TryGetBatteryFromSlot(uid, out var batteryEnt, out var battery, slot))
  22. continue;
  23. if (_battery.TryUseCharge(batteryEnt.Value, comp.DrawRate, battery))
  24. continue;
  25. var ev = new PowerCellSlotEmptyEvent();
  26. RaiseLocalEvent(uid, ref ev);
  27. }
  28. }
  29. private void OnDrawChargeChanged(EntityUid uid, PowerCellDrawComponent component, ref ChargeChangedEvent args)
  30. {
  31. // Update the bools for client prediction.
  32. var canUse = component.UseRate <= 0f || args.Charge > component.UseRate;
  33. var canDraw = component.DrawRate <= 0f || args.Charge > 0f;
  34. if (canUse != component.CanUse || canDraw != component.CanDraw)
  35. {
  36. component.CanDraw = canDraw;
  37. component.CanUse = canUse;
  38. Dirty(uid, component);
  39. }
  40. }
  41. private void OnDrawCellChanged(EntityUid uid, PowerCellDrawComponent component, PowerCellChangedEvent args)
  42. {
  43. var canDraw = !args.Ejected && HasCharge(uid, float.MinValue);
  44. var canUse = !args.Ejected && HasActivatableCharge(uid, component);
  45. if (!canDraw)
  46. {
  47. var ev = new PowerCellSlotEmptyEvent();
  48. RaiseLocalEvent(uid, ref ev);
  49. }
  50. if (canUse != component.CanUse || canDraw != component.CanDraw)
  51. {
  52. component.CanDraw = canDraw;
  53. component.CanUse = canUse;
  54. Dirty(uid, component);
  55. }
  56. }
  57. }