1
This commit is contained in:
@@ -1,4 +1,5 @@
|
||||
import type { BigFishWorkSummary } from '../../../packages/shared/src/contracts/bigFishWorkSummary';
|
||||
import type { PuzzleDraftLevel } from '../../../packages/shared/src/contracts/puzzleAgentDraft';
|
||||
import type { PuzzleWorkSummary } from '../../../packages/shared/src/contracts/puzzleWorkSummary';
|
||||
import type {
|
||||
CustomWorldGalleryCard,
|
||||
@@ -32,6 +33,7 @@ export type PlatformPuzzleGalleryCard = {
|
||||
subtitle: string;
|
||||
summaryText: string;
|
||||
coverImageSrc: string | null;
|
||||
coverSlides?: PlatformPuzzleCoverSlide[];
|
||||
themeTags: string[];
|
||||
playCount?: number;
|
||||
remixCount?: number;
|
||||
@@ -42,6 +44,12 @@ export type PlatformPuzzleGalleryCard = {
|
||||
updatedAt: string;
|
||||
};
|
||||
|
||||
export type PlatformPuzzleCoverSlide = {
|
||||
id: string;
|
||||
imageSrc: string;
|
||||
label: string;
|
||||
};
|
||||
|
||||
export type PlatformBigFishGalleryCard = {
|
||||
sourceType: 'big-fish';
|
||||
workId: string;
|
||||
@@ -100,6 +108,7 @@ export function mapPuzzleWorkToPlatformGalleryCard(
|
||||
subtitle: '拼图关卡',
|
||||
summaryText: work.workDescription || work.summary,
|
||||
coverImageSrc: work.coverImageSrc,
|
||||
coverSlides: buildPuzzleWorkCoverSlides(work),
|
||||
themeTags: work.themeTags,
|
||||
playCount: work.playCount ?? 0,
|
||||
remixCount: work.remixCount ?? 0,
|
||||
@@ -160,6 +169,89 @@ export function resolvePlatformWorldCoverImage(entry: PlatformWorldCardLike) {
|
||||
return '';
|
||||
}
|
||||
|
||||
export function resolvePlatformWorldCoverSlides(
|
||||
entry: PlatformWorldCardLike,
|
||||
): PlatformPuzzleCoverSlide[] {
|
||||
const fallbackCoverImage = resolvePlatformWorldCoverImage(entry).trim();
|
||||
const puzzleCoverSlides = isPuzzleGalleryEntry(entry)
|
||||
? (entry.coverSlides ?? [])
|
||||
: [];
|
||||
const normalizedSlides = puzzleCoverSlides
|
||||
.map((slide, index) => ({
|
||||
id: slide.id.trim() || `cover-${index + 1}`,
|
||||
imageSrc: slide.imageSrc.trim(),
|
||||
label: slide.label.trim() || entry.worldName,
|
||||
}))
|
||||
.filter((slide) => Boolean(slide.imageSrc));
|
||||
|
||||
if (normalizedSlides.length > 0) {
|
||||
return normalizedSlides;
|
||||
}
|
||||
|
||||
return fallbackCoverImage
|
||||
? [
|
||||
{
|
||||
id: 'cover',
|
||||
imageSrc: fallbackCoverImage,
|
||||
label: entry.worldName,
|
||||
},
|
||||
]
|
||||
: [];
|
||||
}
|
||||
|
||||
export function resolvePuzzleLevelFormalImageSrc(level: PuzzleDraftLevel) {
|
||||
const selectedCandidate =
|
||||
level.candidates.find(
|
||||
(candidate) =>
|
||||
candidate.selected ||
|
||||
(level.selectedCandidateId
|
||||
? candidate.candidateId === level.selectedCandidateId
|
||||
: false),
|
||||
) ??
|
||||
level.candidates[level.candidates.length - 1] ??
|
||||
null;
|
||||
|
||||
return (
|
||||
selectedCandidate?.imageSrc?.trim() || level.coverImageSrc?.trim() || ''
|
||||
);
|
||||
}
|
||||
|
||||
export function buildPuzzleWorkCoverSlides(
|
||||
work: PuzzleWorkSummary,
|
||||
): PlatformPuzzleCoverSlide[] {
|
||||
const slides: PlatformPuzzleCoverSlide[] = [];
|
||||
const usedImageSrcSet = new Set<string>();
|
||||
|
||||
work.levels?.forEach((level, index) => {
|
||||
const imageSrc = resolvePuzzleLevelFormalImageSrc(level);
|
||||
if (!imageSrc || usedImageSrcSet.has(imageSrc)) {
|
||||
return;
|
||||
}
|
||||
|
||||
usedImageSrcSet.add(imageSrc);
|
||||
slides.push({
|
||||
id: level.levelId?.trim() || `puzzle-level-${index + 1}`,
|
||||
imageSrc,
|
||||
label: level.levelName?.trim() || `第 ${index + 1} 关`,
|
||||
});
|
||||
});
|
||||
|
||||
if (slides.length > 0) {
|
||||
return slides;
|
||||
}
|
||||
|
||||
const fallbackImageSrc = work.coverImageSrc?.trim() ?? '';
|
||||
return fallbackImageSrc
|
||||
? [
|
||||
{
|
||||
id: 'cover',
|
||||
imageSrc: fallbackImageSrc,
|
||||
label: work.levelName,
|
||||
},
|
||||
]
|
||||
: [];
|
||||
}
|
||||
|
||||
export function resolvePlatformWorldLeadPortrait(entry: PlatformWorldCardLike) {
|
||||
if (!isLibraryWorldEntry(entry)) {
|
||||
return '';
|
||||
|
||||
Reference in New Issue
Block a user