Files
war-in-tunnels/src/app/states/skirmish_states/structures/structures_enum.rs
T
GarandPLG b1183175be Display structure owner and adjust UI layouts
Add owner line to structure text, using gray label and owner span.
Switch side panel layout to Fill/Length and remove left border from side
panel widget.
Import Stylize for colored text rendering.
2026-05-05 13:34:07 +02:00

75 lines
1.6 KiB
Rust

use crate::app::states::skirmish_states::{
Players,
structures::{BaseBuilding, Ore, Stone, Structure, Tunnel},
};
use ratatui::{
style::{Color, Stylize},
text::Line,
};
#[derive(Debug, Clone, Copy, PartialEq, Eq)]
pub enum Structures {
Base(BaseBuilding),
Tunnel(Tunnel),
Stone(Stone),
Ore(Ore),
}
impl Structures {
#[inline]
fn structure(&self) -> &dyn Structure {
match self {
Self::Base(b) => b,
Self::Tunnel(t) => t,
Self::Stone(s) => s,
Self::Ore(o) => o,
}
}
}
impl Structure for Structures {
fn get_color(&self) -> Color {
self.structure().get_color()
}
fn get_tag(&self) -> char {
self.structure().get_tag()
}
fn get_level(&self) -> char {
self.structure().get_level()
}
fn get_name(&self) -> &'static str {
self.structure().get_name()
}
fn get_durability(&self) -> u16 {
self.structure().get_durability()
}
fn get_max_durability(&self) -> u16 {
self.structure().get_max_durability()
}
fn get_stress(&self) -> u8 {
self.structure().get_stress()
}
fn get_owner(&self) -> Players {
self.structure().get_owner()
}
fn text(&self) -> Vec<Line<'_>> {
let owner: Players = self.structure().get_owner();
let mut lines: Vec<Line<'_>> = self.structure().text();
match owner {
Players::Unclaimed => {}
_ => lines.push(Line::from_iter(["Owner: ".gray(), owner.get_span()])),
}
lines
}
}