diff --git a/src/app/states/skirmish_states/units/miner.rs b/src/app/states/skirmish_states/units/miner.rs index a825dc1..a924250 100644 --- a/src/app/states/skirmish_states/units/miner.rs +++ b/src/app/states/skirmish_states/units/miner.rs @@ -1,3 +1,5 @@ +use ratatui::{style::Stylize, text::Line}; + use crate::app::states::skirmish_states::{ Players, tasks::{Task, Tasks}, @@ -81,18 +83,23 @@ impl Unit for MinerUnit { &self.tasks } - fn get_tasks_formatted(&self) -> String { - // format!("{:?}", self.tasks) - let mut output: String = String::new(); - for task in &self.tasks { - output.push(task.get_icon()); - output.push(' '); - output += &self.display_coords(task.get_path_front_coords()); - output += " -> "; - output += &self.display_coords(task.get_path_back_coords()); - } - - output + fn get_tasks_formatted(&self) -> Vec> { + Vec::from( + self.tasks + .iter() + .enumerate() + .map(|(i, task)| { + Line::from_iter([ + format!("{}. ", i + 1).gray(), + task.get_icon().gray(), + " ".gray(), + self.display_coords(task.get_path_front_coords()).green(), + " -> ".gray(), + self.display_coords(task.get_path_back_coords()).yellow(), + ]) + }) + .collect::>>(), + ) } fn set_task(&mut self, task: Tasks) { diff --git a/src/app/states/skirmish_states/units/unit_trait.rs b/src/app/states/skirmish_states/units/unit_trait.rs index 55abec0..cd221fc 100644 --- a/src/app/states/skirmish_states/units/unit_trait.rs +++ b/src/app/states/skirmish_states/units/unit_trait.rs @@ -30,7 +30,7 @@ pub trait Unit { fn set_task(&mut self, task: Tasks); - fn get_tasks_formatted(&self) -> String; + fn get_tasks_formatted(&self) -> Vec>; fn base_text(&self) -> Vec> { let owner: Span<'_> = self.get_owner().get_span(); @@ -40,7 +40,7 @@ pub trait Unit { let can_dig: bool = self.get_can_dig(); let digging_power: f32 = self.get_digging_power(); let have_any_tasks: bool = self.get_tasks().is_empty(); - let tasks: String = self.get_tasks_formatted(); + let tasks: Vec> = self.get_tasks_formatted(); let mut lines: Vec> = Vec::from([ Line::from_iter(["Owner: ".gray(), owner]), @@ -63,7 +63,10 @@ pub trait Unit { } if !have_any_tasks { - lines.push(Line::from_iter(["Tasks Queue: ".gray(), tasks.green()])); + lines.push(Line::from("Tasks Queue: ".gray())); + for task in tasks { + lines.push(task); + } } lines diff --git a/src/app/states/skirmish_states/units/units_enum.rs b/src/app/states/skirmish_states/units/units_enum.rs index 09ca8b4..2ea21a5 100644 --- a/src/app/states/skirmish_states/units/units_enum.rs +++ b/src/app/states/skirmish_states/units/units_enum.rs @@ -1,10 +1,10 @@ -use once_cell::sync::Lazy; - use crate::app::states::skirmish_states::{ Players, tasks::Tasks, units::{MinerUnit, Unit}, }; +use once_cell::sync::Lazy; +use ratatui::text::Line; use std::collections::VecDeque; static EMPTY_TASKS: Lazy> = Lazy::new(|| VecDeque::new()); @@ -67,7 +67,7 @@ impl Unit for Units { self.u().get_tasks() } - fn get_tasks_formatted(&self) -> String { + fn get_tasks_formatted(&self) -> Vec> { self.u().get_tasks_formatted() } @@ -117,9 +117,9 @@ impl Unit for Option { self.as_ref().map_or(&EMPTY_TASKS, |u| u.get_tasks()) } - fn get_tasks_formatted(&self) -> String { + fn get_tasks_formatted(&self) -> Vec> { self.as_ref() - .map_or("".to_string(), |u| u.get_tasks_formatted()) + .map_or(Vec::new(), |u| u.get_tasks_formatted()) } fn set_task(&mut self, task: Tasks) {