42 lines
1.4 KiB
C#
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;
|
|
}
|
|
}
|