Files
PineSript/Simulator/Services/SimulationClock.cs
2026-04-27 17:45:32 +09:00

42 lines
1.4 KiB
C#

namespace Simulator.Services
{
/// <summary>
/// 가상 시뮬레이션 클럭.
/// 실제 경과 시간에 SpeedMultiplier를 곱해 가상 시각을 계산합니다.
///
/// 예) SpeedMultiplier=60 → 실제 1초 = 가상 1분
/// </summary>
public class SimulationClock
{
private readonly DateTimeOffset _simStart;
private readonly DateTimeOffset _simEnd;
private readonly double _speed;
private readonly DateTimeOffset _realStart;
public SimulationClock(DateTimeOffset simStart, DateTimeOffset simEnd, double speed)
{
_simStart = simStart;
_simEnd = simEnd;
_speed = speed <= 0 ? double.MaxValue / 2 : speed;
_realStart = DateTimeOffset.UtcNow;
}
/// <summary>현재 가상 시각</summary>
public DateTimeOffset Now
{
get
{
double realMs = (DateTimeOffset.UtcNow - _realStart).TotalMilliseconds;
double simMs = realMs * _speed;
var result = _simStart.AddMilliseconds(simMs);
return result > _simEnd ? _simEnd : result;
}
}
public bool IsFinished => Now >= _simEnd;
public DateTimeOffset StartTime => _simStart;
public DateTimeOffset EndTime => _simEnd;
public double Speed => _speed;
}
}