Exemplo n.º 1
0
 private void OnCreate(IUIPanel panel)
 {
     if (this.onCreate != null)
     {
         onCreate(panel);
     }
 }
Exemplo n.º 2
0
        private void CreateUI_Internal(GameObject go, UIInfoBase uiNode, Bridge bridge, Transform parent, IUIPanel parentPanel)
        {
            if (go == null)
            {
                return;
            }

            var parentDic = GetParentDic(parent);

            Utility.SetTranform(go.transform, uiNode.type.layer, uiNode.type.layerIndex, Trans, parent, parentDic, transRefDic);

            go.name = uiNode.panelName;
            go.SetActive(true);

            IUIPanel panel = GetPanelFromPool(go);

            InitPanelInformation(panel, uiNode);
            panel.Binding(go);
            panel.HandleData(bridge);
            transRefDic.Add(go.transform.GetInstanceID(), panel);
            createdPanels.Add(panel);

            if (parentPanel != null)
            {
                parentPanel.RecordChild(panel);
            }

            if (bridge != null)
            {
                bridge.OnCreatePanel(panel);
            }

            HandBridgeOptions(panel, bridge);
        }
Exemplo n.º 3
0
        public IEnumerator CreateView(IUIPanel uiPanel)
        {
            string assetPath = uiPanel.GetPanelAssetPath();

            Logger.d($"[DeftauleUISystem.Create] UI预制体加载 assetPath={assetPath}");
            var loader = Addressables.InstantiateAsync(assetPath, _uiPanelRoot, false);

            yield return(loader);

            if (loader.Status == AsyncOperationStatus.Succeeded)
            {
                UIPanelData panelData = new UIPanelData();
                _uiPanelDatas.Add(panelData);
                panelData.PanelGO = loader.Result;
                panelData.UIPanel = uiPanel;

                panelData.PanelGO.GetComponent <Canvas>().enabled           = false;
                panelData.PanelGO.GetComponent <GraphicRaycaster>().enabled = false;
                uiPanel.OnInit(loader.Result);
            }
            else
            {
                Logger.e($"[DeftauleUISystem.Create] UI预制体加载失败 assetPath={assetPath}");
            }
        }
Exemplo n.º 4
0
    void OpenMainUI(object obj)
    {
        m_curUIType = (LoginUIType)obj;
        CloseAllPanel();
        IUIPanel uiPanel = null;

        if (UIList.TryGetValue(m_curUIType, out uiPanel))
        {
            uiPanel.Show();
            m_curUIPanel = uiPanel.gameObject;
        }
        else
        {
            uiPanel      = GetPanel(m_curUIType);
            m_curUIPanel = uiPanel.gameObject;

            uiPanel.Show();
            UIList.Add(m_curUIType, uiPanel);
        }
        if (m_curUIType == LoginUIType.CreatRole)
        {
            SetCamera();
        }
        if (m_curUIType == LoginUIType.CreatRole || m_curUIType == LoginUIType.SelectRole)
        {
            //SoundManager.Instance.StopBGM(0.0f);
            //SoundManager.Instance.PlayBGM("Music_UIBG_LoginCharacter", 0.0f);
        }
    }
 /// <summary>
 /// 建立遮罩
 /// </summary>
 /// <param name="panel"></param>
 /// <param name="info"></param>
 protected void TryMakeCover(IUIPanel panel, BridgeInfo info)
 {
     if (info.showModel.cover)
     {
         panel.Cover();
     }
 }
 /// <summary>
 /// 处理面板打开规则
 /// </summary>
 /// <param name="panel"></param>
 /// <param name="bridge"></param>
 protected void HandBridgeOptions(IUIPanel panel, Bridge bridge)
 {
     TryChangeParentState(panel, bridge.Info);
     TryHandleMutexPanels(panel, bridge.Info);
     TryHideGroup(panel, bridge.Info);
     TryAutoOpen(panel.Content, panel);
 }
 public void Open(IUIPanel parentPanel, string panelName, object data = null)
 {
     mainThreadActions.Enqueue(new Action(() =>
     {
         uiFacade.Open(parentPanel, panelName, data);
     }));
 }
Exemplo n.º 8
0
        internal Bridge Allocate(BridgeInfo info, IUIPanel parentPanel = null)
        {
            var bridge = innerPool.Allocate();

            bridge.Reset(info, parentPanel);
            return(bridge);
        }
        /// <summary>
        /// 获取可用的bridge
        /// </summary>
        /// <param name="parentPanel"></param>
        /// <param name="panelName"></param>
        /// <returns></returns>
        protected Bridge GetBridgeClamp(IUIPanel parentPanel, string panelName, int index)
        {
            Bridge     bridge     = null;
            var        parentName = parentPanel == null ? "" : parentPanel.Name;
            var        mayInfos   = Bridges.FindAll(x => x.outNode == panelName && (x.index == index || index == -1)); //所有可能的
            var        baseInfos  = mayInfos.FindAll(x => x.inNode == parentName);                                     //所有父级名相同的
            BridgeInfo?bridgeInfo = null;

            if (baseInfos.Count > 0)
            {
                bridgeInfo = baseInfos[0];
            }
            else
            {
                var usefulInfos = mayInfos.FindAll(x => string.IsNullOrEmpty(x.inNode));
                if (usefulInfos.Count > 0)
                {
                    bridgeInfo = usefulInfos[0];
                }
            }

            if (bridgeInfo == null)
            {
                var show = new ShowMode();
                var info = new BridgeInfo(parentName, panelName, show, null, 0);
                bridge = bridgePool.Allocate(info, parentPanel);
            }
            else
            {
                bridge = bridgePool.Allocate((BridgeInfo)bridgeInfo, parentPanel);
            }
            return(bridge);
        }
Exemplo n.º 10
0
 protected void OnRemoveChild(IUIPanel childPanel, bool remove)
 {
     if (childPanels != null && childPanels.Contains(childPanel) && remove)
     {
         childPanels.Remove(childPanel);
     }
 }
Exemplo n.º 11
0
        void OpenMainUI(object obj)
        {
            PlatformLoginBehaviour.message += " For91 OpenUI:";
            var loginUIType = (LoginUIType)obj;

            CloseAllPanel();
            IUIPanel uiPanel = null;

            if (UIList.TryGetValue(loginUIType, out uiPanel))
            {
                uiPanel.Show();
            }
            else
            {
                uiPanel = GetPanel(loginUIType);
                uiPanel.Show();
                UIList.Add(loginUIType, uiPanel);
            }

            if (loginUIType == LoginUIType.CreatRole)
            {
                SetCamera();
            }


            if (loginUIType == LoginUIType.CreatRole || loginUIType == LoginUIType.SelectRole)
            {
                //SoundManager.Instance.StopBGM(0.0f);
                //SoundManager.Instance.PlayBGM("Music_UIBG_LoginCharacter", 0.0f);
            }
        }
Exemplo n.º 12
0
 private void OnCallBack(IUIPanel panel, object target)
 {
     if (this.onCallBack != null)
     {
         onCallBack(panel, target);
     }
 }
Exemplo n.º 13
0
 private void OnClose(IUIPanel panel)
 {
     if (this.onClose != null)
     {
         this.onClose.Invoke(panel);
     }
 }
 /// <summary>
 /// 互斥面板自动隐藏
 /// </summary>
 /// <param name="childPanel"></param>
 /// <param name=""></param>
 /// <param name="bridge"></param>
 protected void TryHideMutexPanels(IUIPanel childPanel, BridgeInfo bridge)
 {
     if (bridge.showModel.mutex != MutexRule.NoMutex)
     {
         if (bridge.showModel.mutex == MutexRule.SameParentAndLayer)
         {
             var mayBridges = Bridges.FindAll(x => x.inNode == bridge.inNode);
             foreach (var bg in mayBridges)
             {
                 var mayPanels = createdPanels.FindAll(x => x.Name == bg.outNode && x.UType.layer == childPanel.UType.layer && x != childPanel && !IsChildOfPanel(childPanel, x));
                 foreach (var mayPanel in mayPanels)
                 {
                     if (mayPanel != null && mayPanel.IsShowing)
                     {
                         HidePanelInteral(childPanel, mayPanel);
                     }
                 }
             }
         }
         else if (bridge.showModel.mutex == MutexRule.SameLayer)
         {
             var mayPanels = createdPanels.FindAll(x => x.UType.layer == childPanel.UType.layer && x != childPanel && !IsChildOfPanel(childPanel, x));
             foreach (var mayPanel in mayPanels)
             {
                 if (mayPanel != null && mayPanel.IsShowing)
                 {
                     HidePanelInteral(childPanel, mayPanel);
                 }
             }
         }
     }
 }
        /// <summary>
        /// 找到信息源和bridge
        /// </summary>
        /// <param name="parentPanel"></param>
        /// <param name="panelName"></param>
        /// <param name="bridgeObj"></param>
        /// <param name="uiNode"></param>
        /// <returns></returns>
        protected bool TryMatchPanel(IUIPanel parentPanel, string panelName, int index, out Bridge bridgeObj, out UIInfoBase uiNode)
        {
            uiNode = Nodes.Find(x => x.panelName == panelName);

            if (uiNode != null)
            {
                if (uiNode.type.form == UIFormType.Fixed)
                {
                    var oldPanel = createdPanels.Find(x => x.Name == panelName && x.Parent == parentPanel);
                    if (oldPanel != null)
                    {
                        bridgeObj = bridgeDic[oldPanel];
                        if (!oldPanel.IsShowing)
                        {
                            oldPanel.UnHide();
                            HandBridgeOptions(oldPanel, bridgeObj);
                        }
                        return(false);
                    }
                }
            }

            if (uiNode == null)
            {
                bridgeObj = null;
                return(false);
            }

            bridgeObj = GetBridgeClamp(parentPanel, panelName, index);
            return(uiNode != null && bridgeObj != null);
        }
        public Bridge InstencePanel(IUIPanel parentPanel, string panelName, int index, Transform root)
        {
            Bridge     bridge = null;
            UIInfoBase uiNode = null;

            if (TryMatchPanel(parentPanel, panelName, index, out bridge, out uiNode))
            {
                uiNode.OnCreate = (go) =>
                {
                    Utility.SetTranform(go.transform, uiNode.type.layer, uiNode.type.layerIndex, root == null ? Trans : root);
                    go.SetActive(true);
                    var panel = go.GetComponent <IUIPanel>();
                    if (panel != null)
                    {
                        createdPanels.Add(panel);
                        if (parentPanel != null)
                        {
                            parentPanel.RecordChild(panel);
                        }
                        bridgeDic.Add(panel, bridge);
                        InitPanel(panel, bridge, uiNode);
                        HandBridgeOptions(panel, bridge);
                    }
                };
                creater.CreatePanel(uiNode);
            }
            return(bridge);
        }
        /// <summary>
        /// 找到信息源和bridge
        /// </summary>
        /// <param name="parentPanel"></param>
        /// <param name="panelName"></param>
        /// <param name="bridgeObj"></param>
        /// <param name="uiNode"></param>
        /// <returns></returns>
        protected bool NeedCreatePanel(IUIPanel parentPanel, string panelName, int index, out Bridge bridgeObj, out UIInfoBase uiNode)
        {
            Nodes.TryGetValue(panelName, out uiNode);

            if (uiNode != null)
            {
                if (uiNode.type.form == UIFormType.Fixed)
                {
                    var oldPanel = createdPanels.Find(x => x.Name == panelName && x.Parent == parentPanel);
                    if (oldPanel != null)
                    {
                        bridgeObj = createdBridges.Find(x => x.InPanel == parentPanel && x.OutPanel == oldPanel);
                        if (!oldPanel.IsShowing)
                        {
                            oldPanel.UnHide();
                            HandBridgeOptions(oldPanel, bridgeObj);
                        }
                        return(false);
                    }
                }
            }

            if (uiNode == null)
            {
                bridgeObj = null;
                return(false);
            }

            bridgeObj = GetBridgeClamp(parentPanel, panelName, index);
            createdBridges.Add(bridgeObj);
            return(uiNode != null && bridgeObj != null);
        }
Exemplo n.º 18
0
        private void Open_Internal(UIHandle handle, IUIPanel parent, string panelName, int index, object data = null)
        {
            var currentGroup = parent == null ? null : parent.Group;
            var openOK       = false;

            if (currentGroup != null)//限制性打开
            {
                openOK = InternalOpen(parent, currentGroup, handle, panelName, index);
            }
            else
            {
                var groupList = Utility.GetActivePanelGroups();
                foreach (var group in groupList)
                {
                    openOK |= InternalOpen(parent, group, handle, panelName, index);
                }
            }

            if (openOK)
            {
                if (data != null)
                {
                    handle.Send(data);
                }
            }
            else
            {
#if UNITY_EDITOR
                Debug.Log("未打开成功,请检查配制信息");
#endif
            }
            handle.Dispose();
        }
Exemplo n.º 19
0
        public IUIHandle Open(IUIPanel parent, string panelName, int index, object data = null)
        {
            var handle = handlePool.Allocate(panelName);

            var currentGroup = parent == null ? null : parent.Group;

            if (currentGroup != null)//限制性打开
            {
                InternalOpen(parent, currentGroup, handle, panelName, index);
            }
            else
            {
                foreach (var group in groupList)
                {
                    InternalOpen(parent, group, handle, panelName, index);
                }
            }

            if (data != null)
            {
                handle.Send(data);
            }

            return(handle);
        }
 public void CallBack(IUIPanel panel, object data)
 {
     if (onCallBack != null)
     {
         onCallBack.Invoke(panel, data);
     }
 }
 internal void OnCreatePanel(IUIPanel panel)
 {
     OutPanel = panel;
     if (onCreate != null)
     {
         onCreate.Invoke(panel);
     }
 }
    public void Initialize(IUIPanel view)
    {
        this.view = view;
        m_close.onClick.AddListener(this.view.Close);
        m_body.onClick.AddListener(OpenPopPanel);

        Debug.Log("Initialize" + this);
    }
Exemplo n.º 23
0
 /// <summary>
 /// 处理面板打开规则
 /// </summary>
 /// <param name="panel"></param>
 /// <param name="bridge"></param>
 protected void HandBridgeOptions(IUIPanel panel, Bridge bridge)
 {
     Debug.Assert(bridge != null, "信息不应当为空,请检查!");
     TryChangeParentState(panel, bridge.Info);
     TryHandleMutexPanels(panel, bridge.Info);
     TryHideGroup(panel, bridge.Info);
     TryAutoOpen(panel);
 }
Exemplo n.º 24
0
 public void Push(IUIPanel view)
 {
     if (view != null)
     {
         mUIStack.Push(view.PanelInfo);
         view.Close();
         mAllUI.Remove(view.Transform.name);
     }
 }
Exemplo n.º 25
0
        public void OpenRegistedPanel(IUIPanel panel, int key, object data = null)
        {
            var bindingItem = FindBindingItem(panel.Name, key);

            if (bindingItem != null && bindingItem.openAction != null)
            {
                bindingItem.openAction.Invoke(panel, data);
            }
        }
Exemplo n.º 26
0
        /// <summary>
        /// 隐藏UI
        /// </summary>
        /// <param name="uiBehaviourName"></param>
        public void HideUI(string uiBehaviourName)
        {
            IUIPanel iuiPanel = null;

            if (mAllUI.TryGetValue(uiBehaviourName, out iuiPanel))
            {
                iuiPanel.Hide();
            }
        }
 public void Initialize(IUIPanel diffusePanel)
 {
     if (!Initialized)
     {
         this.view   = diffusePanel;
         Initialized = true;
         OnInitialize();
     }
 }
 public void Recover()
 {
     if (Initialized)
     {
         Initialized = false;
         OnRecover();
         view = null;
     }
 }
Exemplo n.º 29
0
        public void CloseRegistedPanel(IUIPanel panel, int key)
        {
            var bindingItem = FindBindingItem(panel.Name, key);

            if (bindingItem != null && bindingItem.closeAction != null)
            {
                bindingItem.closeAction.Invoke();
            }
        }
Exemplo n.º 30
0
        private void OnBridgeCallBack(IUIPanel panel, object data)
        {
            var array = onCallBack.ToArray();

            foreach (var item in array)
            {
                item.Invoke(panel, data);
            }
        }