using System.Collections; using System.Collections.Generic; using UnityEngine; using System; /// /// 弹窗效果队列 /// public class PopupEffectQueueHelper : MonoBehaviour { private static PopupEffectQueueHelper pEffectQueueHelper = null; /// /// 特效队列 /// private Queue popupEffectQueues = new Queue(); /// /// 协同 /// private IEnumerator iEnumerator = null; /// /// 显示完毕回调 /// private Action showOverAC = null; /// /// 单键 /// public static PopupEffectQueueHelper Instance { get { if (pEffectQueueHelper == null) { GameObject obj = new GameObject("PopupEffectQueueHelper"); pEffectQueueHelper = obj.AddComponent(); // 不销毁 DontDestroyOnLoad(obj); } return pEffectQueueHelper; } } /// /// 显示特效 /// /// 类型 /// 显示时间(毫秒) /// 参数 public void ShowEffect(ePopupEffectType type, object parameter = null) { PopupEffectInfo info = new PopupEffectInfo(); info.type = type; info.parameter = parameter; popupEffectQueues.Enqueue(info); } /// /// 播放结束的事件 /// /// public void ShowOverEvent(Action ac) { showOverAC = ac; } /// /// 更新 /// 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; } } /// /// 协同更新弹窗效果 /// /// 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(); // 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(); // 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 items = info.parameter as List; // 显示奖励弹窗 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 list = (List)info.parameter; //// OpenRewardPanel(list); //PanelHelper.Instance.ShowPanel("UI_TempleRewardWindow", panel => //{ // panel.GetComponent().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; } } /// /// 弹窗效果信息 /// public class PopupEffectInfo { public ePopupEffectType type; public object parameter = null; } /// /// 弹窗效果类型 /// public enum ePopupEffectType { None = 0, CompleteTaskCardEffect = 1, GetTaskCardEffect = 2, GetItemEffect = 3, UnlockBuild = 4, PlayerLvUp = 5, HuanLingShiLvUp = 6, PowerAdd = 7, ChouJiang=8 }