Exemplo n.º 1
0
        private void InitWindow(CUILoadState uiState, KUIController uiBase, bool open, params object[] args)
        {
            uiBase.OnInit();
            if (OnInitEvent != null)
            {
                OnInitEvent(uiBase);
            }
            if (open)
            {
                OnOpen(uiState, args);
            }

            if (!open)
            {
                if (!uiState.IsStaticUI)
                {
                    CloseWindow(uiBase.UIName); // Destroy
                    return;
                }
                else
                {
                    uiBase.gameObject.SetActive(false);
                }
            }

            uiState.OnUIWindowLoadedCallbacks(uiState, uiBase);
        }
Exemplo n.º 2
0
        private void OnOpen(CUILoadState uiState, params object[] args)
        {
            if (uiState.IsLoading)
            {
                uiState.OpenWhenFinish = true;
                uiState.OpenArgs       = args;
                return;
            }

            KUIController uiBase = uiState.UIWindow;

            Action doOpenAction = () =>
            {
                if (uiBase.gameObject.activeSelf)
                {
                    uiBase.OnClose();
                }

                uiBase.BeforeOpen(args, () =>
                {
                    uiBase.gameObject.SetActive(true);

                    uiBase.OnOpen(args);

                    if (OnOpenEvent != null)
                    {
                        OnOpenEvent(uiBase);
                    }
                });
            };

            doOpenAction();
        }
Exemplo n.º 3
0
        private IEnumerator LoadUIAssetBundle(string name, CUILoadState openState)
        {
            LoadingUICount++;

            var request = new UILoadRequest();

            yield return(KResourceModule.Instance.StartCoroutine(UiBridge.LoadUIAsset(openState, request)));

            GameObject uiObj = (GameObject)request.Asset;

            // 具体加载逻辑结束...这段应该放到Bridge里

            uiObj.SetActive(false);
            uiObj.name = openState.TemplateName;

            KUIController uiBase = uiObj.AddComponent(openState.UIType) as KUIController;

            Debuger.Assert(uiBase);

            openState.UIWindow = uiBase;

            uiBase.UIName = uiBase.UITemplateName = openState.TemplateName;

            UiBridge.UIObjectFilter(uiBase, uiObj);

            openState.IsLoading = false; // Load完
            InitWindow(openState, uiBase, openState.OpenWhenFinish, openState.OpenArgs);

            LoadingUICount--;
        }
Exemplo n.º 4
0
        private void OnDynamicWindowCallback(KUIController _ui, object[] _args)
        {
            string template = (string)_args[0];
            string name     = (string)_args[1];

            GameObject uiObj = (GameObject)UnityEngine.Object.Instantiate(_ui.gameObject);

            uiObj.name = name;

            UiBridge.UIObjectFilter(_ui, uiObj);

            CUILoadState instanceUIState = UIWindows[name];

            instanceUIState.IsLoading = false;

            KUIController uiBase = uiObj.GetComponent <KUIController>();

            uiBase.UITemplateName = template;
            uiBase.UIName         = name;

            instanceUIState.UIWindow = uiBase;

            object[] originArgs = new object[_args.Length - 2]; // 去除前2个参数
            for (int i = 2; i < _args.Length; i++)
            {
                originArgs[i - 2] = _args[i];
            }
            InitWindow(instanceUIState, uiBase, instanceUIState.OpenWhenFinish, originArgs);
        }
Exemplo n.º 5
0
        internal void OnUIWindowLoadedCallbacks(CUILoadState uiState, KUIController uiObject)
        {
            //if (openState.OpenWhenFinish)  // 加载完打开 模式下,打开时执行回调
            {
                while (uiState.CallbacksWhenFinish.Count > 0)
                {
                    Action <KUIController, object[]> callback = uiState.CallbacksWhenFinish.Dequeue();
                    object[] _args = uiState.CallbacksArgsWhenFinish.Dequeue();
                    //callback(uiBase, _args);

                    DoCallback(callback, _args);
                }
            }
        }
Exemplo n.º 6
0
        public KAbstractResourceLoader UIResourceLoader; // 加载器,用于手动释放资源

        public CUILoadState(string uiTemplateName, string uiInstanceName, Type uiControllerType = default(Type))
        {
            if (uiControllerType == default(Type))
            {
                uiControllerType = typeof(KUIController);
            }

            TemplateName = uiTemplateName;
            InstanceName = uiInstanceName;
            UIWindow     = null;
            UIType       = uiControllerType;

            IsLoading      = true;
            OpenWhenFinish = false;
            OpenArgs       = null;

            CallbacksWhenFinish     = new Queue <Action <KUIController, object[]> >();
            CallbacksArgsWhenFinish = new Queue <object[]>();
        }
Exemplo n.º 7
0
        public bool IsOpen(string name)
        {
            KUIController uiBase = GetUIBase(name);

            return(uiBase == null ? false : uiBase.gameObject.activeSelf);
        }