aboutsummaryrefslogtreecommitdiffstats
path: root/Game/Code/Classes/UTime.pas
diff options
context:
space:
mode:
Diffstat (limited to 'Game/Code/Classes/UTime.pas')
-rw-r--r--Game/Code/Classes/UTime.pas78
1 files changed, 68 insertions, 10 deletions
diff --git a/Game/Code/Classes/UTime.pas b/Game/Code/Classes/UTime.pas
index bd03754d..2acca35c 100644
--- a/Game/Code/Classes/UTime.pas
+++ b/Game/Code/Classes/UTime.pas
@@ -10,8 +10,22 @@ interface
type
TTime = class
- constructor Create;
- function GetTime: real;
+ public
+ constructor Create;
+ function GetTime(): real;
+ end;
+
+ TRelativeTimer = class
+ private
+ AbsoluteTime: int64; // system-clock reference time for calculation of CurrentTime
+ RelativeTimeOffset: real;
+ Paused: boolean;
+ public
+ constructor Create;
+ procedure Pause();
+ procedure Resume();
+ function GetTime(): real;
+ procedure SetTime(Time: real);
end;
procedure CountSkipTimeSet;
@@ -20,7 +34,8 @@ procedure CountMidTime;
var
USTime : TTime;
-
+ VideoBGTimer: TRelativeTimer;
+
TimeNew : int64;
TimeOld : int64;
TimeSkip : real;
@@ -46,12 +61,6 @@ http://www.gamedev.net/community/forums/topic.asp?topic_id=466145&whichpage=1%EE
*)
-constructor TTime.Create;
-begin
- inherited;
- CountSkipTimeSet;
-end;
-
procedure CountSkipTimeSet;
begin
TimeNew := SDL_GetTicks();
@@ -70,9 +79,58 @@ begin
TimeMid := (TimeMidTemp - TimeNew) / cSDLCorrectionRatio;
end;
+{**
+ * TTime
+ **}
+
+constructor TTime.Create;
+begin
+ inherited;
+ CountSkipTimeSet;
+end;
+
function TTime.GetTime: real;
begin
- Result := SDL_GetTicks() / cSDLCorrectionRatio;
+ Result := SDL_GetTicks() / cSDLCorrectionRatio;
end;
+{**
+ * TRelativeTimer
+ **}
+
+constructor TRelativeTimer.Create;
+begin
+ inherited;
+ RelativeTimeOffset := 0;
+ AbsoluteTime := SDL_GetTicks();
+ Paused := false;
+end;
+
+procedure TRelativeTimer.Pause();
+begin
+ RelativeTimeOffset := GetTime();
+ Paused := true;
+end;
+
+procedure TRelativeTimer.Resume();
+begin
+ AbsoluteTime := SDL_GetTicks();
+ Paused := false;
+end;
+
+function TRelativeTimer.GetTime: real;
+begin
+ if Paused then
+ Result := RelativeTimeOffset
+ else
+ Result := RelativeTimeOffset + (SDL_GetTicks() - AbsoluteTime) / cSDLCorrectionRatio;
+end;
+
+procedure TRelativeTimer.SetTime(Time: real);
+begin
+ RelativeTimeOffset := Time;
+ AbsoluteTime := SDL_GetTicks();
+end;
+
+
end.