diff --git a/src/app/states/skirmish_states/board.rs b/src/app/states/skirmish_states/board.rs index 645150b..8eddd5f 100644 --- a/src/app/states/skirmish_states/board.rs +++ b/src/app/states/skirmish_states/board.rs @@ -219,11 +219,14 @@ impl BoardState { } let (row, col) = self.marked_cells.selected_unit.get_coords(); + + // if !self.marked_cells.marked_cells.len() == 1 { let task: Tasks = Tasks::Digging(DiggingTask::new(self.marked_cells.marked_cells.clone())); self.get_mut_cell(row, col) .get_mut_option_unit() .set_task(task); + // } self.marked_cells.selected_unit = None; self.marked_cells.marked_cells.clear(); diff --git a/src/app/states/skirmish_states/units/miner.rs b/src/app/states/skirmish_states/units/miner.rs index 9c440da..e95fc31 100644 --- a/src/app/states/skirmish_states/units/miner.rs +++ b/src/app/states/skirmish_states/units/miner.rs @@ -57,7 +57,11 @@ impl Unit for MinerUnit { self.coords } - fn get_tasks(&self) -> String { + fn get_tasks(&self) -> &VecDeque { + &self.tasks + } + + fn get_tasks_formatted(&self) -> String { format!("{:?}", self.tasks) } diff --git a/src/app/states/skirmish_states/units/unit_trait.rs b/src/app/states/skirmish_states/units/unit_trait.rs index 2e21800..8073ab8 100644 --- a/src/app/states/skirmish_states/units/unit_trait.rs +++ b/src/app/states/skirmish_states/units/unit_trait.rs @@ -3,6 +3,7 @@ use ratatui::{ style::Stylize, text::{Line, Span}, }; +use std::collections::VecDeque; pub trait Unit { fn is_unit(&self) -> bool { @@ -25,10 +26,12 @@ pub trait Unit { fn get_coords(&self) -> (usize, usize); - fn get_tasks(&self) -> String; + fn get_tasks(&self) -> &VecDeque; fn set_task(&mut self, task: Tasks); + fn get_tasks_formatted(&self) -> String; + fn base_text(&self) -> Vec> { let owner: Span<'_> = self.get_owner().get_span(); let hp: u16 = self.get_hp(); @@ -36,7 +39,7 @@ pub trait Unit { let hp_percent: u16 = hp * 100 / max_hp; let can_dig: bool = self.get_can_dig(); let digging_power: f32 = self.get_digging_power(); - let tasks: String = self.get_tasks(); + let tasks: String = self.get_tasks_formatted(); let mut lines: Vec> = Vec::from([ Line::from_iter(["Owner: ".gray(), owner]), diff --git a/src/app/states/skirmish_states/units/units_enum.rs b/src/app/states/skirmish_states/units/units_enum.rs index 4d4ad4b..09ca8b4 100644 --- a/src/app/states/skirmish_states/units/units_enum.rs +++ b/src/app/states/skirmish_states/units/units_enum.rs @@ -1,8 +1,13 @@ +use once_cell::sync::Lazy; + use crate::app::states::skirmish_states::{ Players, tasks::Tasks, units::{MinerUnit, Unit}, }; +use std::collections::VecDeque; + +static EMPTY_TASKS: Lazy> = Lazy::new(|| VecDeque::new()); #[derive(Debug, Clone, PartialEq)] pub enum Units { @@ -58,10 +63,14 @@ impl Unit for Units { self.u().get_coords() } - fn get_tasks(&self) -> String { + fn get_tasks(&self) -> &VecDeque { self.u().get_tasks() } + fn get_tasks_formatted(&self) -> String { + self.u().get_tasks_formatted() + } + fn set_task(&mut self, task: Tasks) { self.u_mut().set_task(task); } @@ -104,8 +113,13 @@ impl Unit for Option { self.as_ref().map_or((0, 0), |u| u.get_coords()) } - fn get_tasks(&self) -> String { - self.as_ref().map_or("".to_string(), |u| u.get_tasks()) + fn get_tasks(&self) -> &VecDeque { + self.as_ref().map_or(&EMPTY_TASKS, |u| u.get_tasks()) + } + + fn get_tasks_formatted(&self) -> String { + self.as_ref() + .map_or("".to_string(), |u| u.get_tasks_formatted()) } fn set_task(&mut self, task: Tasks) {