import { AnimatePresence, motion } from 'motion/react'; import type { BottomTab } from '../../hooks/useGameFlow'; import type { BattleRewardUi, CharacterChatUi, InventoryFlowUi, QuestFlowUi, } from '../../hooks/useStoryGeneration'; import type { CompanionRenderState, GameState, StoryMoment, StoryOption, WorldType, } from '../../types'; import { UI_CHROME } from '../../uiAssets'; import type { GameCanvasEntitySelection } from '../GameCanvas'; import { CharacterSelectionFlow } from './CharacterSelectionFlow'; import { GameShellStoryPanels } from './GameShellStoryPanels'; import { PreGameSelectionFlow, type SelectionStage } from './PreGameSelectionFlow'; type AdventureStatistics = { playTimeMs: number; hostileNpcsDefeated: number; questsAccepted: number; questsCompleted: number; questsTurnedIn: number; itemsUsed: number; scenesTraveled: number; currentSceneName: string; playerCurrency: number; inventoryItemCount: number; inventoryStackCount: number; activeCompanionCount: number; rosterCompanionCount: number; }; export function GameShellMainContent({ gameState, visibleGameState, visibleCurrentStory, isLoading, aiError, bottomTab, setBottomTab, selectionStage, setSelectionStage, isCharacterSelectionStage, hasSavedGame, handleContinueGame, handleStartNewGame, handleWorldSelect, handleBackToWorldSelect, handleCharacterSelect, displayedOptions, hideStoryOptions, canRefreshOptions, handleRefreshOptions, handleSceneTransitionChoice, characterChatUi, inventoryUi, battleRewardUi, questUi, companionRenderStates, characterChatSummaries, openOverlayPanel, openCampModal, openPartyMemberDetails, adventureStatistics, musicVolume, onMusicVolumeChange, resetForSaveAndExit, handleSaveAndExit, }: { gameState: GameState; visibleGameState: GameState; visibleCurrentStory: StoryMoment | null; isLoading: boolean; aiError: string | null; bottomTab: BottomTab; setBottomTab: (tab: BottomTab) => void; selectionStage: SelectionStage; setSelectionStage: (stage: SelectionStage) => void; isCharacterSelectionStage: boolean; hasSavedGame: boolean; handleContinueGame: () => void; handleStartNewGame: () => void; handleWorldSelect: (type: WorldType, customWorldProfile?: GameState['customWorldProfile']) => void; handleBackToWorldSelect: () => void; handleCharacterSelect: (character: NonNullable) => void; displayedOptions: StoryOption[]; hideStoryOptions: boolean; canRefreshOptions: boolean; handleRefreshOptions: () => void; handleSceneTransitionChoice: (option: StoryOption) => void; characterChatUi: CharacterChatUi; inventoryUi: InventoryFlowUi; battleRewardUi: BattleRewardUi; questUi: QuestFlowUi; companionRenderStates: CompanionRenderState[]; characterChatSummaries: Record; openOverlayPanel: (panel: 'character' | 'inventory') => void; openCampModal: () => void; openPartyMemberDetails: (selection: GameCanvasEntitySelection) => void; adventureStatistics: AdventureStatistics; musicVolume: number; onMusicVolumeChange: (value: number) => void; resetForSaveAndExit: () => void; handleSaveAndExit: () => void; }) { return (
{!gameState.worldType && ( )} {gameState.worldType && !gameState.playerCharacter && ( { handleBackToWorldSelect(); setSelectionStage('world'); }} onConfirm={handleCharacterSelect} /> )} {visibleGameState.playerCharacter && visibleCurrentStory && ( { resetForSaveAndExit(); handleSaveAndExit(); }} /> )}
); }