further clean ups

This commit is contained in:
kolaflash
2025-12-30 19:40:24 +01:00
parent 24508da335
commit 3f2ebb3291
3 changed files with 30 additions and 46 deletions
+1 -2
View File
@@ -1,12 +1,11 @@
.item-list { .item-list {
border-radius: var(--sp-1);
ul { ul {
background: var(--c-bg-1); background: var(--c-bg-1);
color: var(--c-fg-1); color: var(--c-fg-1);
list-style: none; list-style: none;
margin: 0; margin: 0;
padding: 0; padding: 0;
border-radius: 0 0 var(--sp-1) var(--sp-1);
} }
li { li {
+14
View File
@@ -0,0 +1,14 @@
import type { BrowserFolder } from "#/dev/FileBrowser.tsx";
export async function fetchBrowserData(dir: string): Promise<BrowserFolder> {
const indexRef: string[] = await (await fetch(`/api/${dir}`)).json();
const scenes = indexRef.reduce((root, entry) => {
const [name] = entry.substring(1).split("/");
root.set(name, { path: name, isActive: false });
return root;
}, new Map() as BrowserFolder);
return new Map([[dir, scenes]]);
}
+15 -44
View File
@@ -1,9 +1,8 @@
import "./main.css"; import "./main.css";
import { type Accessor, type Component, createSignal, onMount } from "solid-js"; import { type Component, createSignal, onMount } from "solid-js";
import { render } from "solid-js/web"; import { render } from "solid-js/web";
import { InputField } from "#/dev/controls/InputField.tsx"; import { InputField } from "#/dev/controls/InputField.tsx";
import { RangeSlider } from "#/dev/controls/RangeSlider.tsx"; import { RangeSlider } from "#/dev/controls/RangeSlider.tsx";
import { type BrowserFolder, FileBrowser } from "#/dev/FileBrowser.tsx";
import { ItemList, type ListItem } from "#/dev/ItemList.tsx"; import { ItemList, type ListItem } from "#/dev/ItemList.tsx";
import { import {
ArrowAutofitHeightIcon, ArrowAutofitHeightIcon,
@@ -14,21 +13,16 @@ import {
import { currentScene, loadScene, type SceneData } from "#/engine/Scene.ts"; import { currentScene, loadScene, type SceneData } from "#/engine/Scene.ts";
import { setScale, viewport } from "#/engine/Viewport.ts"; import { setScale, viewport } from "#/engine/Viewport.ts";
async function fetchBrowserData(dir: string): Promise<BrowserFolder> { async function fetchScenes(): Promise<Array<ListItem>> {
const indexRef: string[] = await (await fetch(`/api/${dir}`)).json(); const indexRef: string[] = await (await fetch(`/api/scenes`)).json();
const items = indexRef.filter((value) => value.includes("index"));
const scenes = indexRef.reduce((root, entry) => { return items.map((value) => {
const [name] = entry.substring(1).split("/"); const [label] = value.substring(1).split("/");
root.set(name, { path: name, isActive: false }); return { label, isActive: false };
});
return root;
}, new Map() as BrowserFolder);
return new Map([[dir, scenes]]);
} }
const scenesRaw = await fetchBrowserData("scenes");
function mapSceneEntities(sceneData: SceneData): Array<ListItem> { function mapSceneEntities(sceneData: SceneData): Array<ListItem> {
const sets: Record<string, number> = {}; const sets: Record<string, number> = {};
return sceneData.entities.map((entity, index) => { return sceneData.entities.map((entity, index) => {
@@ -46,6 +40,8 @@ function adjustGameContainer(gameContainer: HTMLElement, width: number): void {
gameContainer.style = `position: relative; top: 0; left: ${width}px; width: ${document.body.offsetWidth - width}px;`; gameContainer.style = `position: relative; top: 0; left: ${width}px; width: ${document.body.offsetWidth - width}px;`;
} }
const scenesRaw = await fetchScenes();
const DevTools: Component<{ gameContainer: HTMLElement }> = ({ const DevTools: Component<{ gameContainer: HTMLElement }> = ({
gameContainer, gameContainer,
}) => { }) => {
@@ -73,34 +69,10 @@ const DevTools: Component<{ gameContainer: HTMLElement }> = ({
mapSceneEntities(currentScene.data), mapSceneEntities(currentScene.data),
); );
const mapActive = ( const [scenes] = createSignal(scenesRaw);
root: string,
path: string,
accessor: Accessor<BrowserFolder>,
): BrowserFolder => {
return new Map([
[
root,
(accessor().get(root) as BrowserFolder)
.entries()
.reduce((acc, [key, value]) => {
acc.set(key, {
// @ts-ignore: value is BrowserFile
path: value.path,
isActive: path === key,
});
return acc; const setCurrentScene = async ({ label: name }: ListItem) => {
}, new Map() as BrowserFolder), await loadScene(name);
],
]);
};
const [scenes, setScenes] = createSignal(scenesRaw);
const setCurrentScene = async (path: string) => {
await loadScene(path);
setScenes(mapActive("scenes", path, scenes));
setEntities(mapSceneEntities(currentScene.data)); setEntities(mapSceneEntities(currentScene.data));
}; };
@@ -156,9 +128,8 @@ const DevTools: Component<{ gameContainer: HTMLElement }> = ({
></InputField> ></InputField>
</div> </div>
<FileBrowser root={scenes} handler={setCurrentScene} /> <ItemList name="Scenes" handler={setCurrentScene} items={scenes} />
<ItemList name="Entities" handler={console.log} items={entities} />
<ItemList name={"Entities"} handler={console.log} items={entities} />
</div> </div>
<div class="tool-bar-resize" onMouseDown={startResizing}></div> <div class="tool-bar-resize" onMouseDown={startResizing}></div>
</div> </div>