diff --git a/Dalamud/Game/Inventory/GameInventory.cs b/Dalamud/Game/Inventory/GameInventory.cs index cac7d5266..d370574d7 100644 --- a/Dalamud/Game/Inventory/GameInventory.cs +++ b/Dalamud/Game/Inventory/GameInventory.cs @@ -50,7 +50,7 @@ internal class GameInventory : IDisposable, IServiceType, IGameInventory /// /// The inventory type. /// The span. - private static unsafe Span GetItemsForInventory(GameInventoryType type) + private static unsafe ReadOnlySpan GetItemsForInventory(GameInventoryType type) { var inventoryManager = InventoryManager.Instance(); if (inventoryManager is null) return default; @@ -58,15 +58,11 @@ internal class GameInventory : IDisposable, IServiceType, IGameInventory var inventory = inventoryManager->GetInventoryContainer((InventoryType)type); if (inventory is null) return default; - return new(inventory->Items, (int)inventory->Size); + return new ReadOnlySpan(inventory->Items, (int)inventory->Size); } private void OnFrameworkUpdate(IFramework framework1) { - // TODO: Uncomment this - // // If no one is listening for event's then we don't need to track anything. - // if (this.InventoryChanged is null) return; - for (var i = 0; i < this.inventoryTypes.Length; i++) { var newItems = GetItemsForInventory(this.inventoryTypes[i]); @@ -76,7 +72,7 @@ internal class GameInventory : IDisposable, IServiceType, IGameInventory // Assumption: newItems is sorted by slots, and the last item has the highest slot number. var oldItems = this.inventoryItems[i] ??= new GameInventoryItem[newItems[^1].InternalItem.Slot + 1]; - foreach (ref var newItem in newItems) + foreach (ref readonly var newItem in newItems) { ref var oldItem = ref oldItems[newItem.InternalItem.Slot]; @@ -84,14 +80,14 @@ internal class GameInventory : IDisposable, IServiceType, IGameInventory { if (newItem.IsEmpty) continue; - this.changelog.Add(new(GameInventoryEvent.Added, default, newItem)); + this.changelog.Add(new IGameInventory.GameInventoryEventArgs(GameInventoryEvent.Added, default, newItem)); } else { if (newItem.IsEmpty) - this.changelog.Add(new(GameInventoryEvent.Removed, oldItem, default)); + this.changelog.Add(new IGameInventory.GameInventoryEventArgs(GameInventoryEvent.Removed, oldItem, default)); else if (!oldItem.Equals(newItem)) - this.changelog.Add(new(GameInventoryEvent.Changed, oldItem, newItem)); + this.changelog.Add(new IGameInventory.GameInventoryEventArgs(GameInventoryEvent.Changed, oldItem, newItem)); else continue; } @@ -133,7 +129,7 @@ internal class GameInventory : IDisposable, IServiceType, IGameInventory if (added.Target.ItemId == removed.Source.ItemId) { Log.Verbose($"Move: reinterpreting {removed} + {added}"); - added = new(GameInventoryEvent.Moved, removed.Source, added.Target); + added = new IGameInventory.GameInventoryEventArgs(GameInventoryEvent.Moved, removed.Source, added.Target); removed = default; break; } @@ -156,22 +152,22 @@ internal class GameInventory : IDisposable, IServiceType, IGameInventory { // e1 got moved to e2 Log.Verbose($"Move: reinterpreting {e1} + {e2}"); - e1 = new(GameInventoryEvent.Moved, e1.Source, e2.Target); + e1 = new IGameInventory.GameInventoryEventArgs(GameInventoryEvent.Moved, e1.Source, e2.Target); e2 = default; } else if (e2.Target.IsEmpty) { // e2 got moved to e1 Log.Verbose($"Move: reinterpreting {e2} + {e1}"); - e1 = new(GameInventoryEvent.Moved, e2.Source, e1.Target); + e1 = new IGameInventory.GameInventoryEventArgs(GameInventoryEvent.Moved, e2.Source, e1.Target); e2 = default; } else { // e1 and e2 got swapped Log.Verbose($"Move(Swap): reinterpreting {e1} + {e2}"); - (e1, e2) = (new(GameInventoryEvent.Moved, e1.Target, e2.Target), - new(GameInventoryEvent.Moved, e2.Target, e1.Target)); + (e1, e2) = (new IGameInventory.GameInventoryEventArgs(GameInventoryEvent.Moved, e1.Target, e2.Target), + new IGameInventory.GameInventoryEventArgs(GameInventoryEvent.Moved, e2.Target, e1.Target)); } } }