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