1
0
mirror of https://github.com/moparisthebest/Simba synced 2024-11-22 01:02:17 -05:00

Fixed some warnings + added FindDTM and AreaShape.

git-svn-id: http://www.villavu.com/repositories/merlijn/mufasa@100 3f818213-9676-44b0-a9b4-5e4c4e03d09d
This commit is contained in:
Wizzup? 2009-10-03 22:11:30 +00:00
parent 33b416a939
commit 490c3e1871
7 changed files with 655 additions and 518 deletions

View File

@ -7,7 +7,7 @@
<TargetFileExt Value=""/>
<Title Value="Mufasa Stand Alone"/>
<UseXPManifest Value="True"/>
<ActiveEditorIndexAtStart Value="3"/>
<ActiveEditorIndexAtStart Value="10"/>
</General>
<VersionInfo>
<ProjectVersion Value=""/>
@ -33,7 +33,7 @@
<PackageName Value="LCL"/>
</Item2>
</RequiredPackages>
<Units Count="128">
<Units Count="129">
<Unit0>
<Filename Value="project1.lpr"/>
<IsPartOfProject Value="True"/>
@ -41,7 +41,7 @@
<CursorPos X="26" Y="12"/>
<TopLine Value="1"/>
<EditorIndex Value="0"/>
<UsageCount Value="153"/>
<UsageCount Value="157"/>
<Loaded Value="True"/>
</Unit0>
<Unit1>
@ -170,10 +170,10 @@
<HasResources Value="True"/>
<ResourceBaseClass Value="Form"/>
<UnitName Value="TestUnit"/>
<CursorPos X="37" Y="115"/>
<TopLine Value="84"/>
<EditorIndex Value="11"/>
<UsageCount Value="119"/>
<CursorPos X="10" Y="11"/>
<TopLine Value="1"/>
<EditorIndex Value="14"/>
<UsageCount Value="123"/>
<Loaded Value="True"/>
</Unit18>
<Unit19>
@ -302,20 +302,20 @@
<Filename Value="../../Units/MMLCore/client.pas"/>
<IsPartOfProject Value="True"/>
<UnitName Value="Client"/>
<CursorPos X="23" Y="18"/>
<TopLine Value="18"/>
<CursorPos X="39" Y="8"/>
<TopLine Value="1"/>
<EditorIndex Value="2"/>
<UsageCount Value="118"/>
<UsageCount Value="122"/>
<Loaded Value="True"/>
</Unit37>
<Unit38>
<Filename Value="../../Units/MMLCore/mufasatypes.pas"/>
<IsPartOfProject Value="True"/>
<UnitName Value="MufasaTypes"/>
<CursorPos X="1" Y="35"/>
<TopLine Value="21"/>
<CursorPos X="21" Y="36"/>
<TopLine Value="30"/>
<EditorIndex Value="1"/>
<UsageCount Value="118"/>
<UsageCount Value="122"/>
<Loaded Value="True"/>
</Unit38>
<Unit39>
@ -329,19 +329,19 @@
<Filename Value="../../Units/MMLCore/files.pas"/>
<IsPartOfProject Value="True"/>
<UnitName Value="files"/>
<CursorPos X="30" Y="20"/>
<TopLine Value="1"/>
<UsageCount Value="119"/>
<CursorPos X="15" Y="76"/>
<TopLine Value="47"/>
<EditorIndex Value="4"/>
<UsageCount Value="123"/>
<Loaded Value="True"/>
</Unit40>
<Unit41>
<Filename Value="../../Units/MMLCore/window.pas"/>
<IsPartOfProject Value="True"/>
<UnitName Value="Window"/>
<CursorPos X="29" Y="233"/>
<TopLine Value="233"/>
<EditorIndex Value="12"/>
<UsageCount Value="118"/>
<Loaded Value="True"/>
<CursorPos X="41" Y="243"/>
<TopLine Value="228"/>
<UsageCount Value="122"/>
</Unit41>
<Unit42>
<Filename Value="../../../Documents/lazarus/lcl/forms.pp"/>
@ -355,8 +355,8 @@
<UnitName Value="CompTypes"/>
<CursorPos X="35" Y="727"/>
<TopLine Value="712"/>
<EditorIndex Value="6"/>
<UsageCount Value="21"/>
<EditorIndex Value="9"/>
<UsageCount Value="24"/>
<Loaded Value="True"/>
</Unit43>
<Unit44>
@ -364,26 +364,24 @@
<UnitName Value="windowutil"/>
<CursorPos X="86" Y="19"/>
<TopLine Value="1"/>
<EditorIndex Value="13"/>
<UsageCount Value="41"/>
<Loaded Value="True"/>
<UsageCount Value="43"/>
</Unit44>
<Unit45>
<Filename Value="../../Units/MMLCore/input.pas"/>
<UnitName Value="Input"/>
<CursorPos X="32" Y="251"/>
<TopLine Value="220"/>
<EditorIndex Value="7"/>
<UsageCount Value="21"/>
<Loaded Value="True"/>
<UsageCount Value="23"/>
</Unit45>
<Unit46>
<Filename Value="../../Units/MMLCore/finder.pas"/>
<IsPartOfProject Value="True"/>
<UnitName Value="finder"/>
<CursorPos X="20" Y="29"/>
<TopLine Value="14"/>
<UsageCount Value="111"/>
<CursorPos X="79" Y="29"/>
<TopLine Value="15"/>
<EditorIndex Value="3"/>
<UsageCount Value="115"/>
<Loaded Value="True"/>
</Unit46>
<Unit47>
<Filename Value="../../../lazarus/lcl/graphics.pp"/>
@ -396,9 +394,11 @@
<Filename Value="../../Units/MMLAddon/mmlthread.pas"/>
<IsPartOfProject Value="True"/>
<UnitName Value="MMLThread"/>
<CursorPos X="132" Y="5"/>
<TopLine Value="1"/>
<UsageCount Value="109"/>
<CursorPos X="10" Y="62"/>
<TopLine Value="50"/>
<EditorIndex Value="11"/>
<UsageCount Value="113"/>
<Loaded Value="True"/>
</Unit48>
<Unit49>
<Filename Value="../../../Documents/fpc/rtl/objpas/classes/classesh.inc"/>
@ -410,10 +410,10 @@
<Filename Value="../../Units/MMLAddon/mmlpsthread.pas"/>
<IsPartOfProject Value="True"/>
<UnitName Value="mmlpsthread"/>
<CursorPos X="18" Y="177"/>
<TopLine Value="174"/>
<EditorIndex Value="8"/>
<UsageCount Value="107"/>
<CursorPos X="72" Y="15"/>
<TopLine Value="11"/>
<EditorIndex Value="10"/>
<UsageCount Value="111"/>
<Loaded Value="True"/>
</Unit50>
<Unit51>
@ -521,11 +521,9 @@
</Unit65>
<Unit66>
<Filename Value="../../Units/MMLAddon/PSInc/pscompile.inc"/>
<CursorPos X="49" Y="13"/>
<CursorPos X="33" Y="13"/>
<TopLine Value="1"/>
<EditorIndex Value="9"/>
<UsageCount Value="28"/>
<Loaded Value="True"/>
<UsageCount Value="30"/>
</Unit66>
<Unit67>
<Filename Value="../../../FPC/FPCCheckout/rtl/win/tthread.inc"/>
@ -543,9 +541,11 @@
<Filename Value="../../Units/MMLCore/bitmaps.pas"/>
<IsPartOfProject Value="True"/>
<UnitName Value="bitmaps"/>
<CursorPos X="63" Y="428"/>
<TopLine Value="387"/>
<UsageCount Value="97"/>
<CursorPos X="31" Y="430"/>
<TopLine Value="419"/>
<EditorIndex Value="5"/>
<UsageCount Value="101"/>
<Loaded Value="True"/>
</Unit69>
<Unit70>
<Filename Value="../../../FPC/FPCCheckout/packages/fcl-image/src/fpcanvas.pp"/>
@ -565,7 +565,7 @@
<IsPartOfProject Value="True"/>
<CursorPos X="30" Y="34"/>
<TopLine Value="22"/>
<UsageCount Value="96"/>
<UsageCount Value="100"/>
</Unit72>
<Unit73>
<Filename Value="../../../FPC/FPCCheckout/packages/fcl-image/src/fpcanvas.inc"/>
@ -697,7 +697,7 @@
<UnitName Value="colour_conv"/>
<CursorPos X="11" Y="148"/>
<TopLine Value="140"/>
<UsageCount Value="79"/>
<UsageCount Value="83"/>
</Unit92>
<Unit93>
<Filename Value="../../../cogat/Units/CogatUnits/compcolors.pas"/>
@ -756,7 +756,7 @@
<UnitName Value="plugins"/>
<CursorPos X="86" Y="128"/>
<TopLine Value="128"/>
<UsageCount Value="73"/>
<UsageCount Value="77"/>
</Unit101>
<Unit102>
<Filename Value="../../../Compilertje/Units/CogatUnits/compfiles.pas"/>
@ -838,20 +838,20 @@
<Unit114>
<Filename Value="../../../cogat/Units/CogatUnits/compdtm.pas"/>
<UnitName Value="compDTM"/>
<CursorPos X="29" Y="11"/>
<TopLine Value="11"/>
<EditorIndex Value="5"/>
<UsageCount Value="16"/>
<CursorPos X="1" Y="377"/>
<TopLine Value="361"/>
<EditorIndex Value="8"/>
<UsageCount Value="19"/>
<Loaded Value="True"/>
</Unit114>
<Unit115>
<Filename Value="../../Units/MMLCore/dtm.pas"/>
<IsPartOfProject Value="True"/>
<UnitName Value="dtm"/>
<CursorPos X="30" Y="133"/>
<TopLine Value="104"/>
<EditorIndex Value="3"/>
<UsageCount Value="54"/>
<CursorPos X="48" Y="128"/>
<TopLine Value="111"/>
<EditorIndex Value="6"/>
<UsageCount Value="58"/>
<Loaded Value="True"/>
</Unit115>
<Unit116>
@ -865,9 +865,11 @@
<Filename Value="../../Units/MMLAddon/colourpicker.pas"/>
<IsPartOfProject Value="True"/>
<UnitName Value="colourpicker"/>
<CursorPos X="27" Y="34"/>
<TopLine Value="13"/>
<UsageCount Value="50"/>
<CursorPos X="53" Y="33"/>
<TopLine Value="15"/>
<EditorIndex Value="12"/>
<UsageCount Value="54"/>
<Loaded Value="True"/>
</Unit117>
<Unit118>
<Filename Value="../../../cogat/Units/CogatUnits/compdragger.pas"/>
@ -892,7 +894,7 @@
<UnitName Value="windowselector"/>
<CursorPos X="76" Y="83"/>
<TopLine Value="65"/>
<UsageCount Value="40"/>
<UsageCount Value="44"/>
</Unit120>
<Unit121>
<Filename Value="../../../../../../usr/lib64/fpc/2.2.4/source/rtl/objpas/classes/classesh.inc"/>
@ -926,8 +928,8 @@
<UnitName Value="dtmutil"/>
<CursorPos X="1" Y="17"/>
<TopLine Value="1"/>
<EditorIndex Value="4"/>
<UsageCount Value="27"/>
<EditorIndex Value="7"/>
<UsageCount Value="31"/>
<Loaded Value="True"/>
</Unit125>
<Unit126>
@ -939,133 +941,140 @@
</Unit126>
<Unit127>
<Filename Value="../../Units/MMLAddon/PSInc/Wrappers/dtm.inc"/>
<CursorPos X="85" Y="1"/>
<CursorPos X="26" Y="6"/>
<TopLine Value="1"/>
<EditorIndex Value="10"/>
<UsageCount Value="11"/>
<EditorIndex Value="13"/>
<UsageCount Value="14"/>
<Loaded Value="True"/>
</Unit127>
<Unit128>
<Filename Value="../../../../Documents/lazarus/lcl/graphics.pp"/>
<UnitName Value="Graphics"/>
<CursorPos X="3" Y="53"/>
<TopLine Value="38"/>
<UsageCount Value="10"/>
</Unit128>
</Units>
<JumpHistory Count="30" HistoryIndex="29">
<Position1>
<Filename Value="../../../cogat/Units/CogatUnits/compdtm.pas"/>
<Caret Line="79" Column="21" TopLine="61"/>
<Filename Value="../../Units/MMLCore/dtm.pas"/>
<Caret Line="136" Column="47" TopLine="121"/>
</Position1>
<Position2>
<Filename Value="../../Units/MMLCore/dtmutil.pas"/>
<Caret Line="22" Column="4" TopLine="6"/>
<Filename Value="../../Units/MMLCore/dtm.pas"/>
<Caret Line="125" Column="25" TopLine="110"/>
</Position2>
<Position3>
<Filename Value="../../../cogat/Units/CogatUnits/compdtm.pas"/>
<Caret Line="79" Column="9" TopLine="61"/>
<Filename Value="../../Units/MMLCore/dtm.pas"/>
<Caret Line="77" Column="27" TopLine="51"/>
</Position3>
<Position4>
<Filename Value="../../Units/MMLCore/dtmutil.pas"/>
<Caret Line="23" Column="1" TopLine="11"/>
<Filename Value="../../Units/MMLCore/dtm.pas"/>
<Caret Line="431" Column="60" TopLine="401"/>
</Position4>
<Position5>
<Filename Value="../../Units/MMLCore/dtm.pas"/>
<Caret Line="118" Column="25" TopLine="95"/>
<Caret Line="393" Column="28" TopLine="381"/>
</Position5>
<Position6>
<Filename Value="../../Units/MMLCore/dtm.pas"/>
<Caret Line="199" Column="23" TopLine="131"/>
<Caret Line="386" Column="3" TopLine="375"/>
</Position6>
<Position7>
<Filename Value="../../Units/MMLCore/dtm.pas"/>
<Caret Line="103" Column="7" TopLine="88"/>
<Caret Line="78" Column="20" TopLine="61"/>
</Position7>
<Position8>
<Filename Value="../../Units/MMLCore/dtm.pas"/>
<Caret Line="11" Column="42" TopLine="1"/>
<Filename Value="testunit.pas"/>
<Caret Line="11" Column="10" TopLine="1"/>
</Position8>
<Position9>
<Filename Value="../../Units/MMLCore/dtm.pas"/>
<Caret Line="291" Column="31" TopLine="276"/>
<Caret Line="17" Column="78" TopLine="1"/>
</Position9>
<Position10>
<Filename Value="../../Units/MMLCore/dtm.pas"/>
<Caret Line="10" Column="45" TopLine="1"/>
<Filename Value="../../Units/MMLAddon/mmlpsthread.pas"/>
<Caret Line="196" Column="48" TopLine="196"/>
</Position10>
<Position11>
<Filename Value="../../Units/MMLCore/dtm.pas"/>
<Caret Line="5" Column="49" TopLine="1"/>
<Filename Value="../../Units/MMLAddon/mmlpsthread.pas"/>
<Caret Line="69" Column="3" TopLine="54"/>
</Position11>
<Position12>
<Filename Value="../../Units/MMLCore/dtm.pas"/>
<Caret Line="263" Column="31" TopLine="263"/>
<Filename Value="../../Units/MMLAddon/mmlpsthread.pas"/>
<Caret Line="68" Column="1" TopLine="54"/>
</Position12>
<Position13>
<Filename Value="../../Units/MMLCore/dtm.pas"/>
<Caret Line="80" Column="60" TopLine="68"/>
<Filename Value="../../Units/MMLAddon/mmlpsthread.pas"/>
<Caret Line="147" Column="4" TopLine="132"/>
</Position13>
<Position14>
<Filename Value="../../Units/MMLCore/dtm.pas"/>
<Caret Line="269" Column="53" TopLine="18"/>
<Filename Value="../../Units/MMLAddon/mmlpsthread.pas"/>
<Caret Line="16" Column="37" TopLine="2"/>
</Position14>
<Position15>
<Filename Value="../../Units/MMLCore/dtm.pas"/>
<Caret Line="306" Column="48" TopLine="291"/>
<Filename Value="../../Units/MMLAddon/mmlpsthread.pas"/>
<Caret Line="191" Column="14" TopLine="171"/>
</Position15>
<Position16>
<Filename Value="../../Units/MMLCore/dtm.pas"/>
<Caret Line="1" Column="77" TopLine="1"/>
<Filename Value="../../Units/MMLAddon/mmlpsthread.pas"/>
<Caret Line="24" Column="51" TopLine="19"/>
</Position16>
<Position17>
<Filename Value="../../Units/MMLCore/dtm.pas"/>
<Caret Line="12" Column="63" TopLine="1"/>
<Filename Value="../../Units/MMLAddon/mmlpsthread.pas"/>
<Caret Line="189" Column="1" TopLine="171"/>
</Position17>
<Position18>
<Filename Value="../../Units/MMLCore/dtm.pas"/>
<Caret Line="7" Column="46" TopLine="1"/>
<Filename Value="../../Units/MMLAddon/mmlpsthread.pas"/>
<Caret Line="10" Column="50" TopLine="9"/>
</Position18>
<Position19>
<Filename Value="../../Units/MMLCore/dtm.pas"/>
<Caret Line="6" Column="63" TopLine="1"/>
<Filename Value="../../Units/MMLAddon/mmlpsthread.pas"/>
<Caret Line="25" Column="41" TopLine="10"/>
</Position19>
<Position20>
<Filename Value="../../../cogat/Units/CogatUnits/compdtm.pas"/>
<Caret Line="11" Column="29" TopLine="1"/>
<Filename Value="../../Units/MMLAddon/mmlpsthread.pas"/>
<Caret Line="27" Column="47" TopLine="12"/>
</Position20>
<Position21>
<Filename Value="../../../cogat/Units/CogatUnits/comptypes.pas"/>
<Caret Line="11" Column="40" TopLine="1"/>
<Filename Value="../../Units/MMLAddon/mmlpsthread.pas"/>
<Caret Line="236" Column="7" TopLine="231"/>
</Position21>
<Position22>
<Filename Value="../../../cogat/Units/CogatUnits/comptypes.pas"/>
<Caret Line="137" Column="11" TopLine="122"/>
<Filename Value="../../Units/MMLAddon/mmlthread.pas"/>
<Caret Line="5" Column="132" TopLine="1"/>
</Position22>
<Position23>
<Filename Value="../../../cogat/Units/CogatUnits/comptypes.pas"/>
<Caret Line="138" Column="17" TopLine="122"/>
<Filename Value="../../Units/MMLAddon/colourpicker.pas"/>
<Caret Line="34" Column="27" TopLine="13"/>
</Position23>
<Position24>
<Filename Value="../../Units/MMLAddon/mmlpsthread.pas"/>
<Caret Line="40" Column="55" TopLine="27"/>
<Filename Value="../../Units/MMLAddon/colourpicker.pas"/>
<Caret Line="87" Column="10" TopLine="72"/>
</Position24>
<Position25>
<Filename Value="../../Units/MMLAddon/mmlpsthread.pas"/>
<Caret Line="44" Column="27" TopLine="27"/>
<Filename Value="../../Units/MMLAddon/colourpicker.pas"/>
<Caret Line="28" Column="33" TopLine="13"/>
</Position25>
<Position26>
<Filename Value="../../Units/MMLAddon/mmlpsthread.pas"/>
<Caret Line="139" Column="22" TopLine="121"/>
<Filename Value="../../Units/MMLAddon/colourpicker.pas"/>
<Caret Line="105" Column="37" TopLine="90"/>
</Position26>
<Position27>
<Filename Value="../../Units/MMLAddon/mmlpsthread.pas"/>
<Caret Line="138" Column="22" TopLine="121"/>
<Filename Value="../../Units/MMLAddon/colourpicker.pas"/>
<Caret Line="156" Column="39" TopLine="141"/>
</Position27>
<Position28>
<Filename Value="../../Units/MMLAddon/mmlpsthread.pas"/>
<Caret Line="139" Column="32" TopLine="121"/>
<Filename Value="../../Units/MMLAddon/colourpicker.pas"/>
<Caret Line="30" Column="49" TopLine="15"/>
</Position28>
<Position29>
<Filename Value="../../Units/MMLAddon/mmlpsthread.pas"/>
<Caret Line="177" Column="18" TopLine="174"/>
<Caret Line="8" Column="76" TopLine="1"/>
</Position29>
<Position30>
<Filename Value="../../Units/MMLAddon/PSInc/pscompile.inc"/>
<Caret Line="15" Column="1" TopLine="1"/>
<Filename Value="../../Units/MMLAddon/mmlpsthread.pas"/>
<Caret Line="105" Column="38" TopLine="90"/>
</Position30>
</JumpHistory>
</ProjectOptions>

View File

@ -3,7 +3,7 @@ begin
Result := CurrThread.Client.MDTM.FindDTM(DTM, x, y, x1, y1, x2, y2);
end;
function ps_StringFromDTM(DTMString: String): Integer;
function ps_DTMFromString(DTMString: String): Integer;
var
dtm: pDTM;
begin

View File

@ -1,67 +1,67 @@
Sender.Comp.AddTypeS('TIntegerArray', 'Array of integer');
Sender.Comp.AddTypeS('TPointArray','Array of TPoint');
Sender.Comp.AddTypeS('TBmpMirrorStyle','(MirrorWidth,MirrorHeight,MirrorLine)');
//Sender.Comp.AddTypeS('pDTM','pDTM = record p: TPointArray; c, t, asz, ash: TIntegerArray; end');
Sender.AddFunction(@ThreadSafeCall,'function ThreadSafeCall(ProcName: string; var V: TVariantArray): Variant;');
Sender.AddFunction(@psWriteln,'procedure writeln(s : string);');
{ DTM }
Sender.AddFunction(@ps_StringFromDTM, 'function DTMFromString(DTMString: String): Integer;');
Sender.AddFunction(@ps_FreeDTM, 'procedure FreeDTM(DTM: Integer);');
Sender.AddFunction(@FindDTM, 'function FindDTM(DTM: Integer; var x, y: Integer; x1, y1, x2, y2: Integer): Boolean;');
{maths}
sender.AddFunction(@power,'function pow(base,exponent : extended) : extended');
Sender.AddFunction(@max,'function Max(a, b: Integer): Integer;');
Sender.AddFunction(@min,'function Min(a, b: Integer): Integer;');
Sender.AddFunction(@pssqr,'function Sqr(e : extended) : extended;');
Sender.AddFunction(@Freeze, 'function freeze:boolean;');
Sender.AddFunction(@Unfreeze, 'function unfreeze: boolean;');
Sender.AddFunction(@GetColor,'function GetColor(x, y: Integer): Integer;');
Sender.AddFunction(@FindColor, 'function findcolor(var x, y: integer; color, x1, y1, x2, y2: integer): boolean;');
Sender.AddFunction(@FindColorTolerance, 'function findcolortolerance(var x, y: integer; color, x1, y1, x2, y2, tol: integer): boolean;');
Sender.AddFunction(@FindColors, 'function findcolors(var TPA: TPointArray; color, x1, y1, x2, y2: integer): boolean;');
Sender.AddFunction(@SimilarColors,'function SimilarColors(Col1,Col2,Tolerance : integer) : boolean');
Sender.AddFunction(@CountColorTolerance,'function CountColorTolerance(Color, xs, ys, xe, ye, Tolerance: Integer): Integer;');
Sender.AddFunction(@FindColorsTolerance,'function FindColorsTolerance(var Points: TPointArray; Color, xs, ys, xe, ye, Tolerance: Integer): Boolean;');
Sender.AddFunction(@MoveMouse, 'procedure MoveMouse(x, y: integer);');
Sender.AddFunction(@GetMousePos, 'procedure GetMousePos(var x, y: integer);');
Sender.AddFunction(@Wait, 'procedure wait(t: integer);');
Sender.AddFunction(@GetClientDimensions, 'procedure GetClientDimensions(var w, h:integer);');
Sender.AddFunction(@SetColorToleranceSpeed, 'procedure SetColorToleranceSpeed(cts: integer);');
Sender.AddFunction(@GetTickCount, 'function GetSystemTime: Integer;');
Sender.AddFunction(@CreateBitmap,'function CreateBitmap(w,h :integer) : integer;');
Sender.AddFunction(@FreeBitmap,'procedure FreeBitmap(Bmp : integer);');
Sender.AddFunction(@SaveBitmap,'procedure SaveBitmap(Bmp : integer; path : string);');
Sender.AddFunction(@BitmapFromString,'function BitmapFromString(Width,Height : integer; Data : string): integer;');
Sender.AddFunction(@LoadBitmap,'function LoadBitmap(Path : string) : integer;');
Sender.AddFunction(@SetBitmapSize,'procedure SetBitmapSize(Bmp,NewW,NewH : integer);');
Sender.AddFunction(@GetBitmapSize,'procedure GetBitmapSize(Bmp : integer; Var BmpW,BmpH : integer);');
Sender.AddFunction(@CreateMirroredBitmap,'function CreateMirroredBitmap(Bmp : integer) : integer;');
Sender.AddFunction(@CreateMirroredBitmapEx,'function CreateMirroredBitmapEx(Bmp : integer; MirrorStyle : TBmpMirrorStyle) : integer;');
Sender.AddFunction(@FastSetPixel,'procedure FastSetPixel(bmp,x,y : integer; Color : TColor);');
Sender.AddFunction(@FastSetPixels,'procedure FastSetPixels(bmp : integer; TPA : TPointArray; Colors : TIntegerArray);');
Sender.AddFunction(@FastGetPixel,'function FastGetPixel(bmp, x,y : integer) : TColor;');
Sender.AddFunction(@FastGetPixels,'function FastGetPixels(Bmp : integer; TPA : TPointArray) : TIntegerArray;');
Sender.AddFunction(@FastDrawClear,'procedure FastDrawClear(bmp : integer; Color : TColor)');
Sender.AddFunction(@FastDrawTransparent,'procedure FastDrawTransparent(x, y: Integer; SourceBitmap, TargetBitmap: Integer);');
Sender.AddFunction(@SetTransparentColor,'procedure SetTransparentColor(bmp : integer; Color : TColor);');
Sender.AddFunction(@GetTransparentColor,'function GetTransparentColor(bmp: integer) : TColor;');
Sender.AddFunction(@FastReplaceColor,'procedure FastReplaceColor(Bmp : integer; OldColor,NewColor : TColor);');
Sender.Comp.AddTypeS('TIntegerArray', 'Array of integer');
Sender.Comp.AddTypeS('TPointArray','Array of TPoint');
Sender.Comp.AddTypeS('TBmpMirrorStyle','(MirrorWidth,MirrorHeight,MirrorLine)');
//Sender.Comp.AddTypeS('pDTM','pDTM = record p: TPointArray; c, t, asz, ash: TIntegerArray; end');
Sender.AddFunction(@ThreadSafeCall,'function ThreadSafeCall(ProcName: string; var V: TVariantArray): Variant;');
Sender.AddFunction(@psWriteln,'procedure writeln(s : string);');
{ DTM }
Sender.AddFunction(@ps_DTMFromString, 'function DTMFromString(DTMString: String): Integer;');
Sender.AddFunction(@ps_FreeDTM, 'procedure FreeDTM(DTM: Integer);');
Sender.AddFunction(@FindDTM, 'function FindDTM(DTM: Integer; var x, y: Integer; x1, y1, x2, y2: Integer): Boolean;');
{maths}
sender.AddFunction(@power,'function pow(base,exponent : extended) : extended');
Sender.AddFunction(@max,'function Max(a, b: Integer): Integer;');
Sender.AddFunction(@min,'function Min(a, b: Integer): Integer;');
Sender.AddFunction(@pssqr,'function Sqr(e : extended) : extended;');
Sender.AddFunction(@Freeze, 'function freeze:boolean;');
Sender.AddFunction(@Unfreeze, 'function unfreeze: boolean;');
Sender.AddFunction(@GetColor,'function GetColor(x, y: Integer): Integer;');
Sender.AddFunction(@FindColor, 'function findcolor(var x, y: integer; color, x1, y1, x2, y2: integer): boolean;');
Sender.AddFunction(@FindColorTolerance, 'function findcolortolerance(var x, y: integer; color, x1, y1, x2, y2, tol: integer): boolean;');
Sender.AddFunction(@FindColors, 'function findcolors(var TPA: TPointArray; color, x1, y1, x2, y2: integer): boolean;');
Sender.AddFunction(@SimilarColors,'function SimilarColors(Col1,Col2,Tolerance : integer) : boolean');
Sender.AddFunction(@CountColorTolerance,'function CountColorTolerance(Color, xs, ys, xe, ye, Tolerance: Integer): Integer;');
Sender.AddFunction(@FindColorsTolerance,'function FindColorsTolerance(var Points: TPointArray; Color, xs, ys, xe, ye, Tolerance: Integer): Boolean;');
Sender.AddFunction(@MoveMouse, 'procedure MoveMouse(x, y: integer);');
Sender.AddFunction(@GetMousePos, 'procedure GetMousePos(var x, y: integer);');
Sender.AddFunction(@Wait, 'procedure wait(t: integer);');
Sender.AddFunction(@GetClientDimensions, 'procedure GetClientDimensions(var w, h:integer);');
Sender.AddFunction(@SetColorToleranceSpeed, 'procedure SetColorToleranceSpeed(cts: integer);');
Sender.AddFunction(@GetTickCount, 'function GetSystemTime: Integer;');
Sender.AddFunction(@CreateBitmap,'function CreateBitmap(w,h :integer) : integer;');
Sender.AddFunction(@FreeBitmap,'procedure FreeBitmap(Bmp : integer);');
Sender.AddFunction(@SaveBitmap,'procedure SaveBitmap(Bmp : integer; path : string);');
Sender.AddFunction(@BitmapFromString,'function BitmapFromString(Width,Height : integer; Data : string): integer;');
Sender.AddFunction(@LoadBitmap,'function LoadBitmap(Path : string) : integer;');
Sender.AddFunction(@SetBitmapSize,'procedure SetBitmapSize(Bmp,NewW,NewH : integer);');
Sender.AddFunction(@GetBitmapSize,'procedure GetBitmapSize(Bmp : integer; Var BmpW,BmpH : integer);');
Sender.AddFunction(@CreateMirroredBitmap,'function CreateMirroredBitmap(Bmp : integer) : integer;');
Sender.AddFunction(@CreateMirroredBitmapEx,'function CreateMirroredBitmapEx(Bmp : integer; MirrorStyle : TBmpMirrorStyle) : integer;');
Sender.AddFunction(@FastSetPixel,'procedure FastSetPixel(bmp,x,y : integer; Color : TColor);');
Sender.AddFunction(@FastSetPixels,'procedure FastSetPixels(bmp : integer; TPA : TPointArray; Colors : TIntegerArray);');
Sender.AddFunction(@FastGetPixel,'function FastGetPixel(bmp, x,y : integer) : TColor;');
Sender.AddFunction(@FastGetPixels,'function FastGetPixels(Bmp : integer; TPA : TPointArray) : TIntegerArray;');
Sender.AddFunction(@FastDrawClear,'procedure FastDrawClear(bmp : integer; Color : TColor)');
Sender.AddFunction(@FastDrawTransparent,'procedure FastDrawTransparent(x, y: Integer; SourceBitmap, TargetBitmap: Integer);');
Sender.AddFunction(@SetTransparentColor,'procedure SetTransparentColor(bmp : integer; Color : TColor);');
Sender.AddFunction(@GetTransparentColor,'function GetTransparentColor(bmp: integer) : TColor;');
Sender.AddFunction(@FastReplaceColor,'procedure FastReplaceColor(Bmp : integer; OldColor,NewColor : TColor);');

View File

@ -83,7 +83,8 @@ begin
Window.SetTarget(Window.DesktopWindow);
{$ENDIF}
{$ENDIF}
w := 0;
h := 0;
Window.GetDimensions(w, h);
Form.Width := w;

View File

@ -5,7 +5,7 @@ unit mmlpsthread;
interface
uses
Classes, SysUtils, client, uPSComponent,uPSCompiler,uPSRuntime,stdCtrls, Plugins,uPSPreProcessor;
Classes, SysUtils, client, uPSComponent,uPSCompiler,uPSRuntime,stdCtrls, uPSPreProcessor;
type
@ -65,8 +65,7 @@ begin
end;
function ThreadSafeCall(ProcName: string; var V: TVariantArray): Variant;
var
i : integer;
begin;
Writeln('We have a length of: ' + inttostr(length(v)));
Try
@ -145,7 +144,7 @@ procedure TMMLPSThread.PSScriptProcessUnknowDirective(Sender: TPSPreProcessor;
const DirectiveName, DirectiveParam: string; var Continue: Boolean);
var
TempNum : integer;
I,II : integer;
I: integer;
begin
if DirectiveName= 'LOADDLL' then
if DirectiveParam <> '' then
@ -187,6 +186,7 @@ function TMMLPSThread.RequireFile(Sender: TObject;
const OriginFileName: String; var FileName, OutPut: string): Boolean;
begin
Result := False;
end;
procedure TMMLPSThread.OnCompImport(Sender: TObject; x: TPSPascalCompiler);
@ -232,7 +232,7 @@ end;
procedure TMMLPSThread.Execute;
var
time, i, ii: Integer;
time: Integer;
begin;
CurrThread := Self;
time := lclintf.GetTickCount;

View File

@ -58,7 +58,8 @@ var
i,w,h: Integer;
begin
w := 0;
h := 0;
i := 0;
while (not Terminated) and (i < 10) do
begin

View File

@ -1,322 +1,448 @@
unit dtm;
{$mode objfpc}{$H+}
interface
uses
Classes, SysUtils, MufasaTypes;
type
TMDTM = class(TObject)
function AddDTM(d: TDTM): Integer;
function AddpDTM(d: pDTM): Integer;
function GetDTM(index: Integer; var dtm: pDTM): Boolean;
procedure FreeDTM(DTM: Integer);
Function StringToDTM(S: String): pDTM;
function FindDTM(DTM: Integer; var x, y: Integer; x1, y1, x2,
y2: Integer): Boolean;
{ function FindDTMs(DTM: Integer; var Points: TPointArray; x1, y1, x2,
y2: Integer): Boolean;
function FindDTMRotated(DTM: Integer; var x, y: Integer; x1, y1, x2,
y2: Integer; sAngle, eAngle, aStep: Extended;
var aFound: Extended): Boolean;
function FindDTMsRotated(DTM: Integer; var Points: TPointArray; x1,
y1, x2, y2: Integer; sAngle, eAngle,
aStep: Extended; var aFound: T2DExtendedArray)
: Boolean; }
function pFindDTM(DTM: pDTM; var x, y: Integer; x1, y1, x2, y2:
Integer): Boolean;
constructor Create(Owner: TObject);
destructor Destroy; override;
private
Client: TObject;
// For decompressing.
BufferString: String;
DTMList: Array Of pDTM;
FreeSpots: Array Of Integer;
end;
const
dtm_Rectangle = 0;
dtm_Cross = 1;
dtm_DiagonalCross = 2;
dtm_Circle = 3;
dtm_Triangle = 4;
{
I am not sure wether I should simply copy and paste the old DTM implementation,
or rewrite it from scratch.
I recall there was something partially wrong with SCAR-alike DTM conversions
to Mufasa DTM's...
The old DTM system problaby doesn't perform that well, but seems to be quite
stable and complete.
If I would rewrite it from scratch, it would probably be faster, and
hopefully more efficient.That won't be too hard, especially since I have
direct data access now. (TClient FTW!)
Rewrite from scratch it will be, I guess.
And AreaShape will be turned into a {$I }, inline simply doesn't cut it.
~Wizz
}
implementation
uses
Client, dtmutil, paszlib;
type
TBufferByteArray = Array[0..524287] of Byte;
PBufferByteArray = ^TBufferByteArray;
constructor TMDTM.Create(Owner: TObject);
begin
inherited Create;
Self.Client := Owner;
SetLength(DTMList, 0);
SetLength(FreeSpots, 0);
SetLength(BufferString, 524288);
end;
destructor TMDTM.Destroy;
begin
SetLength(DTMList, 0);
SetLength(FreeSpots, 0);
SetLength(BufferString, 0);
inherited Destroy;
end;
function HexToInt(HexNum: string): LongInt;inline;
begin
Result:=StrToInt('$' + HexNum);
end;
function TMDTM.StringToDTM(S: String): pDTM;
var
b: PBufferByteArray;
Source : String;
DestLen : longword;
i,ii,c : integer;
begin
SetLength(Result.p,0);
SetLength(Result.c,0);
SetLength(Result.t,0);
SetLength(Result.asz,0);
SetLength(Result.ash,0);
ii := Length(S);
if (ii = 0) or (ii mod 2 <> 0) then
Exit;
ii := ii div 2;
SetLength(Source,ii);
for i := 1 to ii do
Source[i] := Chr(HexToInt(S[i * 2 - 1] + S[i * 2]));
DestLen := Length(Self.BufferString);
if uncompress(PChar(Self.Bufferstring),Destlen,pchar(Source), ii) = Z_OK then
begin;
if (Destlen mod 36) > 0 then
begin;
Writeln('Invalid DTM');
Exit;
end;
DestLen := DestLen div 36;
SetLength(Result.p,DestLen);
SetLength(Result.c,DestLen);
SetLength(Result.t,DestLen);
SetLength(Result.asz,DestLen);
SetLength(Result.ash,DestLen);
b := @Self.Bufferstring[1];
for i := 0 to DestLen - 1 do
begin;
c := i * 36;
Result.p[i].x := PInteger(@b^[c+1])^;
Result.p[i].y := PInteger(@b^[c+5])^;
Result.asz[i] := PInteger(@b^[c+12])^;
Result.ash[i] := PInteger(@b^[c+16])^;
Result.c[i] := PInteger(@b^[c+20])^;
Result.t[i] := PInteger(@b^[c+24])^;
end;
end;
end;
function TMDTM.AddDTM(d: TDTM): Integer;
begin
if Length(FreeSpots) > 0 then
begin
DTMList[FreeSpots[High(FreeSpots)]] := TDTMTopDTM(d);
Result := FreeSpots[High(FreeSpots)];
SetLength(FreeSpots, High(FreeSpots));
end
else
begin
SetLength(DTMList, Length(DTMList) + 1);
DTMList[High(DTMList)] := TDTMTopDTM(d);
Result := High(DTMList);
end;
end;
{/\
Adds the given pDTM to the DTM Array, and returns it's index.
/\}
function TMDTM.AddpDTM(d: pDTM): Integer;
begin
if Length(FreeSpots) > 0 then
begin
DTMList[FreeSpots[High(FreeSpots)]] := d;
Result := FreeSpots[High(FreeSpots)];
SetLength(FreeSpots, High(FreeSpots));
end
Else
begin
SetLength(DTMList, Length(DTMList) + 1);
DTMList[High(DTMList)] := d;
Result := High(DTMList);
end;
end;
{/\
Returns the DTM (pDTM type) in the variable dtm at the given index.
Returns true is succesfull, false if the dtm does not exist.
/\}
function TMDTM.GetDTM(index: Integer; var dtm: pDTM): Boolean;
begin
Result := True;
try
dtm := DTMList[index];
except
begin
raise Exception.CreateFmt('The given DTM Index ([%d]) is invalid.',
[index]);
//WriteLn('DTM Index ' + IntToStr(index) + ' does not exist');
Result := False;
end;
end
end;
{/\
Unloads the DTM at the given index from the DTM Array.
Notes:
Will keep track of not used index, so it is very memory efficient.
/\}
Procedure TMDTM.FreeDTM(DTM: Integer);
begin
try
SetLength(DTMList[DTM].p, 0);
SetLength(DTMList[DTM].c, 0);
SetLength(DTMList[DTM].t, 0);
SetLength(DTMList[DTM].asz, 0);
SetLength(DTMList[DTM].ash, 0);
except
//WriteLn('Invalid DTM');
end;
SetLength(FreeSpots, Length(FreeSpots) + 1);
FreeSpots[High(FreeSpots)] := DTM;
end;
{
Tries to find the given DTM (index). If found will put the point the dtm has
been found at in x, y and result to true.
}
function TMDTM.FindDTM(DTM: Integer; var x, y: Integer; x1, y1, x2, y2: Integer): Boolean;
var
temp: pDTM;
begin
if GetDTM(DTM, temp) then
Result := pFindDTM(temp, x, y, x1, y1, x2, y2)
else
begin
x := 0;
y := 0;
Result := False;
end;
end;
{
Tries to find the given pDTM. If found will put the point the dtm has
been found at in x, y and result to true.
}
function TMDTM.pFindDTM(DTM: pDTM; var x, y: Integer; x1, y1, x2, y2: Integer): Boolean;
var
mP: TPointArray;
I, J, H, dH: Integer;
Found: Boolean;
TempTP: TPoint;
RetData: TRetData;
begin
for I := 1 to High(DTM.p) do
begin
DTM.p[I].x := DTM.p[I].x - DTM.p[0].x;
DTM.p[I].y := DTM.p[I].y - DTM.p[0].y;
end;
// X2 := X2 - MaxSubPointDist.X
// Y2 := Y2 - MaxSubPointDist.Y
// X1 := X1 + MaxSubPointDist.X
// Y1 := Y1 + MaxSubPointDist.Y
// If X2 > X1 then Exit
// If Y2 > Y1 then Exit
// Will make sure there are no out of bounds exceptions, and will make it faster
TClient(Client).MWindow.Freeze();
TClient(Client).MFinder.FindColorsTolerance(mP, DTM.c[Low(DTM.c)],
x1, y1, x2, y2, DTM.t[Low(DTM.t)]);
TClient(Client).MWindow.GetDimensions(H, dH);
RetData := TClient(Client).MWindow.ReturnData(0, 0, H, dH);
H := High(mP);
dH := High(DTM.p);
for I := 0 to H do
begin
// Use MainPoint's AreaSize and Shape.
// for Loop on mP, depending on the AreaShape. then on all the code beneath
// this point, use the var that is retrieved from the for loop.
Found := True;
for J := 1 to dH do
begin
TempTP.X := DTM.p[J].X + mP[I].X;
TempTP.Y := DTM.p[J].Y + mP[I].Y;
//Now would be the time to Rotate TempTP
//If Not AreaShape(DTM.c[J], DTM.t[J], DTM.asz[J], DTM.ash[J], TempTP) then
if False then
begin
Found := False;
Break;
end;
end;
if Found then
begin
Result := True;
x := mP[I].X;
y := mP[I].Y;
TClient(Client).MWindow.UnFreeze();
Exit;
end;
end;
TClient(Client).MWindow.UnFreeze();
Result := False;
end;
end.
unit dtm;
{$mode objfpc}{$H+}
interface
uses
Classes, SysUtils, MufasaTypes;
type
TMDTM = class(TObject)
function AddDTM(d: TDTM): Integer;
function AddpDTM(d: pDTM): Integer;
function GetDTM(index: Integer; var dtm: pDTM): Boolean;
procedure FreeDTM(DTM: Integer);
Function StringToDTM(S: String): pDTM;
function FindDTM(DTM: Integer; var x, y: Integer; x1, y1, x2,
y2: Integer): Boolean;
{ function FindDTMs(DTM: Integer; var Points: TPointArray; x1, y1, x2,
y2: Integer): Boolean;
function FindDTMRotated(DTM: Integer; var x, y: Integer; x1, y1, x2,
y2: Integer; sAngle, eAngle, aStep: Extended;
var aFound: Extended): Boolean;
function FindDTMsRotated(DTM: Integer; var Points: TPointArray; x1,
y1, x2, y2: Integer; sAngle, eAngle,
aStep: Extended; var aFound: T2DExtendedArray)
: Boolean; }
function pFindDTM(DTM: pDTM; var x, y: Integer; x1, y1, x2, y2:
Integer): Boolean;
constructor Create(Owner: TObject);
destructor Destroy; override;
private
function AreaShape(Color, Tolerance, Size, Shape: Integer; P: TPoint) : Boolean; inline;
private
Client: TObject;
// For decompressing.
BufferString: String;
DTMList: Array Of pDTM;
FreeSpots: Array Of Integer;
end;
const
dtm_Rectangle = 0;
dtm_Cross = 1;
dtm_DiagonalCross = 2;
dtm_Circle = 3;
dtm_Triangle = 4;
{
I am not sure wether I should simply copy and paste the old DTM implementation,
or rewrite it from scratch.
I recall there was something partially wrong with SCAR-alike DTM conversions
to Mufasa DTM's...
The old DTM system problaby doesn't perform that well, but seems to be quite
stable and complete.
If I would rewrite it from scratch, it would probably be faster, and
hopefully more efficient.That won't be too hard, especially since I have
direct data access now. (TClient FTW!)
Rewrite from scratch it will be, I guess.
And AreaShape will be turned into a {$I }, inline simply doesn't cut it.
~Wizz
}
implementation
uses
Client, dtmutil, paszlib, finder,
graphics, // for TColor
math // for max
;
type
TBufferByteArray = Array[0..524287] of Byte;
PBufferByteArray = ^TBufferByteArray;
constructor TMDTM.Create(Owner: TObject);
begin
inherited Create;
Self.Client := Owner;
SetLength(DTMList, 0);
SetLength(FreeSpots, 0);
SetLength(BufferString, 524288);
end;
{$DEFINE DTM_DEBUG}
destructor TMDTM.Destroy;
{$IFDEF DTM_DEBUG}
var
i, j: integer;
b:boolean;
{$ENDIF}
begin
{$IFDEF DTM_DEBUG}
writeln(inttostr(high(dtmlist)));
writeln(inttostr(high(freespots)));
for i := 0 to high(DTMList) do
begin
b := false;
for j := 0 to high(freespots) do
if i = freespots[j] then
begin
b := true;
break;
end;
if not b then
writeln('DTM Number ' + inttostr(i) + ' was not freed');
end;
{$ENDIF}
SetLength(DTMList, 0);
SetLength(FreeSpots, 0);
SetLength(BufferString, 0);
inherited Destroy;
end;
type
PMSimColor = function (Color1,Color2,Tolerance : Integer) : boolean of object;
PMGetCol = function (x, y: integer): TColor of object;
Function TMDTM.AreaShape(Color, Tolerance, Size, Shape: Integer; P: TPoint) : Boolean; inline;
Var
X, Y, S: Integer;
SimCol: PMSimColor;
GetCol: PMGetCol;
Begin
writeln('areashape');
SimCol := @TClient(Client).MFinder.SimilarColors;
GetCol := @TClient(Client).MWindow.GetColor;
Case Shape Of
dtm_Rectangle:
Begin
{
Example:
3x3
X X X
X X X
X X X
}
For X := P.X - Size To P.X + Size Do
For Y := P.Y - Size To P.Y + Size Do
If SimCol(GetCol(X, Y), Color, Tolerance) Then
Begin
Result := True;
Exit;
End;
End;
dtm_Cross:
{
Example:
3x3
X
X X X
X
}
Begin
For X := P.X - Size To P.X + Size Do
If SimCol(GetCol(X, P.Y), Color, Tolerance) Then
Begin
Result := True;
Exit;
End;
For Y := P.Y - Size To P.Y + Size Do
If SimCol(GetCol(P.X, Y), Color, Tolerance) Then
Begin
Result := True;
Exit;
End;
End;
dtm_DiagonalCross:
{
Example:
3x3
X X
X
X X
}
Begin
For S := -Size To Size Do
Begin
If SimCol(GetCol(P.X + S, P.Y + S), Color, Tolerance) Then
Begin
Result := True;
Exit;
End;
If SimCol(GetCol(P.X + S, P.Y - S), Color, Tolerance) Then
Begin
Result := True;
Exit;
End;
End;
End;
{4:
Begin
D := Ceil(Sqrt(Pow(Size, 2) + Pow(Size, 2)));
//Will finish later
End; }
Else
WriteLn('Incorrect Shape');
End;
Result := False;
End;
function HexToInt(HexNum: string): LongInt;inline;
begin
Result:=StrToInt('$' + HexNum);
end;
function TMDTM.StringToDTM(S: String): pDTM;
var
b: PBufferByteArray;
Source : String;
DestLen : longword;
i,ii,c : integer;
begin
SetLength(Result.p,0);
SetLength(Result.c,0);
SetLength(Result.t,0);
SetLength(Result.asz,0);
SetLength(Result.ash,0);
ii := Length(S);
if (ii = 0) or (ii mod 2 <> 0) then
Exit;
ii := ii div 2;
SetLength(Source,ii);
for i := 1 to ii do
Source[i] := Chr(HexToInt(S[i * 2 - 1] + S[i * 2]));
DestLen := Length(Self.BufferString);
if uncompress(PChar(Self.Bufferstring),Destlen,pchar(Source), ii) = Z_OK then
begin;
if (Destlen mod 36) > 0 then
begin;
Writeln('Invalid DTM');
Exit;
end;
DestLen := DestLen div 36;
SetLength(Result.p,DestLen);
SetLength(Result.c,DestLen);
SetLength(Result.t,DestLen);
SetLength(Result.asz,DestLen);
SetLength(Result.ash,DestLen);
b := @Self.Bufferstring[1];
for i := 0 to DestLen - 1 do
begin;
c := i * 36;
Result.p[i].x := PInteger(@b^[c+1])^;
Result.p[i].y := PInteger(@b^[c+5])^;
Result.asz[i] := PInteger(@b^[c+12])^;
Result.ash[i] := PInteger(@b^[c+16])^;
Result.c[i] := PInteger(@b^[c+20])^;
Result.t[i] := PInteger(@b^[c+24])^;
end;
end;
end;
function TMDTM.AddDTM(d: TDTM): Integer;
begin
if Length(FreeSpots) > 0 then
begin
DTMList[FreeSpots[High(FreeSpots)]] := TDTMTopDTM(d);
Result := FreeSpots[High(FreeSpots)];
SetLength(FreeSpots, High(FreeSpots));
end
else
begin
SetLength(DTMList, Length(DTMList) + 1);
DTMList[High(DTMList)] := TDTMTopDTM(d);
Result := High(DTMList);
end;
end;
{/\
Adds the given pDTM to the DTM Array, and returns it's index.
/\}
function TMDTM.AddpDTM(d: pDTM): Integer;
begin
if Length(FreeSpots) > 0 then
begin
DTMList[FreeSpots[High(FreeSpots)]] := d;
Result := FreeSpots[High(FreeSpots)];
SetLength(FreeSpots, High(FreeSpots));
end
Else
begin
SetLength(DTMList, Length(DTMList) + 1);
DTMList[High(DTMList)] := d;
Result := High(DTMList);
end;
end;
{/\
Returns the DTM (pDTM type) in the variable dtm at the given index.
Returns true is succesfull, false if the dtm does not exist.
/\}
function TMDTM.GetDTM(index: Integer; var dtm: pDTM): Boolean;
begin
Result := True;
try
dtm := DTMList[index];
except
begin
raise Exception.CreateFmt('The given DTM Index ([%d]) is invalid.',
[index]);
//WriteLn('DTM Index ' + IntToStr(index) + ' does not exist');
Result := False;
end;
end
end;
{/\
Unloads the DTM at the given index from the DTM Array.
Notes:
Will keep track of not used index, so it is very memory efficient.
/\}
Procedure TMDTM.FreeDTM(DTM: Integer);
begin
try
SetLength(DTMList[DTM].p, 0);
SetLength(DTMList[DTM].c, 0);
SetLength(DTMList[DTM].t, 0);
SetLength(DTMList[DTM].asz, 0);
SetLength(DTMList[DTM].ash, 0);
except
//WriteLn('Invalid DTM');
end;
SetLength(FreeSpots, Length(FreeSpots) + 1);
FreeSpots[High(FreeSpots)] := DTM;
end;
{
Tries to find the given DTM (index). If found will put the point the dtm has
been found at in x, y and result to true.
}
function TMDTM.FindDTM(DTM: Integer; var x, y: Integer; x1, y1, x2, y2: Integer): Boolean;
var
temp: pDTM;
begin
if GetDTM(DTM, temp) then
Result := pFindDTM(temp, x, y, x1, y1, x2, y2)
else
begin
x := 0;
y := 0;
Result := False;
end;
end;
{
Tries to find the given pDTM. If found will put the point the dtm has
been found at in x, y and result to true.
}
function TMDTM.pFindDTM(DTM: pDTM; var x, y: Integer; x1, y1, x2, y2: Integer): Boolean;
var
mP: TPointArray;
I, J, H, dH: Integer;
Found: Boolean;
TempTP: TPoint;
RetData: TRetData;
MaxSubPointDist: TPoint;
begin
MaxSubPointDist := Point(0,0);
for I := 1 to High(DTM.p) do
begin
DTM.p[I].x := DTM.p[I].x - DTM.p[0].x;
DTM.p[I].y := DTM.p[I].y - DTM.p[0].y;
MaxSubPointDist.X := Max(DTM.p[I].x, MaxSubPointDist.X);
MaxSubPointDist.Y := Max(DTM.p[I].y, MaxSubPointDist.Y);
end;
X2 := X2 - MaxSubPointDist.X;
Y2 := Y2 - MaxSubPointDist.Y;
X1 := X1 + MaxSubPointDist.X;
Y1 := Y1 + MaxSubPointDist.Y;
{If X2 > X1 then
//Exit;
If Y2 > Y1 then }
//Exit;
// Will make sure there are no out of bounds exceptions, and will make it faster
TClient(Client).MWindow.Freeze();
TClient(Client).MFinder.FindColorsTolerance(mP, DTM.c[Low(DTM.c)],
x1, y1, x2, y2, DTM.t[Low(DTM.t)]);
TClient(Client).MWindow.GetDimensions(H, dH);
RetData := TClient(Client).MWindow.ReturnData(0, 0, H, dH);
H := High(mP);
dH := High(DTM.p);
for I := 0 to H do
begin
// Use MainPoint's AreaSize and Shape.
// for Loop on mP, depending on the AreaShape. then on all the code beneath
// this point, use the var that is retrieved from the for loop.
Found := True;
for J := 1 to dH do
begin
TempTP.X := DTM.p[J].X + mP[I].X;
TempTP.Y := DTM.p[J].Y + mP[I].Y;
//Now would be the time to Rotate TempTP
if not AreaShape(DTM.c[J], DTM.t[J], DTM.asz[J], DTM.ash[J], TempTP) then
begin
Found := False;
Break;
end;
end;
if Found then
begin
Result := True;
x := mP[I].X;
y := mP[I].Y;
TClient(Client).MWindow.UnFreeze();
Exit;
end;
end;
TClient(Client).MWindow.UnFreeze();
Result := False;
end;
end.