hedgewars/uLandPainted.pas
changeset 4458 7351e6f1ee28
parent 4457 ffb766e85150
child 4490 f6840f7e2f60
equal deleted inserted replaced
4457:ffb766e85150 4458:7351e6f1ee28
    23 interface
    23 interface
    24 
    24 
    25 procedure LoadFromFile(fileName: shortstring);
    25 procedure LoadFromFile(fileName: shortstring);
    26 
    26 
    27 implementation
    27 implementation
       
    28 uses uLandGraphics, uConsts, uUtils, SDLh;
    28 
    29 
    29 type PointRec = packed record
    30 type PointRec = packed record
    30     x, y: ShortInt;
    31     X, Y: SmallInt;
    31     flags: byte;
    32     flags: byte;
    32     end;
    33     end;
       
    34 
       
    35 procedure DrawLineOnLand(X1, Y1, X2, Y2: LongInt);
       
    36 var  eX, eY, dX, dY: LongInt;
       
    37     i, sX, sY, x, y, d: LongInt;
       
    38     b: boolean;
       
    39     len: LongWord;
       
    40 begin
       
    41     len:= 0;
       
    42     if (X1 = X2) and (Y1 = Y2) then
       
    43         begin
       
    44         exit
       
    45         end;
       
    46     eX:= 0;
       
    47     eY:= 0;
       
    48     dX:= X2 - X1;
       
    49     dY:= Y2 - Y1;
       
    50 
       
    51     if (dX > 0) then sX:= 1
       
    52     else
       
    53     if (dX < 0) then
       
    54         begin
       
    55         sX:= -1;
       
    56         dX:= -dX
       
    57         end else sX:= dX;
       
    58 
       
    59     if (dY > 0) then sY:= 1
       
    60     else
       
    61     if (dY < 0) then
       
    62         begin
       
    63         sY:= -1;
       
    64         dY:= -dY
       
    65         end else sY:= dY;
       
    66 
       
    67         if (dX > dY) then d:= dX
       
    68                     else d:= dY;
       
    69 
       
    70         x:= X1;
       
    71         y:= Y1;
       
    72 
       
    73         for i:= 0 to d do
       
    74             begin
       
    75             inc(eX, dX);
       
    76             inc(eY, dY);
       
    77             b:= false;
       
    78             if (eX > d) then
       
    79                 begin
       
    80                 dec(eX, d);
       
    81                 inc(x, sX);
       
    82                 b:= true
       
    83                 end;
       
    84             if (eY > d) then
       
    85                 begin
       
    86                 dec(eY, d);
       
    87                 inc(y, sY);
       
    88                 b:= true
       
    89                 end;
       
    90             if b then
       
    91                 begin
       
    92                 inc(len);
       
    93                 if (len mod 4) = 0 then FillRoundInLand(X, Y, 34, lfBasic)
       
    94                 end
       
    95         end
       
    96 end;
       
    97 
    33 
    98 
    34 procedure LoadFromFile(fileName: shortstring);
    99 procedure LoadFromFile(fileName: shortstring);
    35 var
   100 var
    36     f: file of PointRec;
   101     f: file of PointRec;
    37     rec: PointRec;
   102     rec, prevRec: PointRec;
    38 begin
   103 begin
    39     fileMode = foReadOnly;
   104     fileMode:= 0;
    40 
   105 
    41     assignFile(f, fileName);
   106     assignFile(f, fileName);
    42     reset(f);
   107     reset(f);
    43 
   108 
    44     while not eof(f) do
   109     while not eof(f) do
    45         begin
   110         begin
    46         read(f, rec);
   111         read(f, rec);
       
   112         rec.X:= SDLNet_Read16(@rec.X);
       
   113         rec.Y:= SDLNet_Read16(@rec.Y);
       
   114 
       
   115         // FIXME: handle single point
       
   116         if eof(f) or (rec.flags and $80 <> 0) then
       
   117             else
       
   118             DrawLineOnLand(prevRec.X, prevRec.Y, rec.X, rec.Y);
       
   119 
       
   120         prevRec:= rec;
    47         end;
   121         end;
    48 
   122 
    49     closeFile(f);
   123     closeFile(f);
    50 end;
   124 end;
    51 
   125