예제 #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);
    }
예제 #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();
    }
예제 #3
0
    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--;
    }
예제 #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);
    }
예제 #5
0
 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);
     }
 }
예제 #6
0
 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);
     }
 }
예제 #7
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);
            }
        }
    }
예제 #8
0
    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[]>();
    }
예제 #9
0
 public void UIObjectFilter(KUIController ui, GameObject uiObject)
 {
 }
예제 #10
0
 public void UIObjectFilter(KUIController ui, GameObject uiObject)
 {
 }
예제 #11
0
    public bool IsOpen(string name)
    {
        KUIController uiBase = GetUIBase(name);

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