Files
crystall-punk-14/Content.Shared/Weapons/Ranged/Systems/SharedGunSystem.Container.cs

51 lines
1.6 KiB
C#
Raw Permalink Normal View History

2023-01-16 10:56:09 -06:00
using System.Linq;
using Content.Shared.Weapons.Ranged.Components;
using Content.Shared.Weapons.Ranged.Events;
using Robust.Shared.Containers;
using Robust.Shared.Network;
namespace Content.Shared.Weapons.Ranged.Systems;
public partial class SharedGunSystem
{
private void InitializeContainer()
2023-01-16 10:56:09 -06:00
{
SubscribeLocalEvent<ContainerAmmoProviderComponent, TakeAmmoEvent>(OnContainerTakeAmmo);
SubscribeLocalEvent<ContainerAmmoProviderComponent, GetAmmoCountEvent>(OnContainerAmmoCount);
}
private void OnContainerTakeAmmo(EntityUid uid, ContainerAmmoProviderComponent component, TakeAmmoEvent args)
{
component.ProviderUid ??= uid;
if (!Containers.TryGetContainer(component.ProviderUid.Value, component.Container, out var container))
2023-01-16 10:56:09 -06:00
return;
for (var i = 0; i < args.Shots; i++)
2023-01-16 10:56:09 -06:00
{
if (!container.ContainedEntities.Any())
break;
var ent = container.ContainedEntities[0];
if (_netManager.IsServer)
2023-12-27 21:30:03 -08:00
Containers.Remove(ent, container);
2023-01-16 10:56:09 -06:00
args.Ammo.Add((ent, EnsureShootable(ent)));
2023-01-16 10:56:09 -06:00
}
}
private void OnContainerAmmoCount(EntityUid uid, ContainerAmmoProviderComponent component, ref GetAmmoCountEvent args)
{
component.ProviderUid ??= uid;
if (!Containers.TryGetContainer(component.ProviderUid.Value, component.Container, out var container))
2023-01-16 10:56:09 -06:00
{
args.Capacity = 0;
args.Count = 0;
return;
}
args.Capacity = int.MaxValue;
args.Count = container.ContainedEntities.Count;
}
}