秒单位的计时器

using UnityEngine;using System;using System.Collections;public enum XTimerType{eTime,eFrame,}public delegate void OnTimerEndCb(params object[] param);public delegate bool OnTimerOverCb();public class XTimerComponent : XMono{public OnTimerEndCb mEndCallback;public OnTimerOverCb mTimerOverCallback;public object[] mParams;public XTimer mTimer;// 强制立即执行,,并删除自己Timer!public void RunAndDelete(){mEndCallback(mParams);Destroy(this.gameObject);}void Update(){if(mTimer == null){return;}if (!mTimer.IsRunning()){mEndCallback(mParams);bool isOver = true;if (mTimerOverCallback != null){isOver = mTimerOverCallback();}if (isOver){// 结束这个TimerComponentDestroy(this.gameObject);}else{mTimer.Reset();}}}}public class XTimer{XTimerType mType;// 计秒float mStartTime;float mWaitSeconds;// 计帧int mStartFrame;int mWaitFrames;public XTimer(float waitSeconds){mType = XTimerType.eTime;mStartTime = Time.time;mWaitSeconds = waitSeconds;}public XTimer(int waitFrames){mType = XTimerType.eFrame;mStartFrame = XLostPlanet.mCurrentFrame;mWaitFrames = waitFrames;}private XTimer(){}public bool IsRunning(){bool result = false;if (mType == XTimerType.eFrame){result = (XLostPlanet.mCurrentFrame – mStartFrame < mWaitFrames);}else{result = (Time.time – mStartTime < mWaitSeconds);}return result;}public void Reset(){if(mType == XTimerType.eTime){mStartTime = Time.time;}else{mStartFrame = XLostPlanet.mCurrentFrame;}}}public class XTimerHelper : XIModule{static XTimerHelper mInstance;public static XTimerHelper Inst{get{if (mInstance == null){mInstance = new XTimerHelper();}return mInstance;}}public IEnumerator OnInit(){yield return null;}public void Activate(){}public IEnumerator OnUnInit(){yield return null;}public XTimerComponent RegisterTimer(float seconds, OnTimerEndCb endCallback, OnTimerOverCb overCallback, params object[] param){GameObject timerObj = new GameObject("QTimer");XTimerComponent timerCom = timerObj.AddComponent<XTimerComponent>();timerCom.mTimer = new XTimer(seconds);timerCom.mEndCallback = endCallback;timerCom.mParams = param;timerCom.mTimerOverCallback = overCallback;GameObject.DontDestroyOnLoad(timerObj);return timerCom;}public XTimerComponent RegisterTimer(float seconds, OnTimerEndCb endCallback, params object[] param){return RegisterTimer(seconds, endCallback, null, param);}public void RegisterTimer(int frames, OnTimerEndCb endCallback, OnTimerOverCb overCallback, params object[] param){GameObject timerObj = new GameObject("QTimer");XTimerComponent timerCom = timerObj.AddComponent<XTimerComponent>();timerCom.mTimer = new XTimer(frames);timerCom.mEndCallback = endCallback;timerCom.mParams = param;timerCom.mTimerOverCallback = overCallback;GameObject.DontDestroyOnLoad(timerObj);}public void RegisterTimer(int frames, OnTimerEndCb endCallback, params object[] param){RegisterTimer(frames, endCallback, null, param);}}

往事是尘封在记忆中的梦,而你是我唯一鲜明的记忆,

秒单位的计时器

相关文章:

你感兴趣的文章:

标签云: