mirror of
https://github.com/moparisthebest/Simba
synced 2024-12-25 16:58:53 -05:00
208 lines
3.9 KiB
ObjectPascal
208 lines
3.9 KiB
ObjectPascal
library libmml;
|
|
|
|
{$mode objfpc}{$H+}
|
|
|
|
uses
|
|
cmem,Classes,interfaces,graphics,client,sysutils,MufasaTypes,dtmutil;
|
|
|
|
{$R *.res}
|
|
|
|
type
|
|
PTPoint = ^TPoint;
|
|
|
|
|
|
Const
|
|
RESULT_OK = 0;
|
|
RESULT_FALSE = 1;
|
|
RESULT_ERROR = -1;
|
|
|
|
MOUSE_UP = 0;
|
|
MOUSE_DOWN = 1;
|
|
|
|
var
|
|
C: TClient;
|
|
gr: Pointer;
|
|
last_error: PChar;
|
|
|
|
|
|
function init: integer; cdecl;
|
|
begin
|
|
C:=TClient.Create('');
|
|
result:=0;
|
|
end;
|
|
|
|
{ Mouse }
|
|
|
|
function getMousePos(var t: tpoint): integer; cdecl;
|
|
|
|
begin
|
|
try
|
|
C.IOManager.GetMousePos(t.x,t.y);
|
|
result := RESULT_OK;
|
|
except on e : Exception do
|
|
begin
|
|
result := RESULT_ERROR;
|
|
last_error := PChar(e.Message);
|
|
end;
|
|
end;
|
|
end;
|
|
|
|
function setMousePos(var t: tpoint): integer; cdecl;
|
|
begin
|
|
try
|
|
C.IOManager.MoveMouse(t.x,t.y);
|
|
result := RESULT_OK;
|
|
except on e : Exception do
|
|
begin
|
|
result := RESULT_ERROR;
|
|
last_error := PChar(e.Message);
|
|
end;
|
|
end;
|
|
end;
|
|
|
|
function ConvIntClickType(Int : Integer) : TClickType;inline;
|
|
begin
|
|
case int of
|
|
0 : result := mouse_Left;
|
|
1 : result := mouse_Right;
|
|
2: result := mouse_Middle;
|
|
end;
|
|
end;
|
|
|
|
function getMouseButtonState(But: Integer): Integer;
|
|
begin
|
|
try
|
|
if C.IOManager.IsMouseButtonDown(ConvIntClickType(But)) then
|
|
result := MOUSE_DOWN;
|
|
except on e : Exception do
|
|
begin
|
|
result := RESULT_ERROR;
|
|
last_error := PChar(e.Message);
|
|
end;
|
|
end;
|
|
end;
|
|
|
|
function setMouseButtonState(But, State, X, Y: Integer): Integer;
|
|
begin
|
|
try
|
|
if State = MOUSE_UP then
|
|
begin
|
|
C.IOManager.ReleaseMouse(X, Y, ConvIntClickType(But));
|
|
result := RESULT_OK;
|
|
end else if state = MOUSE_DOWN then
|
|
begin
|
|
C.IOManager.HoldMouse(X, Y, ConvIntClickType(But));
|
|
result := RESULT_OK;
|
|
end;
|
|
except on e : Exception do
|
|
begin
|
|
result := RESULT_ERROR;
|
|
last_error := PChar(e.Message);
|
|
end;
|
|
end;
|
|
end;
|
|
|
|
function findColor(var x, y: integer; color, x1, y1, x2, y2: integer): integer;
|
|
begin
|
|
try
|
|
if C.MFinder.FindColor(x, y, color, x1, y1, x2, y2) then
|
|
result := RESULT_OK
|
|
else
|
|
result := RESULT_FALSE;
|
|
except on e : Exception do
|
|
begin
|
|
result := RESULT_ERROR;
|
|
last_error := PChar(e.Message);
|
|
end;
|
|
end;
|
|
end;
|
|
|
|
function findColorTolerance(var x, y: integer; color, tol, x1, y1, x2, y2: integer): integer;
|
|
begin
|
|
try
|
|
if C.MFinder.FindColorTolerance(x, y, color, x1, y1, x2, y2, tol) then
|
|
result := RESULT_OK
|
|
else
|
|
result := RESULT_FALSE;
|
|
except on e : Exception do
|
|
begin
|
|
result := RESULT_ERROR;
|
|
last_error := PChar(e.Message);
|
|
end;
|
|
end;
|
|
end;
|
|
|
|
function findColors(var ptr: PTPoint; color, x1, y1, x2, y2: integer): integer;
|
|
var
|
|
TPA: TPointArray;
|
|
begin
|
|
try
|
|
C.MFinder.FindColors(TPA, color, x1, y1, x2, y2);
|
|
except on e : Exception do
|
|
begin
|
|
result := RESULT_ERROR;
|
|
last_error := PChar(e.Message);
|
|
end;
|
|
end;
|
|
ptr := AllocMem(sizeof(tpoint) * (length(TPA) + 1));
|
|
PInteger(ptr)[0] := length(TPA);
|
|
Move(TPA[0], ptr[1], length(TPA)*sizeof(tpoint));
|
|
end;
|
|
|
|
function findColorsTolerance(var ptr: PTPoint; color, tol, x1, y1, x2, y2: integer): integer;
|
|
var
|
|
TPA: TPointArray;
|
|
begin
|
|
try
|
|
C.MFinder.FindColorsTolerance(TPA, color, x1, y1, x2, y2, tol);
|
|
except on e : Exception do
|
|
begin
|
|
result := RESULT_ERROR;
|
|
last_error := PChar(e.Message);
|
|
end;
|
|
end;
|
|
ptr := AllocMem(sizeof(tpoint) * (length(TPA) + 1));
|
|
PInteger(ptr)[0] := length(TPA);
|
|
Move(TPA[0], ptr[1], length(TPA)*sizeof(tpoint));
|
|
end;
|
|
|
|
procedure fpc_freemem_(p:pointer); cdecl;
|
|
begin
|
|
freemem(pointer(ptruint(p)));
|
|
end;
|
|
|
|
function fpc_allocmem_(size: ptruint): pointer; cdecl;
|
|
begin
|
|
result:= AllocMem(size);
|
|
end;
|
|
|
|
function fpc_reallocmem_(size: ptruint; ptr: pointer): pointer;
|
|
begin
|
|
result:= ReAllocMem(ptr, size);
|
|
end;
|
|
|
|
|
|
exports
|
|
init,
|
|
{ Mouse }
|
|
getMousePos,
|
|
setMousePos,
|
|
getMouseButtonState,
|
|
setMouseButtonState,
|
|
|
|
{ Finder }
|
|
findColor,
|
|
findColors,
|
|
findColorTolerance,
|
|
findColorsTolerance,
|
|
|
|
{ Mem Management }
|
|
fpc_freemem_,
|
|
fpc_allocmem_,
|
|
fpc_reallocmem_;
|
|
|
|
|
|
begin
|
|
end.
|
|
|