123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315 |
- using System.Collections;
- using System.Collections.Generic;
- using UnityEngine;
- using System;
- /// <summary>
- /// 弹窗效果队列
- /// </summary>
- public class PopupEffectQueueHelper : MonoBehaviour
- {
- private static PopupEffectQueueHelper pEffectQueueHelper = null;
- /// <summary>
- /// 特效队列
- /// </summary>
- private Queue<PopupEffectInfo> popupEffectQueues = new Queue<PopupEffectInfo>();
- /// <summary>
- /// 协同
- /// </summary>
- private IEnumerator iEnumerator = null;
- /// <summary>
- /// 显示完毕回调
- /// </summary>
- private Action showOverAC = null;
- /// <summary>
- /// 单键
- /// </summary>
- public static PopupEffectQueueHelper Instance
- {
- get
- {
- if (pEffectQueueHelper == null)
- {
- GameObject obj = new GameObject("PopupEffectQueueHelper");
- pEffectQueueHelper = obj.AddComponent<PopupEffectQueueHelper>();
- // 不销毁
- DontDestroyOnLoad(obj);
- }
- return pEffectQueueHelper;
- }
- }
- /// <summary>
- /// 显示特效
- /// </summary>
- /// <param name="type">类型</param>
- /// <param name="showTime">显示时间(毫秒)</param>
- /// <param name="parameter">参数</param>
- public void ShowEffect(ePopupEffectType type, object parameter = null)
- {
- PopupEffectInfo info = new PopupEffectInfo();
- info.type = type;
- info.parameter = parameter;
- popupEffectQueues.Enqueue(info);
- }
- /// <summary>
- /// 播放结束的事件
- /// </summary>
- /// <param name="ac"></param>
- public void ShowOverEvent(Action ac)
- {
- showOverAC = ac;
- }
- /// <summary>
- /// 更新
- /// </summary>
- private void Update()
- {
- if (popupEffectQueues.Count > 0 && iEnumerator == null)
- {
- PopupEffectInfo info = popupEffectQueues.Dequeue();
- iEnumerator = IE_UpdatePopupEffect(info);
- StartCoroutine(iEnumerator);
- }
- else if (showOverAC != null)
- {
- showOverAC.Invoke();
- showOverAC = null;
- }
- }
- /// <summary>
- /// 协同更新弹窗效果
- /// </summary>
- /// <returns></returns>
- private IEnumerator IE_UpdatePopupEffect(PopupEffectInfo info)
- {
- float runTime = 0;
- float timeOut = 3.0f;
- switch (info.type)
- {
- // 完成任务卡效果
- case ePopupEffectType.CompleteTaskCardEffect:
- {
- //TaskCardVo taskCardVo = info.parameter as TaskCardVo;
- //PanelHelper.Instance.ShowPanel("UI_TaskEffectWindow", (uiObj) =>
- //{
- // UI_TaskEffectWindow effectWindow = uiObj.GetComponent<UI_TaskEffectWindow>();
- // effectWindow.Show("Drop_TaskCard_finish", taskCardVo);
- //});
- //yield return new WaitForSeconds(1.0f);
- //// 没有关闭效果之前一直等待
- //bool bWait = true;
- //while (bWait)
- //{
- // GameObject obj = PanelHelper.Instance.GetPanelByName("UI_TaskEffectWindow");
- // if (obj != null && obj.activeSelf == false)
- // {
- // bWait = false;
- // }
- // else
- // {
- // // 超时强制退出
- // runTime += 0.1f;
- // if(runTime >= timeOut)
- // {
- // bWait = false;
- // }
- // }
- yield return new WaitForSeconds(0.1f);
- //}
- }
- break;
- // 获取任务卡
- case ePopupEffectType.GetTaskCardEffect:
- {
- //TaskCardVo taskCardVo = info.parameter as TaskCardVo;
- //PanelHelper.Instance.ShowPanel("UI_TaskEffectWindow", (uiObj) =>
- //{
- // UI_TaskEffectWindow effectWindow = uiObj.GetComponent<UI_TaskEffectWindow>();
- // effectWindow.Show("Drop_TaskCard_have", taskCardVo);
- //});
- //yield return new WaitForSeconds(1.0f);
- //// 没有关闭效果之前一直等待
- //bool bWait = true;
- //while (bWait)
- //{
- // GameObject obj = PanelHelper.Instance.GetPanelByName("UI_TaskEffectWindow");
- // if (obj != null && obj.activeSelf == false)
- // {
- // bWait = false;
- // }
- // else
- // {
- // // 超时强制退出
- // runTime += 0.1f;
- // if (runTime >= timeOut)
- // {
- // bWait = false;
- // }
- // }
- yield return new WaitForSeconds(0.1f);
- //}
- }
- break;
- // 获得物品
- case ePopupEffectType.GetItemEffect:
- {
- List<ItemVo> items = info.parameter as List<ItemVo>;
- // 显示奖励弹窗
- UI_GetItemWindow.Show(items);
- yield return new WaitForSeconds(1.0f);
- // 没有关闭效果之前一直等待
- bool bWait = true;
- while (bWait)
- {
- GameObject obj = PanelHelper.Instance.GetPanelByName("UI_GetItemWindow");
- if (obj != null && obj.activeSelf == false)
- {
- bWait = false;
- }
- else
- {
- // 超时强制退出
- runTime += 0.1f;
- if (runTime >= timeOut)
- {
- bWait = false;
- }
- }
- yield return new WaitForSeconds(0.1f);
- }
- }
- break;
- // 解锁建筑
- case ePopupEffectType.UnlockBuild:
- {
- int BuildId = int.Parse(info.parameter.ToString());
- float waitTime = BuildManager.Instance.NewUnlockBuild(BuildId);
- // 等待播放完成
- yield return new WaitForSeconds(waitTime);
- }
- break;
- // 指挥官(玩家)升级
- case ePopupEffectType.PlayerLvUp:
- {
- int lv = int.Parse(info.parameter.ToString());
- UI_TipsWindow.ShowPlayerLevelUpEeffect(lv);
- // 刷新界面
- if (UI_BaseMainWindow.Instance())
- {
- UI_BaseMainWindow.Instance().RefreshTopUserInfoUI();
- }
- // 等待2秒后效果自己动关闭
- yield return new WaitForSeconds(1.0f);
- }
- break;
- // 唤灵师升级
- case ePopupEffectType.HuanLingShiLvUp:
- {
- //UI_TipsWindow.ShowLevelUpEeffect();
- // 等待2秒后效果自己动关闭
- //yield return new WaitForSeconds(1.0f);
- }
- break;
- // 言灵升级
- case ePopupEffectType.PowerAdd:
- {
- string str = info.parameter.ToString();
- UI_TipsWindow.InitFloatUpLevelDialog(str);
- // 等待2秒后效果自己动关闭
- yield return new WaitForSeconds(1.0f);
- }
- break;
- // 抽奖
- case ePopupEffectType.ChouJiang:
- {///进杰明确表示不是需要这个,是需要解决填表的任务和实际触发的不一致. 当时看到的表象是抽奖出现在剧情前,但是实际是因为填表问题.
- //List<ItemVo> list = (List<ItemVo>)info.parameter;
- //// OpenRewardPanel(list);
- //PanelHelper.Instance.ShowPanel("UI_TempleRewardWindow", panel =>
- //{
- // panel.GetComponent<UI_TempleRewardWindow>().ShowReward(list);
- //});
- //// 没有关闭效果之前一直等待
- //bool bWait = true;
- //while (bWait)
- //{
- // GameObject obj = PanelHelper.Instance.GetPanelByName("UI_TempleRewardWindow");
- // if (obj != null && obj.activeSelf == false)
- // {
- // bWait = false;
- // }
- // else
- // {
- // // 超时强制退出
- // runTime += 0.1f;
- // if (runTime >= timeOut)
- // {
- // bWait = false;
- // }
- // }
- // yield return new WaitForSeconds(0.1f);
- //}
-
- }
- break;
- }
- StopCoroutine(iEnumerator);
- iEnumerator = null;
- }
- }
- /// <summary>
- /// 弹窗效果信息
- /// </summary>
- public class PopupEffectInfo
- {
- public ePopupEffectType type;
- public object parameter = null;
- }
- /// <summary>
- /// 弹窗效果类型
- /// </summary>
- public enum ePopupEffectType
- {
- None = 0,
- CompleteTaskCardEffect = 1,
- GetTaskCardEffect = 2,
- GetItemEffect = 3,
- UnlockBuild = 4,
- PlayerLvUp = 5,
- HuanLingShiLvUp = 6,
- PowerAdd = 7,
- ChouJiang=8
- }
|