diff --git a/Libraries/SPTarkov.Server.Core/Helpers/ContainerHelper.cs b/Libraries/SPTarkov.Server.Core/Helpers/ContainerHelper.cs
index eb521d22..a3460ced 100644
--- a/Libraries/SPTarkov.Server.Core/Helpers/ContainerHelper.cs
+++ b/Libraries/SPTarkov.Server.Core/Helpers/ContainerHelper.cs
@@ -9,13 +9,15 @@ public class ContainerHelper
///
/// Finds a slot for an item in a given 2D container map
///
- /// List of container with slots filled/free
+ /// List of container with positions filled/free
/// Width of item
/// Height of item
/// Location to place item in container
public FindSlotResult FindSlotForItem(int[][] container2D, int itemWidth, int itemHeight)
{
+ // Assume not rotated
var rotation = false;
+
var minVolume = (itemWidth < itemHeight ? itemWidth : itemHeight) - 1;
var containerY = container2D.Length;
var containerX = container2D[0].Length;
@@ -37,38 +39,41 @@ public class ContainerHelper
continue;
}
- // Try each slot on the row (across = x)
+ // Go left to right across x-axis looking for free position
for (var x = 0; x < limitX; x++)
{
- var foundSlot = LocateSlot(container2D, containerX, containerY, x, y, itemWidth, itemHeight);
- if (foundSlot)
+ if (LocateSlot(container2D, containerX, containerY, x, y, itemWidth, itemHeight))
{
+ // Success, return result
return new FindSlotResult(true, x, y, rotation);
}
- // Failed to find slot, rotate item and try again
- if (!foundSlot && ItemBiggerThan1X1(itemWidth, itemHeight))
+ if (ItemBiggerThan1X1(itemWidth, itemHeight))
{
- // Bigger than 1x1, try rotating
- foundSlot = LocateSlot(container2D, containerX, containerY, x, y, itemHeight, itemWidth); // Height/Width swapped
- if (foundSlot)
- {
- // Found a slot for it when rotated
- rotation = true;
-
- return new FindSlotResult(true, x, y, rotation);
- }
+ // Pointless rotating a 1x1, try next position across
+ continue;
}
+
+ // Bigger than 1x1, try rotating by swapping x and y values
+ if (!LocateSlot(container2D, containerX, containerY, x, y, itemHeight, itemWidth))
+ {
+ continue;
+ }
+
+ // Found a position for item when rotated
+ rotation = true;
+
+ return new FindSlotResult(true, x, y, rotation);
}
}
- // Tried all possible holes, nothing big enough for the item
+ // Tried all possible positions, nothing big enough for item
return new FindSlotResult(false);
}
protected static bool ItemBiggerThan1X1(int itemWidth, int itemHeight)
{
- return itemWidth * itemHeight > 1;
+ return itemWidth + itemHeight > 2;
}
///