Exemplo n.º 1
0
        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);
        }
Exemplo n.º 2
0
        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);
        }
Exemplo n.º 3
0
        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;
                }
            }
        }
Exemplo n.º 4
0
        internal bool IsClosingOther(UIInfoAttribute info)
        {
            UIRootInfoAttribute rootInfo = RootType.GetCustomAttribute <UIRootInfoAttribute>();

            return(rootInfo.IsClosingOther(info.RootType));
        }