minecraft-renderer 0.1.79 → 0.1.80

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (200) hide show
  1. package/README.md +29 -25
  2. package/dist/mesher.js +36 -36
  3. package/dist/mesher.js.map +4 -4
  4. package/dist/mesherWasm.js +217 -217
  5. package/dist/minecraft-renderer.js +27 -27
  6. package/dist/minecraft-renderer.js.meta.json +1 -1
  7. package/dist/threeWorker.js +133 -133
  8. package/package.json +5 -2
  9. package/src/bundler/bundlePrepare.ts +3 -8
  10. package/src/graphicsBackend/appViewer.ts +10 -7
  11. package/src/graphicsBackend/config.ts +1 -5
  12. package/src/graphicsBackend/playerState.ts +35 -34
  13. package/src/graphicsBackend/preloadWorkers.ts +43 -41
  14. package/src/graphicsBackend/rendererDefaultOptions.ts +68 -70
  15. package/src/graphicsBackend/rendererOptionsSync.ts +24 -50
  16. package/src/graphicsBackend/types.ts +2 -2
  17. package/src/index.ts +6 -27
  18. package/src/lib/DebugGui.ts +34 -31
  19. package/src/lib/animationController.ts +9 -9
  20. package/src/lib/bakeLegacyLight.ts +1 -6
  21. package/src/lib/bindAbortableListener.test.ts +32 -12
  22. package/src/lib/bindAbortableListener.ts +14 -6
  23. package/src/lib/blockEntityLightRegistry.ts +11 -20
  24. package/src/lib/blockEntityLighting.test.ts +1 -6
  25. package/src/lib/blockEntityLighting.ts +5 -5
  26. package/src/lib/buildSharedConfig.mjs +4 -4
  27. package/src/lib/buildWorkerMcDataIndexes.test.ts +4 -4
  28. package/src/lib/buildWorkerMcDataIndexes.ts +11 -19
  29. package/src/lib/cameraBobbing.ts +1 -1
  30. package/src/lib/canvas2DOverlay.example.ts +13 -33
  31. package/src/lib/canvas2DOverlay.quickstart.ts +24 -54
  32. package/src/lib/canvas2DOverlay.ts +28 -47
  33. package/src/lib/cleanupDecorator.ts +2 -2
  34. package/src/lib/createPlayerObject.test.ts +2 -7
  35. package/src/lib/createPlayerObject.ts +18 -25
  36. package/src/lib/frameTimingCollector.ts +2 -5
  37. package/src/lib/guiRenderer.ts +57 -42
  38. package/src/lib/items.ts +15 -9
  39. package/src/lib/mesherlogReader.ts +5 -6
  40. package/src/lib/simpleUtils.ts +5 -5
  41. package/src/lib/skyLight.ts +3 -3
  42. package/src/lib/smoothSwitcher.ts +11 -18
  43. package/src/lib/ui/newStats.ts +10 -12
  44. package/src/lib/utils/proxy.ts +7 -1
  45. package/src/lib/utils/skins.ts +4 -4
  46. package/src/lib/utils.ts +1 -1
  47. package/src/lib/workerMessageSanitize.ts +5 -12
  48. package/src/lib/workerProxy.ts +52 -42
  49. package/src/lib/workerSyncOps.test.ts +58 -41
  50. package/src/lib/worldrendererCommon.reconfigure.test.ts +24 -21
  51. package/src/lib/worldrendererCommon.removeColumn.test.ts +11 -13
  52. package/src/lib/worldrendererCommon.ts +338 -211
  53. package/src/mesher-legacy/mesher.ts +9 -4
  54. package/src/mesher-legacy/test/a.ts +1 -1
  55. package/src/mesher-legacy/test/mesherTester.ts +2 -2
  56. package/src/mesher-legacy/test/playground.ts +1 -1
  57. package/src/mesher-legacy/test/run/test-js.ts +1 -1
  58. package/src/mesher-legacy/test/snapshotUtils.ts +3 -8
  59. package/src/mesher-legacy/test/test-perf.ts +1 -1
  60. package/src/mesher-legacy/test/tests.test.ts +2 -2
  61. package/src/mesher-shared/blockEntityMetadata.test.ts +7 -5
  62. package/src/mesher-shared/blockEntityMetadata.ts +28 -19
  63. package/src/mesher-shared/blockPropertiesForMeshing.ts +2 -2
  64. package/src/mesher-shared/computeHeightmap.ts +2 -4
  65. package/src/mesher-shared/exportedGeometryTypes.ts +3 -3
  66. package/src/mesher-shared/faceOcclusion.ts +324 -0
  67. package/src/mesher-shared/models.ts +80 -131
  68. package/src/mesher-shared/modelsGeometryCommon.ts +30 -15
  69. package/src/mesher-shared/shared.ts +46 -46
  70. package/src/mesher-shared/standaloneRenderer.ts +40 -44
  71. package/src/mesher-shared/tests/faceOcclusion.test.ts +179 -0
  72. package/src/mesher-shared/tests/liquidQuadInvariant.test.ts +12 -8
  73. package/src/mesher-shared/vertexShading.ts +2 -11
  74. package/src/mesher-shared/world.ts +19 -19
  75. package/src/mesher-shared/worldLighting.test.ts +2 -2
  76. package/src/performanceMonitor/PerformanceMonitor.ts +4 -13
  77. package/src/performanceMonitor/formatPerformanceFactorsDebug.ts +2 -2
  78. package/src/performanceMonitor/index.ts +1 -5
  79. package/src/performanceMonitor/types.ts +1 -1
  80. package/src/playerState/playerState.ts +55 -50
  81. package/src/playerState/types.ts +2 -8
  82. package/src/playground/allEntitiesDebug.ts +19 -16
  83. package/src/playground/baseScene.ts +29 -32
  84. package/src/playground/mobileControls.tsx +133 -129
  85. package/src/playground/playground.html +76 -73
  86. package/src/playground/playground.ts +14 -1
  87. package/src/playground/playgroundUi.tsx +100 -74
  88. package/src/playground/reactUtils.ts +3 -7
  89. package/src/playground/scenes/entities.ts +10 -7
  90. package/src/playground/scenes/frequentUpdates.ts +5 -5
  91. package/src/playground/scenes/geometryExport.ts +6 -20
  92. package/src/playground/scenes/highPosEntityUpdates.ts +2 -10
  93. package/src/playground/scenes/index.ts +1 -1
  94. package/src/playground/scenes/lightingStarfield.ts +18 -12
  95. package/src/playground/scenes/main.ts +15 -11
  96. package/src/playground/scenes/partialBlockCulling.ts +31 -0
  97. package/src/playground/scenes/railsCobweb.ts +1 -1
  98. package/src/playground/scenes/rotationIssue.ts +1 -1
  99. package/src/playground/scenes/slabsOptimization.ts +1 -2
  100. package/src/playground/scenes/transparencyIssue.ts +1 -1
  101. package/src/playground/shared.ts +2 -2
  102. package/src/resourcesManager/resourcesManager.ts +29 -54
  103. package/src/resourcesManager/resourcesManager.worker.test.ts +6 -10
  104. package/src/shims/minecraftData.ts +70 -24
  105. package/src/sign-renderer/index.html +10 -12
  106. package/src/sign-renderer/index.ts +29 -29
  107. package/src/sign-renderer/playground.ts +22 -15
  108. package/src/sign-renderer/tests.test.ts +16 -13
  109. package/src/sign-renderer/vite.config.ts +2 -2
  110. package/src/three/appShared.ts +46 -25
  111. package/src/three/bannerRenderer.ts +33 -61
  112. package/src/three/cameraShake.ts +15 -6
  113. package/src/three/chunkMeshManager.ts +239 -282
  114. package/src/three/cinimaticScript.ts +26 -15
  115. package/src/three/cubeDrawSpans.ts +27 -37
  116. package/src/three/cubeMultiDraw.ts +9 -22
  117. package/src/three/documentRenderer.ts +15 -18
  118. package/src/three/entities.ts +175 -150
  119. package/src/three/entity/EntityMesh.ts +114 -108
  120. package/src/three/entity/animations.js +3 -3
  121. package/src/three/entity/armorModels.ts +15 -15
  122. package/src/three/entity/gltfAnimationUtils.ts +2 -5
  123. package/src/three/fireworks.ts +34 -32
  124. package/src/three/fireworksRenderer.ts +32 -29
  125. package/src/three/globalBlockBuffer.ts +167 -100
  126. package/src/three/globalLegacyBuffer.ts +257 -166
  127. package/src/three/graphicsBackendBase.ts +19 -25
  128. package/src/three/graphicsBackendOffThread.ts +12 -15
  129. package/src/three/hand.ts +21 -21
  130. package/src/three/handLegacy.ts +3 -13
  131. package/src/three/holdingBlock.ts +116 -79
  132. package/src/three/holdingBlockFactory.ts +1 -4
  133. package/src/three/holdingBlockItemIdentity.test.ts +25 -17
  134. package/src/three/holdingBlockItemIdentity.ts +9 -6
  135. package/src/three/holdingBlockLegacy.ts +113 -132
  136. package/src/three/itemMesh.ts +20 -29
  137. package/src/three/legacyMultiDraw.ts +10 -16
  138. package/src/three/legacySectionCull.ts +8 -14
  139. package/src/three/menuBackground/activeView.ts +1 -4
  140. package/src/three/menuBackground/assetUrl.ts +1 -1
  141. package/src/three/menuBackground/classic.ts +4 -12
  142. package/src/three/menuBackground/gpuPreference.ts +1 -3
  143. package/src/three/menuBackground/index.ts +2 -11
  144. package/src/three/menuBackground/renderer.ts +1 -5
  145. package/src/three/menuBackground/types.ts +1 -4
  146. package/src/three/menuBackground/v2.ts +196 -96
  147. package/src/three/menuBackground/v2Meta.ts +3 -3
  148. package/src/three/menuBackground/worldBlocks.ts +37 -35
  149. package/src/three/modules/blockBreakParticles.ts +59 -28
  150. package/src/three/modules/cameraBobbing.ts +3 -6
  151. package/src/three/modules/index.ts +1 -1
  152. package/src/three/modules/rain.ts +10 -23
  153. package/src/three/modules/sciFiWorldReveal.ts +11 -25
  154. package/src/three/modules/starfield.ts +7 -13
  155. package/src/three/renderSlot.ts +28 -16
  156. package/src/three/rendererModuleSystem.ts +1 -3
  157. package/src/three/sceneOrigin.ts +96 -33
  158. package/src/three/sectionRaycastAabb.ts +30 -18
  159. package/src/three/shaderCubeMesh.ts +6 -17
  160. package/src/three/shaders/cubeBlockShader.ts +85 -96
  161. package/src/three/shaders/legacyBlockShader.ts +21 -43
  162. package/src/three/shaders/textureIndexMapping.ts +89 -95
  163. package/src/three/shaders/tintPalette.ts +156 -170
  164. package/src/three/signTextureCache.ts +9 -12
  165. package/src/three/skyboxRenderer.ts +62 -70
  166. package/src/three/tests/chunkMeshManagerLegacy.test.ts +34 -34
  167. package/src/three/tests/cubeDrawSpans.test.ts +55 -25
  168. package/src/three/tests/globalBlockBuffer.test.ts +217 -0
  169. package/src/three/tests/globalLegacyBuffer.test.ts +300 -41
  170. package/src/three/tests/legacyMultiDraw.test.ts +8 -29
  171. package/src/three/tests/pr3PerFrameCpuCuts.test.ts +106 -29
  172. package/src/three/tests/signTextureCache.test.ts +4 -4
  173. package/src/three/threeJsMedia.ts +55 -72
  174. package/src/three/threeJsParticles.ts +32 -41
  175. package/src/three/threeJsSound.ts +3 -3
  176. package/src/three/threeJsUtils.ts +3 -3
  177. package/src/three/threeWorker.ts +2 -2
  178. package/src/three/waypointSprite.ts +55 -82
  179. package/src/three/waypoints.ts +20 -23
  180. package/src/three/world/cursorBlock.ts +25 -12
  181. package/src/three/world/vr.ts +11 -17
  182. package/src/three/worldGeometryExport.ts +15 -34
  183. package/src/three/worldRendererThree.ts +117 -129
  184. package/src/wasm-mesher/bridge/convertChunk.ts +3 -9
  185. package/src/wasm-mesher/bridge/render-from-wasm.ts +204 -229
  186. package/src/wasm-mesher/bridge/shaderCubeBridge.ts +26 -67
  187. package/src/wasm-mesher/tests/cullingRegression.test.ts +307 -0
  188. package/src/wasm-mesher/tests/heightmapParity.test.ts +8 -18
  189. package/src/wasm-mesher/tests/mesherWasmConversionCache.test.ts +2 -2
  190. package/src/wasm-mesher/tests/sectionRaycastAabb.test.ts +17 -4
  191. package/src/wasm-mesher/tests/shaderCubeInstances.test.ts +103 -141
  192. package/src/wasm-mesher/tests/splitColumnWasmOutput.test.ts +14 -22
  193. package/src/wasm-mesher/worker/mesherWasm.ts +150 -141
  194. package/src/wasm-mesher/worker/mesherWasmConversionCache.ts +2 -8
  195. package/src/wasm-mesher/worker/mesherWasmLightDirty.test.ts +1 -3
  196. package/src/wasm-mesher/worker/mesherWasmLightDirty.ts +1 -5
  197. package/src/wasm-mesher/worker/mesherWasmRequestTracker.ts +42 -42
  198. package/src/worldView/worldView.spiral.test.ts +1 -1
  199. package/src/worldView/worldView.ts +34 -39
  200. package/src/worldView/worldViewWorkerBridge.test.ts +4 -4
@@ -29,7 +29,7 @@ export class CursorBlock {
29
29
  }
30
30
 
31
31
  cursorLineMaterial!: LineMaterial
32
- interactionLines: null | { blockPos: Vec3, mesh: THREE.Group, shapePositions: BlocksShapes | undefined } = null
32
+ interactionLines: null | { blockPos: Vec3; mesh: THREE.Group; shapePositions: BlocksShapes | undefined } = null
33
33
  prevColor: string | undefined
34
34
  blockBreakMesh: THREE.Mesh
35
35
  breakTextures: THREE.Texture[] = []
@@ -37,12 +37,20 @@ export class CursorBlock {
37
37
  constructor(public readonly worldRenderer: WorldRendererThree) {
38
38
  // Initialize break mesh and textures
39
39
  const destroyStagesImages = [
40
- destroyStage0, destroyStage1, destroyStage2, destroyStage3, destroyStage4,
41
- destroyStage5, destroyStage6, destroyStage7, destroyStage8, destroyStage9
40
+ destroyStage0,
41
+ destroyStage1,
42
+ destroyStage2,
43
+ destroyStage3,
44
+ destroyStage4,
45
+ destroyStage5,
46
+ destroyStage6,
47
+ destroyStage7,
48
+ destroyStage8,
49
+ destroyStage9
42
50
  ]
43
51
 
44
52
  for (let i = 0; i < 10; i++) {
45
- void loadThreeJsTextureFromUrl(destroyStagesImages[i]).then((texture) => {
53
+ void loadThreeJsTextureFromUrl(destroyStagesImages[i]).then(texture => {
46
54
  texture.magFilter = THREE.NearestFilter
47
55
  texture.minFilter = THREE.NearestFilter
48
56
  this.breakTextures.push(texture)
@@ -53,7 +61,7 @@ export class CursorBlock {
53
61
  transparent: true,
54
62
  blending: THREE.MultiplyBlending,
55
63
  premultipliedAlpha: true,
56
- alphaTest: 0.5,
64
+ alphaTest: 0.5
57
65
  })
58
66
  this.blockBreakMesh = new THREE.Mesh(new THREE.BoxGeometry(1, 1, 1), breakMaterial)
59
67
  this.blockBreakMesh.visible = false
@@ -92,14 +100,14 @@ export class CursorBlock {
92
100
  return inCreative ? 0x40_80_ff : 0x00_00_00
93
101
  }
94
102
  })(),
95
- linewidth: Math.max(pixelRatio * 0.7, 1) * 2,
103
+ linewidth: Math.max(pixelRatio * 0.7, 1) * 2
96
104
  // dashed: true,
97
105
  // dashSize: 5,
98
106
  })
99
107
  this.prevColor = this.worldRenderer.worldRendererConfig.highlightBlockColor
100
108
  }
101
109
 
102
- updateBreakAnimation(blockPosition: { x: number, y: number, z: number } | undefined, stage: number | null, mergedShape?: BlockShape) {
110
+ updateBreakAnimation(blockPosition: { x: number; y: number; z: number } | undefined, stage: number | null, mergedShape?: BlockShape) {
103
111
  this.hideBreakAnimation()
104
112
  if (stage === null || !blockPosition || !mergedShape) return
105
113
 
@@ -108,10 +116,9 @@ export class CursorBlock {
108
116
  this.blockBreakMesh.scale.set(width * 1.001, height * 1.001, depth * 1.001)
109
117
  position.add(new Vec3(blockPosition.x, blockPosition.y, blockPosition.z))
110
118
  this.blockBreakMesh.position.set(position.x, position.y, position.z)
111
- this.blockBreakMesh.visible = true;
112
-
113
- (this.blockBreakMesh.material as THREE.MeshBasicMaterial).map = this.breakTextures[stage] ?? this.breakTextures.at(-1);
114
- (this.blockBreakMesh.material as THREE.MeshBasicMaterial).needsUpdate = true
119
+ this.blockBreakMesh.visible = true
120
+ ;(this.blockBreakMesh.material as THREE.MeshBasicMaterial).map = this.breakTextures[stage] ?? this.breakTextures.at(-1)
121
+ ;(this.blockBreakMesh.material as THREE.MeshBasicMaterial).needsUpdate = true
115
122
  }
116
123
 
117
124
  hideBreakAnimation() {
@@ -129,7 +136,13 @@ export class CursorBlock {
129
136
  }
130
137
 
131
138
  setHighlightCursorBlock(blockPos: Vec3 | null, shapePositions?: BlocksShapes, force = false): void {
132
- if (blockPos && this.interactionLines && blockPos.equals(this.interactionLines.blockPos) && sameArray(shapePositions ?? [], this.interactionLines.shapePositions ?? []) && !force) {
139
+ if (
140
+ blockPos &&
141
+ this.interactionLines &&
142
+ blockPos.equals(this.interactionLines.blockPos) &&
143
+ sameArray(shapePositions ?? [], this.interactionLines.shapePositions ?? []) &&
144
+ !force
145
+ ) {
133
146
  return
134
147
  }
135
148
  if (this.interactionLines !== null) {
@@ -63,7 +63,7 @@ export async function initVR(worldRenderer: WorldRendererThree, documentRenderer
63
63
  display: 'flex',
64
64
  justifyContent: 'center',
65
65
  zIndex: '8',
66
- gap: '8px',
66
+ gap: '8px'
67
67
  })
68
68
  }
69
69
 
@@ -79,7 +79,7 @@ export async function initVR(worldRenderer: WorldRendererThree, documentRenderer
79
79
  background: 'transparent',
80
80
  border: '1px solid rgb(255, 255, 255)',
81
81
  borderRadius: '4px',
82
- opacity: '0.7',
82
+ opacity: '0.7'
83
83
  })
84
84
 
85
85
  closeButton.addEventListener('click', () => {
@@ -90,7 +90,6 @@ export async function initVR(worldRenderer: WorldRendererThree, documentRenderer
90
90
  return closeButton
91
91
  }
92
92
 
93
-
94
93
  async function checkVRSupport() {
95
94
  try {
96
95
  const supported = await navigator.xr?.isSessionSupported('immersive-vr')
@@ -122,16 +121,16 @@ export async function initVR(worldRenderer: WorldRendererThree, documentRenderer
122
121
  }
123
122
  }
124
123
  let hand1: any = controllerModelFactory.createControllerModel(controller1)
125
- controller1.addEventListener('connected', (event) => {
124
+ controller1.addEventListener('connected', event => {
126
125
  hand1.xrInputSource = event.data
127
- manageXrInputSource(event.data as { gamepad: Gamepad | undefined, handedness?: string }, 'left')
126
+ manageXrInputSource(event.data as { gamepad: Gamepad | undefined; handedness?: string }, 'left')
128
127
  user.add(controller1)
129
128
  })
130
129
  controller1.add(hand1)
131
130
  let hand2: any = controllerModelFactory.createControllerModel(controller2)
132
- controller2.addEventListener('connected', (event) => {
131
+ controller2.addEventListener('connected', event => {
133
132
  hand2.xrInputSource = event.data
134
- manageXrInputSource(event.data as { gamepad: Gamepad | undefined, handedness?: string }, 'right')
133
+ manageXrInputSource(event.data as { gamepad: Gamepad | undefined; handedness?: string }, 'right')
135
134
  user.add(controller2)
136
135
  })
137
136
  controller2.add(hand2)
@@ -184,7 +183,7 @@ export async function initVR(worldRenderer: WorldRendererThree, documentRenderer
184
183
 
185
184
  if (rotSnapReset) {
186
185
  if (Math.abs(hand1.xAxis) > 0.8) {
187
- yawOffset -= Math.PI / 4 * Math.sign(hand1.xAxis)
186
+ yawOffset -= (Math.PI / 4) * Math.sign(hand1.xAxis)
188
187
  rotSnapReset = false
189
188
  }
190
189
  } else if (Math.abs(hand1.xAxis) < 0.1) {
@@ -220,7 +219,7 @@ const xrStandardRightButtonsMap = [
220
219
  // need to think of a way to support touchpad input
221
220
  [3 /* Thumbstick Press */, 'Right Stick'],
222
221
  [4 /* A */, 'A'],
223
- [5 /* B */, 'B'],
222
+ [5 /* B */, 'B']
224
223
  ]
225
224
  const xrStandardLeftButtonsMap = [
226
225
  [0 /* trigger */, 'Left Trigger'],
@@ -228,14 +227,14 @@ const xrStandardLeftButtonsMap = [
228
227
  // need to think of a way to support touchpad input
229
228
  [3 /* Thumbstick Press */, 'Left Stick'],
230
229
  [4 /* A */, 'X'],
231
- [5 /* B */, 'Y'],
230
+ [5 /* B */, 'Y']
232
231
  ]
233
232
  const remapButtons = (rightButtons: any[], leftButtons: any[]) => {
234
233
  // return remapped buttons
235
234
  const remapped = [] as string[]
236
235
  const remapWithMap = (buttons, map) => {
237
236
  for (const [index, standardName] of map) {
238
- const standardMappingIndex = standardButtonsMap.findIndex((aliases) => aliases.find(alias => standardName === alias))
237
+ const standardMappingIndex = standardButtonsMap.findIndex(aliases => aliases.find(alias => standardName === alias))
239
238
  remapped[standardMappingIndex] = buttons[index]
240
239
  }
241
240
  }
@@ -245,12 +244,7 @@ const remapButtons = (rightButtons: any[], leftButtons: any[]) => {
245
244
  }
246
245
  const remapAxes = (axesRight, axesLeft) => {
247
246
  // 0, 1 are reserved for touch
248
- return [
249
- axesLeft[2],
250
- axesLeft[3],
251
- axesRight[2],
252
- axesRight[3]
253
- ]
247
+ return [axesLeft[2], axesLeft[3], axesRight[2], axesRight[3]]
254
248
  }
255
249
 
256
250
  function typedAssign<T extends Record<string, any>>(target: T, source: Partial<T>) {
@@ -17,8 +17,8 @@ const GEOMETRY_EXPORT_GROUP_NAME = 'geometry-export-root'
17
17
  */
18
18
  export function exportWorldGeometry(
19
19
  worldRenderer: WorldRendererThree,
20
- cameraPosition: { x: number, y: number, z: number },
21
- cameraRotation: { pitch: number, yaw: number },
20
+ cameraPosition: { x: number; y: number; z: number },
21
+ cameraRotation: { pitch: number; yaw: number },
22
22
  includeTexture = false
23
23
  ): ExportedWorldGeometry {
24
24
  const sections: ExportedSection[] = []
@@ -59,12 +59,8 @@ export function exportWorldGeometry(
59
59
  const vertOffset = positions.length / 3
60
60
  const vertCount = positionAttr.count
61
61
  const rawColors = Array.from(colorAttr.array as Float32Array)
62
- const rawSky = skyAttr
63
- ? Array.from(skyAttr.array as Float32Array)
64
- : new Array(vertCount).fill(1)
65
- const rawBlock = blockAttr
66
- ? Array.from(blockAttr.array as Float32Array)
67
- : new Array(vertCount).fill(0)
62
+ const rawSky = skyAttr ? Array.from(skyAttr.array as Float32Array) : new Array(vertCount).fill(1)
63
+ const rawBlock = blockAttr ? Array.from(blockAttr.array as Float32Array) : new Array(vertCount).fill(0)
68
64
  positions.push(...Array.from(positionAttr.array))
69
65
  if (normalAttr) normals.push(...Array.from(normalAttr.array))
70
66
  colors.push(...bakeLegacyVertexColors(rawColors, rawSky, rawBlock, skyLevel))
@@ -84,7 +80,7 @@ export function exportWorldGeometry(
84
80
  position: {
85
81
  x: sectionObject.worldX ?? 0,
86
82
  y: sectionObject.worldY ?? 0,
87
- z: sectionObject.worldZ ?? 0,
83
+ z: sectionObject.worldZ ?? 0
88
84
  },
89
85
  geometry: {
90
86
  positions,
@@ -93,8 +89,8 @@ export function exportWorldGeometry(
93
89
  skyLights,
94
90
  blockLights,
95
91
  uvs,
96
- indices,
97
- },
92
+ indices
93
+ }
98
94
  })
99
95
  }
100
96
 
@@ -130,8 +126,8 @@ export function exportWorldGeometry(
130
126
  */
131
127
  export function downloadWorldGeometry(
132
128
  worldRenderer: WorldRendererThree,
133
- cameraPosition: { x: number, y: number, z: number },
134
- cameraRotation: { pitch: number, yaw: number },
129
+ cameraPosition: { x: number; y: number; z: number },
130
+ cameraRotation: { pitch: number; yaw: number },
135
131
  filename = 'world-geometry.json',
136
132
  includeTexture = false
137
133
  ) {
@@ -164,8 +160,7 @@ export async function loadWorldGeometryFromUrl(url: string): Promise<ExportedWor
164
160
  * Returns an array of mesh groups that can be added to a scene
165
161
  */
166
162
  function shaderMaterialForExport(legacyMaterial: THREE.Material, skyLevel: number): THREE.ShaderMaterial | null {
167
- const atlas = (legacyMaterial as THREE.MeshBasicMaterial).map
168
- ?? (legacyMaterial as THREE.MeshLambertMaterial).map
163
+ const atlas = (legacyMaterial as THREE.MeshBasicMaterial).map ?? (legacyMaterial as THREE.MeshLambertMaterial).map
169
164
  if (!atlas) return null
170
165
  const shaderMat = createCubeBlockMaterial()
171
166
  shaderMat.uniforms.u_atlas.value = atlas
@@ -182,7 +177,7 @@ export function createMeshesFromExport(
182
177
  exportData: ExportedWorldGeometry,
183
178
  material: THREE.Material,
184
179
  shaderMaterial?: THREE.ShaderMaterial | null,
185
- skyLevel = 1,
180
+ skyLevel = 1
186
181
  ): THREE.Group[] {
187
182
  const groups: THREE.Group[] = []
188
183
  const resolvedShaderMat = shaderMaterial ?? shaderMaterialForExport(material, skyLevel)
@@ -200,12 +195,7 @@ export function createMeshesFromExport(
200
195
  }
201
196
  if (section.geometry.colors.length) {
202
197
  const baked = section.geometry.skyLights?.length
203
- ? bakeLegacyVertexColors(
204
- section.geometry.colors,
205
- section.geometry.skyLights,
206
- section.geometry.blockLights,
207
- skyLevel,
208
- )
198
+ ? bakeLegacyVertexColors(section.geometry.colors, section.geometry.skyLights, section.geometry.blockLights, skyLevel)
209
199
  : section.geometry.colors
210
200
  geometry.setAttribute('color', new THREE.Float32BufferAttribute(baked, 3))
211
201
  }
@@ -275,15 +265,8 @@ const disposeGeometryExportGroup = (group: THREE.Object3D) => {
275
265
  * Apply exported geometry to an existing WorldRenderer instance.
276
266
  * Replaces any previously imported geometry export group.
277
267
  */
278
- export async function applyWorldGeometryExport(
279
- worldRenderer: WorldRendererThree,
280
- exportData: ExportedWorldGeometry
281
- ): Promise<number> {
282
- const {
283
- scene,
284
- renderUpdateEmitter,
285
- material: rendererMaterial
286
- } = worldRenderer
268
+ export async function applyWorldGeometryExport(worldRenderer: WorldRendererThree, exportData: ExportedWorldGeometry): Promise<number> {
269
+ const { scene, renderUpdateEmitter, material: rendererMaterial } = worldRenderer
287
270
  const existingGroup = scene.getObjectByName(GEOMETRY_EXPORT_GROUP_NAME)
288
271
  if (existingGroup) {
289
272
  scene.remove(existingGroup)
@@ -306,9 +289,7 @@ export async function applyWorldGeometryExport(
306
289
  }
307
290
 
308
291
  const skyLevel = calculateSkyLightSimple(worldRenderer.timeOfTheDay) / 15
309
- const shaderMat = exportData.sections.some(s => (s.shaderCubes?.count ?? 0) > 0)
310
- ? shaderMaterialForExport(material, skyLevel)
311
- : null
292
+ const shaderMat = exportData.sections.some(s => (s.shaderCubes?.count ?? 0) > 0) ? shaderMaterialForExport(material, skyLevel) : null
312
293
  const groups = createMeshesFromExport(exportData, material, shaderMat, skyLevel)
313
294
  const container = new THREE.Group()
314
295
  container.name = GEOMETRY_EXPORT_GROUP_NAME