uses
FMX.Types;
type
TGameStep = (gsOpening,
gsGameStart,
gsStageReady,
gsStageStart,
gsOnStage,
gsStageEnd,
gsStageResult,
gsGameResult,
gsGameEnd
);
type
TSleepTimer = class
private
FTimerForSleep: TTimer;
FTimerInterval: Integer;
FTimeMS: Integer;
FNextGameStep: TGameStep;
FCount: Integer;
procedure OnTimer(Sender: TObject);
public
constructor Create();
destructor Destroy; override;
procedure Sleep(aTimeMS: Integer; aNextGameStep: TGameStep);
procedure Stop();
end;
{ TSleepTimer }
constructor TSleepTimer.Create;
begin
FTimerInterval := 100;
FTimerForSleep := TTimer.Create(nil);
FTimerForSleep.OnTimer := OnTimer;
FTimerForSleep.Interval := FTimerInterval;
FTimerForSleep.Enabled := False;
end;
destructor TSleepTimer.Destroy;
begin
FTimerForSleep.Enabled := False;
FTimerForSleep.Free;
inherited;
end;
procedure TSleepTimer.OnTimer(Sender: TObject);
begin
FCount := FCount + 1;
if FCount * FTimerInterval >= FTimeMS then
begin
GameModel.GameStep := FNextGameStep;
Stop();
end;
end;
procedure TSleepTimer.Sleep(aTimeMS: Integer; aNextGameStep: TGameStep);
begin
FTimeMS := aTimeMS;
FNextGameStep := aNextGameStep;
FCount := 0;
FTimerForSleep.Enabled := True;
end;
procedure TSleepTimer.Stop;
begin
FTimerForSleep.Enabled := False;
end;
12日目 スリープタイマー
コメントをどうぞ