/// <summary> /// 关闭界面。 /// </summary> /// <param name="uiForm">要关闭的界面。</param> /// <param name="userData">用户自定义数据。</param> public void CloseUIForm(UIFormLogic uiForm, object userData) { if (uiForm == null) { throw new LufyException("UI form is invalid."); } uiForm.OnClose(userData); if (m_CachedNode != null && m_CachedNode.Value == uiForm) { m_CachedNode = m_CachedNode.Next; } m_formList.Remove(uiForm); removeKeyList.Clear(); foreach (var kv in m_cachedForms) { if (kv.Value == uiForm) { removeKeyList.Add(kv.Key); } } foreach (var key in removeKeyList) { m_cachedForms.Remove(key); } m_RecycleQueue.Enqueue(uiForm); Refresh(); }
/// <summary> /// 创建打开界面成功事件。 /// </summary> /// <param name="uiForm">加载成功的界面。</param> /// <param name="duration">加载持续时间。</param> /// <param name="userData">用户自定义数据。</param> /// <returns>创建的打开界面成功事件。</returns> public static OpenUIFormSuccessEventArgs Create(UIFormLogic uiForm, float duration, object userData) { OpenUIFormSuccessEventArgs openUIFormSuccessEventArgs = ReferencePool.Acquire <OpenUIFormSuccessEventArgs>(); openUIFormSuccessEventArgs.UIForm = uiForm; openUIFormSuccessEventArgs.Duration = duration; openUIFormSuccessEventArgs.UserData = userData; return(openUIFormSuccessEventArgs); }
protected internal override void Release(bool isShutdown) { //Debug.Log("uiform release " + Target); if (Target != null) { UIFormLogic t = Target as UIFormLogic; t.OnRealse(m_UIFormAsset, t.gameObject); } ReferencePool.Release(this); }
private void InternalOpenUIForm(string uiFormAssetName, UIFormLogic uiFormInstanceObject, float duration, object userData) { uiFormInstanceObject.OnOpen(userData); m_formList.AddFirst(uiFormInstanceObject); Refresh(); if (m_EventManager != null) { m_EventManager.Fire(this, OpenUIFormSuccessEventArgs.Create(uiFormInstanceObject, duration, userData)); } }
/// <summary> /// 关闭界面。 /// </summary> /// <param name="uiFormAssetName">要关闭界面的名字</param> /// <param name="userData">用户自定义数据。</param> public void CloseUIForm(string uiFormAssetName, object userData) { UIFormLogic uiForm = GetUIForm(uiFormAssetName); if (uiForm == null) { throw new LufyException(Utility.Text.Format("Can not find UI form '{0}'.", uiFormAssetName)); } CloseUIForm(uiForm, userData); }
/// <summary> /// 获取界面。 /// </summary> /// <param name="uiFormAssetName">界面资源名称。</param> /// <returns>要获取的界面。</returns> public UIFormLogic GetUIForm(string uiFormAssetName) { if (string.IsNullOrEmpty(uiFormAssetName)) { throw new LufyException("UI form asset name is invalid."); } UIFormLogic uiFormLogic = null; m_cachedForms.TryGetValue(uiFormAssetName, out uiFormLogic); return(uiFormLogic); }
void LoadAssetSuccess(string assetName, object asset, float duration, object userData) { GameObject obj = GameObject.Instantiate(asset as GameObject); obj.name = obj.name.Substring(0, obj.name.Length - 7); obj.transform.SetParent(m_InstanceRoot); obj.transform.localPosition = Vector3.zero; obj.transform.localScale = Vector3.one; UIFormLogic uiFormInstanceObject = obj.GetComponent <UIFormLogic>(); m_cachedForms.Add(assetName, uiFormInstanceObject); m_InstancePool.Register(UIFormObject.Create(assetName, uiFormInstanceObject, asset), true); uiFormInstanceObject.OnInit(userData); InternalOpenUIForm(assetName, uiFormInstanceObject, duration, userData); }
/// <summary> /// 打开界面。 /// </summary> /// <param name="uiFormAssetName">界面资源名称。</param> /// <param name="userData">用户自定义数据。</param> /// <returns>界面的序列编号。</returns> public void OpenUIForm(string uiFormAssetName, object userData) { if (string.IsNullOrEmpty(uiFormAssetName)) { throw new LufyException("UI form asset name is invalid."); } if (m_ResManager == null) { throw new LufyException("ResManager is invalid."); } if (m_PoolManager == null) { throw new LufyException("ObjectPoolManager is invalid."); } UIFormLogic uiFormInstanceObject = null; m_cachedForms.TryGetValue(uiFormAssetName, out uiFormInstanceObject); if (uiFormInstanceObject == null) { UIFormObject obj = m_InstancePool.Spawn(uiFormAssetName); uiFormInstanceObject = obj?.Target as UIFormLogic; if (uiFormInstanceObject == null) { m_ResManager.LoadAsset(uiFormAssetName, m_LoadAssetCallbacks, userData); } else { m_cachedForms.Add(uiFormAssetName, uiFormInstanceObject); InternalOpenUIForm(uiFormAssetName, uiFormInstanceObject, 0, userData); } } else { m_formList.Remove(uiFormInstanceObject); InternalOpenUIForm(uiFormAssetName, uiFormInstanceObject, 0, userData); } }
internal override void OnUpdate(float elapseSeconds, float realElapseSeconds) { while (m_RecycleQueue.Count > 0) { UIFormLogic obj = m_RecycleQueue.Dequeue(); obj.OnRecycle(); m_InstancePool.Unspawn(obj); } LinkedListNode <UIFormLogic> current = m_formList.First; while (current != null) { if (current.Value.Paused) { break; } m_CachedNode = current.Next; current.Value.OnUpdate(elapseSeconds, realElapseSeconds); current = m_CachedNode; m_CachedNode = null; } }
/// <summary> /// 关闭界面。 /// </summary> /// <param name="uiForm">要关闭的界面。</param> public void CloseUIForm(UIFormLogic uiForm) { CloseUIForm(uiForm, null); }