Skip to content

Commit 0c9c88e

Browse files
committed
cleanup worker handler
1 parent f83fb8a commit 0c9c88e

File tree

1 file changed

+137
-130
lines changed

1 file changed

+137
-130
lines changed

src/client/scripts/World/chunk.worker.js

Lines changed: 137 additions & 130 deletions
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,4 @@
11
import { CellTerrain } from "./CellTerrain.js";
2-
32
var terrain = null;
43

54
var TerrainManager = class TerrainManager {
@@ -24,6 +23,8 @@ var TerrainManager = class TerrainManager {
2423
pz: [0, 0, 1],
2524
nz: [0, 0, -1],
2625
};
26+
this.chunkQueue = [];
27+
this.playerChunk = null;
2728
}
2829

2930
genBlockFace(type, block, pos) {
@@ -457,146 +458,152 @@ var TerrainManager = class TerrainManager {
457458
}
458459
};
459460

460-
var handlers = {
461-
init: function (data) {
462-
terrain = new TerrainManager({
463-
models: data.models,
464-
blocks: data.blocks,
465-
blocksMapping: data.blocksMapping,
466-
toxelSize: data.toxelSize,
467-
cellSize: data.cellSize,
468-
blocksTex: data.blocksTex,
469-
blocksDef: data.blocksDef,
470-
});
471-
},
472-
setVoxel: function (data) {
473-
var cellId, l, len, nei, neiCellId, neighbours;
474-
terrain.cellTerrain.setVoxel(...data);
475-
cellId = terrain.cellTerrain.vec3(
476-
...terrain.cellTerrain.computeCellForVoxel(
477-
data[0],
478-
data[1],
479-
data[2]
480-
)
481-
);
482-
terrain.cellNeedsUpdate[cellId] = true;
483-
neighbours = [
484-
[-1, 0, 0],
485-
[1, 0, 0],
486-
[0, -1, 0],
487-
[0, 1, 0],
488-
[0, 0, -1],
489-
[0, 0, 1],
490-
];
491-
for (l = 0, len = neighbours.length; l < len; l++) {
492-
nei = neighbours[l];
493-
neiCellId = terrain.cellTerrain.vec3(
461+
var handler = function (msg) {
462+
var data = msg.data.data;
463+
let neighbours = [
464+
[-1, 0, 0],
465+
[1, 0, 0],
466+
[0, -1, 0],
467+
[0, 1, 0],
468+
[0, 0, -1],
469+
[0, 0, 1],
470+
];
471+
switch (msg.data.type) {
472+
case "init":
473+
terrain = new TerrainManager({
474+
models: data.models,
475+
blocks: data.blocks,
476+
blocksMapping: data.blocksMapping,
477+
toxelSize: data.toxelSize,
478+
cellSize: data.cellSize,
479+
blocksTex: data.blocksTex,
480+
blocksDef: data.blocksDef,
481+
});
482+
break;
483+
case "setVoxel":
484+
terrain.cellTerrain.setVoxel(...data);
485+
var cellId = terrain.cellTerrain.vec3(
494486
...terrain.cellTerrain.computeCellForVoxel(
487+
data[0],
488+
data[1],
489+
data[2]
490+
)
491+
);
492+
terrain.cellNeedsUpdate[cellId] = true;
493+
494+
for (let l = 0, len = neighbours.length; l < len; l++) {
495+
let nei = neighbours[l];
496+
let neiCellId = terrain.cellTerrain.vec3(
497+
...terrain.cellTerrain.computeCellForVoxel(
498+
data[0] + nei[0],
499+
data[1] + nei[1],
500+
data[2] + nei[2]
501+
)
502+
);
503+
terrain.cellNeedsUpdate[neiCellId] = true;
504+
}
505+
break;
506+
case "genCellGeo":
507+
if (
508+
terrain.cellTerrain.vec3(...data) in
509+
terrain.cellTerrain.cells ===
510+
true
511+
) {
512+
var geo = terrain.genCellGeo(...data);
513+
postMessage({
514+
type: "cellGeo",
515+
data: {
516+
cell: geo,
517+
info: data,
518+
p: performance.now(),
519+
},
520+
});
521+
}
522+
break;
523+
case "setCell":
524+
terrain.cellNeedsUpdate[
525+
terrain.cellTerrain.vec3(data[0], data[1], data[2])
526+
] = true;
527+
terrain.cellTerrain.setCell(data[0], data[1], data[2], data[3]);
528+
for (let l = 0; l < neighbours.length; l++) {
529+
let nei = neighbours[l];
530+
let neiCellId = terrain.cellTerrain.vec3(
495531
data[0] + nei[0],
496532
data[1] + nei[1],
497533
data[2] + nei[2]
498-
)
499-
);
500-
terrain.cellNeedsUpdate[neiCellId] = true;
501-
}
502-
},
503-
genCellGeo: function (data) {
504-
if (
505-
terrain.cellTerrain.vec3(...data) in terrain.cellTerrain.cells ===
506-
true
507-
) {
508-
var geo = terrain.genCellGeo(...data);
509-
postMessage({
510-
type: "cellGeo",
511-
data: {
512-
cell: geo,
513-
info: data,
514-
p: performance.now(),
515-
},
516-
});
517-
}
518-
},
519-
setCell: function (data) {
520-
var neighbours = [
521-
[-1, 0, 0],
522-
[1, 0, 0],
523-
[0, -1, 0],
524-
[0, 1, 0],
525-
[0, 0, -1],
526-
[0, 0, 1],
527-
];
528-
terrain.cellNeedsUpdate[
529-
terrain.cellTerrain.vec3(data[0], data[1], data[2])
530-
] = true;
531-
terrain.cellTerrain.setCell(data[0], data[1], data[2], data[3]);
532-
for (var l = 0; l < neighbours.length; l++) {
533-
var nei = neighbours[l];
534-
var neiCellId = terrain.cellTerrain.vec3(
535-
data[0] + nei[0],
536-
data[1] + nei[1],
537-
data[2] + nei[2]
538-
);
539-
terrain.cellNeedsUpdate[neiCellId] = true;
540-
}
541-
},
542-
resetWorld: function () {
543-
console.log("RESET WORLD!");
544-
terrain.cellTerrain.cells = {};
545-
},
546-
updateCellsAroundPlayer: function (data) {
547-
var cell = data[0];
548-
var radius = data[1];
549-
var odw = {};
550-
var cellBlackList = {};
551-
for (var k in terrain.loadedMeshes) {
552-
var v = terrain.loadedMeshes[k];
553-
if (v === true) {
554-
cellBlackList[k] = true;
534+
);
535+
terrain.cellNeedsUpdate[neiCellId] = true;
555536
}
556-
}
557-
for (var i = 0; i <= radius; i++) {
558-
for (var x = -i; x <= i; x++) {
559-
for (var y = -i; y <= i; y++) {
560-
for (var z = -i; z <= i; z++) {
561-
if (!odw[`${x}:${y}:${z}`]) {
562-
odw[`${x}:${y}:${z}`] = true;
563-
var pcell = [cell[0] + x, cell[1] + y, cell[2] + z];
564-
var cellId = terrain.cellTerrain.vec3(...pcell);
565-
cellBlackList[cellId] = false;
566-
var gen = false;
567-
if (terrain.cellNeedsUpdate[cellId]) {
568-
delete terrain.cellNeedsUpdate[cellId];
569-
handlers.genCellGeo(pcell);
570-
gen = true;
571-
}
572-
if (terrain.loadedMeshes[cellId] === "disposed") {
573-
if (!gen) {
574-
handlers.genCellGeo(pcell);
537+
break;
538+
case "resetWorld":
539+
console.log("RESET WORLD!");
540+
terrain.cellTerrain.cells = {};
541+
break;
542+
case "updateCellsAroundPlayer":
543+
var cell = data[0];
544+
var radius = data[1];
545+
var odw = {};
546+
var cellBlackList = {};
547+
for (var k in terrain.loadedMeshes) {
548+
var v = terrain.loadedMeshes[k];
549+
if (v === true) {
550+
cellBlackList[k] = true;
551+
}
552+
}
553+
for (var i = 0; i <= radius; i++) {
554+
for (var x = -i; x <= i; x++) {
555+
for (var y = -i; y <= i; y++) {
556+
for (var z = -i; z <= i; z++) {
557+
if (!odw[`${x}:${y}:${z}`]) {
558+
odw[`${x}:${y}:${z}`] = true;
559+
var pcell = [
560+
cell[0] + x,
561+
cell[1] + y,
562+
cell[2] + z,
563+
];
564+
cellId = terrain.cellTerrain.vec3(...pcell);
565+
cellBlackList[cellId] = false;
566+
var gen = false;
567+
if (terrain.cellNeedsUpdate[cellId]) {
568+
delete terrain.cellNeedsUpdate[cellId];
569+
handler({
570+
data: {
571+
type: "genCellGeo",
572+
data: pcell,
573+
},
574+
});
575+
gen = true;
575576
}
577+
if (
578+
terrain.loadedMeshes[cellId] === "disposed"
579+
) {
580+
if (!gen) {
581+
handler({
582+
data: {
583+
type: "genCellGeo",
584+
data: pcell,
585+
},
586+
});
587+
}
588+
}
589+
terrain.loadedMeshes[cellId] = true;
576590
}
577-
terrain.loadedMeshes[cellId] = true;
578591
}
579592
}
580593
}
581594
}
582-
}
583-
for (k in cellBlackList) {
584-
v = cellBlackList[k];
585-
if (v === true) {
586-
terrain.loadedMeshes[k] = "disposed";
587-
postMessage({
588-
type: "removeCell",
589-
data: k,
590-
});
595+
for (k in cellBlackList) {
596+
v = cellBlackList[k];
597+
if (v === true) {
598+
terrain.loadedMeshes[k] = "disposed";
599+
postMessage({
600+
type: "removeCell",
601+
data: k,
602+
});
603+
}
591604
}
592-
}
593-
},
605+
break;
606+
}
594607
};
595608

596-
addEventListener("message", function (e) {
597-
var fn = handlers[e.data.type];
598-
if (!fn) {
599-
throw new Error(`no handler for type: ${e.data.type}`);
600-
}
601-
fn(e.data.data);
602-
});
609+
addEventListener("message", handler);

0 commit comments

Comments
 (0)