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); }
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(); }
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--; }
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); }
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); } } }
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[]>(); }
public bool IsOpen(string name) { KUIController uiBase = GetUIBase(name); return(uiBase == null ? false : uiBase.gameObject.activeSelf); }