Пример #1
0
        /// <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();
        }
Пример #2
0
        /// <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);
        }
Пример #3
0
 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);
 }
Пример #4
0
        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));
            }
        }
Пример #5
0
        /// <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);
        }
Пример #6
0
        /// <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);
        }
Пример #7
0
        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);
        }
Пример #8
0
        /// <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);
            }
        }
Пример #9
0
        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;
            }
        }
Пример #10
0
 /// <summary>
 /// 关闭界面。
 /// </summary>
 /// <param name="uiForm">要关闭的界面。</param>
 public void CloseUIForm(UIFormLogic uiForm)
 {
     CloseUIForm(uiForm, null);
 }