diff options
Diffstat (limited to 'Lua/src')
-rw-r--r-- | Lua/src/base/UMain.pas | 2 | ||||
-rw-r--r-- | Lua/src/lua/ULuaScreenSing.pas | 105 | ||||
-rw-r--r-- | Lua/src/screens/UScreenSing.pas | 13 | ||||
-rw-r--r-- | Lua/src/ultrastardx.dpr | 3 |
4 files changed, 120 insertions, 3 deletions
diff --git a/Lua/src/base/UMain.pas b/Lua/src/base/UMain.pas index 7a9c6ed2..5ac0ca2f 100644 --- a/Lua/src/base/UMain.pas +++ b/Lua/src/base/UMain.pas @@ -190,6 +190,7 @@ uses ULuaTexture, ULuaTextGL, ULuaParty, + ULuaScreenSing, UThemes; @@ -422,6 +423,7 @@ begin LuaCore.RegisterModule('Gl', ULuaGl_Lib_f); LuaCore.RegisterModule('TextGl', ULuaTextGl_Lib_f); LuaCore.RegisterModule('Party', ULuaParty_Lib_f); + LuaCore.RegisterModule('ScreenSing', ULuaScreenSing_Lib_f); Log.BenchmarkEnd(1); Log.LogBenchmark('Initializing LuaCore', 1); diff --git a/Lua/src/lua/ULuaScreenSing.pas b/Lua/src/lua/ULuaScreenSing.pas new file mode 100644 index 00000000..75ed6277 --- /dev/null +++ b/Lua/src/lua/ULuaScreenSing.pas @@ -0,0 +1,105 @@ + {* UltraStar Deluxe - Karaoke Game
+ *
+ * UltraStar Deluxe is the legal property of its developers, whose names
+ * are too numerous to list here. Please refer to the COPYRIGHT
+ * file distributed with this source distribution.
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License
+ * as published by the Free Software Foundation; either version 2
+ * of the License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; see the file COPYING. If not, write to
+ * the Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor,
+ * Boston, MA 02110-1301, USA.
+ *
+ * $URL: https://ultrastardx.svn.sourceforge.net/svnroot/ultrastardx/branches/experimental/Lua/src/lua/ULuaTexture.pas $
+ * $Id: ULuaTexture.pas 1551 2009-01-04 14:08:33Z Hawkear $
+ *}
+
+unit ULuaScreenSing;
+
+interface
+
+{$IFDEF FPC}
+ {$MODE Delphi}
+{$ENDIF}
+
+{$I switches.inc}
+
+uses
+ ULua;
+
+{ returns a table with following structure:
+ t[1..playercount] = score of player i }
+function ULuaScreenSing_GetScores(L: Plua_State): Integer; cdecl;
+
+{ finishes current song, if sing screen is not shown it will raise
+ an error }
+function ULuaScreenSing_Finish(L: Plua_State): Integer; cdecl;
+
+const
+ ULuaScreenSing_Lib_f: array [0..1] of lual_reg = (
+ (name:'GetScores';func:ULuaScreenSing_GetScores),
+ (name:'Finish';func:ULuaScreenSing_Finish)
+ );
+
+implementation
+uses UScreenSing, UMain, UDisplay, UGraphic;
+
+{ returns a table with following structure:
+ t[1..playercount] = score of player i }
+function ULuaScreenSing_GetScores(L: Plua_State): Integer; cdecl;
+ var
+ Top: Integer;
+ I: Integer;
+begin
+ Result := 1;
+
+ // pop arguments
+ Top := lua_getTop(L);
+ if (Top > 0) then
+ lua_pop(L, Top);
+
+ // create table
+ lua_createtable(L, Length(Player), 0);
+
+ // fill w/ values
+ for I := 0 to High(Player) do
+ begin
+ lua_pushInteger(L, I + 1);
+ lua_pushInteger(L, Player[I].ScoreTotalInt);
+
+ lua_settable(L, -3);
+ end;
+
+ // leave table on stack, it is our result
+end;
+
+{ finishes current song, if sing screen is not shown it will raise
+ an error }
+function ULuaScreenSing_Finish(L: Plua_State): Integer; cdecl;
+ var Top: Integer;
+begin
+ Result := 0;
+
+ // pop arguments
+ Top := lua_getTop(L);
+ if (Top > 0) then
+ lua_pop(L, Top);
+
+ if (Display.CurrentScreen^ = ScreenSing) then
+ begin
+ ScreenSing.EndSong;
+ end
+ else
+ LuaL_error(L, 'Usdx.ScreenSing.Finish is called, but sing screen is not shown.');
+end;
+
+end.
\ No newline at end of file diff --git a/Lua/src/screens/UScreenSing.pas b/Lua/src/screens/UScreenSing.pas index 465022ed..bbdd1ecd 100644 --- a/Lua/src/screens/UScreenSing.pas +++ b/Lua/src/screens/UScreenSing.pas @@ -103,11 +103,12 @@ type // some settings to be set by plugins settings: record - + Finish: Boolean; //< if true, screen will finish on next draw end; procedure ClearSettings; + procedure EndSong; constructor Create; override; procedure onShow; override; @@ -636,7 +637,12 @@ end; procedure TScreenSing.ClearSettings; begin + Settings.Finish := False; +end; +procedure TScreenSing.EndSong; +begin + Settings.Finish := True; end; procedure TScreenSing.onHide; @@ -762,11 +768,14 @@ begin if ShowFinish then begin if (not AudioPlayback.Finished) and ((CurrentSong.Finish = 0) or - (LyricsState.GetCurrentTime() * 1000 <= CurrentSong.Finish)) then + (LyricsState.GetCurrentTime() * 1000 <= CurrentSong.Finish)) and (not Settings.Finish) then begin // analyze song if not paused if (not Paused) then + begin Sing(Self); + Party.CallOnSing; + end; end else begin diff --git a/Lua/src/ultrastardx.dpr b/Lua/src/ultrastardx.dpr index dcd0d0c7..cedaefb1 100644 --- a/Lua/src/ultrastardx.dpr +++ b/Lua/src/ultrastardx.dpr @@ -153,7 +153,8 @@ uses UHookableEvent in 'lua\UHookableEvent.pas', ULuaCore in 'lua\ULuaCore.pas', ULuaUsdx in 'lua\ULuaUsdx.pas', - ULuaParty in 'lua\ULuaParty.pas', + ULuaParty in 'lua\ULuaParty.pas', + ULuaScreenSing in 'lua\ULuaScreenSing.pas', //------------------------------ //Includes - Menu System |