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.
- package/README.md +29 -25
- package/dist/mesher.js +36 -36
- package/dist/mesher.js.map +4 -4
- package/dist/mesherWasm.js +217 -217
- package/dist/minecraft-renderer.js +27 -27
- package/dist/minecraft-renderer.js.meta.json +1 -1
- package/dist/threeWorker.js +133 -133
- package/package.json +5 -2
- package/src/bundler/bundlePrepare.ts +3 -8
- package/src/graphicsBackend/appViewer.ts +10 -7
- package/src/graphicsBackend/config.ts +1 -5
- package/src/graphicsBackend/playerState.ts +35 -34
- package/src/graphicsBackend/preloadWorkers.ts +43 -41
- package/src/graphicsBackend/rendererDefaultOptions.ts +68 -70
- package/src/graphicsBackend/rendererOptionsSync.ts +24 -50
- package/src/graphicsBackend/types.ts +2 -2
- package/src/index.ts +6 -27
- package/src/lib/DebugGui.ts +34 -31
- package/src/lib/animationController.ts +9 -9
- package/src/lib/bakeLegacyLight.ts +1 -6
- package/src/lib/bindAbortableListener.test.ts +32 -12
- package/src/lib/bindAbortableListener.ts +14 -6
- package/src/lib/blockEntityLightRegistry.ts +11 -20
- package/src/lib/blockEntityLighting.test.ts +1 -6
- package/src/lib/blockEntityLighting.ts +5 -5
- package/src/lib/buildSharedConfig.mjs +4 -4
- package/src/lib/buildWorkerMcDataIndexes.test.ts +4 -4
- package/src/lib/buildWorkerMcDataIndexes.ts +11 -19
- package/src/lib/cameraBobbing.ts +1 -1
- package/src/lib/canvas2DOverlay.example.ts +13 -33
- package/src/lib/canvas2DOverlay.quickstart.ts +24 -54
- package/src/lib/canvas2DOverlay.ts +28 -47
- package/src/lib/cleanupDecorator.ts +2 -2
- package/src/lib/createPlayerObject.test.ts +2 -7
- package/src/lib/createPlayerObject.ts +18 -25
- package/src/lib/frameTimingCollector.ts +2 -5
- package/src/lib/guiRenderer.ts +57 -42
- package/src/lib/items.ts +15 -9
- package/src/lib/mesherlogReader.ts +5 -6
- package/src/lib/simpleUtils.ts +5 -5
- package/src/lib/skyLight.ts +3 -3
- package/src/lib/smoothSwitcher.ts +11 -18
- package/src/lib/ui/newStats.ts +10 -12
- package/src/lib/utils/proxy.ts +7 -1
- package/src/lib/utils/skins.ts +4 -4
- package/src/lib/utils.ts +1 -1
- package/src/lib/workerMessageSanitize.ts +5 -12
- package/src/lib/workerProxy.ts +52 -42
- package/src/lib/workerSyncOps.test.ts +58 -41
- package/src/lib/worldrendererCommon.reconfigure.test.ts +24 -21
- package/src/lib/worldrendererCommon.removeColumn.test.ts +11 -13
- package/src/lib/worldrendererCommon.ts +338 -211
- package/src/mesher-legacy/mesher.ts +9 -4
- package/src/mesher-legacy/test/a.ts +1 -1
- package/src/mesher-legacy/test/mesherTester.ts +2 -2
- package/src/mesher-legacy/test/playground.ts +1 -1
- package/src/mesher-legacy/test/run/test-js.ts +1 -1
- package/src/mesher-legacy/test/snapshotUtils.ts +3 -8
- package/src/mesher-legacy/test/test-perf.ts +1 -1
- package/src/mesher-legacy/test/tests.test.ts +2 -2
- package/src/mesher-shared/blockEntityMetadata.test.ts +7 -5
- package/src/mesher-shared/blockEntityMetadata.ts +28 -19
- package/src/mesher-shared/blockPropertiesForMeshing.ts +2 -2
- package/src/mesher-shared/computeHeightmap.ts +2 -4
- package/src/mesher-shared/exportedGeometryTypes.ts +3 -3
- package/src/mesher-shared/faceOcclusion.ts +324 -0
- package/src/mesher-shared/models.ts +80 -131
- package/src/mesher-shared/modelsGeometryCommon.ts +30 -15
- package/src/mesher-shared/shared.ts +46 -46
- package/src/mesher-shared/standaloneRenderer.ts +40 -44
- package/src/mesher-shared/tests/faceOcclusion.test.ts +179 -0
- package/src/mesher-shared/tests/liquidQuadInvariant.test.ts +12 -8
- package/src/mesher-shared/vertexShading.ts +2 -11
- package/src/mesher-shared/world.ts +19 -19
- package/src/mesher-shared/worldLighting.test.ts +2 -2
- package/src/performanceMonitor/PerformanceMonitor.ts +4 -13
- package/src/performanceMonitor/formatPerformanceFactorsDebug.ts +2 -2
- package/src/performanceMonitor/index.ts +1 -5
- package/src/performanceMonitor/types.ts +1 -1
- package/src/playerState/playerState.ts +55 -50
- package/src/playerState/types.ts +2 -8
- package/src/playground/allEntitiesDebug.ts +19 -16
- package/src/playground/baseScene.ts +29 -32
- package/src/playground/mobileControls.tsx +133 -129
- package/src/playground/playground.html +76 -73
- package/src/playground/playground.ts +14 -1
- package/src/playground/playgroundUi.tsx +100 -74
- package/src/playground/reactUtils.ts +3 -7
- package/src/playground/scenes/entities.ts +10 -7
- package/src/playground/scenes/frequentUpdates.ts +5 -5
- package/src/playground/scenes/geometryExport.ts +6 -20
- package/src/playground/scenes/highPosEntityUpdates.ts +2 -10
- package/src/playground/scenes/index.ts +1 -1
- package/src/playground/scenes/lightingStarfield.ts +18 -12
- package/src/playground/scenes/main.ts +15 -11
- package/src/playground/scenes/partialBlockCulling.ts +31 -0
- package/src/playground/scenes/railsCobweb.ts +1 -1
- package/src/playground/scenes/rotationIssue.ts +1 -1
- package/src/playground/scenes/slabsOptimization.ts +1 -2
- package/src/playground/scenes/transparencyIssue.ts +1 -1
- package/src/playground/shared.ts +2 -2
- package/src/resourcesManager/resourcesManager.ts +29 -54
- package/src/resourcesManager/resourcesManager.worker.test.ts +6 -10
- package/src/shims/minecraftData.ts +70 -24
- package/src/sign-renderer/index.html +10 -12
- package/src/sign-renderer/index.ts +29 -29
- package/src/sign-renderer/playground.ts +22 -15
- package/src/sign-renderer/tests.test.ts +16 -13
- package/src/sign-renderer/vite.config.ts +2 -2
- package/src/three/appShared.ts +46 -25
- package/src/three/bannerRenderer.ts +33 -61
- package/src/three/cameraShake.ts +15 -6
- package/src/three/chunkMeshManager.ts +239 -282
- package/src/three/cinimaticScript.ts +26 -15
- package/src/three/cubeDrawSpans.ts +27 -37
- package/src/three/cubeMultiDraw.ts +9 -22
- package/src/three/documentRenderer.ts +15 -18
- package/src/three/entities.ts +175 -150
- package/src/three/entity/EntityMesh.ts +114 -108
- package/src/three/entity/animations.js +3 -3
- package/src/three/entity/armorModels.ts +15 -15
- package/src/three/entity/gltfAnimationUtils.ts +2 -5
- package/src/three/fireworks.ts +34 -32
- package/src/three/fireworksRenderer.ts +32 -29
- package/src/three/globalBlockBuffer.ts +167 -100
- package/src/three/globalLegacyBuffer.ts +257 -166
- package/src/three/graphicsBackendBase.ts +19 -25
- package/src/three/graphicsBackendOffThread.ts +12 -15
- package/src/three/hand.ts +21 -21
- package/src/three/handLegacy.ts +3 -13
- package/src/three/holdingBlock.ts +116 -79
- package/src/three/holdingBlockFactory.ts +1 -4
- package/src/three/holdingBlockItemIdentity.test.ts +25 -17
- package/src/three/holdingBlockItemIdentity.ts +9 -6
- package/src/three/holdingBlockLegacy.ts +113 -132
- package/src/three/itemMesh.ts +20 -29
- package/src/three/legacyMultiDraw.ts +10 -16
- package/src/three/legacySectionCull.ts +8 -14
- package/src/three/menuBackground/activeView.ts +1 -4
- package/src/three/menuBackground/assetUrl.ts +1 -1
- package/src/three/menuBackground/classic.ts +4 -12
- package/src/three/menuBackground/gpuPreference.ts +1 -3
- package/src/three/menuBackground/index.ts +2 -11
- package/src/three/menuBackground/renderer.ts +1 -5
- package/src/three/menuBackground/types.ts +1 -4
- package/src/three/menuBackground/v2.ts +196 -96
- package/src/three/menuBackground/v2Meta.ts +3 -3
- package/src/three/menuBackground/worldBlocks.ts +37 -35
- package/src/three/modules/blockBreakParticles.ts +59 -28
- package/src/three/modules/cameraBobbing.ts +3 -6
- package/src/three/modules/index.ts +1 -1
- package/src/three/modules/rain.ts +10 -23
- package/src/three/modules/sciFiWorldReveal.ts +11 -25
- package/src/three/modules/starfield.ts +7 -13
- package/src/three/renderSlot.ts +28 -16
- package/src/three/rendererModuleSystem.ts +1 -3
- package/src/three/sceneOrigin.ts +96 -33
- package/src/three/sectionRaycastAabb.ts +30 -18
- package/src/three/shaderCubeMesh.ts +6 -17
- package/src/three/shaders/cubeBlockShader.ts +85 -96
- package/src/three/shaders/legacyBlockShader.ts +21 -43
- package/src/three/shaders/textureIndexMapping.ts +89 -95
- package/src/three/shaders/tintPalette.ts +156 -170
- package/src/three/signTextureCache.ts +9 -12
- package/src/three/skyboxRenderer.ts +62 -70
- package/src/three/tests/chunkMeshManagerLegacy.test.ts +34 -34
- package/src/three/tests/cubeDrawSpans.test.ts +55 -25
- package/src/three/tests/globalBlockBuffer.test.ts +217 -0
- package/src/three/tests/globalLegacyBuffer.test.ts +300 -41
- package/src/three/tests/legacyMultiDraw.test.ts +8 -29
- package/src/three/tests/pr3PerFrameCpuCuts.test.ts +106 -29
- package/src/three/tests/signTextureCache.test.ts +4 -4
- package/src/three/threeJsMedia.ts +55 -72
- package/src/three/threeJsParticles.ts +32 -41
- package/src/three/threeJsSound.ts +3 -3
- package/src/three/threeJsUtils.ts +3 -3
- package/src/three/threeWorker.ts +2 -2
- package/src/three/waypointSprite.ts +55 -82
- package/src/three/waypoints.ts +20 -23
- package/src/three/world/cursorBlock.ts +25 -12
- package/src/three/world/vr.ts +11 -17
- package/src/three/worldGeometryExport.ts +15 -34
- package/src/three/worldRendererThree.ts +117 -129
- package/src/wasm-mesher/bridge/convertChunk.ts +3 -9
- package/src/wasm-mesher/bridge/render-from-wasm.ts +204 -229
- package/src/wasm-mesher/bridge/shaderCubeBridge.ts +26 -67
- package/src/wasm-mesher/tests/cullingRegression.test.ts +307 -0
- package/src/wasm-mesher/tests/heightmapParity.test.ts +8 -18
- package/src/wasm-mesher/tests/mesherWasmConversionCache.test.ts +2 -2
- package/src/wasm-mesher/tests/sectionRaycastAabb.test.ts +17 -4
- package/src/wasm-mesher/tests/shaderCubeInstances.test.ts +103 -141
- package/src/wasm-mesher/tests/splitColumnWasmOutput.test.ts +14 -22
- package/src/wasm-mesher/worker/mesherWasm.ts +150 -141
- package/src/wasm-mesher/worker/mesherWasmConversionCache.ts +2 -8
- package/src/wasm-mesher/worker/mesherWasmLightDirty.test.ts +1 -3
- package/src/wasm-mesher/worker/mesherWasmLightDirty.ts +1 -5
- package/src/wasm-mesher/worker/mesherWasmRequestTracker.ts +42 -42
- package/src/worldView/worldView.spiral.test.ts +1 -1
- package/src/worldView/worldView.ts +34 -39
- 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
|
|
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,
|
|
41
|
-
|
|
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(
|
|
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
|
|
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).
|
|
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 (
|
|
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) {
|
package/src/three/world/vr.ts
CHANGED
|
@@ -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',
|
|
124
|
+
controller1.addEventListener('connected', event => {
|
|
126
125
|
hand1.xrInputSource = event.data
|
|
127
|
-
manageXrInputSource(event.data as { gamepad: Gamepad | undefined
|
|
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',
|
|
131
|
+
controller2.addEventListener('connected', event => {
|
|
133
132
|
hand2.xrInputSource = event.data
|
|
134
|
-
manageXrInputSource(event.data as { gamepad: Gamepad | undefined
|
|
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(
|
|
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
|
|
21
|
-
cameraRotation: { pitch: 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
|
-
|
|
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
|
|
134
|
-
cameraRotation: { pitch: 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
|
-
|
|
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
|