diff -r fc52f7c22c9b -r 6155187bf599 hedgewars/uLandOutline.pas --- a/hedgewars/uLandOutline.pas Mon Jan 16 10:22:21 2012 +0100 +++ b/hedgewars/uLandOutline.pas Tue Jan 17 09:01:31 2012 -0500 @@ -31,14 +31,15 @@ begin TryDo(Stack.Count <= 8192, 'FillLand: stack overflow', true); _y:= _y + _dir; - if (_y < 0) or (_y >= LAND_HEIGHT) then exit; + if (_y < 0) or (_y >= LAND_HEIGHT) then + exit; with Stack.points[Stack.Count] do - begin - xl:= _xl; - xr:= _xr; - y:= _y; - dir:= _dir - end; + begin + xl:= _xl; + xr:= _xr; + y:= _y; + dir:= _dir + end; inc(Stack.Count) end; @@ -66,11 +67,14 @@ while Stack.Count > 0 do begin Pop(xl, xr, y, dir); - while (xl > 0) and (Land[y, xl] <> 0) do dec(xl); - while (xr < LAND_WIDTH - 1) and (Land[y, xr] <> 0) do inc(xr); + while (xl > 0) and (Land[y, xl] <> 0) do + dec(xl); + while (xr < LAND_WIDTH - 1) and (Land[y, xr] <> 0) do + inc(xr); while (xl < xr) do begin - while (xl <= xr) and (Land[y, xl] = 0) do inc(xl); + while (xl <= xr) and (Land[y, xl] = 0) do + inc(xl); x:= xl; while (xl <= xr) and (Land[y, xl] <> 0) do begin @@ -112,8 +116,10 @@ d1:= DistanceI(p2.X - p3.X, p2.Y - p3.Y); d2:= Distance(Vx, Vy); - if d1 < d then d:= d1; - if d2 < d then d:= d2; + if d1 < d then + d:= d1; + if d2 < d then + d:= d2; d:= d * _1div3; @@ -148,11 +154,14 @@ {$HINTS ON} repeat inc(pi); - if pi > EndI then pi:= StartI; + if pi > EndI then + pi:= StartI; inc(i); - if i > EndI then i:= StartI; + if i > EndI then + i:= StartI; inc(ni); - if ni > EndI then ni:= StartI; + if ni > EndI then + ni:= StartI; PVx:= NVx; PVy:= NVy; Vector(opa.ar[pi], opa.ar[i], opa.ar[ni], NVx, NVy); @@ -167,20 +176,20 @@ cy2:= int2hwFloat(y2) + NVy; t:= _0; while t.Round = 0 do - begin - tsq:= t * t; - tcb:= tsq * t; - r1:= (_1 - t*3 + tsq*3 - tcb); - r2:= ( t*3 - tsq*6 + tcb*3); - r3:= ( tsq*3 - tcb*3); - X:= hwRound(r1 * x1 + r2 * cx1 + r3 * cx2 + tcb * x2); - Y:= hwRound(r1 * y1 + r2 * cy1 + r3 * cy2 + tcb * y2); - t:= t + Delta; - pa.ar[pa.Count].x:= X; - pa.ar[pa.Count].y:= Y; - inc(pa.Count); - TryDo(pa.Count <= cMaxEdgePoints, 'Edge points overflow', true) - end; + begin + tsq:= t * t; + tcb:= tsq * t; + r1:= (_1 - t*3 + tsq*3 - tcb); + r2:= ( t*3 - tsq*6 + tcb*3); + r3:= ( tsq*3 - tcb*3); + X:= hwRound(r1 * x1 + r2 * cx1 + r3 * cx2 + tcb * x2); + Y:= hwRound(r1 * y1 + r2 * cy1 + r3 * cy2 + tcb * y2); + t:= t + Delta; + pa.ar[pa.Count].x:= X; + pa.ar[pa.Count].y:= Y; + inc(pa.Count); + TryDo(pa.Count <= cMaxEdgePoints, 'Edge points overflow', true) + end; until i = StartI; pa.ar[pa.Count].x:= opa.ar[StartI].X; pa.ar[pa.Count].y:= opa.ar[StartI].Y; @@ -197,14 +206,14 @@ StartLoop:= 0; while i < LongInt(opa.Count) do if (opa.ar[i + 1].X = NTPX) then - begin - AddLoopPoints(pa, opa, StartLoop, i, Delta); - inc(i, 2); - StartLoop:= i; - pa.ar[pa.Count].X:= NTPX; - pa.ar[pa.Count].Y:= 0; - inc(pa.Count); - end else inc(i) + begin + AddLoopPoints(pa, opa, StartLoop, i, Delta); + inc(i, 2); + StartLoop:= i; + pa.ar[pa.Count].X:= NTPX; + pa.ar[pa.Count].Y:= 0; + inc(pa.Count); + end else inc(i) end; @@ -213,18 +222,23 @@ begin dm:= (V4.y - V3.y) * (V2.x - V1.x) - (V4.x - V3.x) * (V2.y - V1.y); c1:= (V4.x - V3.x) * (V1.y - V3.y) - (V4.y - V3.y) * (V1.x - V3.x); - if dm = 0 then exit(false); + if dm = 0 then + exit(false); c2:= (V2.x - V3.x) * (V1.y - V3.y) - (V2.y - V3.y) * (V1.x - V3.x); if dm > 0 then begin - if (c1 < 0) or (c1 > dm) then exit(false); - if (c2 < 0) or (c2 > dm) then exit(false) + if (c1 < 0) or (c1 > dm) then + exit(false); + if (c2 < 0) or (c2 > dm) then + exit(false) end else begin - if (c1 > 0) or (c1 < dm) then exit(false); - if (c2 > 0) or (c2 < dm) then exit(false) + if (c1 > 0) or (c1 < dm) then + exit(false); + if (c2 > 0) or (c2 < dm) then + exit(false) end; //AddFileLog('1 (' + inttostr(V1.x) + ',' + inttostr(V1.y) + ')x(' + inttostr(V2.x) + ',' + inttostr(V2.y) + ')'); @@ -236,14 +250,17 @@ function CheckSelfIntersect(var pa: TPixAr; ind: Longword): boolean; var i: Longword; begin - if (ind <= 0) or (ind >= Pred(pa.Count)) then exit(false); + if (ind <= 0) or (ind >= Pred(pa.Count)) then + exit(false); for i:= 1 to pa.Count - 3 do if (i <= ind - 1) or (i >= ind + 2) then begin if (i <> ind - 1) and - CheckIntersect(pa.ar[ind], pa.ar[ind - 1], pa.ar[i], pa.ar[i - 1]) then exit(true); + CheckIntersect(pa.ar[ind], pa.ar[ind - 1], pa.ar[i], pa.ar[i - 1]) then + exit(true); if (i <> ind + 2) and - CheckIntersect(pa.ar[ind], pa.ar[ind + 1], pa.ar[i], pa.ar[i - 1]) then exit(true); + CheckIntersect(pa.ar[ind], pa.ar[ind + 1], pa.ar[i], pa.ar[i - 1]) then + exit(true); end; CheckSelfIntersect:= false end; @@ -289,4 +306,4 @@ end; -end. \ No newline at end of file +end.