refactor: 收口推荐运行态启动意图
This commit is contained in:
@@ -361,15 +361,7 @@ import {
|
||||
selectAdjacentPlatformRecommendEntry,
|
||||
} from '../rpg-entry/rpgEntryPublicGalleryViewModel';
|
||||
import {
|
||||
isBarkBattleGalleryEntry,
|
||||
isBigFishGalleryEntry,
|
||||
isEdutainmentGalleryEntry,
|
||||
isJumpHopGalleryEntry,
|
||||
isMatch3DGalleryEntry,
|
||||
isPuzzleGalleryEntry,
|
||||
isSquareHoleGalleryEntry,
|
||||
isVisualNovelGalleryEntry,
|
||||
isWoodenFishGalleryEntry,
|
||||
mapBabyObjectMatchDraftToPlatformGalleryCard,
|
||||
mapBarkBattleWorkToPlatformGalleryCard,
|
||||
mapBigFishWorkToPlatformGalleryCard,
|
||||
@@ -514,15 +506,12 @@ import {
|
||||
isSamePlatformPublicGalleryEntry,
|
||||
mergePlatformPublicGalleryEntries,
|
||||
type RecommendRuntimeKind,
|
||||
resolvePlatformRecommendRuntimeStartIntent,
|
||||
} from './platformPublicGalleryFlow';
|
||||
import {
|
||||
mapBarkBattlePublicDetailToWorkSummary,
|
||||
mapBarkBattleWorkToPublicWorkDetail,
|
||||
mapBigFishWorkToPublicWorkDetail,
|
||||
mapJumpHopWorkToPublicWorkDetail,
|
||||
mapPublicWorkDetailToBigFishWork,
|
||||
mapPublicWorkDetailToPuzzleWork,
|
||||
mapPublicWorkDetailToSquareHoleWork,
|
||||
mapPuzzleWorkToPublicWorkDetail,
|
||||
mapRpgGalleryCardToPublicWorkDetail,
|
||||
mapSquareHoleWorkToPublicWorkDetail,
|
||||
@@ -12762,98 +12751,99 @@ export function PlatformEntryFlowShellImpl({
|
||||
|
||||
try {
|
||||
let started = false;
|
||||
if (isBigFishGalleryEntry(entry)) {
|
||||
const work = mapPublicWorkDetailToBigFishWork(entry);
|
||||
if (!work) {
|
||||
setBigFishError('当前作品缺少会话信息,暂时无法进入玩法。');
|
||||
} else {
|
||||
started = await startBigFishRunFromWork(work, 'platform', {
|
||||
embedded: true,
|
||||
const intent = resolvePlatformRecommendRuntimeStartIntent(entry, {
|
||||
selectedPuzzleDetail,
|
||||
barkBattleGalleryEntries,
|
||||
mapMatch3DWork: mapPublicWorkDetailToMatch3DWork,
|
||||
});
|
||||
|
||||
switch (intent.type) {
|
||||
case 'blocked':
|
||||
if (intent.errorTarget === 'big-fish') {
|
||||
setBigFishError(intent.errorMessage);
|
||||
} else if (intent.errorTarget === 'puzzle') {
|
||||
setPuzzleError(intent.errorMessage);
|
||||
} else if (intent.errorTarget === 'match3d') {
|
||||
setMatch3DError(intent.errorMessage);
|
||||
} else if (intent.errorTarget === 'square-hole') {
|
||||
setSquareHoleError(intent.errorMessage);
|
||||
} else {
|
||||
setBarkBattleError(intent.errorMessage);
|
||||
}
|
||||
break;
|
||||
case 'start-big-fish':
|
||||
started = await startBigFishRunFromWork(intent.work, 'platform', {
|
||||
embedded: intent.embedded,
|
||||
});
|
||||
}
|
||||
} else if (isPuzzleGalleryEntry(entry)) {
|
||||
const work =
|
||||
selectedPuzzleDetail?.profileId === entry.profileId
|
||||
? selectedPuzzleDetail
|
||||
: mapPublicWorkDetailToPuzzleWork(entry);
|
||||
if (!work) {
|
||||
setPuzzleError('当前拼图作品信息不完整,暂时无法进入玩法。');
|
||||
} else {
|
||||
break;
|
||||
case 'start-puzzle':
|
||||
started = await startPuzzleRunFromProfile(
|
||||
work.profileId,
|
||||
'platform',
|
||||
work,
|
||||
intent.work.profileId,
|
||||
intent.returnStage,
|
||||
intent.work,
|
||||
false,
|
||||
null,
|
||||
{ embedded: true },
|
||||
{ embedded: intent.embedded },
|
||||
);
|
||||
}
|
||||
} else if (isJumpHopGalleryEntry(entry)) {
|
||||
started = await startJumpHopRunFromProfile(entry.profileId, {
|
||||
embedded: true,
|
||||
returnStage: 'platform',
|
||||
});
|
||||
} else if (isWoodenFishGalleryEntry(entry)) {
|
||||
started = await startWoodenFishRunFromProfile(entry.profileId, {
|
||||
embedded: true,
|
||||
returnStage: 'platform',
|
||||
});
|
||||
} else if (isMatch3DGalleryEntry(entry)) {
|
||||
const work = mapPublicWorkDetailToMatch3DWork(entry);
|
||||
if (!work) {
|
||||
setMatch3DError('当前抓大鹅作品信息不完整,暂时无法进入玩法。');
|
||||
} else {
|
||||
started = await startMatch3DRunFromProfile(
|
||||
work,
|
||||
'work-detail',
|
||||
false,
|
||||
{ embedded: true },
|
||||
);
|
||||
}
|
||||
} else if (isSquareHoleGalleryEntry(entry)) {
|
||||
const work = mapPublicWorkDetailToSquareHoleWork(entry);
|
||||
if (!work) {
|
||||
setSquareHoleError(
|
||||
'当前方洞挑战作品信息不完整,暂时无法进入玩法。',
|
||||
);
|
||||
} else {
|
||||
started = await startSquareHoleRunFromProfile(
|
||||
work,
|
||||
'platform',
|
||||
false,
|
||||
{ embedded: true },
|
||||
);
|
||||
}
|
||||
} else if (isVisualNovelGalleryEntry(entry)) {
|
||||
started = await startVisualNovelRunFromProfile(
|
||||
entry.profileId,
|
||||
'platform',
|
||||
{ embedded: true },
|
||||
);
|
||||
} else if (isBarkBattleGalleryEntry(entry)) {
|
||||
const work =
|
||||
barkBattleGalleryEntries.find(
|
||||
(item) => item.workId === entry.workId,
|
||||
) ?? mapBarkBattlePublicDetailToWorkSummary(entry);
|
||||
if (!work) {
|
||||
setBarkBattleError(
|
||||
'当前汪汪声浪作品信息不完整,暂时无法进入玩法。',
|
||||
);
|
||||
} else {
|
||||
started = await startBarkBattleRunFromWork(work, 'platform', {
|
||||
embedded: true,
|
||||
break;
|
||||
case 'start-jump-hop':
|
||||
started = await startJumpHopRunFromProfile(intent.profileId, {
|
||||
embedded: intent.embedded,
|
||||
returnStage: intent.returnStage,
|
||||
});
|
||||
break;
|
||||
case 'start-wooden-fish':
|
||||
started = await startWoodenFishRunFromProfile(intent.profileId, {
|
||||
embedded: intent.embedded,
|
||||
returnStage: intent.returnStage,
|
||||
});
|
||||
break;
|
||||
case 'start-match3d':
|
||||
started = await startMatch3DRunFromProfile(
|
||||
intent.work,
|
||||
intent.returnStage,
|
||||
false,
|
||||
{ embedded: intent.embedded },
|
||||
);
|
||||
break;
|
||||
case 'start-square-hole':
|
||||
started = await startSquareHoleRunFromProfile(
|
||||
intent.work,
|
||||
intent.returnStage,
|
||||
false,
|
||||
{ embedded: intent.embedded },
|
||||
);
|
||||
break;
|
||||
case 'start-visual-novel':
|
||||
started = await startVisualNovelRunFromProfile(
|
||||
intent.profileId,
|
||||
intent.returnStage,
|
||||
{ embedded: intent.embedded },
|
||||
);
|
||||
break;
|
||||
case 'start-bark-battle':
|
||||
started = await startBarkBattleRunFromWork(
|
||||
intent.work,
|
||||
intent.returnStage,
|
||||
{ embedded: intent.embedded },
|
||||
);
|
||||
break;
|
||||
case 'start-edutainment':
|
||||
started = await startBabyObjectMatchRuntimeFromEntry(
|
||||
intent.entry,
|
||||
intent.returnStage,
|
||||
{
|
||||
embedded: intent.embedded,
|
||||
},
|
||||
);
|
||||
break;
|
||||
case 'mark-ready':
|
||||
started = true;
|
||||
break;
|
||||
default: {
|
||||
const exhaustive: never = intent;
|
||||
return exhaustive;
|
||||
}
|
||||
} else if (isEdutainmentGalleryEntry(entry)) {
|
||||
started = await startBabyObjectMatchRuntimeFromEntry(
|
||||
entry,
|
||||
'platform',
|
||||
{
|
||||
embedded: true,
|
||||
},
|
||||
);
|
||||
} else {
|
||||
started = true;
|
||||
}
|
||||
|
||||
if (!isCurrentStartRequest()) {
|
||||
|
||||
Reference in New Issue
Block a user