From 6378c8424c0a1385b08a5b5bd6381ad1357a6a43 Mon Sep 17 00:00:00 2001 From: Tyfon <29051038+tyfon7@users.noreply.github.com> Date: Mon, 8 Jul 2024 01:04:13 -0700 Subject: [PATCH] Multigrid dictionarys by Id, fix rig/backpack swapping --- Multiselect/MultiGrid.cs | 16 ++++++++-------- Patches/SwapPatches.cs | 7 +++++-- 2 files changed, 13 insertions(+), 10 deletions(-) diff --git a/Multiselect/MultiGrid.cs b/Multiselect/MultiGrid.cs index 096c3bc..e5a2716 100644 --- a/Multiselect/MultiGrid.cs +++ b/Multiselect/MultiGrid.cs @@ -9,8 +9,8 @@ namespace UIFixes { public static class MultiGrid { - private static readonly Dictionary> GridOffsets = []; - private static readonly Dictionary>> GridsByLocation = []; + private static readonly Dictionary> GridOffsets = []; + private static readonly Dictionary>> GridsByLocation = []; public static LocationInGrid GetGridLocation(ItemAddressClass realAddress) { @@ -19,7 +19,7 @@ namespace UIFixes return realAddress.LocationInGrid; } - Vector2Int gridOffset = GridOffsets[realAddress.Container.ParentItem][realAddress.Grid]; + Vector2Int gridOffset = GridOffsets[realAddress.Container.ParentItem.Id][realAddress.Grid]; return new LocationInGrid(realAddress.LocationInGrid.x + gridOffset.x, realAddress.LocationInGrid.y + gridOffset.y, realAddress.LocationInGrid.r); } @@ -34,7 +34,7 @@ namespace UIFixes return new ItemAddressClass(originGrid, multigridLocation); } - var gridsByLocation = GridsByLocation[originGrid.ParentItem]; + var gridsByLocation = GridsByLocation[originGrid.ParentItem.Id]; // Clamp to known "meta" grid int x = Math.Max(0, Math.Min(gridsByLocation.Keys.Max(), multigridLocation.x)); @@ -49,7 +49,7 @@ namespace UIFixes } StashGridClass grid = gridsByLocation[x][y]; - Vector2Int offsets = GridOffsets[originGrid.ParentItem][grid]; + Vector2Int offsets = GridOffsets[originGrid.ParentItem.Id][grid]; LocationInGrid location = new(x - offsets.x, y - offsets.y, multigridLocation.r); return new ItemAddressClass(grid, location); @@ -63,7 +63,7 @@ namespace UIFixes } Item parent = initialGridView.Grid.ParentItem; - if (GridOffsets.ContainsKey(parent) || !IsMultiGrid(parent)) + if (GridOffsets.ContainsKey(parent.Id) || !IsMultiGrid(parent)) { return; } @@ -104,8 +104,8 @@ namespace UIFixes } } - GridOffsets.Add(parent, gridOffsets); - GridsByLocation.Add(parent, gridsByLocation); + GridOffsets.Add(parent.Id, gridOffsets); + GridsByLocation.Add(parent.Id, gridsByLocation); } private static bool IsMultiGrid(ItemAddressClass itemAddress) diff --git a/Patches/SwapPatches.cs b/Patches/SwapPatches.cs index 5567c09..84ad910 100644 --- a/Patches/SwapPatches.cs +++ b/Patches/SwapPatches.cs @@ -381,9 +381,12 @@ namespace UIFixes return; } - if (!ValidPrerequisites(__instance, targetItemContext, operation)) + using (var containedContext = targetItemContext.CreateChild(slot.ContainedItem)) { - return; + if (!ValidPrerequisites(__instance, containedContext, operation)) + { + return; + } } var item = __instance.Item;