From f53aa00aaef03e3c28f4e9b71184ce2668472b38 Mon Sep 17 00:00:00 2001 From: whiteshark0 Date: Thu, 17 Jun 2010 14:45:09 +0000 Subject: - enter credits screen after 30 seconds w/o user interaction in main screen - leave credits screen w/ left / right mouse button, enter, return, escape and backspace git-svn-id: svn://svn.code.sf.net/p/ultrastardx/svn/trunk@2536 b956fd51-792f-4845-bead-9b4dfca2ff2c --- src/screens/UScreenMain.pas | 36 ++++++++++++++++++++++++++++++++++++ 1 file changed, 36 insertions(+) (limited to 'src/screens/UScreenMain.pas') diff --git a/src/screens/UScreenMain.pas b/src/screens/UScreenMain.pas index 8bb9365b..777922de 100644 --- a/src/screens/UScreenMain.pas +++ b/src/screens/UScreenMain.pas @@ -44,6 +44,10 @@ uses type TScreenMain = class(TMenu) + private + { ticks when the user interacted, used to start credits + after a period of time w/o user interaction } + UserInteractionTicks: cardinal; public TextDescription: integer; TextDescriptionLong: integer; @@ -51,11 +55,17 @@ type constructor Create; override; function ParseInput(PressedKey: Cardinal; CharCode: UCS4Char; PressedDown: boolean): boolean; override; + function ParseMouse(MouseButton: integer; BtnDown: boolean; X, Y: integer): boolean; override; procedure OnShow; override; procedure SetInteraction(Num: integer); override; procedure SetAnimationProgress(Progress: real); override; + function Draw: boolean; override; end; +const + { start credits after 30 seconds w/o interaction } + TicksUntilCredits = 30 * 1000; + implementation uses @@ -78,6 +88,9 @@ var begin Result := true; + { reset user interaction timer } + UserInteractionTicks := SDL_GetTicks; + SDL_ModState := SDL_GetModState and (KMOD_LSHIFT + KMOD_RSHIFT + KMOD_LCTRL + KMOD_RCTRL + KMOD_LALT + KMOD_RALT); @@ -205,6 +218,15 @@ begin end; end; +function TScreenMain.ParseMouse(MouseButton: integer; BtnDown: boolean; X, Y: integer): boolean; +begin + // default mouse behaviour + Result := inherited ParseMouse(MouseButton, BtnDown, X, Y); + + { reset user interaction timer } + UserInteractionTicks := SDL_GetTicks; +end; + constructor TScreenMain.Create; begin inherited Create; @@ -239,6 +261,20 @@ begin * at the moment there is no better place for this *} Party.Clear; + + { reset user interaction timer } + UserInteractionTicks := SDL_GetTicks; +end; + +function TScreenMain.Draw: boolean; +begin + Result := inherited Draw; + + { start credits after a period w/o user interaction } + if (UserInteractionTicks + TicksUntilCredits < SDL_GetTicks) then + begin + FadeTo(@ScreenCredits, SoundLib.Start); + end; end; procedure TScreenMain.SetInteraction(Num: integer); -- cgit v1.2.3