using System;
|
using System.Collections;
|
using System.Collections.Generic;
|
using UnityEngine;
|
|
|
public class TimeDownMgr : SingletonMonobehaviour<TimeDownMgr> {
|
|
|
public enum CoolTimeType
|
{
|
Test=0,
|
BagSort=1,
|
DepotSort=2,
|
DeadCD = 3, //距离玩家复活的时间
|
DeadTiredCD = 4, //距离清除玩家复活疲劳的时间
|
BossAutoReborn = 5, //在Boss附近被玩家击杀复活
|
DuplicatesReborn = 6, //副本死亡类型
|
SyncServerTime=7,//同步服务器时间
|
HeavenBattleReaminTime = 8, //仙魔之争剩余时间
|
prepareBetRemainTime = 9, //最终比分预测
|
firstBetRemainTime = 10, //第一阶段比分预测
|
secondBetRemainTime = 11, //第二阶段比分预测
|
thirdBetRemainTime = 12, //第三阶段比分预测
|
BattlePrepareTime = 13, //战斗前倒计时
|
HappyFreeBestXB = 14,//极品寻宝免费时间倒计时 废弃
|
HappyFreeRuneXB = 15, //符印寻宝免费时间倒计时 废弃
|
HappyXBWarehouse = 16, //寻宝仓库整理倒计时
|
FlashRushToBuyAppointment = 17, //限时抢购预约倒计时
|
DungeonAssistCoolTime = 18, //副本助战一键召唤倒计时
|
}
|
|
public void Begin(CoolTimeType type, float duration,Action<float> func,float tick=1.0f)
|
{
|
CoolTimeData data = coolTimeList.Find((CoolTimeData x) => {
|
return x.type==type;
|
});
|
if (data != null)
|
{
|
coolTimeList.Remove(data);
|
data = null;
|
}
|
data = new CoolTimeData();
|
data.time = 0;
|
data.type = type;
|
data.tick = tick;
|
data.duration = duration;
|
data.func = func;
|
coolTimeList.Add(data);
|
}
|
|
public void Stop(CoolTimeType type)
|
{
|
CoolTimeData value = null;
|
if (Get(type,out value))
|
{
|
coolTimeList.Remove(value);
|
}
|
}
|
|
public bool Get(CoolTimeType type,out CoolTimeData value)
|
{
|
CoolTimeData data = coolTimeList.Find((CoolTimeData x) => {
|
return x.type == type;
|
});
|
value = null;
|
if (data!=null) {
|
value = data;
|
return true;
|
}
|
return false;
|
}
|
|
public class CoolTimeData
|
{
|
public CoolTimeType type;
|
public float tick;
|
public float duration;
|
public float time;
|
private Action<float> m_func;
|
public Action<float> func
|
{
|
get { return m_func; }
|
set
|
{
|
if (m_func == null) m_func = value;
|
else
|
{
|
if (Array.IndexOf(m_func.GetInvocationList(), value) == -1)
|
{
|
m_func += value;
|
}
|
}
|
|
}
|
}
|
|
|
}
|
|
private List<CoolTimeData> coolTimeList = new List<CoolTimeData>();
|
|
private void LateUpdate()
|
{
|
for (int i = 0; i < coolTimeList.Count; i++) {
|
CoolTimeData data = coolTimeList[i];
|
data.time += Time.deltaTime;
|
if (data.time >= data.tick) {
|
if (data.func != null) data.func(Mathf.CeilToInt(data.duration-data.time));
|
data.tick += 1;
|
data.tick = Mathf.Min(data.tick, data.duration);
|
}
|
if (data.time >= data.duration) {
|
data = null;
|
coolTimeList.RemoveAt(i);
|
i--;
|
}
|
}
|
}
|
|
|
}
|