diff options
author | s_alexander <s_alexander@b956fd51-792f-4845-bead-9b4dfca2ff2c> | 2010-01-12 17:42:41 +0000 |
---|---|---|
committer | s_alexander <s_alexander@b956fd51-792f-4845-bead-9b4dfca2ff2c> | 2010-01-12 17:42:41 +0000 |
commit | 4711217f127aa0c10fa52755fd567c570277a1a1 (patch) | |
tree | 4d1ea2d4d749aa9abe6ba752a2db1b4d06598fea /src/menu | |
parent | 6688ce51e94517e13f99035c8214b2c5f05af79b (diff) | |
download | usdx-4711217f127aa0c10fa52755fd567c570277a1a1.tar.gz usdx-4711217f127aa0c10fa52755fd567c570277a1a1.tar.xz usdx-4711217f127aa0c10fa52755fd567c570277a1a1.zip |
merged lua into trunk
git-svn-id: svn://svn.code.sf.net/p/ultrastardx/svn/trunk@2071 b956fd51-792f-4845-bead-9b4dfca2ff2c
Diffstat (limited to 'src/menu')
-rw-r--r-- | src/menu/UDisplay.pas | 66 | ||||
-rw-r--r-- | src/menu/UMenu.pas | 4 |
2 files changed, 66 insertions, 4 deletions
diff --git a/src/menu/UDisplay.pas b/src/menu/UDisplay.pas index 927a1256..f8f9c43f 100644 --- a/src/menu/UDisplay.pas +++ b/src/menu/UDisplay.pas @@ -40,11 +40,16 @@ uses glu, SysUtils, UMenu, - UPath; + UPath, + UMusic, + UHookableEvent; type TDisplay = class private + ePreDraw: THookableEvent; + eDraw: THookableEvent; + //fade-to-black-hack BlackScreen: boolean; @@ -105,7 +110,11 @@ type { called when left or right mousebutton is pressed or released } procedure OnMouseButton(Pressed: boolean); + { fades to specific screen (playing specified sound) } + function FadeTo(Screen: PMenu; const aSound: TAudioPlaybackStream = nil): PMenu; + { abort fading to the current screen, may be used in OnShow, or during fade process } + procedure AbortScreenChange; { draws software cursor } procedure DrawCursor; @@ -142,6 +151,10 @@ var begin inherited Create; + // create events for plugins + ePreDraw := THookableEvent.Create('Display.PreDraw'); + eDraw := THookableEvent.Create('Display.Draw'); + //popup hack CheckOK := false; NextScreen := nil; @@ -225,6 +238,7 @@ begin if (not assigned(NextScreen)) and (not BlackScreen) then begin + ePreDraw.CallHookChain(false); CurrentScreen.Draw; //popup mod @@ -241,6 +255,8 @@ begin FadeEnabled := true else if (Ini.ScreenFade = 0) then FadeEnabled := false; + + eDraw.CallHookChain(false); end else begin @@ -259,8 +275,11 @@ begin glPushAttrib(GL_VIEWPORT_BIT); glViewPort(0, 0, 512, 512); + // draw screen that will be faded + ePreDraw.CallHookChain(false); CurrentScreen.Draw; + eDraw.CallHookChain(false); // clear OpenGL errors, otherwise fading might be disabled due to some // older errors in previous OpenGL calls. @@ -299,7 +318,11 @@ begin // blackscreen-hack if not BlackScreen then - NextScreen.Draw // draw next screen + begin + ePreDraw.CallHookChain(false); + NextScreen.Draw; // draw next screen + eDraw.CallHookChain(false); + end else if ScreenAct = 1 then begin glClearColor(0, 0, 0 , 0); @@ -540,6 +563,45 @@ begin Result := True; end; +{ abort fading to the next screen, may be used in OnShow, or during fade process } +procedure TDisplay.AbortScreenChange; + var + Temp: PMenu; +begin + // this is some kind of "hack" it is based on the + // code that is used to change the screens in TDisplay.Draw + // we should rewrite this whole behaviour, as it is not well + // structured and not well extendable. Also we should offer + // a possibility to change screens to plugins + // change this code when restructuring is done + if (assigned(NextScreen)) then + begin + // we have to swap the screens + Temp := CurrentScreen; + CurrentScreen := NextScreen; + NextScreen := Temp; + + // and call the OnShow procedure of the previous screen + // because it was already called by default fade procedure + NextScreen.OnShow; + + end; +end; + +{ fades to specific screen (playing specified sound) + returns old screen } +function TDisplay.FadeTo(Screen: PMenu; const aSound: TAudioPlaybackStream = nil): PMenu; +begin + Result := CurrentScreen; + if (Result <> nil) then + begin + if (aSound <> nil) then + Result.FadeTo(Screen, aSound) + else + Result.FadeTo(Screen); + end; +end; + procedure TDisplay.SaveScreenShot; var Num: integer; diff --git a/src/menu/UMenu.pas b/src/menu/UMenu.pas index 659d4213..3ac487de 100644 --- a/src/menu/UMenu.pas +++ b/src/menu/UMenu.pas @@ -1187,8 +1187,8 @@ begin begin if (Display.CurrentScreen = @ScreenSing) then ScreenSing.Finish - else if (Display.CurrentScreen = @ScreenSingModi) then - ScreenSingModi.Finish; + {else if (Display.CurrentScreen = @ScreenSingModi) then + ScreenSingModi.Finish;} end; end else |