11import { CellTerrain } from "./CellTerrain.js" ;
2-
32var terrain = null ;
43
54var 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