fix: use path-based unique Dagre IDs so convergent scenes appear per branch
This commit is contained in:
@@ -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 })
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
Reference in New Issue
Block a user