diff -r ffb766e85150 -r 7351e6f1ee28 hedgewars/uLandPainted.pas --- a/hedgewars/uLandPainted.pas Sat Dec 04 22:33:14 2010 +0300 +++ b/hedgewars/uLandPainted.pas Sat Dec 04 23:29:59 2010 +0300 @@ -25,18 +25,83 @@ procedure LoadFromFile(fileName: shortstring); implementation +uses uLandGraphics, uConsts, uUtils, SDLh; type PointRec = packed record - x, y: ShortInt; + X, Y: SmallInt; flags: byte; end; +procedure DrawLineOnLand(X1, Y1, X2, Y2: LongInt); +var eX, eY, dX, dY: LongInt; + i, sX, sY, x, y, d: LongInt; + b: boolean; + len: LongWord; +begin + len:= 0; + if (X1 = X2) and (Y1 = Y2) then + begin + exit + end; + eX:= 0; + eY:= 0; + dX:= X2 - X1; + dY:= Y2 - Y1; + + if (dX > 0) then sX:= 1 + else + if (dX < 0) then + begin + sX:= -1; + dX:= -dX + end else sX:= dX; + + if (dY > 0) then sY:= 1 + else + if (dY < 0) then + begin + sY:= -1; + dY:= -dY + end else sY:= dY; + + if (dX > dY) then d:= dX + else d:= dY; + + x:= X1; + y:= Y1; + + for i:= 0 to d do + begin + inc(eX, dX); + inc(eY, dY); + b:= false; + if (eX > d) then + begin + dec(eX, d); + inc(x, sX); + b:= true + end; + if (eY > d) then + begin + dec(eY, d); + inc(y, sY); + b:= true + end; + if b then + begin + inc(len); + if (len mod 4) = 0 then FillRoundInLand(X, Y, 34, lfBasic) + end + end +end; + + procedure LoadFromFile(fileName: shortstring); var f: file of PointRec; - rec: PointRec; + rec, prevRec: PointRec; begin - fileMode = foReadOnly; + fileMode:= 0; assignFile(f, fileName); reset(f); @@ -44,6 +109,15 @@ while not eof(f) do begin read(f, rec); + rec.X:= SDLNet_Read16(@rec.X); + rec.Y:= SDLNet_Read16(@rec.Y); + + // FIXME: handle single point + if eof(f) or (rec.flags and $80 <> 0) then + else + DrawLineOnLand(prevRec.X, prevRec.Y, rec.X, rec.Y); + + prevRec:= rec; end; closeFile(f);