合并主分支
解决合并冲突
This commit is contained in:
@@ -1,9 +1,14 @@
|
||||
import {
|
||||
CUSTOM_EDITOR_SCENE_STYLE_PRESET,
|
||||
DEFAULT_EDITOR_SCENE_STYLE_PRESET,
|
||||
} from '../../../packages/shared/src/contracts/editorScene';
|
||||
import type {
|
||||
EditorBackgroundMusicGenerationInput,
|
||||
EditorCharacterAnimationGenerationInput,
|
||||
EditorIconSpritesheetGenerationInput,
|
||||
EditorImageEditInput,
|
||||
EditorImageGenerationInput,
|
||||
EditorSceneGenerationInput,
|
||||
EditorSoundEffectGenerationInput,
|
||||
EditorVideoGenerationInput,
|
||||
} from '../../services/image-editor/editorProjectClient';
|
||||
@@ -23,6 +28,7 @@ import {
|
||||
buildPublicationMaterialsGenerationPrompt,
|
||||
buildPublicationMaterialsPrompt,
|
||||
buildQuickEditGenerationInputs,
|
||||
buildSceneGenerationInputs,
|
||||
buildSoundEffectGenerationInputs,
|
||||
buildSpecGenerationInputs,
|
||||
buildSpecPrompt,
|
||||
@@ -64,6 +70,9 @@ type ImageGenerationSubmissionOptions = {
|
||||
canonicalBackgroundMusicPrompt?: string;
|
||||
};
|
||||
|
||||
export const EDITOR_SCENE_CONTENT_REQUIRED_ERROR = '请填写画面内容';
|
||||
export const EDITOR_SCENE_CUSTOM_STYLE_REQUIRED_ERROR = '请填写自定义画风';
|
||||
|
||||
export const EDITOR_GENERATED_ASSET_LABEL_MAX_CHARS = 80;
|
||||
|
||||
export function resolveGenerationAssetLabel(
|
||||
@@ -137,14 +146,31 @@ function buildSeedanceVideoReferenceInput(
|
||||
};
|
||||
}
|
||||
|
||||
// 使用 map 避免嵌套 if else
|
||||
const DEFAULT_GENERATION_PROMPTS = new Map<
|
||||
GenerateDialogState['mode'],
|
||||
string
|
||||
>([
|
||||
['edit', '修改当前图片'],
|
||||
['audio-sound-effect', '游戏音效'],
|
||||
['audio-background-music', '游戏背景音乐'],
|
||||
]);
|
||||
const REQUIRED_GENERATION_PROMPT_MODES = new Set<
|
||||
GenerateDialogState['mode']
|
||||
>(['scene']);
|
||||
|
||||
function getDialogDefaultPrompt(mode: GenerateDialogState['mode']) {
|
||||
if (mode === 'edit') {
|
||||
return '修改当前图片';
|
||||
return DEFAULT_GENERATION_PROMPTS.get(mode) ?? 'AI 生成图片';
|
||||
}
|
||||
|
||||
export function resolveImageGenerationDialogPrompt(
|
||||
dialog: GenerateDialogState,
|
||||
) {
|
||||
const prompt = dialog.prompt.trim();
|
||||
if (prompt || REQUIRED_GENERATION_PROMPT_MODES.has(dialog.mode)) {
|
||||
return prompt;
|
||||
}
|
||||
if (mode === 'audio-sound-effect') {
|
||||
return '游戏音效';
|
||||
}
|
||||
return 'AI 生成图片';
|
||||
return getDialogDefaultPrompt(dialog.mode);
|
||||
}
|
||||
|
||||
function resolveOptionalFieldWithFallback<T extends string>(
|
||||
@@ -322,6 +348,17 @@ export type ImageGenerationSubmissionPlan =
|
||||
};
|
||||
rememberImageModel?: string;
|
||||
}
|
||||
| {
|
||||
kind: 'scene';
|
||||
normalizedPrompt: string;
|
||||
input: EditorSceneGenerationInput;
|
||||
result: {
|
||||
assetKind: 'scene';
|
||||
title: string;
|
||||
generationInputs: CanvasGenerationInputs;
|
||||
};
|
||||
rememberImageModel?: string;
|
||||
}
|
||||
| {
|
||||
kind: 'quick-edit';
|
||||
normalizedPrompt: string;
|
||||
@@ -417,8 +454,7 @@ export function buildImageGenerationSubmissionPlan({
|
||||
};
|
||||
}
|
||||
|
||||
const normalizedPrompt =
|
||||
dialog.prompt.trim() || getDialogDefaultPrompt(dialog.mode);
|
||||
const normalizedPrompt = resolveImageGenerationDialogPrompt(dialog);
|
||||
|
||||
if (dialog.mode === 'edit') {
|
||||
const sourceLayer = layers.find(
|
||||
@@ -554,6 +590,58 @@ export function buildImageGenerationSubmissionPlan({
|
||||
};
|
||||
}
|
||||
|
||||
if (dialog.mode === 'scene') {
|
||||
const sceneContent = dialog.prompt.trim();
|
||||
if (!sceneContent) {
|
||||
throw new Error(EDITOR_SCENE_CONTENT_REQUIRED_ERROR);
|
||||
}
|
||||
const stylePreset =
|
||||
dialog.sceneStylePreset ?? DEFAULT_EDITOR_SCENE_STYLE_PRESET;
|
||||
const customStyle = dialog.sceneCustomStyle?.trim() ?? '';
|
||||
if (stylePreset === CUSTOM_EDITOR_SCENE_STYLE_PRESET && !customStyle) {
|
||||
throw new Error(EDITOR_SCENE_CUSTOM_STYLE_REQUIRED_ERROR);
|
||||
}
|
||||
const references = dialog.generationReferences ?? [];
|
||||
const imageModel = normalizeEditorImageModel(dialog.imageModel);
|
||||
const generationInputs = buildSceneGenerationInputs(
|
||||
sceneContent,
|
||||
stylePreset,
|
||||
customStyle,
|
||||
references,
|
||||
);
|
||||
return {
|
||||
kind: 'scene',
|
||||
normalizedPrompt: sceneContent,
|
||||
input: {
|
||||
sceneContent,
|
||||
stylePreset,
|
||||
...(stylePreset === CUSTOM_EDITOR_SCENE_STYLE_PRESET
|
||||
? { customStyle }
|
||||
: {}),
|
||||
model: imageModel,
|
||||
aspectRatio: dialog.aspectRatio ?? '16:9',
|
||||
imageSize: dialog.imageSize ?? '1K',
|
||||
...(references.length
|
||||
? {
|
||||
referenceImageSrcs: references.map((reference) =>
|
||||
resolveImageReferenceSubmissionSource(reference),
|
||||
),
|
||||
}
|
||||
: {}),
|
||||
generationInputs,
|
||||
},
|
||||
result: {
|
||||
assetKind: 'scene',
|
||||
title: resolveGenerationAssetLabel(
|
||||
dialog.assetLabel,
|
||||
`游戏场景 ${nextGeneratedIndex}`,
|
||||
),
|
||||
generationInputs,
|
||||
},
|
||||
rememberImageModel: imageModel,
|
||||
};
|
||||
}
|
||||
|
||||
if (dialog.mode === 'spec') {
|
||||
const specType = dialog.specType ?? 'custom';
|
||||
const specValues = dialog.specValues ?? DEFAULT_SPEC_FORM_VALUES[specType];
|
||||
|
||||
Reference in New Issue
Block a user