TH1/Unity/Assets/Plugins/ViSDK/ViGameCommon/Time/ViVisualTimerInstance.cs
2025-08-20 02:24:48 +08:00

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;
}