mirror of
https://github.com/cheat-engine/cheat-engine
synced 2026-08-15 02:26:08 -04:00
137 lines
2.8 KiB
ObjectPascal
Executable file
137 lines
2.8 KiB
ObjectPascal
Executable file
unit LuaRegion;
|
|
|
|
{$mode delphi}
|
|
|
|
interface
|
|
|
|
uses
|
|
Classes, SysUtils, Graphics,lua, lualib, lauxlib, LuaHandler, RegionEx, LCLIntf, LCLType;
|
|
|
|
procedure initializeLuaRegion;
|
|
|
|
implementation
|
|
|
|
uses luaobject, luaclass;
|
|
|
|
function createRegion(L: Plua_State): integer; cdecl;
|
|
begin
|
|
luaclass_newClass(L, TRegionEx.Create);
|
|
result:=1;
|
|
end;
|
|
|
|
function region_addRectangle(L: PLua_State): integer; cdecl;
|
|
var
|
|
r: TRegion;
|
|
x1,y1,x2,y2: integer;
|
|
begin
|
|
result:=0;
|
|
r:=luaclass_getClassObject(L);
|
|
|
|
if lua_gettop(L)>=4 then
|
|
begin
|
|
x1:=lua_tointeger(L, -4);
|
|
y1:=lua_tointeger(L, -3);
|
|
x2:=lua_tointeger(L, -2);
|
|
y2:=lua_tointeger(L, -1);
|
|
r.AddRectangle(x1,y1,x2,y2);
|
|
end;
|
|
end;
|
|
|
|
function region_addPolygon(L: PLua_State): integer; cdecl;
|
|
var
|
|
paramstart: integer;
|
|
r: TRegionEx;
|
|
|
|
coordinatesTable: integer;
|
|
coordinateTable: integer;
|
|
|
|
|
|
c: array of TPoint;
|
|
|
|
tablesize: integer;
|
|
coordinate: integer;
|
|
|
|
|
|
x,y: integer;
|
|
|
|
debug: integer;
|
|
begin
|
|
setlength(c,0);
|
|
result:=0;
|
|
r:=luaclass_getClassObject(L);
|
|
|
|
if lua_gettop(L)>=1 then
|
|
begin
|
|
coordinatesTable:=lua_gettop(L);
|
|
|
|
if lua_istable(L, coordinatesTable) then
|
|
begin
|
|
tablesize:=lua_objlen(L, coordinatesTable);
|
|
setlength(c, tablesize);
|
|
|
|
|
|
for coordinate:=1 to tablesize do
|
|
begin
|
|
lua_pushinteger(l,coordinate);
|
|
lua_gettable(L, coordinatesTable);
|
|
|
|
coordinateTable:=lua_gettop(L);
|
|
|
|
|
|
if lua_istable(L, coordinateTable) then
|
|
begin
|
|
//it's a table
|
|
|
|
debug:=lua_gettop(L);
|
|
|
|
|
|
|
|
//get x
|
|
lua_pushinteger(l, 1);
|
|
lua_gettable(L, coordinateTable);
|
|
x:=lua_tointeger(L, -1);
|
|
c[coordinate-1].x:=x;
|
|
lua_pop(L, 1);
|
|
|
|
//get y
|
|
lua_pushinteger(l, 2);
|
|
lua_gettable(L, coordinateTable);
|
|
y:=lua_tointeger(L, -1);
|
|
c[coordinate-1].y:=y;
|
|
lua_pop(L, 1);
|
|
end else exit;
|
|
|
|
lua_pop(L,1);
|
|
end;
|
|
|
|
//still here so valid coordinates
|
|
r.AddPolygon(c);
|
|
end;
|
|
|
|
|
|
end;
|
|
|
|
lua_settop(L, 0);
|
|
end;
|
|
|
|
procedure region_addMetaData(L: PLua_state; metatable: integer; userdata: integer );
|
|
begin
|
|
object_addMetaData(L, metatable, userdata);
|
|
luaclass_addClassFunctionToTable(L, metatable, userdata, 'addRectangle', region_addRectangle);
|
|
luaclass_addClassFunctionToTable(L, metatable, userdata, 'addPolygon', region_addPolygon);
|
|
|
|
end;
|
|
|
|
procedure initializeLuaRegion;
|
|
begin
|
|
lua_register(LuaVM, 'createRegion', createRegion);
|
|
lua_register(LuaVM, 'region_addRectangle', region_addRectangle);
|
|
lua_register(LuaVM, 'region_addPolygon', region_addPolygon);
|
|
end;
|
|
|
|
initialization
|
|
luaclass_register(TRegion, region_addMetaData);
|
|
|
|
|
|
end.
|
|
|