91 lines
3.3 KiB
C#
91 lines
3.3 KiB
C#
using System;
|
|
using ViTime64 = System.Int64;
|
|
//
|
|
public static class ViVisualTimerInstance
|
|
{
|
|
public static ViTime64 Time64 { get { return _iLocalAccumulateTime; } }
|
|
public static double Time { get { return _accumulateTime; } }
|
|
public static ViTimer Timer { get { return _timer; } }
|
|
|
|
//+-------------------------------------------------------------------------------------------------------------------------------------------------------------
|
|
public static void Start(ViTime64 time1970, ViTime64 accumulateTime, UInt32 span, UInt32 rollSize0, UInt32 rollSize1)
|
|
{
|
|
_timer.End();
|
|
//
|
|
_accumulateTime = 0.0;
|
|
_iLocalAccumulateTime = 0;
|
|
//
|
|
_timer.Start(accumulateTime, span, rollSize0, rollSize1);
|
|
}
|
|
public static void End()
|
|
{
|
|
_timer.End();
|
|
}
|
|
public static void Update(float deltaTime)
|
|
{
|
|
ViDebuger.AssertError(_timer);
|
|
_accumulateTime += deltaTime;
|
|
_iLocalAccumulateTime = (ViTime64)(_accumulateTime * 1000);
|
|
_timer.Update((ViTime64)(_accumulateTime * 100));
|
|
}
|
|
//+-------------------------------------------------------------------------------------------------------------------------------------------------------------
|
|
static public void ResetTime(ViTimeNode1 node, float deltaTime)
|
|
{
|
|
if (node.IsAttach())
|
|
{
|
|
node.SetTime(_timer.Time + (ViTime64)(deltaTime * 100));
|
|
_timer.Add(node);
|
|
}
|
|
}
|
|
//+-------------------------------------------------------------------------------------------------------------------------------------------------------------
|
|
static public void SetTime(ViTimeNode1 node, float deltaTime, ViTimeNode1.Callback dele)
|
|
{
|
|
node._SetDelegate(dele);
|
|
node.SetTime(_timer.Time + (ViTime64)(deltaTime * 100));
|
|
_timer.Add(node);
|
|
}
|
|
//+-------------------------------------------------------------------------------------------------------------------------------------------------------------
|
|
static public void SetTime<T>(ViTimeNodeEx1<T> node, float deltaTime, ViTimeNodeEx1<T>.Callback dele)
|
|
{
|
|
node._SetDelegate(dele);
|
|
node.SetTime(_timer.Time + (ViTime64)(deltaTime * 100));
|
|
_timer.Add(node);
|
|
}
|
|
//+-------------------------------------------------------------------------------------------------------------------------------------------------------------
|
|
public static void SetFreq(ViTimeNodeInterface node, float oldFreq, float newFreq)
|
|
{
|
|
if (node.IsAttach() == false)//! 如果回调已经发生过了, 则无法进行重新设置
|
|
{
|
|
return;
|
|
}
|
|
ViTime64 currentTime = _timer.Time;
|
|
ViTime64 delta = node.Time - currentTime;
|
|
ViTime64 deltaTimeOldMod = (delta > 0) ? delta : 0;
|
|
ViTime64 deltaTime = (ViTime64)(deltaTimeOldMod * oldFreq);
|
|
ViTime64 deltaTimeNewMod = (ViTime64)(deltaTime / newFreq);
|
|
node.SetTime(_timer.Time + deltaTimeNewMod);
|
|
_timer.Add(node);
|
|
}
|
|
public static void Modify(ViTimeNodeInterface node, ViTime64 deltaTime)
|
|
{
|
|
if (node.IsAttach() == false)//! 如果回调已经发生过了, 则无法进行重新设置
|
|
{
|
|
return;
|
|
}
|
|
if (node.Time > -deltaTime)
|
|
{
|
|
node.SetTime(node.Time + deltaTime);
|
|
}
|
|
else
|
|
{
|
|
node.SetTime(0);
|
|
}
|
|
_timer.Add(node);
|
|
}
|
|
|
|
//+-------------------------------------------------------------------------------------------------------------------------------------------------------------
|
|
private static ViTimer _timer = new ViTimer();
|
|
private static double _accumulateTime;
|
|
private static ViTime64 _iLocalAccumulateTime;
|
|
}
|