diff -r c0d788307314 -r 52cb4d6f84b7 hedgewars/uLand.pas --- a/hedgewars/uLand.pas Wed Jan 24 21:58:43 2007 +0000 +++ b/hedgewars/uLand.pas Wed Jan 24 22:05:05 2007 +0000 @@ -101,7 +101,7 @@ dec(eY, d); inc(y, sY); end; - + if ((x and $FFFFF800) = 0) and ((y and $FFFFFC00) = 0) then Land[y, x]:= Color; end @@ -175,6 +175,77 @@ end; end; +procedure BezierizeEdge(var pa: TPixAr; Delta: hwFloat); +var x, y, i: integer; + tx, ty, vx, vy, vlen, t: hwFloat; + r1, r2, r3, r4: hwFloat; + x1, y1, x2, y2, cx1, cy1, cx2, cy2, tsq, tcb: hwFloat; + opa: TPixAr; +begin +opa:= pa; +pa.Count:= 0; +vx:= 0; +vy:= 0; +with opa do +for i:= 0 to Count-2 do + begin + vlen:= Distance(ar[i + 1].x - ar[i].X, ar[i + 1].y - ar[i].y); + t:= Distance(ar[i + 1].x - ar[i + 2].X,ar[i + 1].y - ar[i + 2].y); + if t 0 then + for k:= 0 to Pred(i) do + begin + dist:= Min(Max(abs(x - pa.ar[k].x), abs(y - pa.ar[k].y)), 50); + if radz[k] >= dist then + begin + radz[k]:= Max(0, dist - cMinDist * 2); + radz[i]:= Min(dist - radz[k], radz[i]) + end; + radz[i]:= Min(radz[i], dist) + end + end; + +for i:= 0 to Pred(pa.Count) do + with pa.ar[i] do + if ((x and $FFFFF800) = 0) and ((y and $FFFFFC00) = 0) then + begin + x:= x + integer(GetRandom(radz[i] * 2 + 1)) - radz[i]; + y:= y + integer(GetRandom(radz[i] * 2 + 1)) - radz[i] + end end; + procedure GenBlank(var Template: TEdgeTemplate); var pa: TPixAr; i: Longword; @@ -398,7 +504,9 @@ Land[y, x]:= COLOR_LAND; SetPoints(Template, pa); -NormalizePoints(pa); +BezierizeEdge(pa, _1div3); +for i:= 0 to Pred(Template.RandPassesCount) do RandomizePoints(pa); +//NormalizePoints(pa); DrawBezierEdge(pa, 0);