fix: use path-based unique Dagre IDs so convergent scenes appear per branch

This commit is contained in:
2026-06-11 21:58:34 +08:00
parent ab511b27ba
commit bca5e07cdd

View File

@@ -38,8 +38,9 @@ function buildFlow(root: PlayerTreeNode) {
function walk(node: PlayerTreeNode, parentId: string | null) {
if (node.visited) {
const dagreId = parentId ? `${parentId}/${node.sceneId}` : node.sceneId
dagreNodes.push({
id: node.sceneId,
id: dagreId,
parent: parentId,
label: node.label,
visited: true,
@@ -48,29 +49,29 @@ function buildFlow(root: PlayerTreeNode) {
lockHint: node.lockHint,
})
if (parentId) {
dagreEdges.push({ from: parentId, to: node.sceneId, visited: true })
dagreEdges.push({ from: parentId, to: dagreId, visited: true })
}
const unvisited: PlayerTreeNode[] = []
for (const child of node.children) {
if (child.visited) {
walk(child, node.sceneId)
walk(child, dagreId)
} else {
unvisited.push(child)
}
}
if (unvisited.length > 0) {
const mysteryId = `${node.sceneId}__mystery`
const mysteryId = `${dagreId}/__mystery`
dagreNodes.push({
id: mysteryId,
parent: node.sceneId,
parent: dagreId,
label: '? ?',
visited: false,
isMystery: true,
locked: true,
})
dagreEdges.push({ from: node.sceneId, to: mysteryId, visited: false })
dagreEdges.push({ from: dagreId, to: mysteryId, visited: false })
}
}
}