From 72b4a6a76542e80b2a8d181ba5a271f7244da776 Mon Sep 17 00:00:00 2001 From: Vitaly Turovsky Date: Tue, 19 Sep 2023 22:45:43 +0300 Subject: [PATCH] sync viewer changes --- prismarine-viewer/viewer/lib/models.js | 9 +++++---- prismarine-viewer/viewer/lib/viewer.js | 7 ++++++- prismarine-viewer/viewer/lib/worldrenderer.js | 10 ++++++---- 3 files changed, 17 insertions(+), 9 deletions(-) diff --git a/prismarine-viewer/viewer/lib/models.js b/prismarine-viewer/viewer/lib/models.js index f7429c0f..9f8938ec 100644 --- a/prismarine-viewer/viewer/lib/models.js +++ b/prismarine-viewer/viewer/lib/models.js @@ -264,8 +264,8 @@ function renderElement (world, cursor, element, doAO, attr, globalMatrix, global if (block.name === 'redstone_wire') { tint = tints.redstone[`${block.getProperties().power}`] } else if (block.name === 'birch_leaves' || - block.name === 'spruce_leaves' || - block.name === 'lily_pad') { + block.name === 'spruce_leaves' || + block.name === 'lily_pad') { tint = tints.constant[block.name] } else if (block.name.includes('leaves') || block.name === 'vine') { tint = tints.foliage[biome] @@ -478,8 +478,9 @@ function matchProperties (block, properties) { } function getModelVariants (block, blockStates) { - if (block.name === 'air') return [] - const state = blockStates[block.name] ?? blockStates['missing_texture'] + // air, cave_air, void_air and so on... + if (block.name.includes('air')) return [] + const state = blockStates[block.name] ?? blockStates.missing_texture if (!state) return [] if (state.variants) { for (const [properties, variant] of Object.entries(state.variants)) { diff --git a/prismarine-viewer/viewer/lib/viewer.js b/prismarine-viewer/viewer/lib/viewer.js index 85a28cc4..08739003 100644 --- a/prismarine-viewer/viewer/lib/viewer.js +++ b/prismarine-viewer/viewer/lib/viewer.js @@ -29,6 +29,7 @@ class Viewer { this.domElement = renderer.domElement this.playerHeight = 1.6 + this.isSneaking = false } resetAll () { @@ -67,7 +68,11 @@ class Viewer { } setFirstPersonCamera (pos, yaw, pitch) { - if (pos) new TWEEN.Tween(this.camera.position).to({ x: pos.x, y: pos.y + this.playerHeight, z: pos.z }, 50).start() + if (pos) { + let y = pos.y + this.playerHeight + if (this.isSneaking) y -= 0.3 + new TWEEN.Tween(this.camera.position).to({ x: pos.x, y, z: pos.z }, 50).start() + } this.camera.rotation.set(pitch, yaw, 0, 'ZYX') } diff --git a/prismarine-viewer/viewer/lib/worldrenderer.js b/prismarine-viewer/viewer/lib/worldrenderer.js index 5db4bf42..744224a7 100644 --- a/prismarine-viewer/viewer/lib/worldrenderer.js +++ b/prismarine-viewer/viewer/lib/worldrenderer.js @@ -18,6 +18,8 @@ class WorldRenderer { this.loadedChunks = {} this.sectionsOutstanding = new Set() this.renderUpdateEmitter = new EventEmitter() + this.blockStatesData = undefined + this.texturesDataUrl = undefined this.material = new THREE.MeshLambertMaterial({ vertexColors: true, transparent: true, alphaTest: 0.1 }) @@ -81,11 +83,11 @@ class WorldRenderer { worker.postMessage({ type: 'version', version }) } - this.updateData() + this.updateTexturesData() } - updateData () { - loadTexture(globalThis.texturePackDataUrl || `textures/${this.version}.png`, texture => { + updateTexturesData () { + loadTexture(this.texturesDataUrl || `textures/${this.version}.png`, texture => { texture.magFilter = THREE.NearestFilter texture.minFilter = THREE.NearestFilter texture.flipY = false @@ -94,7 +96,7 @@ class WorldRenderer { const loadBlockStates = () => { return new Promise(resolve => { - if (globalThis.texturePackDataBlockStates) return resolve(globalThis.texturePackDataBlockStates) + if (this.blockStatesData) return resolve(this.blockStatesData) return loadJSON(`blocksStates/${this.version}.json`, resolve) }) }