1 unit uAILandMarks;
2 
3 interface
4 const
5     markWalkedHere = $01;
6     markHJumped    = $02;
7     markLJumped    = $04;
8 
9 procedure addMark(X, Y: LongInt; mark: byte);
checkMarknull10 function  checkMark(X, Y: LongInt; mark: byte) : boolean;
11 procedure clearAllMarks;
12 procedure clearMarks(mark: byte);
13 procedure setAILandMarks;
14 
15 procedure initModule;
16 procedure freeModule;
17 
18 implementation
19 uses uVariables;
20 
21 const gr = 2;
22 
23 var marks: array of array of byte;
24     WIDTH, HEIGHT: Longword;
25 
26 procedure addMark(X, Y: LongInt; mark: byte);
27 begin
28     if((X and LAND_WIDTH_MASK) = 0) and ((Y and LAND_HEIGHT_MASK) = 0) then
29         begin
30         X:= X shr gr;
31         Y:= Y shr gr;
32         marks[Y, X]:= marks[Y, X] or mark
33         end
34 end;
35 
checkMarknull36 function  checkMark(X, Y: LongInt; mark: byte) : boolean;
37 begin
38     checkMark:= ((X and LAND_WIDTH_MASK) = 0)
39         and ((Y and LAND_HEIGHT_MASK) = 0)
40         and ((marks[Y shr gr, X shr gr] and mark) <> 0)
41 end;
42 
43 procedure clearAllMarks;
44 var
45     Y, X: Longword;
46 begin
47     for Y:= 0 to Pred(HEIGHT) do
48         for X:= 0 to Pred(WIDTH) do
49             marks[Y, X]:= 0
50 end;
51 
52 procedure clearMarks(mark: byte);
53 var
54     Y, X: Longword;
55 begin
56     for Y:= 0 to Pred(HEIGHT) do
57         for X:= 0 to Pred(WIDTH) do
58             marks[Y, X]:= marks[Y, X] and (not mark)
59 end;
60 
61 procedure setAILandMarks;
62 begin
63     WIDTH:= LAND_WIDTH shr gr;
64     HEIGHT:= LAND_HEIGHT shr gr;
65 
66     SetLength(marks, HEIGHT, WIDTH);
67 end;
68 
69 procedure initModule;
70 begin
71 end;
72 
73 procedure freeModule;
74 begin
75     SetLength(marks, 0, 0);
76 end;
77 
78 end.
79