Files
Genarrative/src/types/game.ts
高物 c49c64896a
Some checks failed
CI / verify (push) Has been cancelled
初始仓库迁移
2026-04-04 23:57:06 +08:00

83 lines
2.4 KiB
TypeScript

import type {TimedBuildBuff} from './build';
import type {Character} from './characters';
import {
AnimationState,
type CombatActionMode,
type NpcBattleMode,
type NpcBattleOutcome,
WorldType,
} from './core';
import type {CustomWorldProfile} from './customWorld';
import type {EquipmentLoadout, InventoryItem} from './items';
import type {
CombatVisualEffect,
CompanionState,
Encounter,
NpcPersistentState,
SceneEncounterResult,
SceneHostileNpc,
ScenePresetInfo,
} from './scene';
import type {CharacterChatRecord, QuestLogEntry, StoryMoment} from './story';
export interface GameRuntimeStats {
playTimeMs: number;
lastPlayTickAt: string | null;
hostileNpcsDefeated: number;
questsAccepted: number;
itemsUsed: number;
scenesTraveled: number;
}
export interface GameState {
worldType: WorldType | null;
customWorldProfile: CustomWorldProfile | null;
playerCharacter: Character | null;
runtimeStats: GameRuntimeStats;
currentScene: string;
storyHistory: StoryMoment[];
characterChats: Record<string, CharacterChatRecord>;
ambientIdleMode?: 'observe_signs';
lastObserveSignsSceneId?: string | null;
lastObserveSignsReport?: string | null;
animationState: AnimationState;
currentEncounter: Encounter | null;
npcInteractionActive: boolean;
currentScenePreset: ScenePresetInfo | null;
sceneMonsters: SceneHostileNpc[];
sceneHostileNpcs?: SceneHostileNpc[];
playerX: number;
playerOffsetY: number;
playerFacing: 'left' | 'right';
playerActionMode: CombatActionMode;
scrollWorld: boolean;
inBattle: boolean;
playerHp: number;
playerMaxHp: number;
playerMana: number;
playerMaxMana: number;
playerSkillCooldowns: Record<string, number>;
activeBuildBuffs?: TimedBuildBuff[];
activeCombatEffects: CombatVisualEffect[];
playerCurrency: number;
playerInventory: InventoryItem[];
playerEquipment: EquipmentLoadout;
npcStates: Record<string, NpcPersistentState>;
quests: QuestLogEntry[];
roster: CompanionState[];
companions: CompanionState[];
currentBattleNpcId: string | null;
currentNpcBattleMode: NpcBattleMode | null;
currentNpcBattleOutcome: NpcBattleOutcome | null;
sparReturnEncounter: Encounter | null;
sparPlayerHpBefore: number | null;
sparPlayerMaxHpBefore: number | null;
sparStoryHistoryBefore: StoryMoment[] | null;
}
export interface AIResponse {
storyText: string;
options: StoryMoment['options'];
encounter?: SceneEncounterResult;
}