diff --git a/package-lock.json b/package-lock.json index 7934ee1..b0d8f9c 100644 --- a/package-lock.json +++ b/package-lock.json @@ -7,6 +7,9 @@ "": { "name": "isle.pizza", "version": "1.0.0", + "dependencies": { + "three": "^0.182.0" + }, "devDependencies": { "@sveltejs/vite-plugin-svelte": "^4.0.0", "svelte": "^5.0.0", @@ -3583,10 +3586,11 @@ } }, "node_modules/devalue": { - "version": "5.6.1", - "resolved": "https://registry.npmjs.org/devalue/-/devalue-5.6.1.tgz", - "integrity": "sha512-jDwizj+IlEZBunHcOuuFVBnIMPAEHvTsJj0BcIp94xYguLRVBcXO853px/MyIJvbVzWdsGvrRweIUWJw8hBP7A==", - "dev": true + "version": "5.6.2", + "resolved": "https://registry.npmjs.org/devalue/-/devalue-5.6.2.tgz", + "integrity": "sha512-nPRkjWzzDQlsejL1WVifk5rvcFi/y1onBRxjaFMjZeR9mFpqu2gmAZ9xUB9/IEanEP/vBtGeGganC/GO1fmufg==", + "dev": true, + "license": "MIT" }, "node_modules/dot-prop": { "version": "9.0.0", @@ -3876,10 +3880,11 @@ "dev": true }, "node_modules/esrap": { - "version": "2.2.1", - "resolved": "https://registry.npmjs.org/esrap/-/esrap-2.2.1.tgz", - "integrity": "sha512-GiYWG34AN/4CUyaWAgunGt0Rxvr1PTMlGC0vvEov/uOQYWne2bpN03Um+k8jT+q3op33mKouP2zeJ6OlM+qeUg==", + "version": "2.2.2", + "resolved": "https://registry.npmjs.org/esrap/-/esrap-2.2.2.tgz", + "integrity": "sha512-zA6497ha+qKvoWIK+WM9NAh5ni17sKZKhbS5B3PoYbBvaYHZWoS33zmFybmyqpn07RLUxSmn+RCls2/XF+d0oQ==", "dev": true, + "license": "MIT", "dependencies": { "@jridgewell/sourcemap-codec": "^1.4.15" } @@ -5192,10 +5197,11 @@ } }, "node_modules/lodash": { - "version": "4.17.21", - "resolved": "https://registry.npmjs.org/lodash/-/lodash-4.17.21.tgz", - "integrity": "sha512-v2kDEe57lecTulaDIuNTPy3Ry4gLGJ6Z1O3vE1krgXZNrsQ+LFTGHVxVjcXPs17LhbZVGedAJv8XZ1tvj5FvSg==", - "dev": true + "version": "4.17.23", + "resolved": "https://registry.npmjs.org/lodash/-/lodash-4.17.23.tgz", + "integrity": "sha512-LgVTMpQtIopCi79SJeDiP0TfWi5CNEc/L/aRdTh3yIvmZXTnheWpKjSZhnvMl8iXbC1tFg9gdHHDMLoV7CnG+w==", + "dev": true, + "license": "MIT" }, "node_modules/lodash.debounce": { "version": "4.0.8", @@ -6715,10 +6721,11 @@ } }, "node_modules/svelte": { - "version": "5.46.1", - "resolved": "https://registry.npmjs.org/svelte/-/svelte-5.46.1.tgz", - "integrity": "sha512-ynjfCHD3nP2el70kN5Pmg37sSi0EjOm9FgHYQdC4giWG/hzO3AatzXXJJgP305uIhGQxSufJLuYWtkY8uK/8RA==", + "version": "5.49.1", + "resolved": "https://registry.npmjs.org/svelte/-/svelte-5.49.1.tgz", + "integrity": "sha512-jj95WnbKbXsXXngYj28a4zx8jeZx50CN/J4r0CEeax2pbfdsETv/J1K8V9Hbu3DCXnpHz5qAikICuxEooi7eNQ==", "dev": true, + "license": "MIT", "dependencies": { "@jridgewell/remapping": "^2.3.4", "@jridgewell/sourcemap-codec": "^1.5.0", @@ -6728,9 +6735,9 @@ "aria-query": "^5.3.1", "axobject-query": "^4.1.0", "clsx": "^2.1.1", - "devalue": "^5.5.0", + "devalue": "^5.6.2", "esm-env": "^1.2.1", - "esrap": "^2.2.1", + "esrap": "^2.2.2", "is-reference": "^3.0.3", "locate-character": "^3.0.0", "magic-string": "^0.30.11", @@ -6879,6 +6886,11 @@ "node": ">=10" } }, + "node_modules/three": { + "version": "0.182.0", + "resolved": "https://registry.npmjs.org/three/-/three-0.182.0.tgz", + "integrity": "sha512-GbHabT+Irv+ihI1/f5kIIsZ+Ef9Sl5A1Y7imvS5RQjWgtTPfPnZ43JmlYI7NtCRDK9zir20lQpfg8/9Yd02OvQ==" + }, "node_modules/through": { "version": "2.3.8", "resolved": "https://registry.npmjs.org/through/-/through-2.3.8.tgz", diff --git a/package.json b/package.json index dda8867..5e4ea1a 100644 --- a/package.json +++ b/package.json @@ -10,6 +10,9 @@ "preview": "vite preview", "prepare:assets": "node scripts/prepare.js" }, + "dependencies": { + "three": "^0.182.0" + }, "devDependencies": { "@sveltejs/vite-plugin-svelte": "^4.0.0", "svelte": "^5.0.0", diff --git a/public/laura-selected.webp b/public/laura-selected.webp new file mode 100644 index 0000000..70b5f86 Binary files /dev/null and b/public/laura-selected.webp differ diff --git a/public/laura.webp b/public/laura.webp new file mode 100644 index 0000000..6f0983f Binary files /dev/null and b/public/laura.webp differ diff --git a/public/mama-selected.webp b/public/mama-selected.webp new file mode 100644 index 0000000..45a4f83 Binary files /dev/null and b/public/mama-selected.webp differ diff --git a/public/mama.webp b/public/mama.webp new file mode 100644 index 0000000..55c51bf Binary files /dev/null and b/public/mama.webp differ diff --git a/public/nick-selected.webp b/public/nick-selected.webp new file mode 100644 index 0000000..d6e626c Binary files /dev/null and b/public/nick-selected.webp differ diff --git a/public/nick.webp b/public/nick.webp new file mode 100644 index 0000000..bf46c22 Binary files /dev/null and b/public/nick.webp differ diff --git a/public/papa-selected.webp b/public/papa-selected.webp new file mode 100644 index 0000000..cc6b221 Binary files /dev/null and b/public/papa-selected.webp differ diff --git a/public/papa.webp b/public/papa.webp new file mode 100644 index 0000000..8393524 Binary files /dev/null and b/public/papa.webp differ diff --git a/public/pepper-selected.webp b/public/pepper-selected.webp new file mode 100644 index 0000000..1cacc14 Binary files /dev/null and b/public/pepper-selected.webp differ diff --git a/public/pepper.webp b/public/pepper.webp new file mode 100644 index 0000000..fdf9fa1 Binary files /dev/null and b/public/pepper.webp differ diff --git a/public/save.webp b/public/save.webp new file mode 100644 index 0000000..6456417 Binary files /dev/null and b/public/save.webp differ diff --git a/src/App.svelte b/src/App.svelte index 7f3bd8f..81dfbdd 100644 --- a/src/App.svelte +++ b/src/App.svelte @@ -8,6 +8,7 @@ import ReadMePage from './lib/ReadMePage.svelte'; import ConfigurePage from './lib/ConfigurePage.svelte'; import FreeStuffPage from './lib/FreeStuffPage.svelte'; + import SaveEditorPage from './lib/SaveEditorPage.svelte'; import UpdatePopup from './lib/UpdatePopup.svelte'; import GoodbyePopup from './lib/GoodbyePopup.svelte'; import ConfigToast from './lib/ConfigToast.svelte'; @@ -76,6 +77,9 @@
+
+ +
+
+ Save Editor +
diff --git a/src/lib/save-editor/MissionScoresEditor.svelte b/src/lib/save-editor/MissionScoresEditor.svelte new file mode 100644 index 0000000..f51bbec --- /dev/null +++ b/src/lib/save-editor/MissionScoresEditor.svelte @@ -0,0 +1,31 @@ + + +
+ {#if $currentPage === 'save-editor'} + + {/if} +
+ + diff --git a/src/lib/save-editor/ScoreCube.svelte b/src/lib/save-editor/ScoreCube.svelte new file mode 100644 index 0000000..93db3a5 --- /dev/null +++ b/src/lib/save-editor/ScoreCube.svelte @@ -0,0 +1,226 @@ + + +
+
+ ? + Click on the cube to cycle high scores. Changes are automatically saved. + +
+ + + {#if loading} +
+
+
+ {:else if error} +
Error: {error}
+ {/if} +
+ + diff --git a/src/stores.js b/src/stores.js index 97dd8f4..cf9e708 100644 --- a/src/stores.js +++ b/src/stores.js @@ -7,7 +7,8 @@ function getInitialPage() { const pageMap = { '#read-me': 'read-me', '#configure': 'configure', - '#free-stuff': 'free-stuff' + '#free-stuff': 'free-stuff', + '#save-editor': 'save-editor' }; return pageMap[hash] || 'main'; } @@ -35,6 +36,7 @@ export const installState = writable({ // Config toast export const configToastVisible = writable(false); +export const configToastMessage = writable('Settings saved'); // Debug UI visible (set when game reaches intro animation) export const debugUIVisible = writable(false); @@ -44,3 +46,11 @@ export const gameRunning = writable(false); // Service worker registration export const swRegistration = writable(null); + +// Save editor state +export const saveEditorState = writable({ + slots: [], // Array of SaveSlot objects + selectedSlot: null, // Currently selected slot number + loading: true, + error: null +});