Add stocks UI (#52)
Reviewed-on: #52 Co-authored-by: Álex Román Núñez <eirexe@eirteam.moe>
This commit was merged in pull request #52.
This commit is contained in:
+53
-7
@@ -1,13 +1,17 @@
|
||||
use bevy::prelude::*;
|
||||
|
||||
use crate::{fighter::{attack::FighterDamage, manifest::{FighterManifest}}, match_loading::MatchPlayer, player::Player};
|
||||
use crate::{
|
||||
fighter::{attack::FighterDamage, manifest::FighterManifest}, match_loading::{MatchPlayer}, match_runtime::MatchState, player::Player, ui::stock_icon::BattleUIStockIcon,
|
||||
};
|
||||
|
||||
#[derive(Component, FromTemplate)]
|
||||
pub struct FighterInfoUI {
|
||||
percentage_text: Entity,
|
||||
stock_icon_container: Entity,
|
||||
_name_text: Entity,
|
||||
player_handle: usize,
|
||||
visible_damage: FighterDamage,
|
||||
visible_stocks: u8,
|
||||
}
|
||||
|
||||
impl FighterInfoUI {
|
||||
@@ -16,6 +20,7 @@ impl FighterInfoUI {
|
||||
bsn! {
|
||||
FighterInfoUI {
|
||||
percentage_text: #PercentageText,
|
||||
stock_icon_container: #StockIconContainer,
|
||||
_name_text: #NameText,
|
||||
player_handle: {match_player.handle}
|
||||
}
|
||||
@@ -25,6 +30,10 @@ impl FighterInfoUI {
|
||||
justify_content: JustifyContent::Center,
|
||||
}
|
||||
Children [
|
||||
(
|
||||
#StockIconContainer
|
||||
Node
|
||||
)
|
||||
(
|
||||
#PercentageText
|
||||
Text("0.00%")
|
||||
@@ -41,17 +50,54 @@ impl FighterInfoUI {
|
||||
}
|
||||
}
|
||||
|
||||
pub fn update_fighter_info_damage(fighters: Query<(&Player, &FighterDamage)>, ui_elements: Query<&mut FighterInfoUI>, mut commands: Commands) {
|
||||
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 {
|
||||
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)));
|
||||
commands
|
||||
.entity(ui_element.percentage_text)
|
||||
.insert(Text(format!("{}%", damage)));
|
||||
ui_element.visible_damage = damage.clone();
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
pub fn update_fighter_info_stocks(
|
||||
match_state: Res<MatchState>,
|
||||
ui_elements: Query<&mut FighterInfoUI>,
|
||||
mut commands: Commands,
|
||||
) {
|
||||
|
||||
for mut ui_element in ui_elements {
|
||||
let handle = ui_element.player_handle;
|
||||
let Some(match_player) = match_state.players.get(handle) else {
|
||||
continue;
|
||||
};
|
||||
|
||||
let Some(stocks) = match_player.stocks_remaining else {
|
||||
continue;
|
||||
};
|
||||
|
||||
if stocks != ui_element.visible_stocks {
|
||||
commands
|
||||
.entity(ui_element.stock_icon_container)
|
||||
.despawn_children()
|
||||
.with_children(|spawner| {
|
||||
for _ in 0..stocks {
|
||||
spawner.spawn_empty().apply_scene(BattleUIStockIcon::scene());
|
||||
}
|
||||
});
|
||||
ui_element.visible_stocks = stocks;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user