feat(jump-hop): redesign sling platform gameplay

This commit is contained in:
2026-06-03 22:21:00 +08:00
parent 40ef89aeb5
commit 7d2d67a3f5
59 changed files with 6930 additions and 1973 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;
}