feat: configurable locales path per story, dynamic language switching from story data

This commit is contained in:
2026-06-10 12:17:52 +08:00
parent 4cf2263c78
commit 86a0aebdc8
10 changed files with 64 additions and 28 deletions

View File

@@ -1,6 +1,6 @@
import { defineStore } from 'pinia'
import { ref, shallowRef } from 'vue'
import type { SceneNode, Choice, QTEDefinition, Hotspot, ChapterInfo, AchievementDef, EndingDef } from '@engine/types'
import type { SceneNode, Choice, QTEDefinition, Hotspot, ChapterInfo, AchievementDef, EndingDef, LocalesConfig } from '@engine/types'
export interface SlotInfo {
slot: number
@@ -36,6 +36,7 @@ export const useGameStore = defineStore('game', () => {
const showEndingGallery = ref(false)
const endings = ref<EndingDef[]>([])
const visitedSceneIds = ref<Set<string>>(new Set())
const storyLocales = ref<LocalesConfig>({ path: '', languages: ['zh'] })
const subFontSize = ref(Number(localStorage.getItem('subFontSize') || 20))
const subBgAlpha = ref(Number(localStorage.getItem('subBgAlpha') || 0))
@@ -180,6 +181,10 @@ export const useGameStore = defineStore('game', () => {
visitedSceneIds.value = new Set(visitedSceneIds.value)
}
function setStoryLocales(locales: LocalesConfig | undefined) {
if (locales) storyLocales.value = locales
}
function setSubFontSize(v: number) { subFontSize.value = v; localStorage.setItem('subFontSize', String(v)) }
function setSubBgAlpha(v: number) { subBgAlpha.value = v; localStorage.setItem('subBgAlpha', String(v)) }
function setQteTimeRelax(v: boolean) { qteTimeRelax.value = v; localStorage.setItem('qteTimeRelax', String(v)) }
@@ -206,6 +211,7 @@ export const useGameStore = defineStore('game', () => {
hotspots, isImageScene, showChapterSelect, chapters, unlockedChapterIds,
inputMode, showAchievements, achievementDefs, unlockedAchievementIds,
toastAchievementId, showEndingGallery, endings, visitedSceneIds,
storyLocales,
subFontSize, subBgAlpha, qteTimeRelax, qteSingleKey, antiMistap, pauseEnabled,
showSettings,
setScene, setChoices, clearChoices, setGameEnded,
@@ -217,6 +223,7 @@ export const useGameStore = defineStore('game', () => {
setShowAchievements, setAchievementDefs, setUnlockedAchievementIds,
addUnlockedAchievement, clearToastAchievement,
setEndings, setShowEndingGallery, setVisitedSceneIds, addVisitedSceneId,
setStoryLocales,
setSubFontSize, setSubBgAlpha, setQteTimeRelax, setQteSingleKey, setAntiMistap, setPauseEnabled,
setShowSettings,
dump,