diff --git a/.tool-versions b/.tool-versions
new file mode 100644
index 0000000..dfe6349
--- /dev/null
+++ b/.tool-versions
@@ -0,0 +1 @@
+nodejs 20.13.1
diff --git a/package-lock.json b/package-lock.json
index 2520682..2ff1662 100644
--- a/package-lock.json
+++ b/package-lock.json
@@ -12,6 +12,7 @@
"@threlte/core": "^7.3.0",
"@threlte/extras": "^8.11.2",
"@threlte/rapier": "^2.0.0",
+ "mdsvex": "^0.11.0",
"three": "^0.159.0",
"three-inspect": "^0.4.5"
},
@@ -1986,6 +1987,11 @@
"meshoptimizer": "~0.18.1"
}
},
+ "node_modules/@types/unist": {
+ "version": "2.0.10",
+ "resolved": "https://registry.npmjs.org/@types/unist/-/unist-2.0.10.tgz",
+ "integrity": "sha512-IfYcSBWE3hLpBg8+X2SEa8LVkJdJEkT2Ese2aaLs3ptGdVtABxndrMaxuFlQ1qdFf9Q5rDvDpxI3WwgvKFAsQA=="
+ },
"node_modules/@types/webxr": {
"version": "0.5.15",
"resolved": "https://registry.npmjs.org/@types/webxr/-/webxr-0.5.15.tgz",
@@ -5028,6 +5034,20 @@
"resolved": "https://registry.npmjs.org/mdn-data/-/mdn-data-2.0.30.tgz",
"integrity": "sha512-GaqWWShW4kv/G9IEucWScBx9G1/vsFZZJUO+tD26M8J8z3Kw5RDQjaoZe03YAClgeS/SWPOcb4nkFBTEi5DUEA=="
},
+ "node_modules/mdsvex": {
+ "version": "0.11.0",
+ "resolved": "https://registry.npmjs.org/mdsvex/-/mdsvex-0.11.0.tgz",
+ "integrity": "sha512-gJF1s0N2nCmdxcKn8HDn0LKrN8poStqAicp6bBcsKFd/zkUBGLP5e7vnxu+g0pjBbDFOscUyI1mtHz+YK2TCDw==",
+ "dependencies": {
+ "@types/unist": "^2.0.3",
+ "prism-svelte": "^0.4.7",
+ "prismjs": "^1.17.1",
+ "vfile-message": "^2.0.4"
+ },
+ "peerDependencies": {
+ "svelte": ">=3 <5"
+ }
+ },
"node_modules/meow": {
"version": "6.1.1",
"resolved": "https://registry.npmjs.org/meow/-/meow-6.1.1.tgz",
@@ -5962,6 +5982,19 @@
"url": "https://github.com/chalk/ansi-styles?sponsor=1"
}
},
+ "node_modules/prism-svelte": {
+ "version": "0.4.7",
+ "resolved": "https://registry.npmjs.org/prism-svelte/-/prism-svelte-0.4.7.tgz",
+ "integrity": "sha512-yABh19CYbM24V7aS7TuPYRNMqthxwbvx6FF/Rw920YbyBWO3tnyPIqRMgHuSVsLmuHkkBS1Akyof463FVdkeDQ=="
+ },
+ "node_modules/prismjs": {
+ "version": "1.29.0",
+ "resolved": "https://registry.npmjs.org/prismjs/-/prismjs-1.29.0.tgz",
+ "integrity": "sha512-Kx/1w86q/epKcmte75LNrEoT+lX8pBpavuAbvJWRXar7Hz8jrtF+e3vY751p0R8H9HdArwaCTNDDzHg/ScJK1Q==",
+ "engines": {
+ "node": ">=6"
+ }
+ },
"node_modules/pseudomap": {
"version": "1.0.2",
"resolved": "https://registry.npmjs.org/pseudomap/-/pseudomap-1.0.2.tgz",
@@ -7874,6 +7907,18 @@
"optional": true,
"peer": true
},
+ "node_modules/unist-util-stringify-position": {
+ "version": "2.0.3",
+ "resolved": "https://registry.npmjs.org/unist-util-stringify-position/-/unist-util-stringify-position-2.0.3.tgz",
+ "integrity": "sha512-3faScn5I+hy9VleOq/qNbAd6pAx7iH5jYBMS9I1HgQVijz/4mv5Bvw5iw1sC/90CODiKo81G/ps8AJrISn687g==",
+ "dependencies": {
+ "@types/unist": "^2.0.2"
+ },
+ "funding": {
+ "type": "opencollective",
+ "url": "https://opencollective.com/unified"
+ }
+ },
"node_modules/universalify": {
"version": "0.1.2",
"resolved": "https://registry.npmjs.org/universalify/-/universalify-0.1.2.tgz",
@@ -7936,6 +7981,19 @@
"spdx-expression-parse": "^3.0.0"
}
},
+ "node_modules/vfile-message": {
+ "version": "2.0.4",
+ "resolved": "https://registry.npmjs.org/vfile-message/-/vfile-message-2.0.4.tgz",
+ "integrity": "sha512-DjssxRGkMvifUOJre00juHoP9DPWuzjxKuMDrhNbk2TdaYYBNMStsNhEOt3idrtI12VQYM/1+iM0KOzXi4pxwQ==",
+ "dependencies": {
+ "@types/unist": "^2.0.0",
+ "unist-util-stringify-position": "^2.0.0"
+ },
+ "funding": {
+ "type": "opencollective",
+ "url": "https://opencollective.com/unified"
+ }
+ },
"node_modules/vite": {
"version": "5.2.10",
"resolved": "https://registry.npmjs.org/vite/-/vite-5.2.10.tgz",
diff --git a/package.json b/package.json
index b942a88..6ec7214 100644
--- a/package.json
+++ b/package.json
@@ -45,6 +45,7 @@
"@threlte/core": "^7.3.0",
"@threlte/extras": "^8.11.2",
"@threlte/rapier": "^2.0.0",
+ "mdsvex": "^0.11.0",
"three": "^0.159.0",
"three-inspect": "^0.4.5"
}
diff --git a/src/lib/components/scenes/app/App.svelte b/src/lib/components/scenes/app/App.svelte
new file mode 100644
index 0000000..346aedb
--- /dev/null
+++ b/src/lib/components/scenes/app/App.svelte
@@ -0,0 +1,41 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+{#if false}
+
+{/if}
diff --git a/src/lib/components/scenes/app/CanvasContainer.svelte b/src/lib/components/scenes/app/CanvasContainer.svelte
new file mode 100644
index 0000000..62c1b0a
--- /dev/null
+++ b/src/lib/components/scenes/app/CanvasContainer.svelte
@@ -0,0 +1,26 @@
+
+
+
+
+
+
+
+
diff --git a/src/lib/components/scenes/app/DollyCam.svelte b/src/lib/components/scenes/app/DollyCam.svelte
new file mode 100644
index 0000000..3f054b0
--- /dev/null
+++ b/src/lib/components/scenes/app/DollyCam.svelte
@@ -0,0 +1,44 @@
+
+
+
diff --git a/src/lib/components/scenes/app/MenuItem.svelte b/src/lib/components/scenes/app/MenuItem.svelte
new file mode 100644
index 0000000..fc43568
--- /dev/null
+++ b/src/lib/components/scenes/app/MenuItem.svelte
@@ -0,0 +1,51 @@
+
+
+
+ (isHovering = true)}
+ on:pointerleave={() => {
+ isPointerDown = false;
+ isHovering = false;
+ }}
+ on:pointerdown={() => (isPointerDown = true)}
+ on:pointerup={() => (isPointerDown = false)}
+ on:pointercancel={() => {
+ isPointerDown = false;
+ isHovering = false;
+ }}
+ on:click={onClick}
+ class="bg-green-700 px-3 py-3 text-white opacity-50 hover:opacity-90 active:opacity-100"
+ style="transform: translate(-50%, 50%); display: block;"
+ >
+ {htmlContent}
+
+
+
+
diff --git a/src/lib/components/scenes/app/Planet.svelte b/src/lib/components/scenes/app/Planet.svelte
new file mode 100644
index 0000000..028546c
--- /dev/null
+++ b/src/lib/components/scenes/app/Planet.svelte
@@ -0,0 +1,19 @@
+
+
+
+
+
+
+
+
+
+
diff --git a/src/lib/components/scenes/home/SpaceSkysphere.svelte b/src/lib/components/scenes/app/SpaceSkysphere.svelte
similarity index 100%
rename from src/lib/components/scenes/home/SpaceSkysphere.svelte
rename to src/lib/components/scenes/app/SpaceSkysphere.svelte
diff --git a/src/lib/components/scenes/editor/Editor.svelte b/src/lib/components/scenes/editor/Editor.svelte
index 865e08e..4cd977e 100644
--- a/src/lib/components/scenes/editor/Editor.svelte
+++ b/src/lib/components/scenes/editor/Editor.svelte
@@ -5,7 +5,7 @@
import { Studio } from '@threlte/theatre';
-
+