public IUIGroup GetGroup(string groupName) { IUIGroup group = null; m_Groups.TryGetValue(groupName, out group); return(group); }
/// <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); }
/// <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); }
/// <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; }
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)); }
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); }
/// <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); }
/// <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()); } }
/// <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); }
/// <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(); }
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); }
/// <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; } }
/// <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); }
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); } }
/// <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); }); }
/// <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); }
/// <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); }
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>()); }
/// <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>()); }
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; }
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); }
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)); }