hedgewars/uAILandMarks.pas
author nemo
Wed, 22 May 2013 22:46:49 -0400
changeset 9046 f8ea1b929b72
parent 7850 fcbb024090a4
child 10017 de822cd3df3a
permissions -rw-r--r--
So when I first upsized these, I neglected to remove the pixelated version when generating. Corrected that to avoid sharp edges. Also aggressively optimised for smoothing. Also took advantage of SVG to drag dino bones to water level for mikade.

unit uAILandMarks;

interface
const 
    markWalkedHere = $01;
    markHJumped    = $02;
    markLJumped    = $04;

procedure addMark(X, Y: LongInt; mark: byte);
function  checkMark(X, Y: LongInt; mark: byte) : boolean;
procedure clearAllMarks;
procedure clearMarks(mark: byte);
procedure setAILandMarks;

procedure initModule;
procedure freeModule;

implementation
uses uVariables;

const gr = 2;

var marks: array of array of byte;
    WIDTH, HEIGHT: Longword;

procedure addMark(X, Y: LongInt; mark: byte);
begin
    if((X and LAND_WIDTH_MASK) = 0) and ((Y and LAND_HEIGHT_MASK) = 0) then
        begin
        X:= X shr gr;
        Y:= Y shr gr;
        marks[Y, X]:= marks[Y, X] or mark
        end
end;

function  checkMark(X, Y: LongInt; mark: byte) : boolean;
begin
    checkMark:= ((X and LAND_WIDTH_MASK) = 0) 
        and ((Y and LAND_HEIGHT_MASK) = 0) 
        and ((marks[Y shr gr, X shr gr] and mark) <> 0)
end;

procedure clearAllMarks;
var 
    Y, X: Longword;
begin
    for Y:= 0 to Pred(HEIGHT) do
        for X:= 0 to Pred(WIDTH) do
            marks[Y, X]:= 0
end;

procedure clearMarks(mark: byte);
var 
    Y, X: Longword;
begin
    for Y:= 0 to Pred(HEIGHT) do
        for X:= 0 to Pred(WIDTH) do
            marks[Y, X]:= marks[Y, X] and (not mark)
end;

procedure setAILandMarks;
begin
    WIDTH:= LAND_WIDTH shr gr;
    HEIGHT:= LAND_HEIGHT shr gr;
    
    SetLength(marks, HEIGHT, WIDTH);
end;

procedure initModule;
begin
end;

procedure freeModule;
begin
    SetLength(marks, 0, 0);
end;

end.