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