using System; using System.Collections.Generic; using System.Linq; using AlicizaX.ObjectPool; using UnityEngine; namespace AlicizaX.UI.RecyclerView { public class MixedViewProvider : ViewProvider { [SerializeField] private ViewHolder chatLeftViewHolder; [SerializeField] private ViewHolder chatRightViewHolder; private Dictionary dict = new(); public MixedViewProvider(RecyclerView recyclerView, ViewHolder[] templates) : base(recyclerView, templates) { foreach (var template in templates) { dict[template.name] = template; } } public override ViewHolder GetTemplate(string viewName) { if (templates == null || templates.Length == 0) { throw new NullReferenceException("ViewProvider templates can not null or empty."); } return dict[viewName]; } public override ViewHolder[] GetTemplates() { if (templates == null || templates.Length == 0) { throw new NullReferenceException("ViewProvider templates can not null or empty."); } return dict.Values.ToArray(); } public override ViewHolder Allocate(string viewName) { return ViewHolderObjectPool.Allocate(GetTemplate(viewName), recyclerView.Content); } public override void Free(string viewName, ViewHolder viewHolder) { ViewHolderObjectPool.Free(viewHolder); } public override void Reset() { Clear(); } } }