cheat-engine/Cheat Engine/LuaXMPlayer.pas
cheatengine@gmail.com c14d3f1b7e fix xmplayer call
2013-06-13 18:20:25 +00:00

150 lines
3.5 KiB
ObjectPascal

unit LuaXMPlayer;
//special case, the class methods don't really care if the class is provided
{$mode delphi}
interface
uses
Classes, SysUtils, xmplayer_defines, xmplayer_server, lua, lauxlib, lualib, luafile, LuaHandler;
procedure initializeLuaXMPlayer;
implementation
uses luaclass, LuaObject;
function xmplayer_playXM(L: Plua_State): integer; cdecl;
var parameters: integer;
lf: TLuaFile;
f: string;
i: integer;
o: TObject;
s: TStream;
noloop: boolean;
begin
result:=0;
parameters:=lua_gettop(L);
if (xmplayer<>nil) and (parameters>=1) then
begin
if parameters>=2 then
noloop:=lua_toboolean(L,2)
else
noloop:=false;
if lua_isuserdata(L,1) then //Object, if the given object is a LuaFile, get the stream. If it's a stream, use it as it is
begin
o:=lua_toceuserdata(L,1);
if o is TStream then
s:=TStream(o)
else
if o is TLuafile then
s:=TLuafile(o).stream;
xmplayer.playXM(s, noloop)
end
else
xmplayer.playXM(Lua_ToString(L,1), noloop)
end;
lua_pop(L, lua_gettop(L));
end;
function xmplayer_pause(L: Plua_State): integer; cdecl;
var parameters: integer;
begin
if xmplayer=nil then
xmplayer:=TXMPlayer.create;
result:=0;
lua_pop(L, lua_gettop(L));
if xmplayer<>nil then
xmplayer.pause;
end;
function xmplayer_resume(L: Plua_State): integer; cdecl;
var parameters: integer;
begin
if xmplayer=nil then
xmplayer:=TXMPlayer.create;
result:=0;
lua_pop(L, lua_gettop(L));
if xmplayer<>nil then
xmplayer.resume;
end;
function xmplayer_stop(L: Plua_State): integer; cdecl;
var parameters: integer;
begin
if xmplayer=nil then
xmplayer:=TXMPlayer.create;
result:=0;
lua_pop(L, lua_gettop(L));
if xmplayer<>nil then
xmplayer.stop;
end;
function xmplayer_isPlaying(L: Plua_State): integer; cdecl;
var parameters: integer;
begin
if xmplayer=nil then
xmplayer:=TXMPlayer.create;
result:=0;
lua_pop(L, lua_gettop(L));
if xmplayer<>nil then
begin
result:=1;
lua_pushboolean(L, xmplayer.isPlaying);
end;
end;
function xmplayer_setVolume(L: Plua_State): integer; cdecl;
var parameters: integer;
v: integer;
begin
if xmplayer=nil then
xmplayer:=TXMPlayer.create;
result:=0;
parameters:=lua_gettop(L);
if (xmplayer<>nil) and (parameters=1) then
begin
v:=lua_tointeger(L,-1);
xmplayer.setVolume(v);
end;
lua_pop(L, lua_gettop(L));
end;
procedure xmplayer_addMetaData(L: PLua_state; metatable: integer; userdata: integer );
begin
object_addMetaData(L, metatable, userdata);
luaclass_addClassFunctionToTable(L, metatable, userdata, 'playXM', xmplayer_playXM);
luaclass_addClassFunctionToTable(L, metatable, userdata, 'pause', xmplayer_pause);
luaclass_addClassFunctionToTable(L, metatable, userdata, 'resume', xmplayer_resume);
luaclass_addClassFunctionToTable(L, metatable, userdata, 'stop', xmplayer_stop);
end;
procedure initializeLuaXMPlayer;
begin
Lua_RegisterObject('xmplayer',xmplayer);
Lua_register(LuaVM, 'xmplayer_playXM', xmplayer_playXM);
Lua_register(LuaVM, 'xmplayer_pause', xmplayer_pause);
Lua_register(LuaVM, 'xmplayer_resume', xmplayer_resume);
Lua_register(LuaVM, 'xmplayer_stop', xmplayer_stop);
Lua_register(LuaVM, 'xmplayer_isPlaying', xmplayer_isPlaying);
end;
initialization
luaclass_register(TXMPlayer, xmplayer_addMetaData);
end.