using GFramework.Core.Abstractions.coroutine;
namespace GFramework.Godot.coroutine;
///
/// Godot时间源实现,用于提供基于Godot引擎的时间信息
///
/// 获取增量时间的函数委托
public class GodotTimeSource(Func getDeltaFunc) : ITimeSource
{
private readonly Func _getDeltaFunc = getDeltaFunc ?? throw new ArgumentNullException(nameof(getDeltaFunc));
private double _currentTime;
private double _deltaTime;
///
/// 获取当前累计时间
///
public double CurrentTime => _currentTime;
///
/// 获取上一帧的时间增量
///
public double DeltaTime => _deltaTime;
///
/// 更新时间源,计算新的增量时间和累计时间
///
public void Update()
{
// 调用外部提供的函数获取当前帧的时间增量
_deltaTime = _getDeltaFunc();
// 累加到总时间中
_currentTime += _deltaTime;
}
///
/// 重置时间源到初始状态
///
public void Reset()
{
_currentTime = 0;
_deltaTime = 0;
}
}