1
This commit is contained in:
@@ -7,6 +7,7 @@ const { requestJsonMock } = vi.hoisted(() => ({
|
||||
}));
|
||||
|
||||
import {
|
||||
generateRpgWorldOpeningCg,
|
||||
generateRpgWorldLandmark,
|
||||
generateRpgWorldSceneImage,
|
||||
generateRpgWorldSceneNpc,
|
||||
@@ -23,6 +24,11 @@ describe('rpgCreationAssetClient', () => {
|
||||
entity: { id: 'landmark-1', name: '雾港' },
|
||||
imageSrc: '/generated-custom-world-scenes/profile/scene/image.webp',
|
||||
npc: { id: 'npc-1', name: '守灯人' },
|
||||
openingCg: {
|
||||
id: 'opening-cg-1',
|
||||
status: 'ready',
|
||||
videoSrc: '/generated-custom-world-scenes/profile/opening.mp4',
|
||||
},
|
||||
});
|
||||
});
|
||||
|
||||
@@ -89,4 +95,24 @@ describe('rpgCreationAssetClient', () => {
|
||||
'生成场景 NPC 失败',
|
||||
);
|
||||
});
|
||||
|
||||
it('posts opening cg generation to the runtime custom world asset route', async () => {
|
||||
const openingCg = await generateRpgWorldOpeningCg({
|
||||
profile: {
|
||||
id: 'profile-1',
|
||||
name: '雾海群岛',
|
||||
} as never,
|
||||
});
|
||||
|
||||
expect(openingCg.videoSrc).toBe(
|
||||
'/generated-custom-world-scenes/profile/opening.mp4',
|
||||
);
|
||||
expect(requestJsonMock).toHaveBeenCalledWith(
|
||||
'/api/runtime/custom-world/opening-cg',
|
||||
expect.objectContaining({
|
||||
method: 'POST',
|
||||
}),
|
||||
'生成开局 CG 失败',
|
||||
);
|
||||
});
|
||||
});
|
||||
|
||||
@@ -2,6 +2,7 @@ import { ASSET_API_PATHS } from '../../editor/shared/editorApiClient';
|
||||
import type {
|
||||
CustomWorldLandmark,
|
||||
CustomWorldNpc,
|
||||
CustomWorldOpeningCgProfile,
|
||||
CustomWorldPlayableNpc,
|
||||
CustomWorldProfile,
|
||||
} from '../../types';
|
||||
@@ -132,6 +133,20 @@ export async function generateRpgWorldLandmark(payload: {
|
||||
return response.entity;
|
||||
}
|
||||
|
||||
export async function generateRpgWorldOpeningCg(payload: {
|
||||
profile: CustomWorldProfile;
|
||||
}) {
|
||||
const response = await requestRpgCreationPostJson<{
|
||||
openingCg: CustomWorldOpeningCgProfile;
|
||||
}>(
|
||||
`${RPG_CREATION_ASSET_API_BASE}/opening-cg`,
|
||||
payload,
|
||||
'生成开局 CG 失败',
|
||||
);
|
||||
|
||||
return response.openingCg;
|
||||
}
|
||||
|
||||
/**
|
||||
* 工作包 D 把结果页与编辑器依赖的资产请求迁入 RPG 创作域 client,
|
||||
* 保留封面资产服务的既有边界,不把逻辑重新塞回 `aiService.ts`。
|
||||
@@ -143,6 +158,7 @@ export const rpgCreationAssetClient = {
|
||||
generatePlayableNpc: generateRpgWorldPlayableNpc,
|
||||
generateStoryNpc: generateRpgWorldStoryNpc,
|
||||
generateLandmark: generateRpgWorldLandmark,
|
||||
generateOpeningCg: generateRpgWorldOpeningCg,
|
||||
generateCoverImage: generateCustomWorldCoverImage,
|
||||
uploadCoverImage: uploadCustomWorldCoverImage,
|
||||
};
|
||||
|
||||
Reference in New Issue
Block a user