First step toward external portals

This commit is contained in:
Tony Garnock-Jones 2023-01-31 17:23:42 +01:00
parent 47352e365d
commit 63991388f3
5 changed files with 39 additions and 10 deletions

View File

@ -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",

View File

@ -3,7 +3,7 @@ version 1 .
Portal = <portal @name string @destination PortalDestination @position shapes.Vector3> .
PortalDestination =
/ @local #!any
/ @remote <remote <ws @url string> @sturdyref sturdy.SturdyRef>
/ @remote noise.Route
.
Gravity = <gravity @direction shapes.Vector3> .

View File

@ -6,5 +6,6 @@
$scene <portal $spriteName $ds $initialPos>
]
]
? <portal ?spriteName ?target> <portal $spriteName $target <v 0.0 0.0 0.0>>
]
]

View File

@ -51,6 +51,16 @@
<scale <v 1.0 2.11 0.1> <move <v 0.0 0.5 0.6> <box>>>
]>>>
<portal "door2" <route [<ws "wss://vr.demo.eighty-twenty.org/ws">]>>
<sprite "door2"
<move <v -5.0 0.0 1.5>
<rotate <v 0.0 -0.1 0.0> [
<scale <v 1.0 2.11 1.0>
<texture ["textures/door1.jpg"]
<touchable <move <v 0.0 0.5 0.0> <plane>>>>>
<scale <v 1.0 2.11 0.1> <move <v 0.0 0.5 0.6> <box>>>
]>>>
<sprite "plans"
<texture ["plans/signal-2022-12-27-125451_002.jpeg"]
<move <v 0.0 1.0 -10.0>
@ -66,10 +76,20 @@
<color 0.5 0.5 0.0
<box>>>>>>>
<sprite "sofa"
<rotate <v -0.125 0.5 0.0>
<scale <v 0.01 0.01 0.01>
<external "objects/IKE020001_obj/IKEA-Arild_2_Seat_Sofa-3D.obj">>>>
; <sprite "sponge"
; <move <v 4.0 1.6 0.0> [
; <scale <v 0.001 0.001 0.001>
; <external "objects/usnm_346-100k-obj/usnm_346-01-100k.obj">>
; <texture ["textures/oak-herringbone-5e80fb40b00c9-1200.jpg"]
; <scale <v 0.105 1.6 0.13>
; <move <v -0.05 -0.5384 0.5>
; <box>>>>
; ]>>
; <sprite "sofa"
; <rotate <v -0.125 0.5 0.0>
; <scale <v 0.01 0.01 0.01>
; <external "objects/IKE020001_obj/IKEA-Arild_2_Seat_Sofa-3D.obj">>>>
<sprite "x"
<move <v 10.0 1.6 -5.0>

View File

@ -61,6 +61,7 @@ function spriteMain(spriteName: string, runningEngine: RunningEngine, rootMesh:
}
async function enterScene(
routeField: Dataflow.Field<wsRelay.Noise.Route<Ref>>,
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<Ref>({
field route: wsRelay.Noise.Route<Ref> = wsRelay.Noise.Route<Ref>({
"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,