feat: add puzzle clear template runtime

This commit is contained in:
2026-06-03 22:11:46 +08:00
parent 6e74cf5add
commit 1b5e098225
148 changed files with 19588 additions and 241 deletions

View File

@@ -3,6 +3,7 @@ export type * from './creationAudio';
export type * from './hyper3d';
export type * from './jumpHop';
export type * from './puzzleCreativeTemplate';
export type * from './puzzleClear';
export type * from './publicWork';
export type * from './visualNovel';
export type * from './barkBattle';

View File

@@ -0,0 +1,226 @@
export type PuzzleClearGenerationStatus = 'draft' | 'generating' | 'ready' | 'failed';
export type PuzzleClearShapeKind = '1x2' | '1x3' | '2x2' | '2x3';
export type PuzzleClearOrientation = 'horizontal' | 'vertical';
export type PuzzleClearRunStatus =
| 'playing'
| 'level_failed'
| 'level_cleared'
| 'finished';
export type PuzzleClearActionType =
| 'compile-draft'
| 'regenerate-atlas'
| 'update-work-meta'
| 'update-board-background';
export interface PuzzleClearImageAsset {
assetId: string;
imageSrc: string;
imageObjectKey: string;
assetObjectId: string;
generationProvider: string;
prompt: string;
width: number;
height: number;
}
export interface PuzzleClearPatternGroup {
groupId: string;
shape: PuzzleClearShapeKind;
width: number;
height: number;
atlasX: number;
atlasY: number;
atlasWidth: number;
atlasHeight: number;
}
export interface PuzzleClearCardAsset {
cardId: string;
groupId: string;
shape: PuzzleClearShapeKind;
orientation: PuzzleClearOrientation;
partX: number;
partY: number;
imageSrc: string;
imageObjectKey: string;
assetObjectId: string;
sourceAtlasCell: string;
}
export interface PuzzleClearWorkspaceCreateRequest {
templateId: 'puzzle-clear' | string;
workTitle: string;
workDescription: string;
themePrompt: string;
boardBackgroundPrompt: string;
generateBoardBackground: boolean;
boardBackgroundAsset?: PuzzleClearImageAsset | null;
}
export interface PuzzleClearActionRequest {
actionType: PuzzleClearActionType;
profileId?: string | null;
workTitle?: string | null;
workDescription?: string | null;
themePrompt?: string | null;
boardBackgroundPrompt?: string | null;
generateBoardBackground?: boolean | null;
boardBackgroundAsset?: PuzzleClearImageAsset | null;
atlasAsset?: PuzzleClearImageAsset | null;
patternGroups?: PuzzleClearPatternGroup[] | null;
cardAssets?: PuzzleClearCardAsset[] | null;
}
export interface PuzzleClearDraftResponse {
templateId: string;
templateName: string;
profileId: string | null;
workTitle: string;
workDescription: string;
themePrompt: string;
boardBackgroundPrompt: string;
generateBoardBackground: boolean;
boardBackgroundAsset: PuzzleClearImageAsset | null;
cardBackImageSrc: string | null;
atlasAsset: PuzzleClearImageAsset | null;
patternGroups: PuzzleClearPatternGroup[];
cardAssets: PuzzleClearCardAsset[];
generationStatus: PuzzleClearGenerationStatus;
}
export interface PuzzleClearSessionSnapshotResponse {
sessionId: string;
ownerUserId: string;
status: PuzzleClearGenerationStatus;
draft: PuzzleClearDraftResponse | null;
createdAt: string;
updatedAt: string;
}
export interface PuzzleClearSessionResponse {
session: PuzzleClearSessionSnapshotResponse;
}
export interface PuzzleClearActionResponse {
actionType: PuzzleClearActionType;
session: PuzzleClearSessionSnapshotResponse;
work: PuzzleClearWorkProfileResponse | null;
}
export interface PuzzleClearWorkSummaryResponse {
runtimeKind: 'puzzle-clear';
workId: string;
profileId: string;
ownerUserId: string;
sourceSessionId: string | null;
workTitle: string;
workDescription: string;
themePrompt: string;
coverImageSrc: string | null;
publicationStatus: string;
playCount: number;
updatedAt: string;
publishedAt: string | null;
publishReady: boolean;
generationStatus: PuzzleClearGenerationStatus;
}
export interface PuzzleClearWorkProfileResponse {
summary: PuzzleClearWorkSummaryResponse;
draft: PuzzleClearDraftResponse;
boardBackgroundAsset: PuzzleClearImageAsset | null;
atlasAsset: PuzzleClearImageAsset;
patternGroups: PuzzleClearPatternGroup[];
cardAssets: PuzzleClearCardAsset[];
}
export interface PuzzleClearWorksResponse {
items: PuzzleClearWorkSummaryResponse[];
}
export interface PuzzleClearWorkDetailResponse {
item: PuzzleClearWorkProfileResponse;
}
export interface PuzzleClearWorkMutationResponse {
item: PuzzleClearWorkProfileResponse;
}
export interface PuzzleClearGalleryCardResponse
extends PuzzleClearWorkSummaryResponse {
publicWorkCode?: string;
authorDisplayName?: string;
recentPlayCount7d?: number;
}
export interface PuzzleClearGalleryResponse {
items: PuzzleClearGalleryCardResponse[];
hasMore: boolean;
nextCursor: string | null;
}
export interface PuzzleClearGalleryDetailResponse {
item: PuzzleClearWorkProfileResponse;
}
export interface PuzzleClearBoardCell {
row: number;
col: number;
card: PuzzleClearCardAsset | null;
lockedGroupId: string | null;
}
export interface PuzzleClearBoardSnapshot {
rows: number;
cols: number;
cells: PuzzleClearBoardCell[];
}
export interface PuzzleClearRuntimeSnapshotResponse {
runId: string;
profileId: string;
ownerUserId: string;
runtimeMode?: 'draft' | 'published';
status: PuzzleClearRunStatus;
levelIndex: number;
clearsDone: number;
targetClears: number;
levelDurationSeconds: number;
levelStartedAtMs: number;
board: PuzzleClearBoardSnapshot;
readyColumns: PuzzleClearCardAsset[][];
startedAtMs: number;
finishedAtMs: number | null;
}
export interface PuzzleClearRunResponse {
run: PuzzleClearRuntimeSnapshotResponse;
}
export interface PuzzleClearStartRunRequest {
profileId: string;
}
export interface PuzzleClearSwapRequest {
fromRow: number;
fromCol: number;
toRow: number;
toCol: number;
clientActionId: string;
}
export interface PuzzleClearRetryLevelRequest {
clientActionId: string;
}
export interface PuzzleClearNextLevelRequest {
clientActionId: string;
}
export interface PuzzleClearTimeUpRequest {
clientActionId: string;
}