拆分大文件
This commit is contained in:
@@ -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")
|
||||
);
|
||||
}
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user