@@ -164,7 +164,6 @@ const CustomRender = {
164164 pos
165165 ) {
166166 const uv = this . getUV ( "grass" ) ;
167- // console.log(uv);
168167 // prettier-ignore
169168 const faceVertex = {
170169 pos : [
@@ -299,6 +298,159 @@ const CustomRender = {
299298 true
300299 ) ;
301300 } ,
301+ lava : function (
302+ t_positions ,
303+ t_normals ,
304+ t_uvs ,
305+ t_colors ,
306+ positions ,
307+ normals ,
308+ uvs ,
309+ colors ,
310+ pos
311+ ) {
312+ const block = this . chunkTerrain . getBlock ( pos [ 0 ] , pos [ 1 ] , pos [ 2 ] ) ;
313+ const state = block . stateId ;
314+
315+ // const falling = !!(state & 8);
316+ const level = ( state & 0b001110 ) - 1 ;
317+ if ( level === 9 ) {
318+ for ( const l in this . neighbours ) {
319+ const offset = this . neighbours [ l ] ;
320+ if (
321+ this . chunkTerrain . getBlock (
322+ pos [ 0 ] + offset [ 0 ] ,
323+ pos [ 1 ] + offset [ 1 ] ,
324+ pos [ 2 ] + offset [ 2 ]
325+ ) . name !== "lava"
326+ )
327+ this . addFace (
328+ t_positions ,
329+ t_normals ,
330+ t_uvs ,
331+ t_colors ,
332+ positions ,
333+ normals ,
334+ uvs ,
335+ colors ,
336+ l ,
337+ pos
338+ ) ;
339+ }
340+ } else {
341+ for ( const side in this . neighbours ) {
342+ const offset = this . neighbours [ side ] ;
343+ if (
344+ this . chunkTerrain . getBlock (
345+ pos [ 0 ] + offset [ 0 ] ,
346+ pos [ 1 ] + offset [ 1 ] ,
347+ pos [ 2 ] + offset [ 2 ]
348+ ) . name === "lava"
349+ )
350+ continue ;
351+ const faceVertex = this . genBlockFace ( side , block , pos ) ;
352+ let waterLevels = [ ] ;
353+ for ( let x = - 1 ; x <= 1 ; x ++ )
354+ for ( let z = - 1 ; z <= 1 ; z ++ ) {
355+ let block = this . chunkTerrain . getBlock (
356+ pos [ 0 ] + x ,
357+ pos [ 1 ] ,
358+ pos [ 2 ] + z
359+ ) ;
360+ if ( block . name === "lava" )
361+ if ( ( block . stateId & 0b001110 ) - 1 === 10 ) waterLevels . push ( 0 ) ;
362+ else waterLevels . push ( ( ( block . stateId & 0b001110 ) - 1 ) / 10 ) ;
363+ else if ( block . boundingBox === "block" )
364+ waterLevels . push ( 10 ) ;
365+ else waterLevels . push ( 1 ) ;
366+ }
367+ let waterLevelAverages = [
368+ Math . min (
369+ waterLevels [ 0 ] ,
370+ waterLevels [ 1 ] ,
371+ waterLevels [ 3 ] ,
372+ waterLevels [ 4 ]
373+ ) ,
374+ Math . min (
375+ waterLevels [ 1 ] ,
376+ waterLevels [ 2 ] ,
377+ waterLevels [ 4 ] ,
378+ waterLevels [ 5 ]
379+ ) ,
380+ Math . min (
381+ waterLevels [ 4 ] ,
382+ waterLevels [ 5 ] ,
383+ waterLevels [ 7 ] ,
384+ waterLevels [ 8 ]
385+ ) ,
386+ Math . min (
387+ waterLevels [ 3 ] ,
388+ waterLevels [ 4 ] ,
389+ waterLevels [ 6 ] ,
390+ waterLevels [ 7 ]
391+ ) ,
392+ ] ;
393+
394+ switch ( side ) {
395+ case "py" :
396+ faceVertex . pos [ 3 * 0 + 1 ] -= waterLevelAverages [ 3 ] ;
397+ faceVertex . pos [ 3 * 1 + 1 ] -= waterLevelAverages [ 0 ] ;
398+ faceVertex . pos [ 3 * 2 + 1 ] -= waterLevelAverages [ 2 ] ;
399+ faceVertex . pos [ 3 * 3 + 1 ] -= waterLevelAverages [ 2 ] ;
400+ faceVertex . pos [ 3 * 4 + 1 ] -= waterLevelAverages [ 0 ] ;
401+ faceVertex . pos [ 3 * 5 + 1 ] -= waterLevelAverages [ 1 ] ;
402+ break ;
403+ case "nx" :
404+ faceVertex . pos [ 3 * 2 + 1 ] -= waterLevelAverages [ 2 ] ;
405+ faceVertex . pos [ 3 * 3 + 1 ] -= waterLevelAverages [ 2 ] ;
406+ faceVertex . pos [ 3 * 5 + 1 ] -= waterLevelAverages [ 3 ] ;
407+ break ;
408+ case "px" :
409+ faceVertex . pos [ 3 * 2 + 1 ] -= waterLevelAverages [ 0 ] ;
410+ faceVertex . pos [ 3 * 3 + 1 ] -= waterLevelAverages [ 0 ] ;
411+ faceVertex . pos [ 3 * 5 + 1 ] -= waterLevelAverages [ 1 ] ;
412+ break ;
413+ case "nz" :
414+ faceVertex . pos [ 3 * 2 + 1 ] -= waterLevelAverages [ 3 ] ;
415+ faceVertex . pos [ 3 * 3 + 1 ] -= waterLevelAverages [ 3 ] ;
416+ faceVertex . pos [ 3 * 5 + 1 ] -= waterLevelAverages [ 0 ] ;
417+ break ;
418+ case "pz" :
419+ faceVertex . pos [ 3 * 2 + 1 ] -= waterLevelAverages [ 1 ] ;
420+ faceVertex . pos [ 3 * 3 + 1 ] -= waterLevelAverages [ 1 ] ;
421+ faceVertex . pos [ 3 * 5 + 1 ] -= waterLevelAverages [ 2 ] ;
422+
423+ break ;
424+ }
425+ this . ambientOcclusion (
426+ t_positions ,
427+ t_normals ,
428+ t_uvs ,
429+ t_colors ,
430+ positions ,
431+ normals ,
432+ uvs ,
433+ colors ,
434+ block ,
435+ pos ,
436+ faceVertex ,
437+ side
438+ ) ;
439+ this . push (
440+ t_positions ,
441+ t_normals ,
442+ t_uvs ,
443+ t_colors ,
444+ positions ,
445+ normals ,
446+ uvs ,
447+ colors ,
448+ faceVertex ,
449+ this . chunkTerrain . getBlock ( ...pos ) . transparent
450+ ) ;
451+ }
452+ }
453+ } ,
302454} ;
303455
304456class ChunkMesher {
@@ -326,7 +478,6 @@ class ChunkMesher {
326478
327479 getUV ( name ) {
328480 let { x : toxX , y : toxY } = this . blocksMapping [ name ] ;
329- // console.log(toxX);
330481 toxX -= 1 ;
331482 toxY -= 1 ;
332483 const x1 = this . q * toxX ;
@@ -878,40 +1029,14 @@ class ChunkMesher {
8781029 }
8791030 }
8801031 }
881- } else if (
882- this . chunkTerrain . getBlock ( ...pos ) . name === "lava"
883- ) {
884- for ( var l in this . neighbours ) {
885- const offset = this . neighbours [ l ] ;
886- if (
887- this . chunkTerrain . getBlock (
888- pos [ 0 ] + offset [ 0 ] ,
889- pos [ 1 ] + offset [ 1 ] ,
890- pos [ 2 ] + offset [ 2 ]
891- ) . name !== "lava"
892- ) {
893- this . addFace (
894- t_positions ,
895- t_normals ,
896- t_uvs ,
897- t_colors ,
898- positions ,
899- normals ,
900- uvs ,
901- colors ,
902- l ,
903- pos
904- ) ;
905- }
906- }
9071032 } else if (
9081033 this . customRender [
9091034 this . chunkTerrain . getBlock ( ...pos ) . name
910- ]
1035+ ]
9111036 ) {
9121037 this . customRender [
9131038 this . chunkTerrain . getBlock ( ...pos ) . name
914- ] (
1039+ ] (
9151040 t_positions ,
9161041 t_normals ,
9171042 t_uvs ,
0 commit comments