using System; using System.Collections; using System.Linq; using UnityEngine.Pool; using UnityEngine.UIElements; namespace RosettaUI.UIToolkit { /// /// Itemを追加するとき最後のアイテムをコピーするListViewController /// public class ListViewControllerCustom : ListViewController { private readonly Func _createItemFunc; public ListViewControllerCustom(Func createItemFunc = null) { _createItemFunc = createItemFunc; } public override void AddItems(int itemCount) { if (itemCount <= 0) return; var previousCount = GetItemsCount(); var listType = itemsSource.GetType(); var itemType = ListUtility.GetItemType(listType); for (var i = 0; i < itemCount; ++i) { if (_createItemFunc != null) { var newItem = _createItemFunc(itemsSource, itemType, previousCount + i); itemsSource = ListUtility.AddItemAtLast(itemsSource,listType, itemType, newItem); } else { itemsSource = ListUtility.AddItemAtLast(itemsSource, listType, itemType); } } using var _ = ListPool.Get(out var intList); intList.AddRange(Enumerable.Range(previousCount, itemCount)); RaiseItemsAdded(intList); RaiseOnSizeChanged(); } } }