aboutsummaryrefslogtreecommitdiffstats
path: root/Lua/src
diff options
context:
space:
mode:
Diffstat (limited to 'Lua/src')
-rw-r--r--Lua/src/base/UMain.pas2
-rw-r--r--Lua/src/lua/ULuaScreenSing.pas105
-rw-r--r--Lua/src/screens/UScreenSing.pas13
-rw-r--r--Lua/src/ultrastardx.dpr3
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