aboutsummaryrefslogtreecommitdiffstats
path: root/Game
diff options
context:
space:
mode:
authortobigun <tobigun@b956fd51-792f-4845-bead-9b4dfca2ff2c>2008-05-13 18:29:58 +0000
committertobigun <tobigun@b956fd51-792f-4845-bead-9b4dfca2ff2c>2008-05-13 18:29:58 +0000
commitc6db72ff9c26450987ddbafdd5a3b573e17439e2 (patch)
treeb073ffd9f1f2c6d359a047db5ae6ead6e84f81b5 /Game
parentc11f90e3cdd0ac8ada78e2249c50de2645dbafe3 (diff)
downloadusdx-c6db72ff9c26450987ddbafdd5a3b573e17439e2.tar.gz
usdx-c6db72ff9c26450987ddbafdd5a3b573e17439e2.tar.xz
usdx-c6db72ff9c26450987ddbafdd5a3b573e17439e2.zip
TRelativeTimer added. A replace for the buggy TimeSkip/SkipTime stuff. It works like a simple stopwatch.
git-svn-id: svn://svn.code.sf.net/p/ultrastardx/svn/trunk@1085 b956fd51-792f-4845-bead-9b4dfca2ff2c
Diffstat (limited to 'Game')
-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.