Improve grid appearance
This commit is contained in:
parent
4341bdc682
commit
b832ef82ed
@ -220,7 +220,7 @@ impl GameScreen {
|
|||||||
}
|
}
|
||||||
|
|
||||||
fn player_map(&self, map: &CurrentGameMapStatus, opponent_map: bool) -> GameMapWidget {
|
fn player_map(&self, map: &CurrentGameMapStatus, opponent_map: bool) -> GameMapWidget {
|
||||||
let mut map_widget = GameMapWidget::new(&self.game.rules);
|
let mut map_widget = GameMapWidget::new(&self.game.rules).set_default_empty_char(' ');
|
||||||
|
|
||||||
// Current shoot position
|
// Current shoot position
|
||||||
if opponent_map {
|
if opponent_map {
|
||||||
@ -241,8 +241,14 @@ impl GameScreen {
|
|||||||
}
|
}
|
||||||
|
|
||||||
// Sunk boats
|
// Sunk boats
|
||||||
|
for b in &map.sunk_boats {
|
||||||
|
for c in b.all_coordinates() {
|
||||||
|
map_widget =
|
||||||
|
map_widget.set_char(c, b.len.to_string().chars().next().unwrap_or('9'));
|
||||||
|
}
|
||||||
|
}
|
||||||
let sunk_boats = ColoredCells {
|
let sunk_boats = ColoredCells {
|
||||||
color: Color::Gray,
|
color: Color::LightRed,
|
||||||
cells: map
|
cells: map
|
||||||
.sunk_boats
|
.sunk_boats
|
||||||
.iter()
|
.iter()
|
||||||
@ -251,18 +257,29 @@ impl GameScreen {
|
|||||||
};
|
};
|
||||||
|
|
||||||
// Touched boats
|
// Touched boats
|
||||||
|
for b in &map.successful_strikes {
|
||||||
|
map_widget = map_widget.set_char_no_overwrite(*b, 'T');
|
||||||
|
}
|
||||||
let touched_areas = ColoredCells {
|
let touched_areas = ColoredCells {
|
||||||
color: Color::Red,
|
color: Color::Red,
|
||||||
cells: map.successful_strikes.clone(),
|
cells: map.successful_strikes.clone(),
|
||||||
};
|
};
|
||||||
|
|
||||||
// Failed strikes
|
// Failed strikes
|
||||||
|
for b in &map.failed_strikes {
|
||||||
|
map_widget = map_widget.set_char_no_overwrite(*b, '.');
|
||||||
|
}
|
||||||
let failed_strikes = ColoredCells {
|
let failed_strikes = ColoredCells {
|
||||||
color: Color::DarkGray,
|
color: Color::Black,
|
||||||
cells: map.failed_strikes.clone(),
|
cells: map.failed_strikes.clone(),
|
||||||
};
|
};
|
||||||
|
|
||||||
// Boats
|
// Boats
|
||||||
|
for b in &map.boats.0 {
|
||||||
|
for c in b.all_coordinates() {
|
||||||
|
map_widget = map_widget.set_char_no_overwrite(c, 'B');
|
||||||
|
}
|
||||||
|
}
|
||||||
let boats = ColoredCells {
|
let boats = ColoredCells {
|
||||||
color: Color::Blue,
|
color: Color::Blue,
|
||||||
cells: map
|
cells: map
|
||||||
|
@ -1,3 +1,4 @@
|
|||||||
|
use std::collections::HashMap;
|
||||||
use std::fmt::Display;
|
use std::fmt::Display;
|
||||||
|
|
||||||
use tui::buffer::Buffer;
|
use tui::buffer::Buffer;
|
||||||
@ -21,6 +22,7 @@ pub struct GameMapWidget<'a> {
|
|||||||
title: Option<String>,
|
title: Option<String>,
|
||||||
legend: Option<String>,
|
legend: Option<String>,
|
||||||
yield_coordinates: Option<Box<dyn 'a + FnMut(Coordinates, Rect)>>,
|
yield_coordinates: Option<Box<dyn 'a + FnMut(Coordinates, Rect)>>,
|
||||||
|
chars: HashMap<Coordinates, char>,
|
||||||
}
|
}
|
||||||
|
|
||||||
impl<'a> GameMapWidget<'a> {
|
impl<'a> GameMapWidget<'a> {
|
||||||
@ -32,6 +34,7 @@ impl<'a> GameMapWidget<'a> {
|
|||||||
title: None,
|
title: None,
|
||||||
legend: None,
|
legend: None,
|
||||||
yield_coordinates: None,
|
yield_coordinates: None,
|
||||||
|
chars: Default::default(),
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -63,6 +66,16 @@ impl<'a> GameMapWidget<'a> {
|
|||||||
self
|
self
|
||||||
}
|
}
|
||||||
|
|
||||||
|
pub fn set_char(mut self, coordinates: Coordinates, c: char) -> Self {
|
||||||
|
self.chars.insert(coordinates, c);
|
||||||
|
self
|
||||||
|
}
|
||||||
|
|
||||||
|
pub fn set_char_no_overwrite(mut self, coordinates: Coordinates, c: char) -> Self {
|
||||||
|
self.chars.entry(coordinates).or_insert(c);
|
||||||
|
self
|
||||||
|
}
|
||||||
|
|
||||||
pub fn grid_size(&self) -> (u16, u16) {
|
pub fn grid_size(&self) -> (u16, u16) {
|
||||||
let w = self.rules.map_width as u16 * 2 + 1;
|
let w = self.rules.map_width as u16 * 2 + 1;
|
||||||
let h = self.rules.map_height as u16 * 2 + 1;
|
let h = self.rules.map_height as u16 * 2 + 1;
|
||||||
@ -157,9 +170,12 @@ impl<'a> Widget for GameMapWidget<'a> {
|
|||||||
}
|
}
|
||||||
|
|
||||||
if x < self.rules.map_width && y < self.rules.map_height {
|
if x < self.rules.map_width && y < self.rules.map_height {
|
||||||
let cell = buf
|
let cell = buf.get_mut(o_x + 1, o_y + 1).set_char(
|
||||||
.get_mut(o_x + 1, o_y + 1)
|
*self
|
||||||
.set_char(self.default_empty_character);
|
.chars
|
||||||
|
.get(&coordinates)
|
||||||
|
.unwrap_or(&self.default_empty_character),
|
||||||
|
);
|
||||||
|
|
||||||
if let Some(c) = color {
|
if let Some(c) = color {
|
||||||
cell.set_bg(c.color);
|
cell.set_bg(c.color);
|
||||||
|
Loading…
Reference in New Issue
Block a user