191 lines
4.5 KiB
TypeScript
191 lines
4.5 KiB
TypeScript
/**
|
|
* 大鱼吃小鱼玩法域前端共享契约。
|
|
* 字段与 server-rs/shared-contracts/src/big_fish.rs 保持 camelCase 对齐。
|
|
*/
|
|
export type CreateBigFishSessionRequest = {
|
|
seedText?: string;
|
|
};
|
|
|
|
export type SendBigFishMessageRequest = {
|
|
clientMessageId: string;
|
|
text: string;
|
|
};
|
|
|
|
export type BigFishActionId =
|
|
| 'big_fish_compile_draft'
|
|
| 'big_fish_generate_level_main_image'
|
|
| 'big_fish_generate_level_motion'
|
|
| 'big_fish_generate_stage_background'
|
|
| 'big_fish_publish_game';
|
|
|
|
export type ExecuteBigFishActionRequest = {
|
|
action: BigFishActionId;
|
|
level?: number;
|
|
motionKey?: 'idle_float' | 'move_swim' | string;
|
|
};
|
|
|
|
export type SubmitBigFishInputRequest = {
|
|
x: number;
|
|
y: number;
|
|
};
|
|
|
|
export type BigFishAnchorStatus =
|
|
| 'confirmed'
|
|
| 'inferred'
|
|
| 'missing'
|
|
| 'locked'
|
|
| string;
|
|
|
|
export type BigFishAnchorItemResponse = {
|
|
key: string;
|
|
label: string;
|
|
value: string;
|
|
status: BigFishAnchorStatus;
|
|
};
|
|
|
|
export type BigFishAnchorPackResponse = {
|
|
gameplayPromise: BigFishAnchorItemResponse;
|
|
ecologyVisualTheme: BigFishAnchorItemResponse;
|
|
growthLadder: BigFishAnchorItemResponse;
|
|
riskTempo: BigFishAnchorItemResponse;
|
|
};
|
|
|
|
export type BigFishLevelBlueprintResponse = {
|
|
level: number;
|
|
name: string;
|
|
oneLineFantasy: string;
|
|
silhouetteDirection: string;
|
|
sizeRatio: number;
|
|
visualPromptSeed: string;
|
|
motionPromptSeed: string;
|
|
mergeSourceLevel?: number | null;
|
|
preyWindow: number[];
|
|
threatWindow: number[];
|
|
isFinalLevel: boolean;
|
|
};
|
|
|
|
export type BigFishBackgroundBlueprintResponse = {
|
|
theme: string;
|
|
colorMood: string;
|
|
foregroundHints: string;
|
|
midgroundComposition: string;
|
|
backgroundDepth: string;
|
|
safePlayAreaHint: string;
|
|
spawnEdgeHint: string;
|
|
backgroundPromptSeed: string;
|
|
};
|
|
|
|
export type BigFishRuntimeParamsResponse = {
|
|
levelCount: number;
|
|
mergeCountPerUpgrade: number;
|
|
spawnTargetCount: number;
|
|
leaderMoveSpeed: number;
|
|
followerCatchUpSpeed: number;
|
|
offscreenCullSeconds: number;
|
|
preySpawnDeltaLevels: number[];
|
|
threatSpawnDeltaLevels: number[];
|
|
winLevel: number;
|
|
};
|
|
|
|
export type BigFishGameDraftResponse = {
|
|
title: string;
|
|
subtitle: string;
|
|
coreFun: string;
|
|
ecologyTheme: string;
|
|
levels: BigFishLevelBlueprintResponse[];
|
|
background: BigFishBackgroundBlueprintResponse;
|
|
runtimeParams: BigFishRuntimeParamsResponse;
|
|
};
|
|
|
|
export type BigFishAgentMessageResponse = {
|
|
id: string;
|
|
role: 'user' | 'assistant' | string;
|
|
kind: 'chat' | 'system' | 'warning' | string;
|
|
text: string;
|
|
createdAt: string;
|
|
};
|
|
|
|
export type BigFishAssetKind =
|
|
| 'level_main_image'
|
|
| 'level_motion'
|
|
| 'stage_background'
|
|
| string;
|
|
|
|
export type BigFishAssetStatus = 'empty' | 'ready' | 'generating' | string;
|
|
|
|
export type BigFishAssetSlotResponse = {
|
|
slotId: string;
|
|
assetKind: BigFishAssetKind;
|
|
level?: number | null;
|
|
motionKey?: string | null;
|
|
status: BigFishAssetStatus;
|
|
assetUrl?: string | null;
|
|
promptSnapshot: string;
|
|
updatedAt: string;
|
|
};
|
|
|
|
export type BigFishAssetCoverageResponse = {
|
|
levelMainImageReadyCount: number;
|
|
levelMotionReadyCount: number;
|
|
backgroundReady: boolean;
|
|
requiredLevelCount: number;
|
|
publishReady: boolean;
|
|
blockers: string[];
|
|
};
|
|
|
|
export type BigFishSessionSnapshotResponse = {
|
|
sessionId: string;
|
|
currentTurn: number;
|
|
progressPercent: number;
|
|
stage: string;
|
|
anchorPack: BigFishAnchorPackResponse;
|
|
draft?: BigFishGameDraftResponse | null;
|
|
assetSlots: BigFishAssetSlotResponse[];
|
|
assetCoverage: BigFishAssetCoverageResponse;
|
|
messages: BigFishAgentMessageResponse[];
|
|
lastAssistantReply?: string | null;
|
|
publishReady: boolean;
|
|
updatedAt: string;
|
|
};
|
|
|
|
export type BigFishSessionResponse = {
|
|
session: BigFishSessionSnapshotResponse;
|
|
};
|
|
|
|
export type BigFishActionResponse = {
|
|
session: BigFishSessionSnapshotResponse;
|
|
};
|
|
|
|
export type BigFishVector2Response = {
|
|
x: number;
|
|
y: number;
|
|
};
|
|
|
|
export type BigFishRuntimeEntityResponse = {
|
|
entityId: string;
|
|
level: number;
|
|
position: BigFishVector2Response;
|
|
radius: number;
|
|
offscreenSeconds: number;
|
|
};
|
|
|
|
export type BigFishRuntimeSnapshotResponse = {
|
|
runId: string;
|
|
sessionId: string;
|
|
status: 'running' | 'won' | 'failed' | string;
|
|
tick: number;
|
|
playerLevel: number;
|
|
winLevel: number;
|
|
leaderEntityId?: string | null;
|
|
ownedEntities: BigFishRuntimeEntityResponse[];
|
|
wildEntities: BigFishRuntimeEntityResponse[];
|
|
cameraCenter: BigFishVector2Response;
|
|
lastInput: BigFishVector2Response;
|
|
eventLog: string[];
|
|
updatedAt: string;
|
|
};
|
|
|
|
export type BigFishRunResponse = {
|
|
run: BigFishRuntimeSnapshotResponse;
|
|
};
|