秒单位的计时器

来源:互联网 发布:mysql配置文件调优 编辑:程序博客网 时间:2024/04/28 23:05
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)            {                // 结束这个TimerComponent                Destroy(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);    }}

0 0
原创粉丝点击