diff -r 31570b766315 -r ed5a6478e710 hedgewars/uLandPainted.pas --- a/hedgewars/uLandPainted.pas Tue Nov 10 18:16:35 2015 +0100 +++ b/hedgewars/uLandPainted.pas Tue Nov 10 20:43:13 2015 +0100 @@ -1,6 +1,6 @@ (* * Hedgewars, a free turn based strategy game - * Copyright (c) 2004-2013 Andrey Korotaev + * Copyright (c) 2004-2015 Andrey Korotaev * * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by @@ -13,7 +13,7 @@ * * You should have received a copy of the GNU General Public License * along with this program; if not, write to the Free Software - * Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA + * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA *) {$INCLUDE "options.inc"} @@ -27,12 +27,13 @@ procedure freeModule; implementation -uses uLandGraphics, uConsts, uVariables, uUtils, SDLh, uCommands, uDebug, uScript; +uses uLandGraphics, uConsts, uVariables, uUtils, SDLh, uCommands, uScript, uIO; type PointRec = packed record X, Y: SmallInt; flags: byte; end; + PPointRec = ^PointRec; type PPointEntry = ^PointEntry; @@ -45,7 +46,7 @@ procedure chDraw(var s: shortstring); var rec: PointRec; - prec: ^PointRec; + prec: PPointRec; pe: PPointEntry; i, l: byte; begin @@ -53,7 +54,7 @@ l:= length(s); while i < l do begin - prec:= @s[i]; + prec:= PPointRec(@s[i]); rec:= prec^; rec.X:= SDLNet_Read16(@rec.X); rec.Y:= SDLNet_Read16(@rec.Y); @@ -81,11 +82,13 @@ prevPoint: PointRec; radius: LongInt; color: Longword; + lineNumber, linePoints: Longword; begin // shutup compiler prevPoint.X:= 0; prevPoint.Y:= 0; radius:= 0; + linePoints:= 0; pe:= pointsListHead; while (pe <> nil) and (pe^.point.flags and $80 = 0) do @@ -94,23 +97,27 @@ pe:= pe^.next; end; + lineNumber:= 0; + while(pe <> nil) do begin if (pe^.point.flags and $80 <> 0) then begin + if (lineNumber > 0) and (linePoints = 0) and cAdvancedMapGenMode then + SendIPC('|' + inttostr(lineNumber - 1)); + + inc(lineNumber); + if (pe^.point.flags and $40 <> 0) then color:= 0 else color:= lfBasic; radius:= (pe^.point.flags and $3F) * 5 + 3; - AddFileLog('[DRAW] Move to: ('+inttostr(pe^.point.X)+','+inttostr(pe^.point.Y)+'), radius = '+inttostr(radius)); - FillRoundInLand(pe^.point.X, pe^.point.Y, radius, color) + linePoints:= FillRoundInLand(pe^.point.X, pe^.point.Y, radius, color); end else begin - AddFileLog('[DRAW] Line to: ('+inttostr(pe^.point.X)+','+inttostr(pe^.point.Y)+'), radius = '+inttostr(radius)); - DrawThickLine(prevPoint.X, prevPoint.Y, pe^.point.X, pe^.point.Y, radius, color); - FillRoundInLand(pe^.point.X, pe^.point.Y, radius, color) + inc(linePoints, DrawThickLine(prevPoint.X, prevPoint.Y, pe^.point.X, pe^.point.Y, radius, color)); end; prevPoint:= pe^.point;