From 9d72d0e280ffbe7e52eb251a751eeb6de2f8c8b2 Mon Sep 17 00:00:00 2001 From: Florian <45694132+flo-bit@users.noreply.github.com> Date: Sun, 27 Apr 2025 23:30:38 +0200 Subject: [PATCH] refactor pt 2 --- README.md | 2 +- src/app.html | 1 - src/lib/download.ts | 2 +- src/lib/index.ts | 54 ------- .../EditViewVoxel.svelte | 0 src/lib/{editor => model-editor}/Floor.svelte | 0 .../GhostVoxel.svelte | 0 .../ModelEditorScene.svelte} | 4 +- .../ModelEditorUI.svelte | 4 +- .../TransformingVoxel.svelte | 0 .../{editor => model-editor}/Voxels.svelte | 0 src/lib/{editor => model-editor}/import.ts | 0 .../{editor => model-editor}/state.svelte.ts | 2 +- src/lib/model-picker/base/ModelPicker.svelte | 4 +- .../model-picker/base/ModelPickerScene.svelte | 6 +- .../modal/ModalModelPicker.svelte | 2 +- .../player/CharacterModel.svelte | 0 .../world => lib}/player/Player.svelte | 0 .../player/ThirdPersonControls.svelte | 0 src/lib/{shared => }/roomy.svelte.ts | 2 +- src/lib/roomy/index.ts | 2 +- src/lib/shared/utils.svelte.ts | 24 --- src/lib/utils.svelte.ts | 55 +++++++ src/lib/viewer/WorldItemsViewer.svelte | 2 +- .../world-editor}/HudScene.svelte | 0 src/lib/world-editor/HudUI.svelte | 60 +++++++ .../world-editor}/Instance.svelte | 2 +- .../world-editor}/ModelSelection.svelte | 12 +- .../world-editor/WorldEditorScene.svelte} | 21 +-- src/lib/world-editor/WorldEditorUI.svelte | 22 +++ src/lib/world-editor/WorldSettingsUI.svelte | 50 ++++++ .../world-editor}/models.svelte.ts | 2 +- .../world-editor}/state.svelte.ts | 23 ++- src/lib/world/Terrain.svelte | 4 +- src/lib/world/Water.svelte | 4 +- src/routes/+layout.svelte | 3 + src/routes/+page.svelte | 27 +--- src/routes/world/+layout.svelte | 4 +- src/routes/world/+page.svelte | 152 ++---------------- 39 files changed, 265 insertions(+), 287 deletions(-) delete mode 100644 src/lib/index.ts rename src/lib/{editor => model-editor}/EditViewVoxel.svelte (100%) rename src/lib/{editor => model-editor}/Floor.svelte (100%) rename src/lib/{editor => model-editor}/GhostVoxel.svelte (100%) rename src/lib/{editor/Scene.svelte => model-editor/ModelEditorScene.svelte} (91%) rename src/lib/{editor => model-editor}/ModelEditorUI.svelte (97%) rename src/lib/{editor => model-editor}/TransformingVoxel.svelte (100%) rename src/lib/{editor => model-editor}/Voxels.svelte (100%) rename src/lib/{editor => model-editor}/import.ts (100%) rename src/lib/{editor => model-editor}/state.svelte.ts (98%) rename src/{routes/world => lib}/player/CharacterModel.svelte (100%) rename src/{routes/world => lib}/player/Player.svelte (100%) rename src/{routes/world => lib}/player/ThirdPersonControls.svelte (100%) rename src/lib/{shared => }/roomy.svelte.ts (99%) delete mode 100644 src/lib/shared/utils.svelte.ts create mode 100644 src/lib/utils.svelte.ts rename src/{routes/world => lib/world-editor}/HudScene.svelte (100%) create mode 100644 src/lib/world-editor/HudUI.svelte rename src/{routes/world => lib/world-editor}/Instance.svelte (97%) rename src/{routes/world => lib/world-editor}/ModelSelection.svelte (90%) rename src/{routes/world/Scene.svelte => lib/world-editor/WorldEditorScene.svelte} (77%) create mode 100644 src/lib/world-editor/WorldEditorUI.svelte create mode 100644 src/lib/world-editor/WorldSettingsUI.svelte rename src/{routes/world => lib/world-editor}/models.svelte.ts (92%) rename src/{routes/world => lib/world-editor}/state.svelte.ts (78%) diff --git a/README.md b/README.md index 6fd4ef5..8994aa9 100644 --- a/README.md +++ b/README.md @@ -47,7 +47,7 @@ as well as see all models made in any window. - rotate and scale models - add advanced settings to world (noise settings) - add sound effects (placing, walking) -- add selection between world/local/global models +- [x] add selection between world/local/global models - add model name and category - download model - add gradient for lower part of island diff --git a/src/app.html b/src/app.html index 09eb767..b78da78 100644 --- a/src/app.html +++ b/src/app.html @@ -2,7 +2,6 @@ - %sveltekit.head% diff --git a/src/lib/download.ts b/src/lib/download.ts index 89ec8bb..48e0e68 100644 --- a/src/lib/download.ts +++ b/src/lib/download.ts @@ -1,5 +1,5 @@ import type { EntityIdStr } from '@muni-town/leaf'; -import { downloadObjectAsJson } from './editor/import'; +import { downloadObjectAsJson } from './model-editor/import'; import type { WorldData } from './viewer/types'; import type { TransformedGroup } from './roomy'; diff --git a/src/lib/index.ts b/src/lib/index.ts deleted file mode 100644 index 2bb5d2e..0000000 --- a/src/lib/index.ts +++ /dev/null @@ -1,54 +0,0 @@ -// place files you want to import through the `$lib` alias in this folder. - -import type { EntityIdStr } from '@muni-town/leaf'; -import { g, initRoomy } from './shared/roomy.svelte'; -import { goto } from '$app/navigation'; -import { VoxelGroup, World } from './roomy'; - -export async function getVoxelObject(id: string) { - if (!g.roomy) { - await initRoomy(); - } - const voxelObject = await g.roomy!.open(VoxelGroup, id as EntityIdStr); - return voxelObject; -} - -export async function createModel(base: string, newTab: boolean = false) { - if (!g.roomy) return; - - const voxels = await g.roomy.create(VoxelGroup); - voxels.commit(); - - if (newTab) { - window.open(base + `/editor?id=${voxels.id}`, '_blank'); - } else { - goto(base + `/editor?id=${voxels.id}`); - } -} - -export async function createWorld(base: string) { - if (!g.roomy) { - await initRoomy(); - - if (!g.roomy) return; - } - const world = await g.roomy.create(World); - world.commit(); - - goto(base + `/world?id=${world.id}`); -} - -export function shuffle(array: T[]): T[] { - let currentIndex = array.length; - - // While there remain elements to shuffle... - while (currentIndex != 0) { - // Pick a remaining element... - const randomIndex = Math.floor(Math.random() * currentIndex); - currentIndex--; - - // And swap it with the current element. - [array[currentIndex], array[randomIndex]] = [array[randomIndex], array[currentIndex]]; - } - return array; -} \ No newline at end of file diff --git a/src/lib/editor/EditViewVoxel.svelte b/src/lib/model-editor/EditViewVoxel.svelte similarity index 100% rename from src/lib/editor/EditViewVoxel.svelte rename to src/lib/model-editor/EditViewVoxel.svelte diff --git a/src/lib/editor/Floor.svelte b/src/lib/model-editor/Floor.svelte similarity index 100% rename from src/lib/editor/Floor.svelte rename to src/lib/model-editor/Floor.svelte diff --git a/src/lib/editor/GhostVoxel.svelte b/src/lib/model-editor/GhostVoxel.svelte similarity index 100% rename from src/lib/editor/GhostVoxel.svelte rename to src/lib/model-editor/GhostVoxel.svelte diff --git a/src/lib/editor/Scene.svelte b/src/lib/model-editor/ModelEditorScene.svelte similarity index 91% rename from src/lib/editor/Scene.svelte rename to src/lib/model-editor/ModelEditorScene.svelte index 147b996..c09b945 100644 --- a/src/lib/editor/Scene.svelte +++ b/src/lib/model-editor/ModelEditorScene.svelte @@ -4,8 +4,8 @@ import Voxels from './Voxels.svelte'; import Floor from './Floor.svelte'; import GhostVoxel from './GhostVoxel.svelte'; - import { g } from '$lib/shared/roomy.svelte'; - import { derivePromise } from '$lib/shared/utils.svelte'; + import { g } from '$lib/roomy.svelte'; + import { derivePromise } from '$lib/utils.svelte'; interactivity({ filter: (hits) => { diff --git a/src/lib/editor/ModelEditorUI.svelte b/src/lib/model-editor/ModelEditorUI.svelte similarity index 97% rename from src/lib/editor/ModelEditorUI.svelte rename to src/lib/model-editor/ModelEditorUI.svelte index 70f020c..7ad00c1 100644 --- a/src/lib/editor/ModelEditorUI.svelte +++ b/src/lib/model-editor/ModelEditorUI.svelte @@ -1,8 +1,8 @@ + +{#if editingState.selectedInstance || editingState.selectedModelId} +
+ {#if editingState.selectedInstance} +
+ moving + + +
+ {:else if editingState.selectedModelId} +
+ placing + + +
+ {/if} +
+{/if} diff --git a/src/routes/world/Instance.svelte b/src/lib/world-editor/Instance.svelte similarity index 97% rename from src/routes/world/Instance.svelte rename to src/lib/world-editor/Instance.svelte index 7efa415..3701811 100644 --- a/src/routes/world/Instance.svelte +++ b/src/lib/world-editor/Instance.svelte @@ -7,7 +7,7 @@ {#if camera === 'first'} @@ -74,7 +69,7 @@ -{#each instances as instance} +{#each instances.value as instance} {/each} diff --git a/src/lib/world-editor/WorldEditorUI.svelte b/src/lib/world-editor/WorldEditorUI.svelte new file mode 100644 index 0000000..5d0819c --- /dev/null +++ b/src/lib/world-editor/WorldEditorUI.svelte @@ -0,0 +1,22 @@ + + + diff --git a/src/lib/world-editor/WorldSettingsUI.svelte b/src/lib/world-editor/WorldSettingsUI.svelte new file mode 100644 index 0000000..1322646 --- /dev/null +++ b/src/lib/world-editor/WorldSettingsUI.svelte @@ -0,0 +1,50 @@ + +
+ + + + + { + editingState.worldSettings.version += 1; + }} + /> + + + + { + editingState.worldSettings.version += 1; + }} + /> + + + + + +
\ No newline at end of file diff --git a/src/routes/world/models.svelte.ts b/src/lib/world-editor/models.svelte.ts similarity index 92% rename from src/routes/world/models.svelte.ts rename to src/lib/world-editor/models.svelte.ts index 140180c..71bf28b 100644 --- a/src/routes/world/models.svelte.ts +++ b/src/lib/world-editor/models.svelte.ts @@ -1,5 +1,5 @@ import { Voxel, VoxelGroup } from '$lib/roomy'; -import { g } from '$lib/shared/roomy.svelte'; +import { g } from '$lib/roomy.svelte'; import type { EntityIdStr } from '@muni-town/leaf'; class Models { diff --git a/src/routes/world/state.svelte.ts b/src/lib/world-editor/state.svelte.ts similarity index 78% rename from src/routes/world/state.svelte.ts rename to src/lib/world-editor/state.svelte.ts index 04d9deb..fce36a0 100644 --- a/src/routes/world/state.svelte.ts +++ b/src/lib/world-editor/state.svelte.ts @@ -1,6 +1,7 @@ -import type { TransformedGroup } from '$lib/roomy'; +import { TransformedGroup } from '$lib/roomy'; +import { g, initRoomy } from '$lib/roomy.svelte'; import type { EntityIdStr } from '@muni-town/leaf'; -import type { Vector3 } from 'three'; +import { Quaternion, Vector3 } from 'three'; import type { TransformControls } from 'three/examples/jsm/Addons.js'; export const editingState = $state({ @@ -68,3 +69,21 @@ export async function applyTransform() { await new Promise((resolve) => setTimeout(resolve, 10)); } + +export async function addInstance(id: EntityIdStr, position: Vector3) { + if (!g.roomy) { + await initRoomy(); + + if (!g.roomy) return; + } + + const instance = await g.roomy.create(TransformedGroup); + instance.group = id; + instance.position = position; + instance.quaternion = new Quaternion(); + instance.scale = new Vector3(1, 1, 1); + instance.commit(); + + g.world?.instances.push(instance); + g.world?.commit(); +} diff --git a/src/lib/world/Terrain.svelte b/src/lib/world/Terrain.svelte index 42fc91a..b6c26d5 100644 --- a/src/lib/world/Terrain.svelte +++ b/src/lib/world/Terrain.svelte @@ -5,9 +5,9 @@ import * as THREE from 'three'; import { UberNoise } from 'uber-noise'; import type { IntersectionEvent } from '@threlte/extras'; - import { shuffle } from '$lib'; + import { shuffle } from '$lib/utils.svelte'; import { ColorGradient } from './colorgradient'; - import { editingState } from '../../routes/world/state.svelte'; + import { editingState } from '$lib/world-editor/state.svelte'; const size = editingState.worldSettings.size; diff --git a/src/lib/world/Water.svelte b/src/lib/world/Water.svelte index a0fd8ad..153a173 100644 --- a/src/lib/world/Water.svelte +++ b/src/lib/world/Water.svelte @@ -2,9 +2,9 @@ import { T, useTask } from '@threlte/core'; import * as THREE from 'three'; import { UberNoise } from 'uber-noise'; - import { shuffle } from '$lib'; + import { shuffle } from '$lib/utils.svelte'; import { ColorGradient } from './colorgradient'; - import { editingState } from '../../routes/world/state.svelte'; + import { editingState } from '$lib/world-editor/state.svelte'; const size = editingState.worldSettings.size; diff --git a/src/routes/+layout.svelte b/src/routes/+layout.svelte index 7dd8fec..491e525 100644 --- a/src/routes/+layout.svelte +++ b/src/routes/+layout.svelte @@ -2,6 +2,7 @@ import '../app.css'; import { initClient } from '$lib/oauth'; import { onMount } from 'svelte'; + import { Head } from 'fuchs'; let { children } = $props(); @@ -11,3 +12,5 @@ {@render children()} + + \ No newline at end of file diff --git a/src/routes/+page.svelte b/src/routes/+page.svelte index cf75914..d5e1b1a 100644 --- a/src/routes/+page.svelte +++ b/src/routes/+page.svelte @@ -1,9 +1,8 @@ diff --git a/src/routes/world/+layout.svelte b/src/routes/world/+layout.svelte index 0fc7da7..61621ed 100644 --- a/src/routes/world/+layout.svelte +++ b/src/routes/world/+layout.svelte @@ -1,10 +1,10 @@ @@ -53,7 +32,7 @@ {#if editingState.showModelEditor} {:else} - + {/if} @@ -63,115 +42,12 @@ {#if !editingState.showModelEditor} {#if editingState.showWorldSettings} -
- - - - - { - editingState.worldSettings.version += 1; - }} - /> - - - - { - editingState.worldSettings.version += 1; - }} - /> - - - - - -
+ {:else} - + {/if} {:else} {/if} -
- {#if editingState.selectedInstance} -
- moving - - -
- {:else if editingState.selectedModelId} -
- placing - - -
- {/if} -
+ \ No newline at end of file -- 2.51.2