Show neighbor cells if boats can't touch
This commit is contained in:
parent
6e423f41ef
commit
c7bfdb8d74
@ -19,7 +19,9 @@ use sea_battle_backend::data::GameRules;
|
||||
async fn run_app<B: Backend>(terminal: &mut Terminal<B>) -> Result<(), Box<dyn Error>> {
|
||||
// Temporary code
|
||||
// let res = configure_game_rules::configure_play_rules(GameRules::default(), terminal)?; // select_bot_type::select_bot_type(terminal)?;
|
||||
let res = set_boats_layout::set_boat_layout(&GameRules::default(), terminal)?; // select_bot_type::select_bot_type(terminal)?;
|
||||
let mut rules = GameRules::default();
|
||||
rules.boats_can_touch = true;
|
||||
let res = set_boats_layout::set_boat_layout(&rules, terminal)?; // select_bot_type::select_bot_type(terminal)?;
|
||||
Err(io::Error::new(
|
||||
ErrorKind::Other,
|
||||
format!("result: {:?}", res),
|
||||
|
@ -146,7 +146,7 @@ fn ui<B: Backend>(
|
||||
}
|
||||
|
||||
let other_boats = ColoredCells {
|
||||
color: Color::DarkGray,
|
||||
color: Color::Gray,
|
||||
cells: other_boats_cells,
|
||||
};
|
||||
|
||||
@ -160,7 +160,7 @@ fn ui<B: Backend>(
|
||||
legend.push_str("Enter confirm layout");
|
||||
}
|
||||
|
||||
let game_map_widget = GameMapWidget::new(rules)
|
||||
let mut game_map_widget = GameMapWidget::new(rules)
|
||||
.set_default_empty_char(' ')
|
||||
.add_colored_cells(current_boat)
|
||||
.add_colored_cells(other_boats)
|
||||
@ -174,6 +174,21 @@ fn ui<B: Backend>(
|
||||
})
|
||||
.set_legend(legend);
|
||||
|
||||
// Colorate neighbors if boats can not touch
|
||||
if !rules.boats_can_touch {
|
||||
let mut boats_neighbors_cells = vec![];
|
||||
for boat in &model.layout.0 {
|
||||
for pos in boat.neighbor_coordinates(rules) {
|
||||
boats_neighbors_cells.push(pos);
|
||||
}
|
||||
}
|
||||
|
||||
game_map_widget = game_map_widget.add_colored_cells(ColoredCells {
|
||||
color: Color::Rgb(30, 30, 30),
|
||||
cells: boats_neighbors_cells,
|
||||
});
|
||||
}
|
||||
|
||||
let (w, h) = game_map_widget.estimated_size();
|
||||
let area = centered_rect_size(w, h, &f.size());
|
||||
f.render_widget(game_map_widget, area);
|
||||
|
@ -318,7 +318,7 @@ impl BoatsLayout {
|
||||
.iter()
|
||||
.any(|c| boat_j_coords.contains(c))
|
||||
{
|
||||
errors.push("A collision between two boats has been detected!");
|
||||
errors.push("Two boats are touching!");
|
||||
}
|
||||
}
|
||||
}
|
||||
|
Loading…
Reference in New Issue
Block a user