This commit is contained in:
kolaflash
2025-12-31 15:29:43 +01:00
parent 3f2ebb3291
commit 71d0007f08
2 changed files with 32 additions and 7 deletions
+2 -2
View File
@@ -19,7 +19,7 @@ import {
export type ListItem = { label: string; isActive: boolean }; export type ListItem = { label: string; isActive: boolean };
export type ItemHandler = (item: ListItem, index: number) => void; export type ItemHandler = (list: Array<ListItem>, index: number) => void;
export type Direction = "default" | "asc" | "desc"; export type Direction = "default" | "asc" | "desc";
@@ -136,7 +136,7 @@ export const ItemList: Component<{
classList={{ classList={{
active: item.isActive, active: item.isActive,
}} }}
onClick={() => props.handler(item, index())} onClick={() => props.handler(items(), index())}
> >
{item.label} {item.label}
</li> </li>
+30 -5
View File
@@ -1,5 +1,5 @@
import "./main.css"; import "./main.css";
import { type Component, createSignal, onMount } from "solid-js"; import { type Component, createSignal, onMount, type Setter } 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";
@@ -40,6 +40,13 @@ 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;`;
} }
function mapActiveItem(items: Array<ListItem>, index: number): Array<ListItem> {
return items.map((item, idx) => ({
...item,
isActive: idx === index,
}));
}
const scenesRaw = await fetchScenes(); const scenesRaw = await fetchScenes();
const DevTools: Component<{ gameContainer: HTMLElement }> = ({ const DevTools: Component<{ gameContainer: HTMLElement }> = ({
@@ -65,17 +72,35 @@ const DevTools: Component<{ gameContainer: HTMLElement }> = ({
adjustGameContainer(gameContainer, width()); adjustGameContainer(gameContainer, width());
const [scenes, setScenes] = createSignal(
scenesRaw.map((scene) => ({
...scene,
isActive: scene.label === currentScene.data.name,
})),
);
const [entities, setEntities] = createSignal( const [entities, setEntities] = createSignal(
mapSceneEntities(currentScene.data), mapSceneEntities(currentScene.data),
); );
const [scenes] = createSignal(scenesRaw); const setCurrentScene = async (
scenes: Array<ListItem>,
index: number,
): Promise<void> => {
setScenes(mapActiveItem(scenes, index));
const setCurrentScene = async ({ label: name }: ListItem) => { await loadScene(scenes[index].label);
await loadScene(name);
setEntities(mapSceneEntities(currentScene.data)); setEntities(mapSceneEntities(currentScene.data));
}; };
const setActiveEntity = (entities: Array<ListItem>, index: number): void => {
setEntities(mapActiveItem(entities, index));
const instances = currentScene.entityInstanceMap.get(
entities[index].label,
)!.instances;
console.log(instances);
};
onMount(() => { onMount(() => {
self.addEventListener("resize", () => { self.addEventListener("resize", () => {
adjustGameContainer(gameContainer, width()); adjustGameContainer(gameContainer, width());
@@ -129,7 +154,7 @@ const DevTools: Component<{ gameContainer: HTMLElement }> = ({
</div> </div>
<ItemList name="Scenes" handler={setCurrentScene} items={scenes} /> <ItemList name="Scenes" handler={setCurrentScene} items={scenes} />
<ItemList name="Entities" handler={console.log} items={entities} /> <ItemList name="Entities" handler={setActiveEntity} items={entities} />
</div> </div>
<div class="tool-bar-resize" onMouseDown={startResizing}></div> <div class="tool-bar-resize" onMouseDown={startResizing}></div>
</div> </div>