import { AnimationState, type StoryOption } from '../../../types'; import type { FunctionDocumentationEntry } from '../types'; /** * camp_travel_home_scene * * 从营地与同伴对话结束后,正式前往角色主线场景的控制 function。 * 这里除了元信息,也直接收口了它的按钮构造与判定 helper。 */ export const CAMP_TRAVEL_HOME_OPTION_VISUALS: StoryOption['visuals'] = { playerAnimation: AnimationState.RUN, playerMoveMeters: 1.1, playerOffsetY: 0, playerFacing: 'right', scrollWorld: false, monsterChanges: [], }; export function buildCampTravelHomeOption(sceneName: string): StoryOption { return { functionId: CAMP_TRAVEL_HOME_FUNCTION.id, actionText: `前往 ${sceneName}`, text: `前往 ${sceneName}`, detailText: `离开营地,前往 ${sceneName}。`, visuals: CAMP_TRAVEL_HOME_OPTION_VISUALS, }; } export function isCampTravelHomeFunctionId(functionId: string) { return functionId === CAMP_TRAVEL_HOME_FUNCTION.id; } export function isCampTravelHomeOption(option: StoryOption) { return isCampTravelHomeFunctionId(option.functionId); } export const CAMP_TRAVEL_HOME_FUNCTION: FunctionDocumentationEntry = { id: 'camp_travel_home_scene', domain: 'flow', title: '前往角色主场景', source: 'src/data/functionCatalog/flow/campTravelHomeScene.ts', summary: '营地开场后的专用旅行控制项。', detailedDescription: '它负责把开局同伴营地流程平稳切到角色真正的起始场景,并清理当前营地 encounter、战斗态和镜头残留状态。', trigger: '常见于开局同伴营地对话后的跟进选项。', execution: '点击后不会走普通 state function 结算,而是执行一次定制的场景迁移和历史写入。', result: '玩家会离开营地进入角色主场景,正式开始该角色的冒险线。', active: true, runtime: { storyMode: 'special_travel', uiMode: 'none', visuals: CAMP_TRAVEL_HOME_OPTION_VISUALS, executor: 'src/hooks/rpg-runtime-story/choiceActions.ts -> handleCampTravelHome', animationNote: '先播放营地离场的 run 演出,再切到正式场景并生成 encounter preview。', storyNote: '通过 commitGeneratedStateWithEncounterEntry 写入离营结果,并在新场景继续后续剧情。', uiNote: '这是专用旅行流程,不会打开 modal。', }, };