use bevy::prelude::*; use crate::{fighter::{attack::FighterDamage, manifest::{FighterManifest}}, match_loading::MatchPlayer, player::Player}; #[derive(Component, FromTemplate)] pub struct FighterInfoUI { percentage_text: Entity, _name_text: Entity, player_handle: usize, visible_damage: FighterDamage, } impl FighterInfoUI { pub fn build(_manifest: &FighterManifest, match_player: &MatchPlayer) -> impl Scene { let fighter_name = "El grande padre"; bsn! { FighterInfoUI { percentage_text: #PercentageText, _name_text: #NameText, player_handle: {match_player.handle} } Node { flex_direction: FlexDirection::Column, align_items: AlignItems::Center, justify_content: JustifyContent::Center, } Children [ ( #PercentageText Text("0.00%") TextFont { font_size: px(crate::menus::style::H2_SIZE), } ), ( #NameText Text({fighter_name}) ) ] } } } pub fn update_fighter_info_damage(fighters: Query<(&Player, &FighterDamage)>, ui_elements: Query<&mut FighterInfoUI>, mut commands: Commands) { for mut ui_element in ui_elements { let Some((_, damage)) = fighters.iter().find(|(player, _)| { player.handle == ui_element.player_handle }) else { continue; }; if *damage != ui_element.visible_damage { commands.entity(ui_element.percentage_text).insert(Text(format!("{}%", damage))); ui_element.visible_damage = damage.clone(); } } }