diff options
Diffstat (limited to 'Game/Code/Classes/UTime.pas')
-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. |