feat: P25 conditional routing, nextScene supports Choice[] with conditions

This commit is contained in:
2026-06-13 00:50:48 +08:00
parent db4f06883d
commit e949a84171
7 changed files with 108 additions and 10 deletions

View File

@@ -296,11 +296,26 @@ export class Engine {
}
)
} else if (scene.nextScene) {
const next = this.sceneManager.getScene(scene.nextScene)
if (next) {
this.goToScene(next)
} else {
if (Array.isArray(scene.nextScene)) {
for (const route of scene.nextScene) {
if (!route.conditions || this.stateManager.evaluate(route.conditions)) {
const next = this.sceneManager.getScene(route.targetScene)
if (next) {
this.goToScene(next)
} else {
this.endGame()
}
return
}
}
this.endGame()
} else {
const next = this.sceneManager.getScene(scene.nextScene)
if (next) {
this.goToScene(next)
} else {
this.endGame()
}
}
} else if (scene.hotspots?.length) {
return

View File

@@ -50,8 +50,13 @@ export class SceneManager {
}
}
if (scene.nextScene && !targets.includes(scene.nextScene)) {
targets.push(scene.nextScene)
if (scene.nextScene) {
const nextIds = Array.isArray(scene.nextScene)
? scene.nextScene.map(r => r.targetScene)
: [scene.nextScene]
for (const id of nextIds) {
if (!targets.includes(id)) targets.push(id)
}
}
return targets