Book a Demo!
CoCalc Logo Icon
StoreFeaturesDocsShareSupportNewsAboutPoliciesSign UpSign In
AroriaNetwork
GitHub Repository: AroriaNetwork/3kho-backup
Path: blob/main/projects/minecraft-classic/assets/js/RandomLevelWorker.js
1835 views
1
// World generation as a worker.
2
function Distort (source, distort) {
3
4
this.source = source;
5
this.distort = distort;
6
7
this.getValue = function(x, y) {
8
return this.source.getValue(x + this.distort.getValue(x, y), y);
9
}
10
11
}
12
13
function ImprovedNoise (random) {
14
15
var fadeCurve = function(d0) {
16
return d0 * d0 * d0 * (d0 * (d0 * 6.0 - 15.0) + 10.0);
17
}
18
19
var lerp = function(d0, d1, d2) {
20
return d1 + d0 * (d2 - d1);
21
}
22
23
var grad = function(i, d0, d1, d2) {
24
var d3 = (i &= 15) < 8 ? d0 : d1;
25
var d4 = i < 4 ? d1 : (i != 12 && i != 14 ? d2 : d0);
26
27
return ((i & 1) == 0 ? d3 : -d3) + ((i & 2) == 0 ? d4 : -d4);
28
}
29
30
31
this.p = [];
32
33
for (var i = 0; i < 256; i++) {
34
this.p[i] = i;
35
}
36
37
for (var i = 0; i < 256; i++) {
38
//var j = random.nextInt(256 - i) + i;
39
//var j = Math.round( Math.random() * 256-i ) + i;
40
var j = Math.round( random * (256-i) ) + i;
41
42
var tmp = this.p[i];
43
this.p[i] = this.p[j];
44
this.p[j] = tmp;
45
46
this.p[i + 256] = this.p[i];
47
}
48
49
50
this.getValue = function(d0, d1) {
51
var d2 = 0.0;
52
var d3 = d1;
53
var d4 = d0;
54
var i = Math.floor(d0) & 255;
55
var j = Math.floor(d1) & 255;
56
var k = Math.floor(0.0) & 255;
57
58
d4 -= Math.floor(d4);
59
d3 -= Math.floor(d3);
60
d2 = 0.0 - Math.floor(0.0);
61
var d5 = fadeCurve(d4);
62
var d6 = fadeCurve(d3);
63
var d7 = fadeCurve(d2);
64
var l = this.p[i] + j;
65
var i1 = this.p[l] + k;
66
67
l = this.p[l + 1] + k;
68
i = this.p[i + 1] + j;
69
j = this.p[i] + k;
70
i = this.p[i + 1] + k;
71
return lerp(d7, lerp(d6, lerp(d5, grad(this.p[i1], d4, d3, d2), grad(this.p[j], d4 - 1.0, d3, d2)), lerp(d5, grad(this.p[l], d4, d3 - 1.0, d2), grad(this.p[i], d4 - 1.0, d3 - 1.0, d2))), lerp(d6, lerp(d5, grad(this.p[i1 + 1], d4, d3, d2 - 1.0), grad(this.p[j + 1], d4 - 1.0, d3, d2 - 1.0)), lerp(d5, grad(this.p[l + 1], d4, d3 - 1.0, d2 - 1.0), grad(this.p[i + 1], d4 - 1.0, d3 - 1.0, d2 - 1.0))));
72
}
73
74
}
75
76
function PerlinNoise (random, levels) {
77
78
//var ImprovedNoise = require("./ImprovedNoise.js");
79
80
var noiseLevels = [];
81
var levels = 8;
82
83
for (var i = 0; i < 8; ++i) {
84
noiseLevels[i] = new ImprovedNoise(random);
85
}
86
87
this.getValue = function(x, y) {
88
var value = 0;
89
var pow = 1;
90
91
for (var i = 0; i < levels; i++) {
92
value += noiseLevels[i].getValue(x * pow, y * pow) / pow;
93
pow /= 2;
94
}
95
96
return value;
97
}
98
99
}
100
101
/**
102
* Creates a pseudo-random value generator. The seed must be an integer.
103
*
104
* Uses an optimized version of the Park-Miller PRNG.
105
* http://www.firstpr.com.au/dsp/rand31/
106
*/
107
function Random(seed) {
108
this._seed = seed % 2147483647;
109
if (this._seed <= 0) this._seed += 2147483646;
110
}
111
112
/**
113
* Returns a pseudo-random value between 1 and 2^32 - 2.
114
*/
115
Random.prototype.next = function () {
116
return this._seed = this._seed * 16807 % 2147483647;
117
};
118
119
Random.prototype.nextInt = function (max) {
120
return Math.floor( this.nextFloat()*max );
121
};
122
123
/**
124
* Returns a pseudo-random floating point number in range [0, 1).
125
*/
126
Random.prototype.nextFloat = function (opt_minOrMax, opt_max) {
127
// We know that result of next() will be 1 to 2147483646 (inclusive).
128
return (this.next() - 1) / 2147483646;
129
};
130
131
132
var RandomLevel = function () {
133
134
var progress = {
135
string: "",
136
percent: 0,
137
tiles: null
138
}
139
140
this.createLevel = function(seed, xSize, zSize, ySize) {
141
142
//this.progressRenderer.progressStart("Generating level");
143
//return;
144
var random = new Random(seed);
145
146
147
this.xSize = xSize;
148
this.zSize = zSize;
149
this.ySize = 64;
150
this.random = random.nextFloat();
151
this.tiles = [];//new Array(xSize*zSize*ySize);//[];
152
this.fillQueue = [];
153
154
//console.log(this.random);
155
156
// grow
157
this.grow = function(aint) {
158
var i = this.xSize;
159
var j = this.zSize;
160
var k = this.ySize;
161
var perlinnoise = new PerlinNoise(this.random, 8);
162
var perlinnoise1 = new PerlinNoise(this.random, 8);
163
164
for (var l = 0; l < i; ++l) {
165
//this.progress(l * 100 / (this.xSize - 1));
166
progress.percent = l * 100 / (this.xSize - 1);
167
self.postMessage(progress);
168
169
for (var i1 = 0; i1 < j; ++i1) {
170
var flag = perlinnoise.getValue( l, i1) > 8.0;
171
var flag1 = perlinnoise1.getValue( l, i1) > 12.0;
172
var j1;
173
var k1 = parseInt( ((j1 = parseInt(aint[l + i1 * i],10)) * this.zSize + i1) * this.xSize + l, 10);
174
var l1;
175
// 7 waterid
176
//if (((l1 = this.tiles[((j1 + 1) * this.zSize + i1) * this.xSize + l] & 255) == 7) && j1 <= k / 2 - 1 && flag1) {
177
if (((l1 = parseInt(this.tiles[((j1 + 1) * this.zSize + i1) * this.xSize + l],10) & 255) == 7) && j1 <= k / 2 - 1 && flag1) {
178
179
this.tiles[k1] = 12;//(byte) Tile.gravel.id;
180
}
181
182
if (l1 == 0) {
183
var i2 = 1;//Tile.grass.id;
184
185
if (j1 <= k / 2 - 1 && flag) {
186
i2 = 11;//Tile.sand.id;
187
}
188
189
this.tiles[k1] = i2;
190
}
191
}
192
}
193
194
}
195
196
// melt
197
this.melt = function() {
198
var i = 0;
199
var j = this.xSize * this.zSize * this.ySize / 10000;
200
201
for (var k = 0; k < j; ++k) {
202
if (k % 100 == 0) {
203
// this.progress(k * 100 / (j - 1));
204
progress.percent = k * 100 / (j - 1);
205
self.postMessage(progress);
206
}
207
208
var extray = 16;
209
210
var l = random.nextInt(this.xSize);
211
var i1 = random.nextInt(this.ySize / 2 - 4) + extray;
212
var j1 = random.nextInt(this.zSize);
213
214
if (this.tiles[(i1 * this.zSize + j1) * this.xSize + l] == 0) {
215
++i;
216
//this.floodFill(l, i1, j1, 0, Tile.calmLava.id);
217
this.floodFill(l, i1, j1, 0, 17);
218
219
}
220
}
221
222
//this.progress(100);
223
//System.out.println("LavaCount: " + i);
224
//console.log("LavaCount: " + i);
225
}
226
227
// plant
228
this.plant = function(aint) {
229
var i = this.xSize;
230
var j = this.xSize * this.zSize / 4000;
231
232
for (var k = 0; k < j; ++k) {
233
//this.progress(k * 100 / (j - 1));
234
progress.percent = k * 100 / (j - 1);
235
self.postMessage(progress);
236
237
var l = random.nextInt(this.xSize);
238
var i1 = random.nextInt(this.zSize);
239
240
for (var j1 = 0; j1 < 20; ++j1) {
241
var k1 = l;
242
var l1 = i1;
243
244
for (var i2 = 0; i2 < 20; ++i2) {
245
k1 += random.nextInt(6) - random.nextInt(6);
246
l1 += random.nextInt(6) - random.nextInt(6);
247
if (k1 >= 0 && l1 >= 0 && k1 < this.xSize && l1 < this.zSize) {
248
var j2 = aint[k1 + l1 * i] + 1;
249
var k2 = random.nextInt(3) + 4;
250
var flag = true;
251
252
var l2;
253
var i3;
254
var j3;
255
256
for (l2 = j2; l2 <= j2 + 1 + k2; ++l2) {
257
var b0 = 1;
258
259
if (l2 >= j2 + 1 + k2 - 2) {
260
b0 = 2;
261
}
262
263
for (i3 = k1 - b0; i3 <= k1 + b0 && flag; ++i3) {
264
for (j3 = l1 - b0; j3 <= l1 + b0 && flag; ++j3) {
265
if (i3 >= 0 && l2 >= 0 && j3 >= 0 && i3 < this.xSize && l2 < this.ySize && j3 < this.zSize) {
266
if ((this.tiles[(l2 * this.zSize + j3) * this.xSize + i3] & 255) != 0) {
267
flag = false;
268
}
269
} else {
270
flag = false;
271
}
272
}
273
}
274
}
275
276
if (flag) {
277
l2 = (j2 * this.zSize + l1) * this.xSize + k1;
278
if ((this.tiles[((j2 - 1) * this.zSize + l1) * this.xSize + k1] & 255) == 1 && j2 < this.ySize - k2 - 1) {
279
this.tiles[l2 - 1 * this.xSize * this.zSize] = 3;//(byte) Tile.dirt.id;
280
281
for (i3 = j2 - 3 + k2; i3 <= j2 + k2; ++i3) {
282
j3 = i3 - (j2 + k2);
283
var k3 = parseInt(1 - j3 / 2, 10);
284
285
for (var l3 = k1 - k3; l3 <= k1 + k3; ++l3) {
286
var i4 = parseInt(l3 - k1, 10);
287
288
for (var j4 = l1 - k3; j4 <= l1 + k3; ++j4) {
289
var k4 = parseInt(j4 - l1, 10);
290
291
if (Math.abs(i4) != k3 || Math.abs(k4) != k3 || random.nextInt(2) != 0 && j3 != 0) {
292
this.tiles[(i3 * this.zSize + j4) * this.xSize + l3] = 14;//(byte) Tile.leaves.id;
293
}
294
}
295
}
296
}
297
298
for (i3 = 0; i3 < k2; ++i3) {
299
this.tiles[l2 + i3 * this.xSize * this.zSize] = 13;//(byte) Tile.treeTrunk.id;
300
}
301
}
302
}
303
}
304
}
305
}
306
}
307
308
}
309
310
// place ore
311
this.placeOre = function(tile, j, k, l) {
312
l = this.xSize;
313
var i1 = this.zSize;
314
var j1 = this.ySize;
315
var k1 = l * i1 * j1 / 256 / 64 * j / 100;
316
317
for (var l1 = 0; l1 < k1; ++l1) {
318
//this.progress(l1 * 100 / (k1 - 1) / 4 + k * 100 / 4);
319
progress.percent = l1 * 100 / (k1 - 1) / 4 + k * 100 / 4;
320
self.postMessage(progress);
321
322
var f = random.nextFloat() * l;
323
var f1 = random.nextFloat() * j1;
324
var f2 = random.nextFloat() * i1;
325
var i2 = parseInt( ((random.nextFloat() + random.nextFloat()) * 75.0 * j / 100.0) , 10);
326
var f3 = (random.nextFloat() * 3.141592653589793 * 2.0);
327
var f4 = 0.0;
328
var f5 = (random.nextFloat() * 3.141592653589793 * 2.0);
329
var f6 = 0.0;
330
331
for (var j2 = 0; j2 < i2; ++j2) {
332
f = ( f + Math.sin(f3) * Math.cos(f5));
333
f2 = ( f2 + Math.cos(f3) * Math.cos(f5));
334
f1 = ( f1 + Math.sin(f5));
335
f3 += f4 * 0.2;
336
f4 = (f4 *= 0.9) + (random.nextFloat() - random.nextFloat());
337
f5 = (f5 + f6 * 0.5) * 0.5;
338
f6 = (f6 *= 0.9) + (random.nextFloat() - random.nextFloat());
339
var f7 = (Math.sin(j2 * 3.141592653589793 / i2) * j / 100.0 + 1.0);
340
341
for (var k2 = Math.round(f - f7); k2 <= Math.round(f + f7); ++k2) {
342
for (var l2 = Math.round(f1 - f7); l2 <= Math.round(f1 + f7); ++l2) {
343
for (var i3 = Math.round(f2 - f7); i3 <= Math.round(f2 + f7); ++i3) {
344
var f8 = k2 - f;
345
var f9 = l2 - f1;
346
var f10 = i3 - f2;
347
348
if (f8 * f8 + f9 * f9 * 2.0 + f10 * f10 < f7 * f7 && k2 >= 1 && l2 >= 1 && i3 >= 1 && k2 < this.xSize - 1 && l2 < this.ySize - 1 && i3 < this.zSize - 1) {
349
var j3 = parseInt( (l2 * this.zSize + i3) * this.xSize + k2 , 10);
350
351
//if (this.tiles[j3] == Tile.rock.id) {
352
if (this.tiles[j3] == 2) {
353
this.tiles[j3] = tile;
354
}
355
}
356
}
357
}
358
}
359
}
360
}
361
}
362
363
// floodfill
364
this.floodFill = function (xc, yc, zc, unused, tile) {
365
//ArrayList<int[]> fillBuffer = new ArrayList<>();
366
//console.log(yc)
367
//yc+=31
368
369
//var fillBuffer = [];
370
371
var wBits = 1;
372
var hBits = 1;
373
374
while (1 << wBits < xSize)
375
wBits++;
376
while (1 << hBits < ySize)
377
hBits++;
378
379
var zMask = this.zSize - 1;
380
var xMask = this.xSize - 1;
381
var count = 1;
382
383
this.fillQueue[0] = ((yc << hBits) + zc << wBits) + xc;
384
385
//console.log(this.fillQueue[0]);
386
var k2 = 0;
387
388
389
var offset = this.xSize * this.zSize;
390
391
while (count > 0) {
392
--count;
393
var val = this.fillQueue[count];
394
//if (count == 0 && fillBuffer.size() > 0) {
395
/*if (count == 0 && fillBuffer.length > 0) {
396
//System.out.println("IT HAPPENED!");
397
console.log("IT HAPPENED!");
398
//this.fillQueue = fillBuffer.remove(fillBuffer.size() - 1);
399
this.fillQueue = fillBuffer.slice(fillBuffer.length-1);
400
401
count = this.fillQueue.length;
402
}*/
403
404
var z = val >> wBits & zMask;
405
var l2 = val >> wBits + hBits;
406
407
var i3 = 0;
408
var j3 = 0;
409
410
for (j3 = i3 = val & xMask; i3 > 0 && this.tiles[val - 1] == 0; --val) {
411
--i3;
412
}
413
414
while (j3 < this.xSize && this.tiles[val + j3 - i3] == 0) {
415
++j3;
416
}
417
418
var k3 = val >> wBits & zMask;
419
var l3 = val >> wBits + hBits;
420
421
if (k3 != z || l3 != l2) {
422
//System.out.println("hoooly fuck");
423
console.log("hoooly fuck")
424
}
425
426
var flag = false;
427
var flag1 = false;
428
var flag2 = false;
429
430
k2 += (j3 - i3);
431
432
//console.log(k2)
433
434
for (i3 = i3; i3 < j3; ++i3) {
435
//console.log(val)
436
this.tiles[val] = tile;
437
var flag3;
438
439
if (z > 0) {
440
if ((flag3 = this.tiles[val - this.xSize] == 0) && !flag) {
441
//if (count == this.fillQueue.length) {
442
//fillBuffer.add(this.fillQueue);
443
//console.log("111");
444
//fillBuffer.concat(this.fillQueue);
445
//this.fillQueue = [];
446
//count = 0;
447
//}
448
449
this.fillQueue[count++] = val - this.xSize;
450
}
451
452
flag = flag3;
453
}
454
455
if (z < this.zSize - 1) {
456
if ((flag3 = this.tiles[val + this.xSize] == 0) && !flag1) {
457
//if (count == this.fillQueue.length) {
458
//fillBuffer.add(this.fillQueue);
459
//console.log("222");
460
//fillBuffer.concat(this.fillQueue);
461
//this.fillQueue = [];
462
//count = 0;
463
//}
464
465
this.fillQueue[count++] = val + this.xSize;
466
}
467
468
flag1 = flag3;
469
}
470
471
if (l2 > 0) {
472
var b2 = this.tiles[val - offset];
473
474
//if (( tile == Tile.lava.id || tile == Tile.calmLava.id) && (b2 == Tile.water.id || b2 == Tile.calmWater.id)) {
475
if (( tile == 17) && (b2 == 7)) {
476
this.tiles[val - offset] = 2;//Tile.rock.id;
477
}
478
479
if ((flag3 = b2 == 0) && !flag2) {
480
//if (count == this.fillQueue.length) {
481
//fillBuffer.add(this.fillQueue);
482
//console.log("333");
483
//fillBuffer.concat(this.fillQueue);
484
// this.fillQueue = [];
485
//count = 0;
486
//}
487
488
this.fillQueue[count++] = val - offset;
489
}
490
491
flag2 = flag3;
492
}
493
494
++val;
495
}
496
}
497
498
return k2;
499
}
500
501
502
503
504
505
506
progress.string = "Raising..";
507
//this.progressRenderer.progressStage("Raising..");
508
var distort = new Distort(new PerlinNoise(this.random, 8), new PerlinNoise(this.random, 8));
509
var distort1 = new Distort(new PerlinNoise(this.random, 8), new PerlinNoise(this.random, 8));
510
var perlinnoise = new PerlinNoise(this.random, 8);
511
var aint = [];
512
var f = 1.3;
513
514
var l;
515
var i1;
516
517
for (l = 0; l < xSize; ++l) {
518
//progress(l * 100 / (xSize - 1));
519
progress.percent = l * 100 / (xSize - 1);
520
self.postMessage(progress);
521
522
for (i1 = 0; i1 < zSize; ++i1) {
523
var d0 = distort.getValue( ( l * f), ( i1 * f)) / 8.0 - 8.0;
524
var d1 = distort1.getValue( ( l * f), ( i1 * f)) / 6.0 + 6.0;
525
526
if (perlinnoise.getValue( l, i1) / 8.0 > 0.0) {
527
d1 = d0;
528
}
529
530
var d2;
531
532
if ((d2 = Math.max(d0, d1) / 2.0) < 0.0) {
533
d2 *= 0.8;
534
}
535
536
aint[l + i1 * xSize] = d2;
537
}
538
}
539
540
541
progress.string = "Eroding..";
542
//this.progressRenderer.progressStage("Eroding..");
543
var aint1 = aint;
544
545
distort1 = new Distort(new PerlinNoise(this.random, 8), new PerlinNoise(this.random, 8));
546
var distort2 = new Distort(new PerlinNoise(this.random, 8), new PerlinNoise(this.random, 8));
547
548
var j1;
549
var k1;
550
var l1;
551
var i2;
552
553
for (j1 = 0; j1 < xSize; ++j1) {
554
//progress(j1 * 100 / (xSize - 1));
555
progress.percent = j1 * 100 / (xSize - 1);
556
self.postMessage(progress);
557
558
for (k1 = 0; k1 < zSize; ++k1) {
559
var d3 = distort1.getValue( (j1 << 1), (k1 << 1)) / 8.0;
560
561
l1 = distort2.getValue( (j1 << 1), (k1 << 1)) > 0.0 ? 1 : 0;
562
if (d3 > 2.0) {
563
i2 = ((aint1[j1 + k1 * xSize] - l1) / 2 << 1) + l1;
564
aint1[j1 + k1 * xSize] = i2;
565
}
566
}
567
}
568
569
570
progress.string = "Soiling..";
571
//this.progressRenderer.progressStage("Soiling..");
572
aint1 = aint;
573
var j2 = this.xSize;
574
var k2 = this.zSize;
575
576
j1 = this.ySize;
577
var perlinnoise1 = new PerlinNoise(this.random, 8);
578
579
var l2;
580
var i3;
581
582
for (l = 0; l < j2; ++l) {
583
//progress(l * 100 / (xSize - 1));
584
progress.percent = l * 100 / (xSize - 1);
585
self.postMessage(progress);
586
587
for (i1 = 0; i1 < k2; ++i1) {
588
l1 = (perlinnoise1.getValue( l, i1) / 24.0) - 4;
589
l2 = (i2 = aint1[l + i1 * j2] + j1 / 2) + l1;
590
aint1[l + i1 * j2] = Math.max(i2, l2);
591
592
for (i3 = 0; i3 < j1; ++i3) {
593
var j3 = (i3 * zSize + i1) * xSize + l;
594
var k3 = 0;
595
596
if (i3 <= i2) {
597
k3 = 3;//Tile.dirt.id;
598
}
599
600
if (i3 <= l2) {
601
k3 = 2;//Tile.rock.id;
602
}
603
604
this.tiles[j3] = k3;
605
}
606
}
607
}
608
609
610
progress.string = "Carving..";
611
//this.progressRenderer.progressStage("Carving..");
612
613
k2 = this.xSize;
614
j1 = this.zSize;
615
k1 = this.ySize;
616
l = k2 * j1 * k1 / 256 / 64;
617
618
for (i1 = 0; i1 < l; ++i1) {
619
//progress(i1 * 100 / (l - 1) / 4);
620
progress.percent = i1 * 100 / (l - 1) / 4;
621
self.postMessage(progress);
622
623
var f1 = random.nextFloat() * k2;
624
var f2 = random.nextFloat() * k1;
625
var f3 = random.nextFloat() * j1;
626
627
i3 = ((random.nextFloat() + random.nextFloat()) * 75.0);
628
var f4 = ( random.nextFloat() * 3.141592653589793 * 2.0);
629
var f5 = 0.0;
630
var f6 = ( random.nextFloat() * 3.141592653589793 * 2.0);
631
var f7 = 0.0;
632
633
for (var l3 = 0; l3 < i3; ++l3) {
634
f1 = ( f1 + Math.sin(f4) * Math.cos(f6));
635
f3 = ( f3 + Math.cos(f4) * Math.cos(f6));
636
f2 = ( f2 + Math.sin(f6));
637
f4 += f5 * 0.2;
638
f5 = (f5 *= 0.9) + (random.nextFloat() - random.nextFloat());
639
f6 = (f6 + f7 * 0.5) * 0.5;
640
f7 = (f7 *= 0.9) + (random.nextFloat() - random.nextFloat());
641
if (random.nextFloat() >= 0.3) {
642
var f8 = f1 + random.nextFloat() * 4.0 - 2.0;
643
var f9 = f2 + random.nextFloat() * 4.0 - 2.0;
644
var f10 = f3 + random.nextFloat() * 4.0 - 2.0;
645
var f11 = (Math.sin( l3 * 3.141592653589793 / i3) * 2.5 + 1.0);
646
647
for (var i4 = parseInt( (f8 - f11), 10); i4 <= parseInt( (f8 + f11), 10); ++i4) {
648
for (var j4 = parseInt( (f9 - f11), 10); j4 <= parseInt( (f9 + f11), 10); ++j4) {
649
for (var k4 = (f10 - f11); k4 <= (f10 + f11); ++k4) {
650
var f12 = i4 - f8;
651
var f13 = j4 - f9;
652
var f14 = k4 - f10;
653
654
if (f12 * f12 + f13 * f13 * 2.0 + f14 * f14 < f11 * f11 && i4 >= 1 && j4 >= 1 && k4 >= 1 && i4 < xSize - 1 && j4 < ySize - 1 && k4 < zSize - 1) {
655
var l4 = parseInt( (j4 * zSize + k4) * xSize + i4 , 10);
656
657
//if (tiles[l4] == Tile.rock.id) {
658
if (this.tiles[l4] == 2) {
659
this.tiles[l4] = 0;
660
}
661
}
662
}
663
}
664
}
665
}
666
}
667
}
668
669
this.placeOre(20, 90, 1, 4); // coal
670
this.placeOre(19, 70, 2, 4); // iron
671
this.placeOre(18, 50, 3, 4); // gold
672
673
progress.string = "Watering..";
674
//this.progressRenderer.progressStage("Watering..");
675
//long i5 = System.nanoTime();
676
var i5 = random.nextFloat();//Math.random();
677
var j5 = 0;
678
679
l = 7;//Tile.calmWater.id;
680
//this.progress(0);
681
682
// hack for floodfill to work...
683
var extray = 64-35;
684
if(xSize >= 256) extray = 128-36;
685
if(xSize >= 512) extray = 256-37;
686
687
//console.log(ySize / 2 - 1)
688
689
for (i1 = 0; i1 < xSize; ++i1) {
690
j5 = j5 + this.floodFill(i1, ySize / 2 - 1 + extray, 0, 0, l) + this.floodFill(i1, ySize / 2 - 1, zSize - 1 + extray, 0, l);
691
}
692
693
for (i1 = 0; i1 < zSize; ++i1) {
694
j5 = j5 + this.floodFill(0, ySize / 2 - 1 + extray, i1, 0, l) + this.floodFill(xSize - 1, ySize / 2 - 1 + extray, i1, 0, l);
695
}
696
697
698
i1 = xSize * zSize / 200;
699
700
for (l1 = 0; l1 < i1; ++l1) {
701
if (l1 % 100 == 0) {
702
// progress(l1 * 100 / (i1 - 1));
703
progress.percent = l1 * 100 / (i1 - 1);
704
self.postMessage(progress);
705
}
706
707
i2 = random.nextInt(xSize);
708
l2 = ySize / 2 - 1 - random.nextInt(3) + extray;
709
i3 = random.nextInt(zSize);
710
if (this.tiles[(l2 * zSize + i3) * xSize + i2] == 0) {
711
j5 += this.floodFill(i2, l2, i3, 0, l);
712
}
713
}
714
715
progress.percent = 100;
716
self.postMessage(progress);
717
718
progress.string = "Melting..";
719
//this.progressRenderer.progressStage("Melting..");
720
this.melt();
721
progress.string = "Growing..";
722
//this.progressRenderer.progressStage("Growing..");
723
this.grow(aint);
724
progress.string = "Planting..";
725
//this.progressRenderer.progressStage("Planting..");
726
this.plant(aint);
727
728
progress.tiles = this.tiles;
729
progress.string = "";
730
self.postMessage(progress);
731
732
}
733
734
735
}
736
737
function startGeneration (obj) { //{worldSize: worldSize, seed: props.seed, seedrandom: seedrandom}
738
var level = new RandomLevel();
739
//console.log(level)
740
var width = obj.worldSize;
741
var depth = obj.worldSize;
742
var height = 64;
743
level.createLevel(obj.seed, width, depth, height);
744
}
745
746
self.addEventListener('message', function(e) {
747
//console.log("worker get "+e.data);
748
startGeneration(e.data)
749
}, false);
750