24 using System.Diagnostics;
26 namespace SiliconStudio.
Paradox.Games.Time
35 private long startRawTime;
36 private long lastRawTime;
37 private int pauseCount;
38 private long pauseStartTime;
39 private long timePaused;
40 private decimal speedFactor;
44 #region Constructors and Destructors
67 #region Public Properties
72 public TimeSpan StartTime {
get;
private set; }
77 public TimeSpan TotalTime {
get;
private set; }
82 public TimeSpan TotalTimeWithPause {
get;
private set; }
87 public TimeSpan ElapsedTime {
get;
private set; }
92 public TimeSpan ElapsedTimeWithPause {
get;
private set; }
98 public double SpeedFactor
102 return (
double)speedFactor;
106 speedFactor = (decimal)value;
118 return pauseCount > 0;
124 #region Public Methods and Operators
131 Reset(TimeSpan.Zero);
138 public void Reset(TimeSpan startTime)
140 StartTime = startTime;
141 TotalTime = startTime;
142 startRawTime = Stopwatch.GetTimestamp();
143 lastRawTime = startRawTime;
157 timePaused += Stopwatch.GetTimestamp() - pauseStartTime;
173 ElapsedTime = TimeSpan.Zero;
177 var rawTime = Stopwatch.GetTimestamp();
178 TotalTime = StartTime +
new TimeSpan((
long)Math.Round(ConvertRawToTimestamp(rawTime - timePaused - startRawTime).Ticks * speedFactor));
179 TotalTimeWithPause = StartTime +
new TimeSpan((
long)Math.Round(ConvertRawToTimestamp(rawTime - startRawTime).Ticks * speedFactor));
181 ElapsedTime = ConvertRawToTimestamp(rawTime - timePaused - lastRawTime);
182 ElapsedTimeWithPause = ConvertRawToTimestamp(rawTime - lastRawTime);
184 if (ElapsedTime < TimeSpan.Zero)
186 ElapsedTime = TimeSpan.Zero;
189 lastRawTime = rawTime;
200 pauseStartTime = Stopwatch.GetTimestamp();
213 private static TimeSpan ConvertRawToTimestamp(
long delta)
215 return new TimeSpan((delta * 10000000) / Stopwatch.Frequency);
This provides timing information similar to System.Diagnostics.Stopwatch but an update occuring only ...
void Pause()
Pauses this instance.
void Reset()
Resets this instance. TotalTime is set to zero.
TimerTick(TimeSpan startTime)
Initializes a new instance of the TimerTick class.
void Tick()
Update the TotalTime and ElapsedTime,
void Resume()
Resumes this instance, only if a call to Pause has been already issued.
void Reset(TimeSpan startTime)
Resets this instance. TotalTime is set to startTime.
TimerTick()
Initializes a new instance of the TimerTick class.