public async Task <TView> Load <TView>(UIInfoAttribute info) where TView : UIView { TView prefab = await assets.Load <TView>(info.Path); Transform root = GetRoot(info.RootType).Transform; TView view = Object.Instantiate(prefab, root); return(view); }
internal async Task <TView> Open <TView>(object data = null) where TView : UIView { UIInfoAttribute info = UIView <TView> .Info; await CloseRequiredOpened(info); TView view = await loader.Load <TView>(info); opened.Add(view); view.Open(data); view.CloseEvent.Listen(() => opened.Remove(view), this); return(view); }
private async Task CloseRequiredOpened(UIInfoAttribute nextViewInfo) { for (int index = opened.Count - 1; index >= 0; index--) { UIView openedView = opened[index]; if (!nextViewInfo.IsClosingOther(openedView.Info)) { continue; } if (openedView.Info.CanBeOverlapped) { await openedView.Close(); } else { await openedView.CloseEvent; } } }
internal bool IsClosingOther(UIInfoAttribute info) { UIRootInfoAttribute rootInfo = RootType.GetCustomAttribute <UIRootInfoAttribute>(); return(rootInfo.IsClosingOther(info.RootType)); }