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 path, string name, CUILoadState openState) { LoadingUICount++; var assetLoader = KStaticAssetLoader.Load(path); openState.UIResourceLoader = assetLoader; // 基本不用手工释放的 while (!assetLoader.IsCompleted) { yield return(null); } GameObject uiObj = (GameObject)assetLoader.TheAsset; uiObj.SetActive(false); uiObj.name = openState.TemplateName; KUIController uiBase = (KUIController)uiObj.AddComponent(openState.UIType); 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); }
public void UIObjectFilter(KUIController ui, GameObject uiObj) { //if (ui is IUGUIWindow) //{ // KTool.SetChild(uiObj, UICanvas.gameObject);// 放进UICanvas // KTool.SetLayer(uiObj, (int)CLayerDef.UI); //} //else { uiObj.transform.parent = AnchorSide[UIAnchor.Side.Center.ToString()]; uiObj.transform.localPosition = Vector3.zero; uiObj.transform.localScale = new Vector3(1, 1, 1); } }
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 uiTypeTemplateName, string uiInstanceName) { TemplateName = uiTypeTemplateName; InstanceName = uiInstanceName; UIWindow = null; UIType = "KUI" + uiTypeTemplateName; IsLoading = true; OpenWhenFinish = false; OpenArgs = null; CallbacksWhenFinish = new Queue <Action <KUIController, object[]> >(); CallbacksArgsWhenFinish = new Queue <object[]>(); }
public void UIObjectFilter(KUIController ui, GameObject uiObject) { }
public bool IsOpen(string name) { KUIController uiBase = GetUIBase(name); return(uiBase == null ? false : uiBase.gameObject.activeSelf); }