Compare commits

...
Sign in to create a new pull request.

4 commits

Author SHA1 Message Date
Vitaly Turovsky
b0f7322a85 fix lint 2024-08-20 23:38:43 +03:00
Vitaly Turovsky
9b5eda71d6 up tooltip 2024-08-20 23:37:37 +03:00
Vitaly Turovsky
057d02454f setting fixup 2024-08-18 14:36:28 +03:00
Vitaly Turovsky
9f3e879f0e feat: minimize lags when moving between chunks (unload loaded chunks less eagerly) + a setting to control that 2024-08-18 14:36:20 +03:00
5 changed files with 22 additions and 3 deletions

View file

@ -19,6 +19,7 @@ export class WorldDataEmitter extends EventEmitter {
private readonly lastPos: Vec3
private eventListeners: Record<string, any> = {}
private readonly emitter: WorldDataEmitter
keepChunksDistance = 0
constructor (public world: typeof __type_bot['world'], public viewDistance: number, position: Vec3 = new Vec3(0, 0, 0)) {
super()
@ -191,14 +192,14 @@ export class WorldDataEmitter extends EventEmitter {
const [botX, botZ] = chunkPos(pos)
if (lastX !== botX || lastZ !== botZ || force) {
this.emitter.emit('chunkPosUpdate', { pos })
const newView = new ViewRect(botX, botZ, this.viewDistance)
const newViewToUnload = new ViewRect(botX, botZ, this.viewDistance + this.keepChunksDistance)
const chunksToUnload: Vec3[] = []
for (const coords of Object.keys(this.loadedChunks)) {
const x = parseInt(coords.split(',')[0], 10)
const z = parseInt(coords.split(',')[1], 10)
const p = new Vec3(x, 0, z)
const [chunkX, chunkZ] = chunkPos(p)
if (!newView.contains(chunkX, chunkZ)) {
if (!newViewToUnload.contains(chunkX, chunkZ)) {
chunksToUnload.push(p)
}
}

View file

@ -24,7 +24,7 @@ import './reactUi'
import { contro, onBotCreate } from './controls'
import './dragndrop'
import { possiblyCleanHandle, resetStateAfterDisconnect } from './browserfs'
import { watchOptionsAfterViewerInit } from './watchOptions'
import { watchOptionsAfterViewerInit, watchOptionsAfterWorldViewInit } from './watchOptions'
import downloadAndOpenFile from './downloadAndOpenFile'
import fs from 'fs'
@ -690,6 +690,7 @@ async function connect (connectOptions: ConnectOptions) {
const center = bot.entity.position
const worldView = window.worldView = new WorldDataEmitter(bot.world, renderDistance, center)
watchOptionsAfterWorldViewInit()
bot.on('physicsTick', () => updateCursor())

View file

@ -83,6 +83,11 @@ export const guiOptionsScheme: {
},
starfieldRendering: {},
renderEntities: {},
keepChunksDistance: {
max: 5,
unit: '',
tooltip: 'Additional distance to keep the chunks loading before unloading them by marking them as too far',
},
},
],
main: [

View file

@ -7,6 +7,7 @@ import { omitObj } from '@zardoy/utils'
const defaultOptions = {
renderDistance: 3,
keepChunksDistance: 1,
multiplayerRenderDistance: 3,
closeConfirmation: true,
autoFullScreen: false,

View file

@ -63,3 +63,14 @@ export const watchOptionsAfterViewerInit = () => {
viewer.world.starField.enabled = o.starfieldRendering
})
}
let viewWatched = false
export const watchOptionsAfterWorldViewInit = () => {
worldView!.keepChunksDistance = options.keepChunksDistance
if (viewWatched) return
viewWatched = true
watchValue(options, o => {
if (!worldView) return
worldView.keepChunksDistance = o.keepChunksDistance
})
}