diff --git a/app/src/lib/graph-interface/debug/index.ts b/app/src/lib/graph-interface/debug/index.ts index 34d66e6..cd95315 100644 --- a/app/src/lib/graph-interface/debug/index.ts +++ b/app/src/lib/graph-interface/debug/index.ts @@ -1,4 +1,5 @@ import type { Box } from '@nodarium/types'; +import type { Color } from 'three'; import { Vector3 } from 'three/src/math/Vector3.js'; import Component from './Debug.svelte'; import { lines, points, rects } from './store'; @@ -11,7 +12,6 @@ export function debugPosition(x: number, y: number) { } export function debugRect(rect: Box) { - console.log(rect); rects.update((r) => { r.push(rect); return r; diff --git a/app/src/lib/graph-interface/graph-manager.svelte.ts b/app/src/lib/graph-interface/graph-manager.svelte.ts index 2cff200..b47a664 100644 --- a/app/src/lib/graph-interface/graph-manager.svelte.ts +++ b/app/src/lib/graph-interface/graph-manager.svelte.ts @@ -109,7 +109,7 @@ export class GraphManager extends EventEmitter<{ const serialized = { id: this.graph.id, settings: $state.snapshot(this.settings), - meta: this.graph.meta, + meta: $state.snapshot(this.graph.meta), nodes, edges }; @@ -274,7 +274,7 @@ export class GraphManager extends EventEmitter<{ }) ); - const edges = graph.edges.map((edge) => { + this.edges = graph.edges.map((edge) => { const from = nodes.get(edge[0]); const to = nodes.get(edge[2]); if (!from || !to) { @@ -287,8 +287,6 @@ export class GraphManager extends EventEmitter<{ return [from, edge[1], to, edge[3]] as Edge; }); - this.edges = [...edges]; - this.nodes.clear(); for (const [id, node] of nodes) { this.nodes.set(id, node); @@ -305,7 +303,7 @@ export class GraphManager extends EventEmitter<{ this.status = 'loading'; this.id = graph.id; - logger.info('loading graph', graph); + logger.info('loading graph', { nodes: graph.nodes, edges: graph.edges, id: graph.id }); const nodeIds = Array.from(new Set([...graph.nodes.map((n) => n.type)])); await this.registry.load(nodeIds); @@ -645,6 +643,13 @@ export class GraphManager extends EventEmitter<{ if (this.currentUndoGroup) return; const state = this.serialize(); this.history.save(state); + + // This is some stupid race condition where the graph-manager emits a save event + // when the graph is not fully loaded + if (this.nodes.size === 0 && this.edges.length === 0) { + return; + } + this.emit('save', state); logger.log('saving graphs', state); } diff --git a/app/src/lib/graph-interface/graph/Wrapper.svelte b/app/src/lib/graph-interface/graph/Wrapper.svelte index 39af05e..3e08e8e 100644 --- a/app/src/lib/graph-interface/graph/Wrapper.svelte +++ b/app/src/lib/graph-interface/graph/Wrapper.svelte @@ -70,12 +70,6 @@ } }); - $effect(() => { - if (settingTypes && settings) { - manager.setSettings(settings); - } - }); - manager.on("settings", (_settings) => { settingTypes = { ...settingTypes, ..._settings.types }; settings = _settings.values; diff --git a/app/src/lib/node-registry.ts b/app/src/lib/node-registry.ts index 9594c61..b6d03e6 100644 --- a/app/src/lib/node-registry.ts +++ b/app/src/lib/node-registry.ts @@ -4,7 +4,6 @@ import path from 'path'; export async function getWasm(id: `${string}/${string}/${string}`) { const filePath = path.resolve(`./static/nodes/${id}`); - console.log({ filePath }); try { await fs.access(filePath); diff --git a/app/src/lib/project-manager/ProjectManager.svelte b/app/src/lib/project-manager/ProjectManager.svelte index df09a0c..efdf483 100644 --- a/app/src/lib/project-manager/ProjectManager.svelte +++ b/app/src/lib/project-manager/ProjectManager.svelte @@ -1,18 +1,32 @@ diff --git a/app/src/routes/+page.svelte b/app/src/routes/+page.svelte index ea996ce..6d89f4a 100644 --- a/app/src/routes/+page.svelte +++ b/app/src/routes/+page.svelte @@ -85,21 +85,16 @@ callback: () => randomGenerate(), }, ]); + let graphSettings = $state>({}); + let graphSettingTypes = $state({ + randomSeed: { type: "boolean", value: false }, + }); $effect(() => { - if (graphSettings) { + if (graphSettings && graphSettingTypes) { manager?.setSettings($state.snapshot(graphSettings)); } }); - type BooleanSchema = { - [key: string]: { - type: "boolean"; - value: false; - }; - }; - let graphSettingTypes = $state({ - randomSeed: { type: "boolean", value: false }, - }); async function update( g: Graph, diff --git a/app/src/routes/dev/+page.svelte b/app/src/routes/dev/+page.svelte index ebe4081..6166fa2 100644 --- a/app/src/routes/dev/+page.svelte +++ b/app/src/routes/dev/+page.svelte @@ -26,7 +26,6 @@ let nodeWasmWrapper = $state>(); async function fetchNodeData(nodeId?: NodeId) { - console.log("FETCHING", { nodeId }); nodeWasm = undefined; nodeInstance = undefined; diff --git a/packages/types/src/types.ts b/packages/types/src/types.ts index b627f2f..2a9167b 100644 --- a/packages/types/src/types.ts +++ b/packages/types/src/types.ts @@ -77,7 +77,7 @@ export type Socket = { export type Edge = [NodeInstance, number, NodeInstance, string]; export const GraphSchema = z.object({ - id: z.number().optional(), + id: z.number(), meta: z .object({ title: z.string().optional(),