GunSystem.Ballistic.cs 1.6 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152
  1. using Content.Shared.Weapons.Ranged.Components;
  2. using Content.Shared.Weapons.Ranged.Events;
  3. using Robust.Shared.Map;
  4. namespace Content.Client.Weapons.Ranged.Systems;
  5. public sealed partial class GunSystem
  6. {
  7. protected override void InitializeBallistic()
  8. {
  9. base.InitializeBallistic();
  10. SubscribeLocalEvent<BallisticAmmoProviderComponent, UpdateAmmoCounterEvent>(OnBallisticAmmoCount);
  11. }
  12. private void OnBallisticAmmoCount(EntityUid uid, BallisticAmmoProviderComponent component, UpdateAmmoCounterEvent args)
  13. {
  14. if (args.Control is DefaultStatusControl control)
  15. {
  16. control.Update(GetBallisticShots(component), component.Capacity);
  17. }
  18. }
  19. protected override void Cycle(EntityUid uid, BallisticAmmoProviderComponent component, MapCoordinates coordinates)
  20. {
  21. if (!Timing.IsFirstTimePredicted)
  22. return;
  23. EntityUid? ent = null;
  24. // TODO: Combine with TakeAmmo
  25. if (component.Entities.Count > 0)
  26. {
  27. var existing = component.Entities[^1];
  28. component.Entities.RemoveAt(component.Entities.Count - 1);
  29. Containers.Remove(existing, component.Container);
  30. EnsureShootable(existing);
  31. }
  32. else if (component.UnspawnedCount > 0)
  33. {
  34. component.UnspawnedCount--;
  35. ent = Spawn(component.Proto, coordinates);
  36. EnsureShootable(ent.Value);
  37. }
  38. if (ent != null && IsClientSide(ent.Value))
  39. Del(ent.Value);
  40. var cycledEvent = new GunCycledEvent();
  41. RaiseLocalEvent(uid, ref cycledEvent);
  42. }
  43. }