SharedGunSystem.Container.cs 1.6 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950
  1. using System.Linq;
  2. using Content.Shared.Weapons.Ranged.Components;
  3. using Content.Shared.Weapons.Ranged.Events;
  4. using Robust.Shared.Containers;
  5. using Robust.Shared.Network;
  6. namespace Content.Shared.Weapons.Ranged.Systems;
  7. public partial class SharedGunSystem
  8. {
  9. private void InitializeContainer()
  10. {
  11. SubscribeLocalEvent<ContainerAmmoProviderComponent, TakeAmmoEvent>(OnContainerTakeAmmo);
  12. SubscribeLocalEvent<ContainerAmmoProviderComponent, GetAmmoCountEvent>(OnContainerAmmoCount);
  13. }
  14. private void OnContainerTakeAmmo(EntityUid uid, ContainerAmmoProviderComponent component, TakeAmmoEvent args)
  15. {
  16. component.ProviderUid ??= uid;
  17. if (!Containers.TryGetContainer(component.ProviderUid.Value, component.Container, out var container))
  18. return;
  19. for (var i = 0; i < args.Shots; i++)
  20. {
  21. if (!container.ContainedEntities.Any())
  22. break;
  23. var ent = container.ContainedEntities[0];
  24. if (_netManager.IsServer)
  25. Containers.Remove(ent, container);
  26. args.Ammo.Add((ent, EnsureShootable(ent)));
  27. }
  28. }
  29. private void OnContainerAmmoCount(EntityUid uid, ContainerAmmoProviderComponent component, ref GetAmmoCountEvent args)
  30. {
  31. component.ProviderUid ??= uid;
  32. if (!Containers.TryGetContainer(component.ProviderUid.Value, component.Container, out var container))
  33. {
  34. args.Capacity = 0;
  35. args.Count = 0;
  36. return;
  37. }
  38. args.Capacity = int.MaxValue;
  39. args.Count = container.ContainedEntities.Count;
  40. }
  41. }