예제 #1
0
        static async ETTask <T> __InnerOpenWindow <T, P1, P2, P3, P4>(this UIManagerComponent self, UIWindow target, P1 p1, P2 p2, P3 p3, P4 p4) where T : Entity
        {
            CoroutineLock coroutineLock = null;

            try
            {
                coroutineLock = await CoroutineLockComponent.Instance.Wait(CoroutineLockType.UIManager, target.GetHashCode());

                target.Active = true;
                T   res       = target.GetComponent(target.ViewType) as T;
                var need_load = target.LoadingState == UIWindowLoadingState.NotStart;
                if (need_load)
                {
                    target.LoadingState = UIWindowLoadingState.Loading;
                    await Game.EventSystem.PublishAsync(new UIEventType.InnerOpenWindow()
                    {
                        path = target.PrefabPath, window = target
                    });
                }
                Game.EventSystem.Publish(new UIEventType.ResetWindowLayer()
                {
                    window = target
                });
                await self.__AddWindowToStack(target, p1, p2, p3, p4);

                return(res);
            }
            finally
            {
                coroutineLock?.Dispose();
            }
        }