43 lines
1.3 KiB
TypeScript
43 lines
1.3 KiB
TypeScript
import { computed } from 'vue'
|
|
import { useEditorStore } from '../stores/editorStore'
|
|
import { computeEdges, computeSceneNodes } from '../services/GraphService'
|
|
|
|
export function useGraphEditor() {
|
|
const store = useEditorStore()
|
|
|
|
const sceneNodes = computed(() => computeSceneNodes(store.gameData))
|
|
const sceneEdges = computed(() => computeEdges(store.gameData))
|
|
const sceneList = computed(() => computeSceneNodes(store.gameData))
|
|
|
|
function onAddEdge(source: string, target: string) {
|
|
const scene = store.gameData.scenes[source]
|
|
if (!scene) return
|
|
const newChoices = [...(scene.choices || []), { text: `${source} → ${target}`, targetScene: target }]
|
|
store.gameData = {
|
|
...store.gameData,
|
|
scenes: { ...store.gameData.scenes, [source]: { ...scene, choices: newChoices } },
|
|
}
|
|
store.markDirty()
|
|
store.autoSave()
|
|
}
|
|
|
|
return {
|
|
gameData: store.gameData,
|
|
selectedNodeId: store.selectedNodeId,
|
|
selectedScene: store.selectedScene,
|
|
startSceneId: store.startSceneId,
|
|
sceneNodes,
|
|
sceneEdges,
|
|
sceneList,
|
|
loadJSON: store.loadJSON,
|
|
exportJSON: store.exportJSON,
|
|
updateScene: store.updateScene,
|
|
addChoice: store.addChoice,
|
|
updateChoice: store.updateChoice,
|
|
deleteChoice: store.deleteChoice,
|
|
addScene: store.addScene,
|
|
deleteScene: store.deleteScene,
|
|
onAddEdge,
|
|
}
|
|
}
|