156 lines
4.0 KiB
C#
156 lines
4.0 KiB
C#
using System;
|
|
using System.Collections.Generic;
|
|
|
|
using System.Text;
|
|
using UnityEngine;
|
|
|
|
namespace Thousandto.Core.Base
|
|
{
|
|
/// <summary>
|
|
/// 时间计算类, 升级支持非Update调用方式
|
|
/// </summary>
|
|
public class Clocks
|
|
{
|
|
float _lifeTime; // life time / loop time
|
|
|
|
float _startTime; // OverTime Func -- start time / Time.Now
|
|
|
|
float _elapsedTime = 0.0f; // TimesUp Func -- elapsed Time / life time
|
|
|
|
float _lastInterval = 0.0f;
|
|
|
|
bool _ringOnce = false;
|
|
bool _isSwitch = true;
|
|
bool _alarm = false;
|
|
|
|
MyAction _myPreDelegate = null;
|
|
MyAction _myLaterDelegate = null;
|
|
|
|
public Clocks(float theLifeTime, bool theRingOnce = false,
|
|
MyAction preDelegate = null,
|
|
MyAction laterDelegate = null)
|
|
{
|
|
_lifeTime = theLifeTime;
|
|
_ringOnce = theRingOnce;
|
|
_startTime = Time.time;
|
|
_myPreDelegate = preDelegate;
|
|
_myLaterDelegate = laterDelegate;
|
|
}
|
|
|
|
public float LifeTime
|
|
{
|
|
get
|
|
{
|
|
return _lifeTime;
|
|
}
|
|
}
|
|
public float LastInterval
|
|
{
|
|
get
|
|
{
|
|
return _lastInterval;
|
|
}
|
|
}
|
|
|
|
/// <summary>
|
|
/// Times Up setting , changed for Time Topologies(2014.09.16)
|
|
/// </summary>
|
|
/// <param name="deltaTime"></param>
|
|
/// <returns></returns>
|
|
public bool TimesUp(float deltaTime)
|
|
{
|
|
if (_isSwitch)
|
|
{
|
|
_elapsedTime += deltaTime;
|
|
if (_elapsedTime > _lifeTime)
|
|
{
|
|
_lastInterval = _elapsedTime;
|
|
_elapsedTime -= (Mathf.Floor(_elapsedTime / _lifeTime) * _lifeTime);
|
|
if (_ringOnce)
|
|
{
|
|
_isSwitch = false;
|
|
}
|
|
if (_myLaterDelegate != null)
|
|
{
|
|
_myLaterDelegate();
|
|
}
|
|
return true;
|
|
}
|
|
else
|
|
{
|
|
return false;
|
|
}
|
|
}
|
|
else
|
|
{
|
|
return false;
|
|
}
|
|
}
|
|
|
|
/// <summary>
|
|
/// set/reset OverTime clock
|
|
/// </summary>
|
|
public void SetAlarm()
|
|
{
|
|
_startTime = Time.time;
|
|
_isSwitch = true;
|
|
_alarm = true;
|
|
_elapsedTime = 0.0f;
|
|
if (_myPreDelegate != null)
|
|
{
|
|
_myPreDelegate();
|
|
}
|
|
}
|
|
|
|
public void StopAlarm()
|
|
{
|
|
_alarm = false;
|
|
_isSwitch = false;
|
|
}
|
|
|
|
public void SetToEnd()
|
|
{
|
|
StopAlarm();
|
|
if (_myLaterDelegate != null)
|
|
{
|
|
_myLaterDelegate();
|
|
}
|
|
}
|
|
|
|
/// <summary>
|
|
/// mark times over, need to reset manually
|
|
/// </summary>
|
|
/// <returns></returns>
|
|
public bool OverTime()
|
|
{
|
|
bool isOverTime = false;
|
|
if (_alarm)
|
|
{
|
|
if (_isSwitch)
|
|
{
|
|
float interval = Time.time - _startTime;
|
|
if (interval > _lifeTime)
|
|
{
|
|
_lastInterval = interval;
|
|
if (_ringOnce)
|
|
{
|
|
_isSwitch = false;
|
|
}
|
|
if (_myLaterDelegate != null)
|
|
{
|
|
_myLaterDelegate();
|
|
}
|
|
isOverTime = true;
|
|
}
|
|
}
|
|
}
|
|
return isOverTime;
|
|
}
|
|
|
|
public void ReCount(float setTime = 0.0f)
|
|
{
|
|
_elapsedTime = setTime;
|
|
}
|
|
}
|
|
}
|