minecraft-renderer 0.1.78 → 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 +32 -32
- package/dist/minecraft-renderer.js.meta.json +1 -1
- package/dist/threeWorker.js +415 -415
- 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 +329 -301
- 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 +174 -99
- package/src/three/globalLegacyBuffer.ts +465 -136
- 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 +93 -0
- 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 +133 -25
- 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 +460 -58
- package/src/three/tests/legacyMultiDraw.test.ts +88 -0
- package/src/three/tests/pr3PerFrameCpuCuts.test.ts +370 -0
- 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 +131 -133
- 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
|
@@ -22,8 +22,12 @@ export class WorldBlocksMenuBackground implements MenuBackgroundView {
|
|
|
22
22
|
private _scene: THREE.Scene
|
|
23
23
|
private _camera: THREE.PerspectiveCamera
|
|
24
24
|
|
|
25
|
-
get scene() {
|
|
26
|
-
|
|
25
|
+
get scene() {
|
|
26
|
+
return this._scene
|
|
27
|
+
}
|
|
28
|
+
get camera() {
|
|
29
|
+
return this._camera
|
|
30
|
+
}
|
|
27
31
|
|
|
28
32
|
private worldRenderer?: WorldRendererCommon | WorldRendererThree
|
|
29
33
|
WorldRendererClass = WorldRendererThree
|
|
@@ -35,12 +39,7 @@ export class WorldBlocksMenuBackground implements MenuBackgroundView {
|
|
|
35
39
|
) {
|
|
36
40
|
this._scene = new THREE.Scene()
|
|
37
41
|
this._scene.background = new THREE.Color(0x32_45_68)
|
|
38
|
-
this._camera = new THREE.PerspectiveCamera(
|
|
39
|
-
85,
|
|
40
|
-
documentRenderer.canvas.width / documentRenderer.canvas.height,
|
|
41
|
-
0.05,
|
|
42
|
-
1000
|
|
43
|
-
)
|
|
42
|
+
this._camera = new THREE.PerspectiveCamera(85, documentRenderer.canvas.width / documentRenderer.canvas.height, 0.05, 1000)
|
|
44
43
|
this.camera.position.set(0, 0, 0)
|
|
45
44
|
this.camera.rotation.set(0, 0, 0)
|
|
46
45
|
}
|
|
@@ -57,7 +56,7 @@ export class WorldBlocksMenuBackground implements MenuBackgroundView {
|
|
|
57
56
|
const PrismarineBlock = require('prismarine-block')
|
|
58
57
|
const Block = PrismarineBlock(version)
|
|
59
58
|
const mcData = (globalThis as any).mcData
|
|
60
|
-
const fullBlocks = mcData.blocksArray.filter((block: { name: string
|
|
59
|
+
const fullBlocks = mcData.blocksArray.filter((block: { name: string; defaultState: number }) => {
|
|
61
60
|
if (!block.name.includes('stained_glass')) return false
|
|
62
61
|
const b = Block.fromStateId(block.defaultState, 0)
|
|
63
62
|
if (b.shapes?.length !== 1) return false
|
|
@@ -82,19 +81,15 @@ export class WorldBlocksMenuBackground implements MenuBackgroundView {
|
|
|
82
81
|
const worldView = new WorldView(world, 2, initPos)
|
|
83
82
|
if (this.abortSignal.aborted) return
|
|
84
83
|
|
|
85
|
-
this.worldRenderer = new this.WorldRendererClass(
|
|
86
|
-
|
|
87
|
-
|
|
88
|
-
|
|
89
|
-
|
|
90
|
-
|
|
91
|
-
|
|
92
|
-
|
|
93
|
-
|
|
94
|
-
nonReactiveState: getDefaultRendererState().nonReactive,
|
|
95
|
-
resourcesManager: fullResourceManager as ResourcesManagerTransferred
|
|
96
|
-
}
|
|
97
|
-
)
|
|
84
|
+
this.worldRenderer = new this.WorldRendererClass(this.documentRenderer.renderer, this.options, {
|
|
85
|
+
version,
|
|
86
|
+
worldView,
|
|
87
|
+
inWorldRenderingConfig: defaultWorldRendererConfig,
|
|
88
|
+
playerStateReactive: getInitialPlayerStateRenderer().reactive,
|
|
89
|
+
rendererState: getDefaultRendererState().reactive,
|
|
90
|
+
nonReactiveState: getDefaultRendererState().nonReactive,
|
|
91
|
+
resourcesManager: fullResourceManager as ResourcesManagerTransferred
|
|
92
|
+
})
|
|
98
93
|
|
|
99
94
|
if (this.worldRenderer instanceof WorldRendererThree) {
|
|
100
95
|
this._scene = this.worldRenderer.realScene
|
|
@@ -127,18 +122,25 @@ export class WorldBlocksMenuBackground implements MenuBackgroundView {
|
|
|
127
122
|
const initY = camera.position.y
|
|
128
123
|
let prevTween: tweenJs.Tween<THREE.Vector3> | undefined
|
|
129
124
|
|
|
130
|
-
document.body.addEventListener(
|
|
131
|
-
|
|
132
|
-
|
|
133
|
-
|
|
134
|
-
|
|
135
|
-
|
|
136
|
-
|
|
137
|
-
|
|
138
|
-
|
|
139
|
-
|
|
140
|
-
|
|
141
|
-
|
|
142
|
-
|
|
125
|
+
document.body.addEventListener(
|
|
126
|
+
'pointermove',
|
|
127
|
+
e => {
|
|
128
|
+
if (e.pointerType !== 'mouse') return
|
|
129
|
+
const SCALE = 0.2
|
|
130
|
+
const xRel = e.clientX / window.innerWidth - 0.5
|
|
131
|
+
const yRel = -(e.clientY / window.innerHeight - 0.5)
|
|
132
|
+
prevTween?.stop()
|
|
133
|
+
prevTween = new tweenJs.Tween(camera.position).to(
|
|
134
|
+
{
|
|
135
|
+
x: initX + xRel * SCALE,
|
|
136
|
+
y: initY + yRel * SCALE
|
|
137
|
+
},
|
|
138
|
+
0
|
|
139
|
+
)
|
|
140
|
+
prevTween.start()
|
|
141
|
+
camera.updateProjectionMatrix()
|
|
142
|
+
},
|
|
143
|
+
{ signal: this.abortSignal }
|
|
144
|
+
)
|
|
143
145
|
}
|
|
144
146
|
}
|
|
@@ -19,7 +19,7 @@ function ensureTintsLoaded(): void {
|
|
|
19
19
|
|
|
20
20
|
function prepareTints(data: any): Record<string, [number, number, number]> {
|
|
21
21
|
const result: Record<string, [number, number, number]> = {}
|
|
22
|
-
const defaultColor = tintToGl(data.default ??
|
|
22
|
+
const defaultColor = tintToGl(data.default ?? 0xffffff)
|
|
23
23
|
if (data.data) {
|
|
24
24
|
for (const entry of data.data) {
|
|
25
25
|
const color = tintToGl(entry.color)
|
|
@@ -36,11 +36,7 @@ function prepareTints(data: any): Record<string, [number, number, number]> {
|
|
|
36
36
|
}
|
|
37
37
|
|
|
38
38
|
function tintToGl(tint: number): [number, number, number] {
|
|
39
|
-
return [
|
|
40
|
-
((tint >> 16) & 0xFF) / 255,
|
|
41
|
-
((tint >> 8) & 0xFF) / 255,
|
|
42
|
-
(tint & 0xFF) / 255,
|
|
43
|
-
]
|
|
39
|
+
return [((tint >> 16) & 0xff) / 255, ((tint >> 8) & 0xff) / 255, (tint & 0xff) / 255]
|
|
44
40
|
}
|
|
45
41
|
|
|
46
42
|
function resolveTintColor(blockName: string, biomeName: string): [number, number, number] {
|
|
@@ -63,9 +59,15 @@ function resolveTintColor(blockName: string, biomeName: string): [number, number
|
|
|
63
59
|
interface BreakParticle {
|
|
64
60
|
mesh: THREE.Mesh
|
|
65
61
|
active: boolean
|
|
66
|
-
x: number
|
|
67
|
-
|
|
68
|
-
|
|
62
|
+
x: number
|
|
63
|
+
y: number
|
|
64
|
+
z: number
|
|
65
|
+
prevX: number
|
|
66
|
+
prevY: number
|
|
67
|
+
prevZ: number
|
|
68
|
+
xd: number
|
|
69
|
+
yd: number
|
|
70
|
+
zd: number
|
|
69
71
|
age: number
|
|
70
72
|
maxAge: number
|
|
71
73
|
onGround: boolean
|
|
@@ -232,12 +234,24 @@ export class BlockBreakParticlesModule implements RendererModuleController {
|
|
|
232
234
|
|
|
233
235
|
// Override position on the hit face axis to be at face + 0.1 offset outward
|
|
234
236
|
switch (face) {
|
|
235
|
-
case 0:
|
|
236
|
-
|
|
237
|
-
|
|
238
|
-
case
|
|
239
|
-
|
|
240
|
-
|
|
237
|
+
case 0:
|
|
238
|
+
py = worldY - 0.1
|
|
239
|
+
break
|
|
240
|
+
case 1:
|
|
241
|
+
py = worldY + 1.0 + 0.1
|
|
242
|
+
break
|
|
243
|
+
case 2:
|
|
244
|
+
pz = worldZ - 0.1
|
|
245
|
+
break
|
|
246
|
+
case 3:
|
|
247
|
+
pz = worldZ + 1.0 + 0.1
|
|
248
|
+
break
|
|
249
|
+
case 4:
|
|
250
|
+
px = worldX - 0.1
|
|
251
|
+
break
|
|
252
|
+
case 5:
|
|
253
|
+
px = worldX + 1.0 + 0.1
|
|
254
|
+
break
|
|
241
255
|
}
|
|
242
256
|
|
|
243
257
|
// Small random velocity, heavily damped
|
|
@@ -251,12 +265,17 @@ export class BlockBreakParticlesModule implements RendererModuleController {
|
|
|
251
265
|
}
|
|
252
266
|
|
|
253
267
|
private createParticle(
|
|
254
|
-
px: number,
|
|
255
|
-
|
|
268
|
+
px: number,
|
|
269
|
+
py: number,
|
|
270
|
+
pz: number,
|
|
271
|
+
xd: number,
|
|
272
|
+
yd: number,
|
|
273
|
+
zd: number,
|
|
256
274
|
maxAge: number,
|
|
257
275
|
texInfo: { u: number; v: number; su: number; sv: number },
|
|
258
276
|
floorMap: number[],
|
|
259
|
-
blockX: number,
|
|
277
|
+
blockX: number,
|
|
278
|
+
blockZ: number,
|
|
260
279
|
scaleFactor = 1.0,
|
|
261
280
|
tintColor: [number, number, number] = [1, 1, 1]
|
|
262
281
|
): void {
|
|
@@ -282,9 +301,15 @@ export class BlockBreakParticlesModule implements RendererModuleController {
|
|
|
282
301
|
this.setGeometryUVs(particle.mesh.geometry as THREE.PlaneGeometry, particleU, particleV, particleSU, particleSV)
|
|
283
302
|
|
|
284
303
|
particle.active = true
|
|
285
|
-
particle.x = px
|
|
286
|
-
particle.
|
|
287
|
-
particle.
|
|
304
|
+
particle.x = px
|
|
305
|
+
particle.y = py
|
|
306
|
+
particle.z = pz
|
|
307
|
+
particle.prevX = px
|
|
308
|
+
particle.prevY = py
|
|
309
|
+
particle.prevZ = pz
|
|
310
|
+
particle.xd = xd
|
|
311
|
+
particle.yd = yd
|
|
312
|
+
particle.zd = zd
|
|
288
313
|
particle.age = 0
|
|
289
314
|
particle.maxAge = maxAge
|
|
290
315
|
particle.onGround = false
|
|
@@ -321,15 +346,21 @@ export class BlockBreakParticlesModule implements RendererModuleController {
|
|
|
321
346
|
const particle: BreakParticle = {
|
|
322
347
|
mesh,
|
|
323
348
|
active: false,
|
|
324
|
-
x: 0,
|
|
325
|
-
|
|
326
|
-
|
|
349
|
+
x: 0,
|
|
350
|
+
y: 0,
|
|
351
|
+
z: 0,
|
|
352
|
+
prevX: 0,
|
|
353
|
+
prevY: 0,
|
|
354
|
+
prevZ: 0,
|
|
355
|
+
xd: 0,
|
|
356
|
+
yd: 0,
|
|
357
|
+
zd: 0,
|
|
327
358
|
age: 0,
|
|
328
359
|
maxAge: 0,
|
|
329
360
|
onGround: false,
|
|
330
361
|
floorMap: [],
|
|
331
362
|
blockX: 0,
|
|
332
|
-
blockZ: 0
|
|
363
|
+
blockZ: 0
|
|
333
364
|
}
|
|
334
365
|
|
|
335
366
|
this.particles.push(particle)
|
|
@@ -402,7 +433,7 @@ export class BlockBreakParticlesModule implements RendererModuleController {
|
|
|
402
433
|
u: texInfo.u,
|
|
403
434
|
v: texInfo.v,
|
|
404
435
|
su: texInfo.su ?? atlasJson.suSv,
|
|
405
|
-
sv: texInfo.sv ?? atlasJson.suSv
|
|
436
|
+
sv: texInfo.sv ?? atlasJson.suSv
|
|
406
437
|
}
|
|
407
438
|
}
|
|
408
439
|
|
|
@@ -424,7 +455,7 @@ export class BlockBreakParticlesModule implements RendererModuleController {
|
|
|
424
455
|
map: atlasTexture,
|
|
425
456
|
vertexColors: true,
|
|
426
457
|
transparent: true,
|
|
427
|
-
alphaTest: 0.1
|
|
458
|
+
alphaTest: 0.1
|
|
428
459
|
})
|
|
429
460
|
}
|
|
430
461
|
}
|
|
@@ -434,5 +465,5 @@ export const blockBreakParticlesManifest: RendererModuleManifest = {
|
|
|
434
465
|
controller: BlockBreakParticlesModule,
|
|
435
466
|
enabledDefault: true,
|
|
436
467
|
cannotBeDisabled: true,
|
|
437
|
-
requiresHeightmap: false
|
|
468
|
+
requiresHeightmap: false
|
|
438
469
|
}
|
|
@@ -7,7 +7,7 @@ export class CameraBobbingModule implements RendererModuleController {
|
|
|
7
7
|
private lastBobWalkDist = 0
|
|
8
8
|
private lastBobTickTime = 0
|
|
9
9
|
|
|
10
|
-
constructor(private readonly worldRenderer: WorldRendererThree) {
|
|
10
|
+
constructor(private readonly worldRenderer: WorldRendererThree) {}
|
|
11
11
|
|
|
12
12
|
enable(): void {
|
|
13
13
|
this.enabled = true
|
|
@@ -29,10 +29,7 @@ export class CameraBobbingModule implements RendererModuleController {
|
|
|
29
29
|
// Spectator (gm3) flies through blocks and does not "walk" — view bobbing
|
|
30
30
|
// there only makes the camera feel jittery/unstable. Keep it gated even
|
|
31
31
|
// when the user has `viewBobbing` enabled in settings.
|
|
32
|
-
const shouldBobCamera =
|
|
33
|
-
config.viewBobbing
|
|
34
|
-
&& perspective === 'first_person'
|
|
35
|
-
&& !this.worldRenderer.playerStateUtils.isSpectator()
|
|
32
|
+
const shouldBobCamera = config.viewBobbing && perspective === 'first_person' && !this.worldRenderer.playerStateUtils.isSpectator()
|
|
36
33
|
|
|
37
34
|
if (shouldBobCamera) {
|
|
38
35
|
if (this.worldRenderer.playerStateReactive.walkDist !== this.lastBobWalkDist) {
|
|
@@ -62,5 +59,5 @@ export const cameraBobbingManifest: RendererModuleManifest = {
|
|
|
62
59
|
id: 'cameraBobbing',
|
|
63
60
|
controller: CameraBobbingModule,
|
|
64
61
|
enabledDefault: true,
|
|
65
|
-
cannotBeDisabled: true
|
|
62
|
+
cannotBeDisabled: true
|
|
66
63
|
}
|
|
@@ -32,7 +32,7 @@ export class RainModule implements RendererModuleController {
|
|
|
32
32
|
constructor(private readonly worldRenderer: WorldRendererThree) {
|
|
33
33
|
this.configUnsubs.push(
|
|
34
34
|
this.worldRenderer.onReactiveConfigUpdated('rainColor', () => this.syncRainAppearance()),
|
|
35
|
-
this.worldRenderer.onReactiveConfigUpdated('rainOpacity', () => this.syncRainAppearance())
|
|
35
|
+
this.worldRenderer.onReactiveConfigUpdated('rainOpacity', () => this.syncRainAppearance())
|
|
36
36
|
)
|
|
37
37
|
}
|
|
38
38
|
|
|
@@ -59,7 +59,7 @@ export class RainModule implements RendererModuleController {
|
|
|
59
59
|
return this.worldRenderer.worldRendererConfig.isRaining === true
|
|
60
60
|
}
|
|
61
61
|
|
|
62
|
-
render?: (deltaTime: number) => void =
|
|
62
|
+
render?: (deltaTime: number) => void = deltaTime => {
|
|
63
63
|
if (!this.enabled || !this.instancedMesh || !this.material) return
|
|
64
64
|
|
|
65
65
|
const cameraPos = this.worldRenderer.getCameraPosition()
|
|
@@ -103,18 +103,13 @@ export class RainModule implements RendererModuleController {
|
|
|
103
103
|
const heightY = cachedHeightmap?.[localZ * 16 + localX]
|
|
104
104
|
|
|
105
105
|
// Respawn when: out of range, hit heightmap surface (heightY + 1 = block top face), or fell too far
|
|
106
|
-
const shouldRespawn =
|
|
107
|
-
(heightY !== undefined && heightY !== -32768 && worldY <= heightY + 1 + particle.despawnOffset) ||
|
|
108
|
-
relativeY < RESPAWN_BELOW
|
|
106
|
+
const shouldRespawn =
|
|
107
|
+
horizontalDist > RANGE || (heightY !== undefined && heightY !== -32768 && worldY <= heightY + 1 + particle.despawnOffset) || relativeY < RESPAWN_BELOW
|
|
109
108
|
|
|
110
109
|
if (shouldRespawn) {
|
|
111
110
|
this.respawnParticle(position)
|
|
112
111
|
const speed = FALL_SPEED_MIN + Math.random() * (FALL_SPEED_MAX - FALL_SPEED_MIN)
|
|
113
|
-
particle.velocity.set(
|
|
114
|
-
(Math.random() - 0.5) * HORIZONTAL_DRIFT,
|
|
115
|
-
-speed,
|
|
116
|
-
(Math.random() - 0.5) * HORIZONTAL_DRIFT,
|
|
117
|
-
)
|
|
112
|
+
particle.velocity.set((Math.random() - 0.5) * HORIZONTAL_DRIFT, -speed, (Math.random() - 0.5) * HORIZONTAL_DRIFT)
|
|
118
113
|
particle.despawnOffset = Math.random() * 0.5
|
|
119
114
|
}
|
|
120
115
|
|
|
@@ -159,7 +154,7 @@ export class RainModule implements RendererModuleController {
|
|
|
159
154
|
opacity: Math.max(0, Math.min(1, rainOpacity)),
|
|
160
155
|
// Must write depth so log-depth blocks occlude rain correctly (see cubeBlockShader).
|
|
161
156
|
depthWrite: true,
|
|
162
|
-
fog: false
|
|
157
|
+
fog: false
|
|
163
158
|
})
|
|
164
159
|
|
|
165
160
|
this.instancedMesh = new THREE.InstancedMesh(this.geometry, this.material, PARTICLE_COUNT)
|
|
@@ -177,13 +172,9 @@ export class RainModule implements RendererModuleController {
|
|
|
177
172
|
|
|
178
173
|
const speed = FALL_SPEED_MIN + Math.random() * (FALL_SPEED_MAX - FALL_SPEED_MIN)
|
|
179
174
|
this.particles.push({
|
|
180
|
-
velocity: new THREE.Vector3(
|
|
181
|
-
(Math.random() - 0.5) * HORIZONTAL_DRIFT,
|
|
182
|
-
-speed,
|
|
183
|
-
(Math.random() - 0.5) * HORIZONTAL_DRIFT,
|
|
184
|
-
),
|
|
175
|
+
velocity: new THREE.Vector3((Math.random() - 0.5) * HORIZONTAL_DRIFT, -speed, (Math.random() - 0.5) * HORIZONTAL_DRIFT),
|
|
185
176
|
age: 0,
|
|
186
|
-
despawnOffset: Math.random() * 0.5
|
|
177
|
+
despawnOffset: Math.random() * 0.5
|
|
187
178
|
})
|
|
188
179
|
}
|
|
189
180
|
|
|
@@ -194,11 +185,7 @@ export class RainModule implements RendererModuleController {
|
|
|
194
185
|
private respawnParticle(position: THREE.Vector3): void {
|
|
195
186
|
const angle = Math.random() * Math.PI * 2
|
|
196
187
|
const distance = Math.random() * RANGE
|
|
197
|
-
position.set(
|
|
198
|
-
Math.cos(angle) * distance,
|
|
199
|
-
HEIGHT,
|
|
200
|
-
Math.sin(angle) * distance,
|
|
201
|
-
)
|
|
188
|
+
position.set(Math.cos(angle) * distance, HEIGHT, Math.sin(angle) * distance)
|
|
202
189
|
}
|
|
203
190
|
}
|
|
204
191
|
|
|
@@ -206,5 +193,5 @@ export const rainManifest: RendererModuleManifest = {
|
|
|
206
193
|
id: 'rain',
|
|
207
194
|
controller: RainModule,
|
|
208
195
|
enabledDefault: false,
|
|
209
|
-
requiresHeightmap: true
|
|
196
|
+
requiresHeightmap: true
|
|
210
197
|
}
|
|
@@ -53,7 +53,7 @@ export class SciFiWorldRevealModule implements RendererModuleController {
|
|
|
53
53
|
transparent: true,
|
|
54
54
|
opacity: 1,
|
|
55
55
|
blending: THREE.AdditiveBlending,
|
|
56
|
-
depthWrite: false
|
|
56
|
+
depthWrite: false
|
|
57
57
|
})
|
|
58
58
|
|
|
59
59
|
private readonly wireframeGlowMaterial = new THREE.LineBasicMaterial({
|
|
@@ -61,7 +61,7 @@ export class SciFiWorldRevealModule implements RendererModuleController {
|
|
|
61
61
|
transparent: true,
|
|
62
62
|
opacity: 0.55,
|
|
63
63
|
blending: THREE.AdditiveBlending,
|
|
64
|
-
depthWrite: false
|
|
64
|
+
depthWrite: false
|
|
65
65
|
})
|
|
66
66
|
|
|
67
67
|
constructor(private readonly worldRenderer: WorldRendererThree) {
|
|
@@ -119,12 +119,7 @@ export class SciFiWorldRevealModule implements RendererModuleController {
|
|
|
119
119
|
|
|
120
120
|
this.tryStartGlobalWave(now)
|
|
121
121
|
|
|
122
|
-
if (
|
|
123
|
-
!this.globalWaveStarted &&
|
|
124
|
-
this.firstQueuedMs !== null &&
|
|
125
|
-
this.sections.size > 0 &&
|
|
126
|
-
now - this.firstQueuedMs >= GLOBAL_START_FALLBACK_MS
|
|
127
|
-
) {
|
|
122
|
+
if (!this.globalWaveStarted && this.firstQueuedMs !== null && this.sections.size > 0 && now - this.firstQueuedMs >= GLOBAL_START_FALLBACK_MS) {
|
|
128
123
|
this.startGlobalWave(now)
|
|
129
124
|
}
|
|
130
125
|
|
|
@@ -209,7 +204,7 @@ export class SciFiWorldRevealModule implements RendererModuleController {
|
|
|
209
204
|
wireframeGroup: null,
|
|
210
205
|
mesh,
|
|
211
206
|
savedMaterial: null,
|
|
212
|
-
pulseOffset: Math.random() * Math.PI * 2
|
|
207
|
+
pulseOffset: Math.random() * Math.PI * 2
|
|
213
208
|
})
|
|
214
209
|
|
|
215
210
|
mesh.visible = false
|
|
@@ -343,7 +338,7 @@ export class SciFiWorldRevealModule implements RendererModuleController {
|
|
|
343
338
|
mat.color.setRGB((13 / 255) * intensity, (234 / 255) * intensity, (238 / 255) * intensity)
|
|
344
339
|
}
|
|
345
340
|
if (glow?.material) {
|
|
346
|
-
(glow.material as THREE.LineBasicMaterial).opacity = basePulse * 0.4
|
|
341
|
+
;(glow.material as THREE.LineBasicMaterial).opacity = basePulse * 0.4
|
|
347
342
|
}
|
|
348
343
|
}
|
|
349
344
|
|
|
@@ -357,7 +352,7 @@ export class SciFiWorldRevealModule implements RendererModuleController {
|
|
|
357
352
|
}
|
|
358
353
|
const mesh = section.mesh
|
|
359
354
|
if (mesh && section.savedMaterial && !Array.isArray(mesh.material)) {
|
|
360
|
-
(mesh.material as THREE.Material).opacity = eased
|
|
355
|
+
;(mesh.material as THREE.Material).opacity = eased
|
|
361
356
|
}
|
|
362
357
|
this.setShaderMeshesVisible(section.key, eased > 0.001)
|
|
363
358
|
}
|
|
@@ -430,7 +425,7 @@ export class SciFiWorldRevealModule implements RendererModuleController {
|
|
|
430
425
|
private unhideAllSectionMeshes(): void {
|
|
431
426
|
for (const obj of Object.values(this.worldRenderer.chunkMeshManager.sectionObjects)) {
|
|
432
427
|
if (!obj) continue
|
|
433
|
-
obj.traverse(
|
|
428
|
+
obj.traverse(child => {
|
|
434
429
|
if (child instanceof THREE.Mesh && (child.name === 'mesh' || child.name === 'shaderMesh')) {
|
|
435
430
|
child.visible = true
|
|
436
431
|
}
|
|
@@ -441,7 +436,7 @@ export class SciFiWorldRevealModule implements RendererModuleController {
|
|
|
441
436
|
private disposeWireframeGroup(group: THREE.Group): void {
|
|
442
437
|
this.worldRenderer.sceneOrigin.removeAndUntrackAll(group)
|
|
443
438
|
this.worldRenderer.realScene.remove(group)
|
|
444
|
-
group.traverse(
|
|
439
|
+
group.traverse(child => {
|
|
445
440
|
const line = child as THREE.LineSegments
|
|
446
441
|
line.geometry?.dispose()
|
|
447
442
|
const mat = line.material
|
|
@@ -469,27 +464,18 @@ export class SciFiWorldRevealModule implements RendererModuleController {
|
|
|
469
464
|
return wireframeGeom
|
|
470
465
|
}
|
|
471
466
|
|
|
472
|
-
private addEdge(
|
|
473
|
-
positions: Float32Array,
|
|
474
|
-
i0: number,
|
|
475
|
-
i1: number,
|
|
476
|
-
linePositions: number[],
|
|
477
|
-
edgeSet: Set<string>,
|
|
478
|
-
): void {
|
|
467
|
+
private addEdge(positions: Float32Array, i0: number, i1: number, linePositions: number[], edgeSet: Set<string>): void {
|
|
479
468
|
const minI = Math.min(i0, i1)
|
|
480
469
|
const maxI = Math.max(i0, i1)
|
|
481
470
|
const edgeKey = `${minI}-${maxI}`
|
|
482
471
|
if (edgeSet.has(edgeKey)) return
|
|
483
472
|
edgeSet.add(edgeKey)
|
|
484
|
-
linePositions.push(
|
|
485
|
-
positions[i0 * 3]!, positions[i0 * 3 + 1]!, positions[i0 * 3 + 2]!,
|
|
486
|
-
positions[i1 * 3]!, positions[i1 * 3 + 1]!, positions[i1 * 3 + 2]!,
|
|
487
|
-
)
|
|
473
|
+
linePositions.push(positions[i0 * 3]!, positions[i0 * 3 + 1]!, positions[i0 * 3 + 2]!, positions[i1 * 3]!, positions[i1 * 3 + 1]!, positions[i1 * 3 + 2]!)
|
|
488
474
|
}
|
|
489
475
|
}
|
|
490
476
|
|
|
491
477
|
export const sciFiWorldRevealManifest: RendererModuleManifest = {
|
|
492
478
|
id: 'futuristicReveal',
|
|
493
479
|
controller: SciFiWorldRevealModule,
|
|
494
|
-
enabledDefault: true
|
|
480
|
+
enabledDefault: true
|
|
495
481
|
}
|
|
@@ -33,7 +33,7 @@ class StarfieldMaterial extends THREE.ShaderMaterial {
|
|
|
33
33
|
|
|
34
34
|
#include <tonemapping_fragment>
|
|
35
35
|
#include <${threeVersion >= 154 ? 'colorspace_fragment' : 'encodings_fragment'}>
|
|
36
|
-
}
|
|
36
|
+
}`
|
|
37
37
|
})
|
|
38
38
|
}
|
|
39
39
|
}
|
|
@@ -46,7 +46,7 @@ export class StarfieldModule implements RendererModuleController {
|
|
|
46
46
|
/** Current star brightness multiplier; lerps toward 0 while raining, 1 otherwise. */
|
|
47
47
|
private fade = 1
|
|
48
48
|
|
|
49
|
-
constructor(private readonly worldRenderer: WorldRendererThree) {
|
|
49
|
+
constructor(private readonly worldRenderer: WorldRendererThree) {}
|
|
50
50
|
|
|
51
51
|
enable(): void {
|
|
52
52
|
if (this.enabled) return
|
|
@@ -76,7 +76,7 @@ export class StarfieldModule implements RendererModuleController {
|
|
|
76
76
|
return this.currentTime > nightTime && this.currentTime < morningStart
|
|
77
77
|
}
|
|
78
78
|
|
|
79
|
-
render?: (deltaTime: number) => void =
|
|
79
|
+
render?: (deltaTime: number) => void = deltaTime => {
|
|
80
80
|
if (!this.points) return
|
|
81
81
|
this.points.position.set(0, 0, 0)
|
|
82
82
|
|
|
@@ -124,13 +124,7 @@ export class StarfieldModule implements RendererModuleController {
|
|
|
124
124
|
const geometry = new THREE.BufferGeometry()
|
|
125
125
|
|
|
126
126
|
const genStar = (r: number): THREE.Vector3 =>
|
|
127
|
-
new THREE.Vector3().setFromSpherical(
|
|
128
|
-
new THREE.Spherical(
|
|
129
|
-
r,
|
|
130
|
-
Math.acos(1 - Math.random() * 2),
|
|
131
|
-
Math.random() * 2 * Math.PI
|
|
132
|
-
)
|
|
133
|
-
)
|
|
127
|
+
new THREE.Vector3().setFromSpherical(new THREE.Spherical(r, Math.acos(1 - Math.random() * 2), Math.random() * 2 * Math.PI))
|
|
134
128
|
|
|
135
129
|
const positions: number[] = []
|
|
136
130
|
const colors: number[] = []
|
|
@@ -175,8 +169,8 @@ export class StarfieldModule implements RendererModuleController {
|
|
|
175
169
|
private removeStars(): void {
|
|
176
170
|
if (!this.points) return
|
|
177
171
|
|
|
178
|
-
this.points.geometry.dispose()
|
|
179
|
-
(this.points.material as THREE.Material).dispose()
|
|
172
|
+
this.points.geometry.dispose()
|
|
173
|
+
;(this.points.material as THREE.Material).dispose()
|
|
180
174
|
this.worldRenderer.scene.remove(this.points)
|
|
181
175
|
this.points = undefined
|
|
182
176
|
}
|
|
@@ -186,5 +180,5 @@ export const starfieldManifest: RendererModuleManifest = {
|
|
|
186
180
|
id: 'starfield',
|
|
187
181
|
controller: StarfieldModule,
|
|
188
182
|
enabledDefault: true,
|
|
189
|
-
cannotBeDisabled: true
|
|
183
|
+
cannotBeDisabled: true
|
|
190
184
|
}
|
package/src/three/renderSlot.ts
CHANGED
|
@@ -5,31 +5,40 @@ import { versionToNumber } from 'mc-assets/dist/utils'
|
|
|
5
5
|
import type { ResourcesManagerCommon } from '../resourcesManager'
|
|
6
6
|
|
|
7
7
|
export type ResolvedItemModelRender = {
|
|
8
|
-
modelName: string
|
|
8
|
+
modelName: string
|
|
9
9
|
originalItemName?: string
|
|
10
10
|
}
|
|
11
11
|
|
|
12
|
-
export const renderSlot = (
|
|
13
|
-
|
|
14
|
-
|
|
15
|
-
|
|
16
|
-
|
|
17
|
-
|
|
12
|
+
export const renderSlot = (
|
|
13
|
+
model: ResolvedItemModelRender,
|
|
14
|
+
resourcesManager: ResourcesManagerCommon,
|
|
15
|
+
debugIsQuickbar = false,
|
|
16
|
+
fullBlockModelSupport = false
|
|
17
|
+
): {
|
|
18
|
+
texture: string
|
|
19
|
+
blockData: (Record<string, { slice; path }> & { resolvedModel: BlockModel }) | null
|
|
20
|
+
scale: number | null
|
|
21
|
+
slice: number[] | null
|
|
22
|
+
modelName: string | null
|
|
18
23
|
} => {
|
|
19
24
|
let itemModelName = model.modelName
|
|
20
25
|
const isItem = globalThis.loadedData.itemsByName[itemModelName]
|
|
21
26
|
|
|
22
27
|
// #region normalize item name
|
|
23
|
-
if (versionToNumber(resourcesManager.currentResources!.version) < versionToNumber('1.13'))
|
|
28
|
+
if (versionToNumber(resourcesManager.currentResources!.version) < versionToNumber('1.13'))
|
|
29
|
+
itemModelName = getRenamedData(isItem ? 'items' : 'blocks', itemModelName, resourcesManager.currentResources!.version, '1.13.1') as string
|
|
24
30
|
// #endregion
|
|
25
31
|
|
|
26
|
-
|
|
27
32
|
let itemTexture
|
|
28
33
|
|
|
29
34
|
if (!fullBlockModelSupport) {
|
|
30
35
|
const atlas = resourcesManager.currentResources?.guiAtlas?.json
|
|
31
36
|
// todo atlas holds all rendered blocks, not all possibly rendered item/block models, need to request this on demand instead (this is how vanilla works)
|
|
32
|
-
const tryGetAtlasTexture = (name?: string) =>
|
|
37
|
+
const tryGetAtlasTexture = (name?: string) =>
|
|
38
|
+
name &&
|
|
39
|
+
atlas?.textures[
|
|
40
|
+
name.replace('minecraft:', '').replace('block/', '').replace('blocks/', '').replace('item/', '').replace('items/', '').replace('_inventory', '')
|
|
41
|
+
]
|
|
33
42
|
const item = tryGetAtlasTexture(itemModelName) ?? tryGetAtlasTexture(model.originalItemName)
|
|
34
43
|
if (item) {
|
|
35
44
|
const x = item.u * atlas.width
|
|
@@ -44,23 +53,26 @@ export const renderSlot = (model: ResolvedItemModelRender, resourcesManager: Res
|
|
|
44
53
|
}
|
|
45
54
|
}
|
|
46
55
|
|
|
47
|
-
const blockToTopTexture =
|
|
56
|
+
const blockToTopTexture = r => r.top ?? r
|
|
48
57
|
|
|
49
58
|
try {
|
|
50
59
|
if (!resourcesManager.currentResources?.itemsRenderer) throw new Error('Items renderer is not available')
|
|
51
60
|
itemTexture =
|
|
52
|
-
resourcesManager.currentResources.itemsRenderer.getItemTexture(itemModelName, {}, false, fullBlockModelSupport)
|
|
53
|
-
|
|
54
|
-
|
|
61
|
+
resourcesManager.currentResources.itemsRenderer.getItemTexture(itemModelName, {}, false, fullBlockModelSupport) ??
|
|
62
|
+
(model.originalItemName
|
|
63
|
+
? resourcesManager.currentResources.itemsRenderer.getItemTexture(model.originalItemName, {}, false, fullBlockModelSupport)
|
|
64
|
+
: undefined) ??
|
|
65
|
+
resourcesManager.currentResources.itemsRenderer.getItemTexture('item/missing_texture')!
|
|
55
66
|
} catch (err) {
|
|
56
67
|
// get resourcepack from resource manager
|
|
57
|
-
reportError?.(
|
|
68
|
+
reportError?.(
|
|
69
|
+
`Failed to render item ${itemModelName} (original: ${model.originalItemName}) on ${resourcesManager.currentResources!.version} (resourcepack: TODO!): ${err.stack}`
|
|
70
|
+
)
|
|
58
71
|
itemTexture = blockToTopTexture(resourcesManager.currentResources!.itemsRenderer!.getItemTexture('errored')!)
|
|
59
72
|
}
|
|
60
73
|
|
|
61
74
|
itemTexture ??= blockToTopTexture(resourcesManager.currentResources!.itemsRenderer!.getItemTexture('unknown')!)
|
|
62
75
|
|
|
63
|
-
|
|
64
76
|
if ('type' in itemTexture) {
|
|
65
77
|
// is item
|
|
66
78
|
return {
|
|
@@ -17,9 +17,7 @@ export interface RendererModuleController {
|
|
|
17
17
|
/**
|
|
18
18
|
* Constructor type for module controllers
|
|
19
19
|
*/
|
|
20
|
-
export type RendererModuleControllerConstructor = new (
|
|
21
|
-
worldRenderer: WorldRendererThree
|
|
22
|
-
) => RendererModuleController
|
|
20
|
+
export type RendererModuleControllerConstructor = new (worldRenderer: WorldRendererThree) => RendererModuleController
|
|
23
21
|
|
|
24
22
|
export interface RendererModuleManifest {
|
|
25
23
|
id: string
|