diff options
author | tobigun <tobigun@b956fd51-792f-4845-bead-9b4dfca2ff2c> | 2008-05-13 18:29:58 +0000 |
---|---|---|
committer | tobigun <tobigun@b956fd51-792f-4845-bead-9b4dfca2ff2c> | 2008-05-13 18:29:58 +0000 |
commit | c6db72ff9c26450987ddbafdd5a3b573e17439e2 (patch) | |
tree | b073ffd9f1f2c6d359a047db5ae6ead6e84f81b5 /Game/Code/Classes | |
parent | c11f90e3cdd0ac8ada78e2249c50de2645dbafe3 (diff) | |
download | usdx-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/Code/Classes')
-rw-r--r-- | Game/Code/Classes/UTime.pas | 78 |
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. |