Example #1
0
        public IUIGroup GetGroup(string groupName)
        {
            IUIGroup group = null;

            m_Groups.TryGetValue(groupName, out group);
            return(group);
        }
Example #2
0
        /// <summary>
        /// 初始化界面。
        /// </summary>
        /// <param name="serialId">界面序列编号。</param>
        /// <param name="uiFormAssetName">界面资源名称。</param>
        /// <param name="uiGroup">界面所处的界面组。</param>
        /// <param name="pauseCoveredUIForm">是否暂停被覆盖的界面。</param>
        /// <param name="isNewInstance">是否是新实例。</param>
        /// <param name="userData">用户自定义数据。</param>
        public void OnInit(int serialId, string uiFormAssetName, IUIGroup uiGroup, bool pauseCoveredUIForm, bool isNewInstance, object userData)
        {
            m_SerialId        = serialId;
            m_UIFormAssetName = uiFormAssetName;
            if (isNewInstance)
            {
                m_UIGroup = uiGroup;
            }
            else if (m_UIGroup != uiGroup)
            {
                Log.Error("UI group is inconsistent for non-new-instance UI form.");
                return;
            }

            m_DepthInUIGroup     = 0;
            m_PauseCoveredUIForm = pauseCoveredUIForm;

            if (!isNewInstance)
            {
                return;
            }

            m_UIFormLogic = GetComponent <UIFormLogic>();
            if (m_UIFormLogic == null)
            {
                Log.Error("Can not get UI form logic.");
                return;
            }

            m_UIFormLogic.OnInit(userData);
        }
        /// <summary>
        /// 初始化界面
        /// </summary>
        /// <param name="serialId">界面序列编号</param>
        /// <param name="uiFormAssetName">界面资源名称</param>
        /// <param name="uiGroup">界面所处的界面组</param>
        /// <param name="pauseCoveredUIForm">是否暂停被覆盖的界面</param>
        /// <param name="isNewInstance">是否是新实例</param>
        /// <param name="userData">用户自定义数据</param>
        public void OnInit(int serialId, string uiFormAssetName, IUIGroup uiGroup, bool isPauseConveredUIForm, bool isNewInstance, object userData)
        {
            SerialId           = serialId;
            UIFormAssetName    = uiFormAssetName;
            DepthInUIGroup     = 0; //初始在界面组中的深度为0
            PauseCoveredUIForm = isPauseConveredUIForm;
            CachedTransform    = transform;

            if (isNewInstance)
            {
                UIGroup = uiGroup;  //新创建的实例要保存新的对象组???
            }
            else
            {
                if (UIGroup != uiGroup)
                {
                    Log.Error("[UIForm.OnInit] UI group is inconsistent for non-new-instance UI form.");
                }
                return;
            }

            Logic = gameObject.GetOrAddComponent <UIFormLogic>();
            if (Logic == null)
            {
                Log.Error("[UIForm.OnInit] UI form '{0}' can not get UI form logic.", uiFormAssetName);
                return;
            }

            Logic.OnInit(this, userData);
        }
Example #4
0
        /// <summary>
        /// 初始化界面。
        /// </summary>
        /// <param name="uiFormTypeId">界面类型编号。</param>
        /// <param name="uiGroup">界面所处的界面组。</param>
        /// <param name="pauseCoveredUIForm">是否暂停被覆盖的界面。</param>
        /// <param name="isNewInstance">是否是新实例。</param>
        /// <param name="userData">用户自定义数据。</param>
        public void OnInit(int uiFormTypeId, IUIGroup uiGroup, bool pauseCoveredUIForm, bool isNewInstance, object userData)
        {
            m_TypeId = uiFormTypeId;
            if (isNewInstance)
            {
                m_UIGroup = uiGroup;
            }
            else if (m_UIGroup != uiGroup)
            {
                throw new GameFrameworkException("UI group is inconsistent for non-new-instance UI form.");
            }

            m_DepthInUIGroup     = 0;
            m_PauseCoveredUIForm = pauseCoveredUIForm;

            if (!isNewInstance)
            {
                return;
            }

            m_UIFormLogic = GetComponent <UIFormLogic>();
            if (m_UIFormLogic == null)
            {
                Log.Error("Can not get UI form logic.");
                return;
            }

            m_UIFormLogic.OnInit(userData);
        }
Example #5
0
        /// <summary>
        /// 初始化界面。
        /// </summary>
        /// <param name="serialId">界面序列编号。</param>
        /// <param name="uiFormAssetName">界面资源名称。</param>
        /// <param name="uiGroup">界面所处的界面组。</param>
        /// <param name="pauseCoveredUIForm">是否暂停被覆盖的界面。</param>
        /// <param name="isNewInstance">是否是新实例。</param>
        /// <param name="userData">用户自定义数据。</param>
        public void OnInit(int serialId, string uiFormAssetName, IUIGroup uiGroup, bool pauseCoveredUIForm, bool isNewInstance, object userData)
        {
            m_SerialId        = serialId;
            m_UIFormAssetName = uiFormAssetName;
            if (isNewInstance)
            {
                m_UIGroup = uiGroup;
            }
            else if (m_UIGroup != uiGroup)
            {
                Log.Error("UI group is inconsistent for non-new-instance UI form.");
                return;
            }

            m_DepthInUIGroup     = 0;
            m_PauseCoveredUIForm = pauseCoveredUIForm;

            if (!isNewInstance)
            {
                return;
            }

            //第一次创建UIForm抛出事件  热更新加载UIFormLogic脚本
            GameEntry.GetComponent <EventComponent>().FireNow(this, new OpenUIFormInitStartEvenArgs(this, serialId, uiFormAssetName, userData));

            m_UIFormLogic = GetComponent <UIFormLogic>();
            if (m_UIFormLogic == null)
            {
                Log.Error("Can not get UI form logic.");
                return;
            }

            m_UIFormLogic.OnInit(userData);
        }
 /// <summary>
 /// 初始化关闭界面完成事件的新实例。
 /// </summary>
 /// <param name="serialId">界面序列编号。</param>
 /// <param name="uiFormAssetName">界面资源名称。</param>
 /// <param name="uiGroup">界面所属的界面组。</param>
 /// <param name="userData">用户自定义数据。</param>
 public CloseUIFormCompleteEventArgs(int serialId, string uiFormAssetName, IUIGroup uiGroup, object userData)
 {
     SerialId        = serialId;
     UIFormAssetName = uiFormAssetName;
     UIGroup         = uiGroup;
     UserData        = userData;
 }
Example #7
0
        public static bool HasUIForm(this UIComponent uiComponent, int uiFormId, string uiGroupName = null)
        {
            IDataTable <DRUIForm> dtUIForm = GameEntry.DataTable.GetDataTable <DRUIForm>();
            DRUIForm drUIForm = dtUIForm.GetDataRow(uiFormId);

            if (drUIForm == null)
            {
                return(false);
            }

            string assetName = AssetUtility.GetUIFormAsset(drUIForm.AssetName);

            if (string.IsNullOrEmpty(uiGroupName))
            {
                return(uiComponent.HasUIForm(assetName));
            }

            IUIGroup uiGroup = uiComponent.GetUIGroup(uiGroupName);

            if (uiGroup == null)
            {
                return(false);
            }

            return(uiGroup.HasUIForm(assetName));
        }
        //是否存在界面
        public static bool HasUIForm(this UIComponent uiComponent, int uiFormId, string uiGroupName = null)
        {
            //获取界面配置表数据
            IDataTable <DRUIForm> dtUIForm = GameEntry.DataTable.GetDataTable <DRUIForm>();
            DRUIForm drUIForm = dtUIForm.GetDataRow(uiFormId);

            if (drUIForm == null)
            {
                return(false);
            }

            //获取界面资源路径
            string assetName = RuntimeAssetUtility.GetUIFormAsset(drUIForm.AssetName);

            //界面组名为空则直接检查当前是否存在界面
            if (string.IsNullOrEmpty(uiGroupName))
            {
                return(uiComponent.HasUIForm(assetName));
            }

            //获取界面组
            IUIGroup uiGroup = uiComponent.GetUIGroup(uiGroupName);

            if (uiGroup == null)
            {
                return(false);
            }
            //界面组中检查
            return(uiGroup.HasUIForm(assetName));
        }
Example #9
0
        public static UGuiForm GetUIForm(this UIComponent uiComponent, UIFormId uiFormId, string uiGroupName = null)
        {
            string assetName = AssetUtility.GetUIFormAsset(uiFormId);
            UIForm uiForm    = null;

            if (string.IsNullOrEmpty(uiGroupName))
            {
                uiForm = uiComponent.GetUIForm(assetName);
                if (uiForm == null)
                {
                    return(null);
                }

                return((UGuiForm)uiForm.Logic);
            }

            IUIGroup uiGroup = uiComponent.GetUIGroup(uiGroupName);

            if (uiGroup == null)
            {
                return(null);
            }

            uiForm = (UIForm)uiGroup.GetUIForm(assetName);
            if (uiForm == null)
            {
                return(null);
            }

            return((UGuiForm)uiForm.Logic);
        }
Example #10
0
        /// <summary>
        /// 添加UI组
        /// </summary>
        /// <param name="group"></param>
        /// <param name="depth"></param>
        /// <returns></returns>
        public bool AddGroup(IUIGroup group, int depth)
        {
            if (HasUIGroup(group.Name))
            {
                return(false);
            }
            UIGroup   temp = (UIGroup)group;
            Transform node = temp.transform;

            switch (group.UIType)
            {
            case EUIType.Canvas:
                node.SetParent(CanvasNode);
                break;

            case EUIType.Sprite:
                node.SetParent(SpriteNode);
                break;

            default:
                break;
            }
            //UI组节点重置
            node.localPosition = Vector3.zero;
            node.localScale    = Vector3.one;
            temp.Depth         = depth;
            uiGroups.Add(group.Name, temp);
            return(true);
        }
Example #11
0
        /// <summary>
        /// 初始化界面。
        /// </summary>
        /// <param name="serialId">界面序列编号。</param>
        /// <param name="uiFormAssetName">界面资源名称。</param>
        /// <param name="uiGroup">界面所处的界面组。</param>
        /// <param name="pauseCoveredUIForm">是否暂停被覆盖的界面。</param>
        /// <param name="isNewInstance">是否是新实例。</param>
        /// <param name="userData">用户自定义数据。</param>
        public void OnInit(int serialId, string uiFormAssetName, IUIGroup uiGroup, bool pauseCoveredUIForm, bool isNewInstance, object userData)
        {
            m_SerialId           = serialId;
            m_UIFormAssetName    = uiFormAssetName;
            m_UIGroup            = uiGroup;
            m_DepthInUIGroup     = 0;
            m_PauseCoveredUIForm = pauseCoveredUIForm;

            if (!isNewInstance)
            {
                return;
            }

            m_UIFormLogic = GetComponent <UIFormLogic>();
            if (m_UIFormLogic == null)
            {
                Log.Error("UI form '{0}' can not get UI form logic.", uiFormAssetName);
                return;
            }

            try
            {
                m_UIFormLogic.OnInit(userData);
            }
            catch (Exception exception)
            {
                Log.Error("UI form '[{0}]{1}' OnInit with exception '{2}'.", m_SerialId.ToString(), m_UIFormAssetName, exception.ToString());
            }
        }
Example #12
0
        /// <summary>
        /// 打开界面。
        /// </summary>
        /// <param name="uiFormAssetName">界面资源名称。</param>
        /// <param name="uiGroupName">界面组名称。</param>
        /// <param name="pauseCoveredUIForm">是否暂停被覆盖的界面。</param>
        /// <param name="userData">用户自定义数据。</param>
        /// <returns>界面的序列编号。</returns>
        public bool OpenUIForm(string uiFormAssetName, string uiGroupName, bool pauseCoveredUIForm, object userData)
        {
            if (m_ResourceManager == null)
            {
                Log.Error("You must set resource manager first.");
            }

            if (string.IsNullOrEmpty(uiFormAssetName))
            {
                Log.Error("UI form asset name is invalid.");
            }

            if (string.IsNullOrEmpty(uiGroupName))
            {
                Log.Error("UI group name is invalid.");
            }

            if (IsLoadingUIForm(uiFormAssetName))
            {
                Log.Error("UI group name is loading.");
                return(false);
            }

            if (HasUIForm(uiFormAssetName))
            {
                IUIGroup uiGroup1 = GetUIGroup(uiGroupName);
                IUIForm  form     = uiGroup1.GetUIForm(uiFormAssetName);
                if (uiGroup1.CurrentUIForm != null && uiGroup1.CurrentUIForm.SerialId != form.SerialId)
                {
                    uiGroup1.CurrentUIForm.OnClose(null);
                }
                uiGroup1.RefocusUIForm(form, userData);
                uiGroup1.Refresh();
                return(true);
            }

            UIGroup uiGroup = (UIGroup)GetUIGroup(uiGroupName);

            if (uiGroup == null)
            {
                Log.Error(string.Format("UI group '{0}' is not exist.", uiGroupName));
            }

            //资源是否缓存
            // ... ...
            UIFormInstanceObject uiFormInstanceObject = null;

            if (uiFormInstanceObject == null)
            {
                m_UIFormsBeingLoaded.Add(uiFormAssetName.GetHashCode());
                m_UIFormAssetNamesBeingLoaded.Add(uiFormAssetName);
                m_ResourceManager.LoadAsset(uiFormAssetName, m_LoadAssetCallbacks, new OpenUIFormInfo(uiFormAssetName.GetHashCode(), uiGroup, userData));
            }
            else
            {
                InternalOpenUIForm(uiFormAssetName.GetHashCode(), uiFormAssetName, uiGroup, uiFormInstanceObject.Target, false, 0f, userData);
            }

            return(true);
        }
Example #13
0
        /// <summary>
        /// 初始化界面。
        /// </summary>
        /// <param name="uiFormAssetName">界面资源名称。</param>
        /// <param name="uiGroup">界面所处的界面组。</param>
        /// <param name="pauseCoveredUIForm">是否暂停被覆盖的界面。</param>
        /// <param name="isNewInstance">是否是新实例。</param>
        /// <param name="userData">用户自定义数据。</param>
        public virtual void OnInit(string uiFormAssetName, IUIGroup uiGroup, bool pauseCoveredUIForm, bool isNewInstance, object userData)
        {
            this.m_UIFormAssetName = uiFormAssetName;

            if (isNewInstance)
            {
                this.m_UIGroup = uiGroup;
            }
            else if (this.m_UIGroup != uiGroup)
            {
                LTLog.Error("UI group is inconsistent for new-instance UI form.");
                return;
            }

            m_DepthInUIGroup     = uiGroup.Depth;
            m_PauseCoveredUIForm = pauseCoveredUIForm;

            if (!isNewInstance)
            {
                return;
            }

            RectTransform transform = GetComponent <RectTransform>();

            transform.anchorMin        = Vector2.zero;
            transform.anchorMax        = Vector2.one;
            transform.anchoredPosition = Vector2.zero;
            transform.sizeDelta        = Vector2.zero;
        }
 public void DeactivateMessage(IUIGroup uiGroup)
 {
     ownerObject.gameObject.SetActive(false);
     uiGroup.Interactable = true;
     okButton.onClick.RemoveAllListeners();
     yesButton.onClick.RemoveAllListeners();
     noButton.onClick.RemoveAllListeners();
 }
Example #15
0
        public IUIForm OpenForm(string formName, object formAsset, string groupName)
        {
            if (formAsset == null)
            {
                throw new ArgumentNullException("invalid form asset");
            }

            if (string.IsNullOrEmpty(formName))
            {
                throw new ArgumentException("invalid form name");
            }

            if (string.IsNullOrEmpty(groupName))
            {
                throw new ArgumentException("invalid group name");
            }

            if (!m_Groups.ContainsKey(groupName))
            {
                throw new ArgumentException(string.Format("not exists group '{0}'", groupName));
            }

            IUIGroup group = m_Groups[groupName];

            IUIForm form = null;
            LinkedListNode <IUIForm> node = m_Forms.First;

            while (node != null)
            {
                if (node.Value.FormName.Equals(formName))
                {
                    form = node.Value;
                    break;
                }
                node = node.Next;
            }
            if (form == null)
            {
                form       = m_Creater.InstantiateForm(formAsset);
                form.Group = group;
                group.AddForm(form);
                m_Forms.AddLast(form);
                form.FormName = formName;
                form.OnInit();
            }

            if (form.Group != null && form.Group != group)
            {
                form.Group.RemoveForm(form);
                form.Group = group;
            }

            group.OpenForm(form);
            return(form);
        }
Example #16
0
    /// <summary>
    /// 初始化界面。
    /// </summary>
    /// <param name="uiFormAssetName">界面资源名称。</param>
    /// <param name="uiGroup">界面所处的界面组。</param>
    /// <param name="pauseCoveredUIForm">是否暂停被覆盖的界面。</param>
    /// <param name="isNewInstance">是否是新实例。</param>
    /// <param name="userData">用户自定义数据。</param>
    public override void OnInit(string uiFormAssetName, IUIGroup uiGroup, bool pauseCoveredUIForm, bool isNewInstance, object userData)
    {
        base.OnInit(uiFormAssetName, uiGroup, pauseCoveredUIForm, isNewInstance, userData);

        if (isNewInstance)
        {
            m_CanvasGroup = gameObject.GetOrAddComponent <CanvasGroup>();
            m_CanvasGroup.interactable = false;
            m_CanvasGroup.alpha        = 0f;
        }
    }
Example #17
0
        /// <summary>
        /// 获取所有UI组
        /// </summary>
        /// <returns></returns>
        public IUIGroup[] GetAllUIGroups()
        {
            int i = 0;

            IUIGroup[] groups = new IUIGroup[uiGroups.Count];
            foreach (var item in uiGroups)
            {
                groups[i++] = item.Value;
            }
            return(groups);
        }
Example #18
0
        public override void Start()
        {
            base.Start();
            RectTransform UI = GameEntry.Singleton.driver.UI;

            foreach (Transform group in UI)
            {
                IUIGroup groupComp = group.GetComponent <IUIGroup>();
                m_UIModule.AddGroup(groupComp);
            }
        }
Example #19
0
        /// <summary>
        /// 从界面组中获取界面。
        /// </summary>
        /// <param name="uiFormTypeId">界面类型编号。</param>
        /// <param name="uiGroupName">界面组名称。</param>
        /// <returns>要获取的界面。</returns>
        public IUIForm[] GetUIForms(int uiFormTypeId, string uiGroupName)
        {
            IUIGroup uiGroup = GetUIGroup(uiGroupName);

            if (uiGroup == null)
            {
                throw new GameFrameworkException(string.Format("UI group '{0}' is not exist.", uiGroupName));
            }

            return(uiGroup.GetUIForms(uiFormTypeId));
        }
        public void PromptOk(string message, IUIGroup uiGroup, Action onClosePrompt = null)
        {
            ActivateMessage(message, uiGroup);
            okButton.gameObject.SetActive(true);

            okButton.onClick.AddListener(() => {
                onClosePrompt?.Invoke();
                okButton.gameObject.SetActive(false);
                uiGroup.Interactable = true;
                gameObject.SetActive(false);
            });
        }
Example #21
0
        /// <summary>
        /// 获取所有界面组。
        /// </summary>
        /// <returns>所有界面组。</returns>
        public IUIGroup[] GetAllUIGroups()
        {
            int index = 0;

            IUIGroup[] uiGroups = new IUIGroup[m_UIGroups.Count];
            foreach (UIGroup uiGroup in m_UIGroups.Values)
            {
                uiGroups[index++] = uiGroup;
            }

            return(uiGroups);
        }
Example #22
0
        /// <summary>
        /// 获取所有界面组。
        /// </summary>
        /// <returns>所有界面组。</returns>
        public IUIGroup[] GetAllUIGroups()
        {
            int index = 0;

            IUIGroup[] results = new IUIGroup[m_UIGroups.Count];
            foreach (KeyValuePair <string, UIGroup> uiGroup in m_UIGroups)
            {
                results[index++] = uiGroup.Value;
            }

            return(results);
        }
Example #23
0
        public IUIGroup[] GetAllGroups()
        {
            IUIGroup[] ret        = new IUIGroup[m_Groups.Count];
            var        enumerator = m_Groups.GetEnumerator();
            int        index      = 0;

            while (enumerator.MoveNext())
            {
                ret[index] = enumerator.Current.Value;
                ++index;
            }
            return(ret);
        }
        public void PromptForm <T>(string message, IUIGroup uiGroup, ModelDescriptor <T> modelDescriptor,
                                   Action <T> onSubmit)
        {
            ActivateMessage(message, uiGroup);
            okButton.gameObject.SetActive(true);
            formGenerator.gameObject.SetActive(true);
            formGenerator.GenerateForm(modelDescriptor);

            okButton.onClick.AddListener(() => {
                onSubmit(modelDescriptor.FromDescriptor());
                okButton.gameObject.SetActive(false);
                formGenerator.gameObject.SetActive(false);
                DeactivateMessage(uiGroup);
            });
        }
        public void PromptYesNo(string message, IUIGroup uiGroup, Action <bool> onClosePrompt = null)
        {
            ActivateMessage(message, uiGroup);
            yesNoContainer.gameObject.SetActive(true);

            yesButton.onClick.AddListener(() => {
                onClosePrompt?.Invoke(true);
                CleanupYesNo(uiGroup);
            });

            noButton.onClick.AddListener(() => {
                onClosePrompt?.Invoke(false);
                CleanupYesNo(uiGroup);
            });
        }
        /// <summary>
        /// 创建界面。
        /// </summary>
        /// <param name="uiFormInstance">界面实例。</param>
        /// <param name="uiGroup">界面所属的界面组。</param>
        /// <param name="userData">用户自定义数据。</param>
        /// <returns>界面。</returns>
        public override IUIForm CreateUIForm(object uiFormInstance, IUIGroup uiGroup, object userData)
        {
            GameObject gameObject = uiFormInstance as GameObject;

            if (gameObject == null)
            {
                Log.Error("UI form instance is invalid.");
                return(null);
            }

            Transform transform = gameObject.transform;

            transform.SetParent(((MonoBehaviour)uiGroup.Helper).transform);
            transform.localScale = Vector3.one;

            return(gameObject.GetOrAddComponent <UIForm>());
        }
Example #27
0
        /// <summary>
        /// 创建界面,将界面放置到界面组下,然后添加或获取UIForm
        /// </summary>
        /// <param name="uiFormInstance">界面实例</param>
        /// <param name="uiGroup">界面所属的界面组</param>
        /// <param name="userData">用户自定义数据</param>
        /// <returns></returns>
        public override IUIForm CreateUIForm(object uiFormInstance, IUIGroup uiGroup, object userData)
        {
            GameObject obj = uiFormInstance as GameObject;

            if (obj == null)
            {
                Log.Error("[DefaultUIFormHelper.CreateUIForm] UI form instance is invalid.");
                return(null);
            }

            Transform trans = obj.transform;

            trans.SetParent((uiGroup.Helper as MonoBehaviour).transform);
            trans.localScale = Vector3.one;

            return(obj.GetOrAddComponent <UIForm>());
        }
Example #28
0
    public void OnInit(int serialId, string uiFormAssetName, IUIGroup uiGroup, bool pauseCoveredUIForm, bool isNewInstance, object userData)
    {
        UserData        = userData;
        SerialId        = serialId;
        UIFormAssetName = uiFormAssetName;
        if (isNewInstance)
        {
            UIGroup = uiGroup;
        }
        else if (UIGroup != uiGroup)
        {
            Log.Error("UI group is inconsistent for non-new-instance UI form.");
            return;
        }

        DepthInUIGroup     = 0;
        PauseCoveredUIForm = pauseCoveredUIForm;
    }
Example #29
0
        public void RemoveGroup(string groupName)
        {
            if (!m_Groups.ContainsKey(groupName))
            {
                return;
            }

            IUIGroup group = m_Groups[groupName];

            IUIForm[] forms = group.GetAllForms();
            for (int i = 0; i < forms.Length; ++i)
            {
                DestroyForm(forms[i]);
            }

            m_Creater.DestroyGroup(group);
            m_Groups.Remove(groupName);
        }
Example #30
0
        public static bool HasUIForm(this UIComponent uiComponent, UIFormId uiFormId, string uiGroupName = null)
        {
            string assetName = AssetUtility.GetUIFormAsset(uiFormId);

            if (string.IsNullOrEmpty(uiGroupName))
            {
                return(uiComponent.HasUIForm(assetName));
            }

            IUIGroup uiGroup = uiComponent.GetUIGroup(uiGroupName);

            if (uiGroup == null)
            {
                return(false);
            }

            return(uiGroup.HasUIForm(assetName));
        }