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
}