feat: chapter select system, multi-chapter support, scene manager refactor, and docs update

This commit is contained in:
2026-06-09 11:35:11 +08:00
parent 655b9a23d0
commit ace5ed1fb3
14 changed files with 413 additions and 17 deletions

View File

@@ -1,6 +1,6 @@
import { defineStore } from 'pinia'
import { ref, shallowRef } from 'vue'
import type { SceneNode, Choice, QTEDefinition, Hotspot } from '@engine/types'
import type { SceneNode, Choice, QTEDefinition, Hotspot, ChapterInfo } from '@engine/types'
export interface SlotInfo {
slot: number
@@ -25,6 +25,9 @@ export const useGameStore = defineStore('game', () => {
const videoTime = ref(0)
const hotspots = ref<Hotspot[]>([])
const isImageScene = ref(false)
const showChapterSelect = ref(false)
const chapters = ref<ChapterInfo[]>([])
const unlockedChapterIds = ref<Set<string>>(new Set())
function setScene(scene: SceneNode) {
currentScene.value = scene
@@ -93,6 +96,23 @@ export const useGameStore = defineStore('game', () => {
isImageScene.value = val
}
function setChapters(list: ChapterInfo[]) {
chapters.value = list
}
function setUnlockedChapters(ids: string[]) {
unlockedChapterIds.value = new Set(ids)
}
function addUnlockedChapter(id: string) {
unlockedChapterIds.value.add(id)
unlockedChapterIds.value = new Set(unlockedChapterIds.value)
}
function setShowChapterSelect(val: boolean) {
showChapterSelect.value = val
}
function dump() {
console.group('GameStore')
console.log('currentScene:', currentScene.value?.id)
@@ -108,11 +128,12 @@ export const useGameStore = defineStore('game', () => {
return {
currentScene, choices, gameEnded, timerTotal, timerRemaining, saves,
qteActive, qteDef, qteTotal, qteRemaining, qteResult, videoTime,
hotspots, isImageScene,
hotspots, isImageScene, showChapterSelect, chapters, unlockedChapterIds,
setScene, setChoices, clearChoices, setGameEnded,
setTimer, clearTimer, setSaves,
showQTE, updateQTE, resolveQTE, setVideoTime,
setHotspots, clearHotspots, setIsImageScene,
setChapters, setUnlockedChapters, addUnlockedChapter, setShowChapterSelect,
dump,
}
})