using System.Collections.Generic; using Thousandto.Cfg.Data; using UnityEngine; using EventConstDefine = UnityEngine.Gonbest.MagicCube.EventConstDefine; namespace Thousandto.Code.Logic { /// /// UI窗体检测系统 /// public class FormStateSystem { #region//私有变量 //使用窗体ID来关联窗体名字 private Dictionary _idAndNameDict = new Dictionary(); //使用窗体名字来关联窗体状态 private Dictionary _nameStateDict = new Dictionary(); //根据窗体名字关联,窗体的对象 private Dictionary _nameGameObjectDict = new Dictionary(); //窗体系统是否准备完毕 private bool _isFormSystemReadyOK = false; #endregion #region//属性信息 //获取窗体系统是否准备完毕 public bool IsFormSystemReadyOK { get { return _isFormSystemReadyOK; } set { _isFormSystemReadyOK = value; } } #endregion #region//窗体查询,获取等功能函数 #region//获取窗体状态的接口 //通过名字,获取窗体状态 public FormStateCode GetFormState(string name) { if (_nameStateDict.ContainsKey(name)) { return _nameStateDict[name]; } return FormStateCode.FSC_NONE; } //通过ID,获取窗体状态 public FormStateCode GetFormState(int formID) { if (_idAndNameDict.ContainsKey(formID)) { return GetFormState(_idAndNameDict[formID]); } return FormStateCode.FSC_NONE; } //通过ID,获取窗体状态 public FormStateCode GetFormStateByEventID(int eventID) { return GetFormState(EventIDToFormID(eventID)); } #endregion #region//当前窗体是否打开的接口 //UI是否开启 public bool FormIsOpen(string name) { var state = GetFormState(name); return FormStateIsOpen(state); } //UI是否开启 public bool FormIsOpen(int formID) { var state = GetFormState(formID); return FormStateIsOpen(state); } //UI是否开启 public bool FormIsOpenByEventID(int eventID) { var state = GetFormStateByEventID(eventID); return FormStateIsOpen(state); } #endregion #region//获取已经打开的窗口GameObject /// /// 获取打开的窗体 /// /// /// public GameObject GetOpenedForm(int formID) { if (_idAndNameDict.ContainsKey(formID)) { return GetOpenedForm(_idAndNameDict[formID]); } return null; } /// /// 获取打开的窗体 /// /// /// public GameObject GetOpenedForm(string name) { GameObject go = null; _nameGameObjectDict.TryGetValue(name, out go); return go; } /// /// 获取打开的窗体 /// /// /// public GameObject GetOpenedFormByEventID(int eventID) { return GetOpenedForm(EventIDToFormID(eventID)); } #endregion #region//窗体ID,UI消息,窗体名称,相互转换的函数 //通过事件ID获取窗体ID public int EventIDToFormID(int uiEventID) { return (uiEventID - EventConstDefine.EVENT_UI_BASE_ID) / 10; } //通过ID,获取窗体状态 public string GetFormName(int formID) { string strName = string.Empty; _idAndNameDict.TryGetValue(formID, out strName); return strName; } #endregion #endregion #region//窗体状态处理,由UI系统来进行调用 //设置状态 public void SetFormState(string name, FormStateCode value,GameObject go) { _nameStateDict[name] = value; if (value == FormStateCode.FSC_OPENED) { _nameGameObjectDict[name] = go; } else { _nameGameObjectDict[name] = null; } } #endregion #region//初始化或者卸载 public void Initialize() { _idAndNameDict.Clear(); var e = DeclareUIConfig.CacheData.GetEnumerator(); while (e.MoveNext()) { _idAndNameDict[e.Current.Value.Id] = e.Current.Key; } } public void UnInitialize() { _idAndNameDict.Clear(); } #endregion #region//私有函数 //窗体是否打开判断 private bool FormStateIsOpen(FormStateCode state) { if (state == FormStateCode.FSC_CLOSED || state == FormStateCode.FSC_UNLOADED || state == FormStateCode.FSC_DESTROY || state == FormStateCode.FSC_NONE) { return false; } return true; } #endregion } }