equal
deleted
inserted
replaced
10 end; |
10 end; |
11 |
11 |
12 procedure DrawEdge(var pa: TPixAr; value: Word); |
12 procedure DrawEdge(var pa: TPixAr; value: Word); |
13 procedure FillLand(x, y: LongInt; border, value: Word); |
13 procedure FillLand(x, y: LongInt; border, value: Word); |
14 procedure BezierizeEdge(var pa: TPixAr; Delta: hwFloat); |
14 procedure BezierizeEdge(var pa: TPixAr; Delta: hwFloat); |
15 procedure RandomizePoints(var pa: TPixAr); |
|
16 |
15 |
17 implementation |
16 implementation |
18 |
17 |
19 uses uLandGraphics, uDebug, uVariables, uLandTemplates, uRandom, uUtils; |
18 uses uLandGraphics, uDebug, uVariables, uLandTemplates; |
20 |
|
21 |
19 |
22 |
20 |
23 var Stack: record |
21 var Stack: record |
24 Count: Longword; |
22 Count: Longword; |
25 points: array[0..8192] of record |
23 points: array[0..8192] of record |
266 exit; |
264 exit; |
267 end; |
265 end; |
268 CheckSelfIntersect:= false |
266 CheckSelfIntersect:= false |
269 end; |
267 end; |
270 |
268 |
271 procedure RandomizePoints(var pa: TPixAr); |
|
272 const cEdge = 55; |
|
273 cMinDist = 8; |
|
274 var radz: array[0..Pred(cMaxEdgePoints)] of LongInt; |
|
275 i, k, dist, px, py: LongInt; |
|
276 begin |
|
277 for i:= 0 to Pred(pa.Count) do |
|
278 begin |
|
279 radz[i]:= 0; |
|
280 with pa.ar[i] do |
|
281 if x <> NTPX then |
|
282 begin |
|
283 radz[i]:= Min(Max(x - cEdge, 0), Max(LAND_WIDTH - cEdge - x, 0)); |
|
284 radz[i]:= Min(radz[i], Min(Max(y - cEdge, 0), Max(LAND_HEIGHT - cEdge - y, 0))); |
|
285 if radz[i] > 0 then |
|
286 for k:= 0 to Pred(i) do |
|
287 begin |
|
288 dist:= Max(abs(x - pa.ar[k].x), abs(y - pa.ar[k].y)); |
|
289 radz[k]:= Max(0, Min((dist - cMinDist) div 2, radz[k])); |
|
290 radz[i]:= Max(0, Min(dist - radz[k] - cMinDist, radz[i])) |
|
291 end |
|
292 end; |
|
293 end; |
|
294 |
|
295 for i:= 0 to Pred(pa.Count) do |
|
296 with pa.ar[i] do |
|
297 if ((x and LAND_WIDTH_MASK) = 0) and ((y and LAND_HEIGHT_MASK) = 0) then |
|
298 begin |
|
299 px:= x; |
|
300 py:= y; |
|
301 x:= x + LongInt(GetRandom(7) - 3) * (radz[i] * 5 div 7) div 3; |
|
302 y:= y + LongInt(GetRandom(7) - 3) * (radz[i] * 5 div 7) div 3; |
|
303 if CheckSelfIntersect(pa, i) then |
|
304 begin |
|
305 x:= px; |
|
306 y:= py |
|
307 end; |
|
308 end |
|
309 end; |
|
310 |
|
311 |
|
312 end. |
269 end. |