using System; using System.Collections.Generic; using Cysharp.Threading.Tasks; using UnityEngine.UIElements; namespace DanieleMarotta.RiversongCodeShowcase { public class UIService { public IUIRoot UIRoot { get; set; } public UITemplateLibrary TemplateLibrary { get; set; } public TextFormatHelper TextFormatHelper { get; set; } public async UniTask CreateView(Type type, VisualElement rootElement) { var view = (UIView)Activator.CreateInstance(type); await view.InitializeAsync(this, rootElement); return view; } } public static class UIServiceExtensions { public static async UniTask CreateViews(this UIService uiService, List models, VisualElement container, VisualTreeAsset template) where TModel : UIModel where TView : UIView { container.Clear(); foreach (var model in models) { var element = template.CloneTree(); container.Add(element); var view = (TView)await uiService.CreateView(typeof(TView), element); view.SetModel(model); } } } }