mirror of
https://github.com/goatcorp/Dalamud.git
synced 2025-12-13 12:14:16 +01:00
Use ReadOnlySpan
This commit is contained in:
parent
000d16c553
commit
40575e1a88
1 changed files with 11 additions and 15 deletions
|
|
@ -50,7 +50,7 @@ internal class GameInventory : IDisposable, IServiceType, IGameInventory
|
||||||
/// </summary>
|
/// </summary>
|
||||||
/// <param name="type">The inventory type.</param>
|
/// <param name="type">The inventory type.</param>
|
||||||
/// <returns>The span.</returns>
|
/// <returns>The span.</returns>
|
||||||
private static unsafe Span<GameInventoryItem> GetItemsForInventory(GameInventoryType type)
|
private static unsafe ReadOnlySpan<GameInventoryItem> GetItemsForInventory(GameInventoryType type)
|
||||||
{
|
{
|
||||||
var inventoryManager = InventoryManager.Instance();
|
var inventoryManager = InventoryManager.Instance();
|
||||||
if (inventoryManager is null) return default;
|
if (inventoryManager is null) return default;
|
||||||
|
|
@ -58,15 +58,11 @@ internal class GameInventory : IDisposable, IServiceType, IGameInventory
|
||||||
var inventory = inventoryManager->GetInventoryContainer((InventoryType)type);
|
var inventory = inventoryManager->GetInventoryContainer((InventoryType)type);
|
||||||
if (inventory is null) return default;
|
if (inventory is null) return default;
|
||||||
|
|
||||||
return new(inventory->Items, (int)inventory->Size);
|
return new ReadOnlySpan<GameInventoryItem>(inventory->Items, (int)inventory->Size);
|
||||||
}
|
}
|
||||||
|
|
||||||
private void OnFrameworkUpdate(IFramework framework1)
|
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++)
|
for (var i = 0; i < this.inventoryTypes.Length; i++)
|
||||||
{
|
{
|
||||||
var newItems = GetItemsForInventory(this.inventoryTypes[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.
|
// 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];
|
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];
|
ref var oldItem = ref oldItems[newItem.InternalItem.Slot];
|
||||||
|
|
||||||
|
|
@ -84,14 +80,14 @@ internal class GameInventory : IDisposable, IServiceType, IGameInventory
|
||||||
{
|
{
|
||||||
if (newItem.IsEmpty)
|
if (newItem.IsEmpty)
|
||||||
continue;
|
continue;
|
||||||
this.changelog.Add(new(GameInventoryEvent.Added, default, newItem));
|
this.changelog.Add(new IGameInventory.GameInventoryEventArgs(GameInventoryEvent.Added, default, newItem));
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
if (newItem.IsEmpty)
|
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))
|
else if (!oldItem.Equals(newItem))
|
||||||
this.changelog.Add(new(GameInventoryEvent.Changed, oldItem, newItem));
|
this.changelog.Add(new IGameInventory.GameInventoryEventArgs(GameInventoryEvent.Changed, oldItem, newItem));
|
||||||
else
|
else
|
||||||
continue;
|
continue;
|
||||||
}
|
}
|
||||||
|
|
@ -133,7 +129,7 @@ internal class GameInventory : IDisposable, IServiceType, IGameInventory
|
||||||
if (added.Target.ItemId == removed.Source.ItemId)
|
if (added.Target.ItemId == removed.Source.ItemId)
|
||||||
{
|
{
|
||||||
Log.Verbose($"Move: reinterpreting {removed} + {added}");
|
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;
|
removed = default;
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
|
|
@ -156,22 +152,22 @@ internal class GameInventory : IDisposable, IServiceType, IGameInventory
|
||||||
{
|
{
|
||||||
// e1 got moved to e2
|
// e1 got moved to e2
|
||||||
Log.Verbose($"Move: reinterpreting {e1} + {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;
|
e2 = default;
|
||||||
}
|
}
|
||||||
else if (e2.Target.IsEmpty)
|
else if (e2.Target.IsEmpty)
|
||||||
{
|
{
|
||||||
// e2 got moved to e1
|
// e2 got moved to e1
|
||||||
Log.Verbose($"Move: reinterpreting {e2} + {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;
|
e2 = default;
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
// e1 and e2 got swapped
|
// e1 and e2 got swapped
|
||||||
Log.Verbose($"Move(Swap): reinterpreting {e1} + {e2}");
|
Log.Verbose($"Move(Swap): reinterpreting {e1} + {e2}");
|
||||||
(e1, e2) = (new(GameInventoryEvent.Moved, e1.Target, e2.Target),
|
(e1, e2) = (new IGameInventory.GameInventoryEventArgs(GameInventoryEvent.Moved, e1.Target, e2.Target),
|
||||||
new(GameInventoryEvent.Moved, e2.Target, e1.Target));
|
new IGameInventory.GameInventoryEventArgs(GameInventoryEvent.Moved, e2.Target, e1.Target));
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
|
||||||
Loading…
Add table
Add a link
Reference in a new issue