Files
tbd-station-14/Content.Shared/Weapons/Ranged/Systems/SharedGunSystem.Clothing.cs
themias 432c87f7e2 Fix spray nozzle (#22624)
* Fix spray nozzle

* what

* no
2023-12-16 18:45:18 -07:00

55 lines
1.8 KiB
C#

using System.Diagnostics.CodeAnalysis;
using Content.Shared.Inventory;
using Content.Shared.Weapons.Ranged.Components;
using Content.Shared.Weapons.Ranged.Events;
namespace Content.Shared.Weapons.Ranged.Systems;
public partial class SharedGunSystem
{
[Dependency] private readonly InventorySystem _inventory = default!;
private void InitializeClothing()
{
SubscribeLocalEvent<ClothingSlotAmmoProviderComponent, TakeAmmoEvent>(OnClothingTakeAmmo);
SubscribeLocalEvent<ClothingSlotAmmoProviderComponent, GetAmmoCountEvent>(OnClothingAmmoCount);
}
private void OnClothingTakeAmmo(EntityUid uid, ClothingSlotAmmoProviderComponent component, TakeAmmoEvent args)
{
if (!TryGetClothingSlotEntity(uid, component, out var entity))
return;
RaiseLocalEvent(entity.Value, args);
}
private void OnClothingAmmoCount(EntityUid uid, ClothingSlotAmmoProviderComponent component, ref GetAmmoCountEvent args)
{
if (!TryGetClothingSlotEntity(uid, component, out var entity))
return;
RaiseLocalEvent(entity.Value, ref args);
}
private bool TryGetClothingSlotEntity(EntityUid uid, ClothingSlotAmmoProviderComponent component, [NotNullWhen(true)] out EntityUid? slotEntity)
{
slotEntity = null;
if (!Containers.TryGetContainingContainer(uid, out var container))
return false;
var user = container.Owner;
if (!_inventory.TryGetContainerSlotEnumerator(user, out var enumerator, component.TargetSlot))
return false;
while (enumerator.NextItem(out var item))
{
if (component.ProviderWhitelist == null || !component.ProviderWhitelist.IsValid(item, EntityManager))
continue;
slotEntity = item;
return true;
}
return false;
}
}