Inventory slot enumerator rejig (#21788)

This commit is contained in:
Leon Friedrich
2023-12-07 16:20:51 -05:00
committed by GitHub
parent 445c474c2c
commit 287d22cc49
18 changed files with 238 additions and 342 deletions

View File

@@ -92,9 +92,9 @@ namespace Content.Server.Administration.Commands
}
var invSystem = entityManager.System<InventorySystem>();
if (invSystem.TryGetSlots(target, out var slotDefinitions, inventoryComponent))
if (invSystem.TryGetSlots(target, out var slots))
{
foreach (var slot in slotDefinitions)
foreach (var slot in slots)
{
invSystem.TryUnequip(target, slot.Name, true, true, false, inventoryComponent);
var gearStr = startingGear.GetGear(slot.Name, profile);

View File

@@ -368,15 +368,12 @@ namespace Content.Server.Administration.Systems
}
}
if (TryComp(entity.Value, out InventoryComponent? inventory) &&
_inventory.TryGetSlots(entity.Value, out var slots, inventory))
if (_inventory.TryGetContainerSlotEnumerator(entity.Value, out var enumerator))
{
foreach (var slot in slots)
while (enumerator.NextItem(out var item, out var slot))
{
if (_inventory.TryUnequip(entity.Value, entity.Value, slot.Name, out var item, true, true))
{
_physics.ApplyAngularImpulse(item.Value, ThrowingSystem.ThrowAngularImpulse);
}
if (_inventory.TryUnequip(entity.Value, entity.Value, slot.Name, true, true))
_physics.ApplyAngularImpulse(item, ThrowingSystem.ThrowAngularImpulse);
}
}

View File

@@ -285,27 +285,7 @@ public sealed partial class AdminVerbSystem
Text = "Refill Internals Oxygen",
Category = VerbCategory.Tricks,
Icon = new SpriteSpecifier.Rsi(new("/Textures/Objects/Tanks/oxygen.rsi"), "icon"),
Act = () =>
{
foreach (var slot in _inventorySystem.GetSlots(args.Target))
{
if (!_inventorySystem.TryGetSlotEntity(args.Target, slot.Name, out var entity))
continue;
if (!TryComp(entity, out tank))
continue;
RefillGasTank(entity.Value, Gas.Oxygen, tank);
}
foreach (var held in _handsSystem.EnumerateHeld(args.Target))
{
if (!TryComp(held, out tank))
continue;
RefillGasTank(held, Gas.Oxygen, tank);
}
},
Act = () => RefillEquippedTanks(args.User, Gas.Oxygen),
Impact = LogImpact.Extreme,
Message = Loc.GetString("admin-trick-internals-refill-oxygen-description"),
Priority = (int) TricksVerbPriorities.RefillOxygen,
@@ -317,27 +297,7 @@ public sealed partial class AdminVerbSystem
Text = "Refill Internals Nitrogen",
Category = VerbCategory.Tricks,
Icon = new SpriteSpecifier.Rsi(new("/Textures/Objects/Tanks/red.rsi"), "icon"),
Act = () =>
{
foreach (var slot in _inventorySystem.GetSlots(args.Target))
{
if (!_inventorySystem.TryGetSlotEntity(args.Target, slot.Name, out var entity))
continue;
if (!TryComp(entity, out tank))
continue;
RefillGasTank(entity.Value, Gas.Nitrogen, tank);
}
foreach (var held in _handsSystem.EnumerateHeld(args.Target))
{
if (!TryComp(held, out tank))
continue;
RefillGasTank(held, Gas.Nitrogen, tank);
}
},
Act = () =>RefillEquippedTanks(args.User, Gas.Nitrogen),
Impact = LogImpact.Extreme,
Message = Loc.GetString("admin-trick-internals-refill-nitrogen-description"),
Priority = (int) TricksVerbPriorities.RefillNitrogen,
@@ -349,27 +309,7 @@ public sealed partial class AdminVerbSystem
Text = "Refill Internals Plasma",
Category = VerbCategory.Tricks,
Icon = new SpriteSpecifier.Rsi(new("/Textures/Objects/Tanks/plasma.rsi"), "icon"),
Act = () =>
{
foreach (var slot in _inventorySystem.GetSlots(args.Target))
{
if (!_inventorySystem.TryGetSlotEntity(args.Target, slot.Name, out var entity))
continue;
if (!TryComp(entity, out tank))
continue;
RefillGasTank(entity.Value, Gas.Plasma, tank);
}
foreach (var held in _handsSystem.EnumerateHeld(args.Target))
{
if (!TryComp(held, out tank))
continue;
RefillGasTank(held, Gas.Plasma, tank);
}
},
Act = () => RefillEquippedTanks(args.User, Gas.Plasma),
Impact = LogImpact.Extreme,
Message = Loc.GetString("admin-trick-internals-refill-plasma-description"),
Priority = (int) TricksVerbPriorities.RefillPlasma,
@@ -792,9 +732,17 @@ public sealed partial class AdminVerbSystem
}
}
private void RefillGasTank(EntityUid tank, Gas gasType, GasTankComponent? tankComponent)
private void RefillEquippedTanks(EntityUid target, Gas plasma)
{
if (!Resolve(tank, ref tankComponent))
foreach (var held in _inventorySystem.GetHandOrInventoryEntities(target))
{
RefillGasTank(held, Gas.Plasma);
}
}
private void RefillGasTank(EntityUid tank, Gas gasType, GasTankComponent? tankComponent = null)
{
if (!Resolve(tank, ref tankComponent, false))
return;
var mixSize = tankComponent.Air.Volume;