feat: P22 merge chapter select and gallery into StoryGallery, i18n updates

This commit is contained in:
2026-06-10 16:01:26 +08:00
parent 0dec8a2376
commit d2dae38f05
8 changed files with 461 additions and 440 deletions

View File

@@ -6,15 +6,13 @@ import QTEOverlay from '@/components/QTEOverlay.vue'
import Subtitles from '@/components/Subtitles.vue'
import HotspotLayer from '@/components/HotspotLayer.vue'
import SaveLoadMenu from '@/components/SaveLoadMenu.vue'
import ChapterSelect from '@/components/ChapterSelect.vue'
import PlaybackBar from '@/components/PlaybackBar.vue'
import MainMenu from '@/components/MainMenu.vue'
import PauseMenu from '@/components/PauseMenu.vue'
import AchievementToast from '@/components/AchievementToast.vue'
import AchievementPanel from '@/components/AchievementPanel.vue'
import EndingGallery from '@/components/EndingGallery.vue'
import ChapterRecap from '@/components/ChapterRecap.vue'
import AccessibilitySettings from '@/components/AccessibilitySettings.vue'
import StoryGallery from '@/components/StoryGallery.vue'
import { useGameEngine } from '@/composables/useGameEngine'
import { useGameStore } from '@/stores/gameStore'
import { useFullscreen } from '@/composables/useFullscreen'
@@ -29,10 +27,8 @@ const loading = ref(true)
const started = ref(false)
const showMenu = ref(false)
const showPauseMenu = ref(false)
const showChapterSelect = ref(false)
const showStoryGallery = ref(false)
const showAchievements = ref(false)
const showEndingGallery = ref(false)
const recapChapterId = ref<string | null>(null)
const hasAutoSave = ref(false)
const currentSpeed = ref(1)
const canSkip = ref(false)
@@ -117,8 +113,8 @@ watch([() => store.qteTimeRelax, () => store.qteSingleKey], () => {
watch(
() => [
showPauseMenu.value, showMenu.value, showChapterSelect.value,
showAchievements.value, showEndingGallery.value, recapChapterId.value,
showPauseMenu.value, showMenu.value,
showAchievements.value, showStoryGallery.value,
paused.value, store.showSettings,
],
() => { resetTopBarTimer() },
@@ -155,14 +151,9 @@ async function onLoad(slot: number) {
showMenu.value = false
}
function openChapterSelect() {
showMenu.value = false
showChapterSelect.value = true
}
async function onStartChapter(chapterId: string) {
showChapterSelect.value = false
started.value = true
applyQteParams()
startChapter(chapterId)
}
@@ -201,18 +192,14 @@ function onGlobalKeydown(e: KeyboardEvent) {
if (key === 'Escape') {
if (store.showSettings) {
store.showSettings = false
} else if (showChapterSelect.value) {
showChapterSelect.value = false
} else if (showStoryGallery.value) {
showStoryGallery.value = false
} else if (showMenu.value) {
showMenu.value = false
} else if (showPauseMenu.value) {
showPauseMenu.value = false
} else if (showAchievements.value) {
showAchievements.value = false
} else if (showEndingGallery.value) {
showEndingGallery.value = false
} else if (recapChapterId.value) {
recapChapterId.value = null
} else if (started.value && !store.gameEnded) {
showPauseMenu.value = true
}
@@ -258,9 +245,8 @@ function onGlobalMouseMove() {
}
function anyOverlayOpen(): boolean {
return showPauseMenu.value || showMenu.value || showChapterSelect.value
|| showAchievements.value || showEndingGallery.value || !!recapChapterId.value
|| paused.value || store.showSettings
return showPauseMenu.value || showMenu.value || showStoryGallery.value
|| showAchievements.value || paused.value || store.showSettings
}
function resetTopBarTimer() {
@@ -346,15 +332,13 @@ init()
<MainMenu
v-if="!started || store.gameEnded"
:show-resume="!store.gameEnded && hasAutoSave"
:show-chapters="store.chapters.length > 0"
:show-story="store.chapters.length > 0"
:show-achievements="store.achievementDefs.length > 0"
:show-gallery="store.endings.length > 0"
:is-game-end="store.gameEnded"
@start="handleStart"
@resume="handleResume"
@chapters="openChapterSelect"
@story="showStoryGallery = true"
@achievements="showAchievements = true"
@gallery="showEndingGallery = true"
@settings="store.setShowSettings(true)"
/>
<PauseMenu
@@ -371,12 +355,15 @@ init()
@load="onLoad"
@close="showMenu = false"
/>
<ChapterSelect
v-if="showChapterSelect"
<StoryGallery
v-if="showStoryGallery"
:chapters="store.chapters"
:unlocked-ids="store.unlockedChapterIds"
@select="onStartChapter"
@back="showChapterSelect = false"
:endings="store.endings"
:scenes="engine.sceneManager.getScenes()"
:visited-ids="store.visitedSceneIds"
:unlocked-chapter-ids="store.unlockedChapterIds"
@start-chapter="(chId: string) => { showStoryGallery = false; onStartChapter(chId) }"
@close="showStoryGallery = false"
/>
<AchievementPanel
v-if="showAchievements"
@@ -384,20 +371,6 @@ init()
:unlocked-ids="store.unlockedAchievementIds"
@close="showAchievements = false"
/>
<EndingGallery
v-if="showEndingGallery"
:endings="store.endings"
:visited-ids="store.visitedSceneIds"
@close="showEndingGallery = false"
@select-chapter="(chId: string) => { showEndingGallery = false; recapChapterId = chId }"
/>
<ChapterRecap
v-if="recapChapterId"
:chapter="store.chapters.find(c => c.id === recapChapterId)!"
:scenes="engine.sceneManager.getScenes()"
:visited-ids="store.visitedSceneIds"
@close="recapChapterId = null"
/>
<AccessibilitySettings
v-if="store.showSettings"
@close="store.setShowSettings(false)"