From d2b59f57973d630933f7ed091cfcd489fb72b39d Mon Sep 17 00:00:00 2001 From: Vitaly Date: Thu, 23 Nov 2023 06:12:03 +0300 Subject: [PATCH] fix: revert smooth fps patch to fix render issues (regression) fix: forcefully cleanup the scene from chunks with f3+a --- prismarine-viewer/viewer/lib/worldrenderer.ts | 28 ++++++++++--------- src/controls.ts | 18 +++++++++++- src/react/Singleplayer.tsx | 2 +- 3 files changed, 33 insertions(+), 15 deletions(-) diff --git a/prismarine-viewer/viewer/lib/worldrenderer.ts b/prismarine-viewer/viewer/lib/worldrenderer.ts index 3fc4b487..d0aedd5d 100644 --- a/prismarine-viewer/viewer/lib/worldrenderer.ts +++ b/prismarine-viewer/viewer/lib/worldrenderer.ts @@ -36,6 +36,7 @@ export class WorldRenderer { lastCamUpdate = 0 droppedFpsPercentage = 0 initialChunksLoad = true + enableChunksLoadDelay = false texturesVersion?: string @@ -66,19 +67,19 @@ export class WorldRenderer { const chunkCoords = data.key.split(',') if (!this.loadedChunks[chunkCoords[0] + ',' + chunkCoords[2]] || !data.geometry.positions.length || !this.active) return - if (!this.initialChunksLoad) { - const newPromise = new Promise(resolve => { - if (this.droppedFpsPercentage > 0.5) { - setTimeout(resolve, 1000 / 50 * this.droppedFpsPercentage) - } else { - setTimeout(resolve) - } - }) - this.promisesQueue.push(newPromise) - for (const promise of this.promisesQueue) { - await promise - } - } + // if (!this.initialChunksLoad && this.enableChunksLoadDelay) { + // const newPromise = new Promise(resolve => { + // if (this.droppedFpsPercentage > 0.5) { + // setTimeout(resolve, 1000 / 50 * this.droppedFpsPercentage) + // } else { + // setTimeout(resolve) + // } + // }) + // this.promisesQueue.push(newPromise) + // for (const promise of this.promisesQueue) { + // await promise + // } + // } const geometry = new THREE.BufferGeometry() geometry.setAttribute('position', new THREE.BufferAttribute(data.geometry.positions, 3)) @@ -95,6 +96,7 @@ export class WorldRenderer { const boxHelper = new THREE.BoxHelper(mesh, 0xffff00) boxHelper.name = 'helper' object.add(boxHelper) + object.name = 'chunk' if (!this.showChunkBorders) { boxHelper.visible = false } diff --git a/src/controls.ts b/src/controls.ts index 1034ab42..7e3565f4 100644 --- a/src/controls.ts +++ b/src/controls.ts @@ -205,7 +205,17 @@ contro.on('trigger', ({ command }) => { openPlayerInventory() break case 'general.drop': - if (bot.heldItem) bot.tossStack(bot.heldItem) + // if (bot.heldItem/* && ctrl */) bot.tossStack(bot.heldItem) + bot._client.write('block_dig', { + 'status': 4, + 'location': { + 'x': 0, + 'z': 0, + 'y': 0 + }, + 'face': 0, + sequence: 0 + }) break case 'general.chat': document.getElementById('hud').shadowRoot.getElementById('chat').enableChat() @@ -235,6 +245,12 @@ export const f3Keybinds = [ for (const [x, z] of loadedChunks) { worldView!.unloadChunk({ x, z }) } + for (const child of viewer.scene.children) { + if (child.name === 'chunk') { // should not happen + viewer.scene.remove(child) + console.warn('forcefully removed chunk from scene') + } + } if (localServer) { //@ts-expect-error not sure why it is private... maybe revisit api? localServer.players[0].world.columns = {} diff --git a/src/react/Singleplayer.tsx b/src/react/Singleplayer.tsx index c76e6f90..b16067a0 100644 --- a/src/react/Singleplayer.tsx +++ b/src/react/Singleplayer.tsx @@ -98,7 +98,7 @@ export default ({ worldData, onGeneralAction, onWorldAction }: Props) => {
- +