1
This commit is contained in:
@@ -91,9 +91,13 @@ pub struct BigFishLevelBlueprint {
|
||||
pub level: u32,
|
||||
pub name: String,
|
||||
pub one_line_fantasy: String,
|
||||
pub text_description: String,
|
||||
pub silhouette_direction: String,
|
||||
pub size_ratio: f32,
|
||||
pub visual_description: String,
|
||||
pub visual_prompt_seed: String,
|
||||
pub idle_motion_description: String,
|
||||
pub move_motion_description: String,
|
||||
pub motion_prompt_seed: String,
|
||||
pub merge_source_level: Option<u32>,
|
||||
pub prey_window: Vec<u32>,
|
||||
@@ -293,6 +297,7 @@ pub struct BigFishMessageFinalizeInput {
|
||||
pub struct BigFishDraftCompileInput {
|
||||
pub session_id: String,
|
||||
pub owner_user_id: String,
|
||||
pub draft_json: Option<String>,
|
||||
pub compiled_at_micros: i64,
|
||||
}
|
||||
|
||||
@@ -693,24 +698,72 @@ fn build_level_blueprint(level: u32, level_count: u32, theme: &str) -> BigFishLe
|
||||
.rev()
|
||||
.collect();
|
||||
let threat_window = ((level + 1)..=(level + 2).min(level_count)).collect::<Vec<_>>();
|
||||
let size_ratio = 1.0 + (level.saturating_sub(1) as f32 * 0.22);
|
||||
let name = format!("{theme} L{level}");
|
||||
let one_line_fantasy = if level == level_count {
|
||||
"终局巨兽形态,获得即可通关".to_string()
|
||||
} else {
|
||||
format!("第 {level} 阶实体,继续吞噬同级和低级个体成长")
|
||||
};
|
||||
let text_description = if level == 1 {
|
||||
format!(
|
||||
"{name} 是这套 {theme} 等级阶梯的起点个体,体型最小、动作轻盈,会在谨慎试探中寻找第一个可吞噬目标。"
|
||||
)
|
||||
} else if level == level_count {
|
||||
format!(
|
||||
"{name} 是这套 {theme} 生态中的终局霸主形态,体格巨大、压迫感最强,一旦成型就代表本局成长链已经完成。"
|
||||
)
|
||||
} else {
|
||||
format!(
|
||||
"{name} 是 {theme} 生态里的第 {level} 阶进化体,已经具备更鲜明的轮廓、猎食性和压迫感,会继续通过吞并同级与低级实体向上跃迁。"
|
||||
)
|
||||
};
|
||||
let visual_description = if level == 1 {
|
||||
format!(
|
||||
"{theme} 风格的小型初始鱼形生物,体态轻巧,轮廓圆润,局部带少量发光纹路或主题特征,明显呈现弱小但灵动的开局形象。"
|
||||
)
|
||||
} else if level == level_count {
|
||||
format!(
|
||||
"{theme} 风格的终局巨型鱼形霸主,体长与鳍面明显扩张,轮廓锋利或威严,层次细节最丰富,拥有一眼可辨识的终局统治感。"
|
||||
)
|
||||
} else {
|
||||
format!(
|
||||
"{theme} 风格的第 {level} 级进化鱼形生物,相比上一阶段更大、更强、更成熟,身体主轮廓更清晰,局部装饰、鳍面结构和主题特征都更明显。"
|
||||
)
|
||||
};
|
||||
let idle_motion_description = if level == level_count {
|
||||
"待机时缓慢悬停,身体主体保持稳定,尾鳍与侧鳍做低频摆动,呈现强者从容压场的漂浮感。"
|
||||
.to_string()
|
||||
} else {
|
||||
format!(
|
||||
"待机时保持轻微漂浮与呼吸感摆动,尾鳍和侧鳍以小幅度节奏晃动,体现 Lv.{level} 生物在水中蓄势观察的状态。"
|
||||
)
|
||||
};
|
||||
let move_motion_description = if level == level_count {
|
||||
"移动时身体前倾,尾鳍和背鳍形成强力推进姿态,带出稳定而有压迫感的高速巡游动势。".to_string()
|
||||
} else {
|
||||
format!(
|
||||
"移动时身体向前游动,尾鳍形成清晰摆尾推进,整体节奏比待机更主动,体现 Lv.{level} 生物追逐猎物时的连续游动感。"
|
||||
)
|
||||
};
|
||||
BigFishLevelBlueprint {
|
||||
level,
|
||||
name: format!("{theme} L{level}"),
|
||||
one_line_fantasy: if level == level_count {
|
||||
"终局巨兽形态,获得即可通关".to_string()
|
||||
} else {
|
||||
format!("第 {level} 阶实体,继续吞噬同级和低级个体成长")
|
||||
},
|
||||
name,
|
||||
one_line_fantasy,
|
||||
text_description,
|
||||
silhouette_direction: format!(
|
||||
"体型约为初始的 {:.1} 倍,轮廓更清晰",
|
||||
1.0 + level as f32 * 0.22
|
||||
),
|
||||
size_ratio: 1.0 + (level.saturating_sub(1) as f32 * 0.22),
|
||||
size_ratio,
|
||||
visual_description: visual_description.clone(),
|
||||
visual_prompt_seed: format!(
|
||||
"{theme} 第 {level} 级鱼形实体主图,RPG 角色资产口径,透明背景,单体完整入镜,清晰轮廓"
|
||||
"{visual_description} 透明背景,单体完整入镜,适合作为竖屏吞噬成长玩法的等级主图。"
|
||||
),
|
||||
idle_motion_description: idle_motion_description.clone(),
|
||||
move_motion_description: move_motion_description.clone(),
|
||||
motion_prompt_seed: format!(
|
||||
"{theme} 第 {level} 级鱼形实体 idle_float 与 move_swim 动作,RPG 角色动画资产口径,透明背景"
|
||||
"待机动作:{idle_motion_description} 移动动作:{move_motion_description}"
|
||||
),
|
||||
merge_source_level: if level == 1 { None } else { Some(level - 1) },
|
||||
prey_window,
|
||||
@@ -743,9 +796,14 @@ fn build_asset_prompt_snapshot(
|
||||
.find(|item| item.level == level)
|
||||
.ok_or(BigFishFieldError::InvalidLevel)?;
|
||||
let motion_key = motion_key.ok_or(BigFishFieldError::InvalidAssetKind)?;
|
||||
let motion_description = match motion_key {
|
||||
"idle_float" => blueprint.idle_motion_description.as_str(),
|
||||
"move_swim" => blueprint.move_motion_description.as_str(),
|
||||
_ => return Err(BigFishFieldError::InvalidAssetKind),
|
||||
};
|
||||
Ok(format!(
|
||||
"{},动作位:{},透明背景,单体完整入镜",
|
||||
blueprint.motion_prompt_seed, motion_key
|
||||
"{} 动作位:{}。{} 透明背景,单体完整入镜。",
|
||||
blueprint.motion_prompt_seed, motion_key, motion_description
|
||||
))
|
||||
}
|
||||
BigFishAssetKind::StageBackground => Ok(draft.background.background_prompt_seed.clone()),
|
||||
@@ -861,5 +919,4 @@ mod tests {
|
||||
);
|
||||
assert!(coverage.blockers.iter().any(|item| item.contains("背景图")));
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user