Merge remote-tracking branch 'origin/codex/tiaoyitiao' into codex/tiaoyitiao

# Conflicts:
#	docs/prd/【玩法创作】跳一跳俯视角玩法模板PRD-2026-05-19.md
#	server-rs/crates/spacetime-client/src/jump_hop.rs
#	server-rs/crates/spacetime-client/src/mapper/runtime.rs
#	server-rs/crates/spacetime-client/src/wooden_fish.rs
#	src/components/jump-hop-result/JumpHopResultView.test.tsx
#	src/components/jump-hop-runtime/JumpHopRuntimeShell.test.tsx
#	src/components/platform-entry/PlatformEntryFlowShellImpl.tsx
#	src/components/rpg-entry/RpgEntryFlowShell.agent.interaction.test.tsx
#	src/components/unified-creation/workspaces/JumpHopCreationWorkspace.tsx
#	src/components/unified-creation/workspaces/JumpHopWorkspace.test.tsx
This commit is contained in:
2026-06-04 11:34:31 +08:00
52 changed files with 6752 additions and 2346 deletions

View File

@@ -24,7 +24,6 @@ export type JumpHopTileType =
export type JumpHopActionType =
| 'compile-draft'
| 'regenerate-character'
| 'regenerate-tiles'
| 'update-work-meta'
| 'update-difficulty';
@@ -35,19 +34,21 @@ export type JumpHopJumpResult = 'miss' | 'hit' | 'perfect' | 'finish';
export interface JumpHopWorkspaceCreateRequest {
templateId: string;
workTitle: string;
workDescription: string;
themeTags: string[];
difficulty: JumpHopDifficulty;
stylePreset: JumpHopStylePreset;
characterPrompt: string;
tilePrompt: string;
themeText: string;
workTitle?: string;
workDescription?: string;
themeTags?: string[];
difficulty?: JumpHopDifficulty;
stylePreset?: JumpHopStylePreset;
characterPrompt?: string;
tilePrompt?: string;
endMoodPrompt?: string | null;
}
export interface JumpHopActionRequest {
actionType: JumpHopActionType;
profileId?: string | null;
themeText?: string | null;
workTitle?: string | null;
workDescription?: string | null;
themeTags?: string[] | null;
@@ -73,12 +74,23 @@ export interface JumpHopCharacterAsset {
height: number;
}
export interface JumpHopDefaultCharacter {
characterId: string;
displayName: string;
modelKind: 'builtin-three';
bodyColor: string;
accentColor: string;
}
export interface JumpHopTileAsset {
tileType: JumpHopTileType;
tileId?: string;
imageSrc: string;
imageObjectKey: string;
assetObjectId: string;
sourceAtlasCell: string;
atlasRow?: number;
atlasCol?: number;
visualWidth: number;
visualHeight: number;
topSurfaceRadius: number;
@@ -126,11 +138,13 @@ export interface JumpHopDraftResponse {
templateId: string;
templateName: string;
profileId: string | null;
themeText: string;
workTitle: string;
workDescription: string;
themeTags: string[];
difficulty: JumpHopDifficulty;
stylePreset: JumpHopStylePreset;
defaultCharacter?: JumpHopDefaultCharacter | null;
characterPrompt: string;
tilePrompt: string;
endMoodPrompt: string | null;
@@ -167,6 +181,7 @@ export interface JumpHopWorkSummaryResponse {
profileId: string;
ownerUserId: string;
sourceSessionId: string | null;
themeText: string;
workTitle: string;
workDescription: string;
themeTags: string[];
@@ -185,6 +200,7 @@ export interface JumpHopWorkProfileResponse {
summary: JumpHopWorkSummaryResponse;
draft: JumpHopDraftResponse;
path: JumpHopPath;
defaultCharacter?: JumpHopDefaultCharacter | null;
characterAsset: JumpHopCharacterAsset;
tileAtlasAsset: JumpHopCharacterAsset;
tileAssets: JumpHopTileAsset[];
@@ -208,6 +224,7 @@ export interface JumpHopGalleryCardResponse {
profileId: string;
ownerUserId: string;
authorDisplayName: string;
themeText: string;
workTitle: string;
workDescription: string;
coverImageSrc: string | null;
@@ -237,6 +254,8 @@ export interface JumpHopRuntimeRunSnapshotResponse {
ownerUserId: string;
status: JumpHopRunStatus;
currentPlatformIndex: number;
successfulJumpCount: number;
durationMs: number;
score: number;
combo: number;
path: JumpHopPath;
@@ -251,10 +270,13 @@ export interface JumpHopRunResponse {
export interface JumpHopStartRunRequest {
profileId: string;
runtimeMode?: 'draft' | 'published';
}
export interface JumpHopJumpRequest {
chargeMs: number;
dragDistance: number;
dragVectorX?: number;
dragVectorY?: number;
clientEventId: string;
}
@@ -265,3 +287,17 @@ export interface JumpHopRestartRunRequest {
export interface JumpHopJumpResponse {
run: JumpHopRuntimeRunSnapshotResponse;
}
export interface JumpHopLeaderboardEntry {
rank: number;
playerId: string;
successfulJumpCount: number;
durationMs: number;
updatedAt: string;
}
export interface JumpHopLeaderboardResponse {
profileId: string;
items: JumpHopLeaderboardEntry[];
viewerBest?: JumpHopLeaderboardEntry | null;
}