Skip to content

Commit e506293

Browse files
authored
Merge pull request #6101 from decentraland/hotfix/2024-02-22-support-multiple-scenes-in-world
hotfix: support multiple scenes in world
2 parents 9db7282 + 1d426e4 commit e506293

File tree

2 files changed

+6
-6
lines changed

2 files changed

+6
-6
lines changed

browser-interface/packages/shared/scene-loader/world-loader-impl/index.ts

Lines changed: 4 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -22,9 +22,10 @@ function getParcels(position: Vector2, loadingRadius: number): string[] {
2222
export async function createWorldLoader(options: { urns: string[] }): Promise<ISceneLoader> {
2323
const mappingScene = new Map<string, LoadableScene>()
2424
const scenes = await Promise.all(options.urns.map((urn) => getPortableExperienceFromUrn(urn)))
25-
26-
for (const parcel of scenes[0].entity.metadata.scene.parcels) {
27-
mappingScene.set(parcel, scenes[0])
25+
for (const scene of scenes) {
26+
for (const parcel of scene.entity.metadata.scene.parcels) {
27+
mappingScene.set(parcel, scene)
28+
}
2829
}
2930

3031
const emptyParcelController = new EmptyParcelController({ rootUrl: getResourcesURL('.') })

browser-interface/packages/shared/world/SceneWorker.ts

Lines changed: 2 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -42,6 +42,7 @@ import { joinBuffers } from 'lib/javascript/uint8arrays'
4242
import { nativeMsgBridge } from 'unity-interface/nativeMessagesBridge'
4343
import { _INTERNAL_WEB_TRANSPORT_ALLOC_SIZE } from 'renderer-protocol/transports/webTransport'
4444
import { createInternalEngine } from './runtime-7/engine'
45+
import { forceStopScene } from './parcelSceneManager'
4546

4647
export enum SceneWorkerReadyState {
4748
LOADING = 1 << 0,
@@ -114,7 +115,6 @@ export class SceneWorker {
114115
private rpcServer!: RpcServer<PortContext>
115116

116117
private sceneStarted: boolean = false
117-
118118
private position: Vector3 = new Vector3()
119119
private readonly lastSentPosition = new Vector3(0, 0, 0)
120120
private readonly lastSentRotation = new Quaternion(0, 0, 0, 1)
@@ -130,7 +130,7 @@ export class SceneWorker {
130130
const sceneNumber = globalSceneNumberCounter
131131
const scenePort = await rpcClient.createPort(`scene-${sceneNumber}`)
132132
const worker = new SceneWorker(loadableScene, sceneNumber, scenePort)
133-
await worker.attachTransport()
133+
worker.attachTransport().catch(() => forceStopScene(loadableScene.id))
134134
return worker
135135
}
136136

@@ -245,7 +245,6 @@ export class SceneWorker {
245245
const response = await fetch(url)
246246

247247
if (!response.ok) throw new Error(`Error fetching file ${file} from ${url}`)
248-
249248
return { hash, content: new Uint8Array(await response.arrayBuffer()) }
250249
}
251250
}

0 commit comments

Comments
 (0)