拆分大文件

This commit is contained in:
2026-04-23 23:38:00 +08:00
parent 53a9cdd791
commit 8df502b2a7
506 changed files with 11312 additions and 13069 deletions

View File

@@ -874,7 +874,10 @@ fn build_level_blueprint(level: u32, level_count: u32, theme: &str) -> BigFishLe
} else {
format!("{level} 阶实体,继续吞噬同级和低级个体成长")
},
silhouette_direction: format!("体型约为初始的 {:.1} 倍,轮廓更清晰", 1.0 + level as f32 * 0.22),
silhouette_direction: format!(
"体型约为初始的 {:.1} 倍,轮廓更清晰",
1.0 + level as f32 * 0.22
),
size_ratio: 1.0 + (level.saturating_sub(1) as f32 * 0.22),
visual_prompt_seed: format!("{theme} 第 {level} 级实体主图,透明背景,清晰轮廓"),
motion_prompt_seed: format!("{theme} 第 {level} 级实体 idle_float 与 move_swim 动作"),
@@ -909,7 +912,10 @@ fn build_asset_prompt_snapshot(
.find(|item| item.level == level)
.ok_or(BigFishFieldError::InvalidLevel)?;
let motion_key = motion_key.ok_or(BigFishFieldError::InvalidAssetKind)?;
Ok(format!("{},动作位:{}", blueprint.motion_prompt_seed, motion_key))
Ok(format!(
"{},动作位:{}",
blueprint.motion_prompt_seed, motion_key
))
}
BigFishAssetKind::StageBackground => Ok(draft.background.background_prompt_seed.clone()),
}
@@ -990,8 +996,14 @@ fn move_owned_entities(
) {
let input = snapshot.last_input.clone();
if let Some(leader) = snapshot.owned_entities.first_mut() {
leader.position.x = clamp_world(leader.position.x + input.x * params.leader_move_speed * step_seconds, true);
leader.position.y = clamp_world(leader.position.y + input.y * params.leader_move_speed * step_seconds, false);
leader.position.x = clamp_world(
leader.position.x + input.x * params.leader_move_speed * step_seconds,
true,
);
leader.position.y = clamp_world(
leader.position.y + input.y * params.leader_move_speed * step_seconds,
false,
);
snapshot.camera_center = leader.position.clone();
}
@@ -1038,10 +1050,15 @@ fn resolve_collisions(snapshot: &mut BigFishRuntimeSnapshot, _params: &BigFishRu
radius: entity_radius(wild.level),
offscreen_seconds: 0.0,
});
snapshot.event_log.push(format!("收编 {} 级实体", wild.level));
snapshot
.event_log
.push(format!("收编 {} 级实体", wild.level));
} else {
owned_to_remove.push(owned_index);
snapshot.event_log.push(format!("{} 级己方实体被 {} 级野生实体吃掉", owned.level, wild.level));
snapshot.event_log.push(format!(
"{} 级己方实体被 {} 级野生实体吃掉",
owned.level, wild.level
));
}
}
}
@@ -1075,7 +1092,9 @@ fn apply_chain_merges(snapshot: &mut BigFishRuntimeSnapshot, params: &BigFishRun
radius: entity_radius(level + 1),
offscreen_seconds: 0.0,
});
snapshot.event_log.push(format!("3 个 {} 级实体合成 {}", level, level + 1));
snapshot
.event_log
.push(format!("3 个 {} 级实体合成 {}", level, level + 1));
merged = true;
break;
}
@@ -1098,7 +1117,10 @@ fn refresh_player_leader(snapshot: &mut BigFishRuntimeSnapshot) {
})
.then_with(|| left.entity_id.cmp(&right.entity_id))
});
snapshot.leader_entity_id = snapshot.owned_entities.first().map(|entity| entity.entity_id.clone());
snapshot.leader_entity_id = snapshot
.owned_entities
.first()
.map(|entity| entity.entity_id.clone());
snapshot.player_level = snapshot
.owned_entities
.iter()
@@ -1113,12 +1135,16 @@ fn refresh_player_leader(snapshot: &mut BigFishRuntimeSnapshot) {
fn apply_win_or_fail(snapshot: &mut BigFishRuntimeSnapshot, params: &BigFishRuntimeParams) {
if snapshot.owned_entities.is_empty() {
snapshot.status = BigFishRunStatus::Failed;
snapshot.event_log.push("己方实体归零,本局失败".to_string());
snapshot
.event_log
.push("己方实体归零,本局失败".to_string());
return;
}
if snapshot.player_level >= params.win_level {
snapshot.status = BigFishRunStatus::Won;
snapshot.event_log.push("获得最高等级实体,通关".to_string());
snapshot
.event_log
.push("获得最高等级实体,通关".to_string());
}
}
@@ -1282,7 +1308,12 @@ mod tests {
assert_eq!(draft.runtime_params.offscreen_cull_seconds, 3.0);
assert_eq!(draft.runtime_params.prey_spawn_delta_levels, vec![1, 2]);
assert_eq!(draft.runtime_params.threat_spawn_delta_levels, vec![1, 2]);
assert!(draft.levels.last().is_some_and(|level| level.is_final_level));
assert!(
draft
.levels
.last()
.is_some_and(|level| level.is_final_level)
);
}
#[test]
@@ -1292,20 +1323,26 @@ mod tests {
assert!(!coverage.publish_ready);
assert_eq!(coverage.required_level_count, 8);
assert!(coverage.blockers.iter().any(|item| item.contains("等级主图")));
assert!(coverage.blockers.iter().any(|item| item.contains("基础动作")));
assert!(
coverage
.blockers
.iter()
.any(|item| item.contains("等级主图"))
);
assert!(
coverage
.blockers
.iter()
.any(|item| item.contains("基础动作"))
);
assert!(coverage.blockers.iter().any(|item| item.contains("背景图")));
}
#[test]
fn same_level_wild_entity_can_be_collected_at_start() {
let draft = compile_default_draft(&infer_anchor_pack("深海", None));
let mut snapshot = build_initial_runtime_snapshot(
"run-1".to_string(),
"session-1".to_string(),
&draft,
1,
);
let mut snapshot =
build_initial_runtime_snapshot("run-1".to_string(), "session-1".to_string(), &draft, 1);
snapshot.wild_entities[0].position = BigFishVector2 { x: 1.0, y: 0.0 };
let next = advance_runtime_snapshot(snapshot, &draft.runtime_params, 0.0, 0.0, 2);
@@ -1383,15 +1420,14 @@ mod tests {
});
snapshot.updated_at_micros = 1_000_000;
let next = advance_runtime_snapshot(
snapshot,
&draft.runtime_params,
0.0,
0.0,
1_250_000,
);
let next = advance_runtime_snapshot(snapshot, &draft.runtime_params, 0.0, 0.0, 1_250_000);
assert!(!next.wild_entities.iter().any(|entity| entity.entity_id == "wild-cull"));
assert!(
!next
.wild_entities
.iter()
.any(|entity| entity.entity_id == "wild-cull")
);
}
#[test]
@@ -1413,17 +1449,12 @@ mod tests {
});
snapshot.updated_at_micros = 1_000_000;
let next = advance_runtime_snapshot(
snapshot,
&draft.runtime_params,
0.0,
0.0,
1_200_000,
);
let next = advance_runtime_snapshot(snapshot, &draft.runtime_params, 0.0, 0.0, 1_200_000);
assert!(next
.wild_entities
.iter()
.any(|entity| entity.entity_id == "wild-cull-safe"));
assert!(
next.wild_entities
.iter()
.any(|entity| entity.entity_id == "wild-cull-safe")
);
}
}