using System; using System.Collections.Generic; namespace NHSE.Core; public sealed record ItemArrayEditor(IReadOnlyList Items) where T : Item, ICopyableItem { public int ItemSize => Items[0].Size; public int TotalSize => Items.Count * ItemSize; public byte[] Write() => Items.SetArray(ItemSize); public void ImportItemDataX(ReadOnlySpan data, bool skipOccupiedSlots, int start = 0) { int expect = ItemSize; var import = data.GetArray(expect); ImportItems(import, start, skipOccupiedSlots); } private void ImportItems(IReadOnlyList import, int start, bool skipOccupiedSlots) { if (skipOccupiedSlots) ImportItemsSkip(import, start); else ImportItemsOverwrite(import, start); } private void ImportItemsOverwrite(IReadOnlyList import, int destIndex, int importIndex = 0) { while (importIndex < import.Count && destIndex < Items.Count) { Items[destIndex].CopyFrom(import[importIndex]); destIndex++; importIndex++; } } private void ImportItemsSkip(IReadOnlyList import, int destIndex, int importIndex = 0) { while (importIndex < import.Count && destIndex < Items.Count) { var importItem = import[importIndex]; if (importItem.ItemId == Item.NONE) { importIndex++; continue; } var destItem = Items[destIndex]; if (destItem.ItemId != Item.NONE) { destIndex++; continue; } destItem.CopyFrom(importItem); importIndex++; destIndex++; } } }