From 63991388f32a8ee6a34019801fb552e2c36cd2e4 Mon Sep 17 00:00:00 2001 From: Tony Garnock-Jones Date: Tue, 31 Jan 2023 17:23:42 +0100 Subject: [PATCH] First step toward external portals --- package.json | 2 +- protocols/schemas/scene.prs | 2 +- scene/boot/05-common-scene.pr | 1 + scene/lobby.pr | 28 ++++++++++++++++++++++++---- src/index.ts | 16 ++++++++++++---- 5 files changed, 39 insertions(+), 10 deletions(-) diff --git a/package.json b/package.json index c6f3546..7058751 100644 --- a/package.json +++ b/package.json @@ -4,7 +4,7 @@ "description": "vr experiments 3", "scripts": { "prepare": "yarn regenerate && yarn compile && yarn rollup", - "regenerate": "rm -rf ./src/gen && preserves-schema-ts --module sturdy=@syndicate-lang/core:Schemas.sturdy --xref node_modules/@syndicate-lang/core/protocols/schemas --output ./src/gen ./protocols/schemas", + "regenerate": "rm -rf ./src/gen && preserves-schema-ts --module sturdy=@syndicate-lang/core:Schemas.sturdy --module noise=@syndicate-lang/core:Schemas.noise --xref node_modules/@syndicate-lang/core/protocols/schemas --output ./src/gen ./protocols/schemas", "regenerate:watch": "yarn regenerate --watch", "compile": "syndicate-tsc", "compile:watch": "syndicate-tsc -w --verbose --intermediate-directory src.ts", diff --git a/protocols/schemas/scene.prs b/protocols/schemas/scene.prs index e220e0b..5375651 100644 --- a/protocols/schemas/scene.prs +++ b/protocols/schemas/scene.prs @@ -3,7 +3,7 @@ version 1 . Portal = . PortalDestination = / @local #!any -/ @remote @sturdyref sturdy.SturdyRef> +/ @remote noise.Route . Gravity = . diff --git a/scene/boot/05-common-scene.pr b/scene/boot/05-common-scene.pr index f4c39cb..34abe75 100644 --- a/scene/boot/05-common-scene.pr +++ b/scene/boot/05-common-scene.pr @@ -6,5 +6,6 @@ $scene ] ] + ? > ] ] diff --git a/scene/lobby.pr b/scene/lobby.pr index a26c334..5e1f648 100644 --- a/scene/lobby.pr +++ b/scene/lobby.pr @@ -51,6 +51,16 @@ >> ]>>> +]>> + + [ + + >>>> + >> + ]>>> + @@ -66,10 +76,20 @@ >>>>>> - - - >>> +; [ +; +; > +; +; +; >>> +; ]>> + +; +; +; >>> diff --git a/src/index.ts b/src/index.ts index 932effb..3576779 100644 --- a/src/index.ts +++ b/src/index.ts @@ -61,6 +61,7 @@ function spriteMain(spriteName: string, runningEngine: RunningEngine, rootMesh: } async function enterScene( + routeField: Dataflow.Field>, id: string, runningEngine: RunningEngine, ds: Ref, @@ -142,7 +143,8 @@ async function enterScene( runningEngine.scene.removeMesh(rootMesh, true); Turn.active.stop(currentSceneFacet, () => { react { - enterScene(id, + enterScene(routeField, + id, runningEngine, ds, dest.value, @@ -153,6 +155,8 @@ async function enterScene( } break; default: + console.log('jumping to remote portal', dest); + routeField.value = dest.value; break; } } @@ -215,12 +219,15 @@ function bootApp(ds: Ref, runningEngine: RunningEngine) { localStorage.setItem('userEmail', emailInput.value); })); - const route = wsRelay.Noise.Route({ + field route: wsRelay.Noise.Route = wsRelay.Noise.Route({ "transports": [fromJS(relayAddr)], "steps": [wsRelay.Noise.RouteStep.GatekeeperStep(serverCap)], }); - during wsRelay.Resolved({ "route": route, "resolved": $remoteDs_e: Embedded }) => { + during wsRelay.Resolved({ + "route": route.value, + "resolved": $remoteDs_e: Embedded, + }) => { const remoteDs = remoteDs_e.embeddedValue; setupLog(remoteDs, id, Symbol.for('vr-demo')); @@ -234,7 +241,8 @@ function bootApp(ds: Ref, runningEngine: RunningEngine) { at remoteDs { stop on asserted SceneHandle($sceneDs_e: Embedded) => { react { - enterScene(id, + enterScene(route, + id, runningEngine, ds, sceneDs_e.embeddedValue,