89 lines
2.7 KiB
Rust
89 lines
2.7 KiB
Rust
use bevy::prelude::*;
|
|
|
|
use crate::{
|
|
AppState,
|
|
match_loading::{MatchConfig, MatchRules},
|
|
match_runtime::{MatchState, PauseState},
|
|
};
|
|
|
|
pub mod battle_ui;
|
|
pub mod errors;
|
|
pub mod fighter_info;
|
|
pub mod stock_icon;
|
|
|
|
#[derive(Component)]
|
|
pub struct PauseOverlay;
|
|
|
|
#[derive(Default)]
|
|
pub struct InGameUIPlugin;
|
|
|
|
impl Plugin for InGameUIPlugin {
|
|
fn build(&self, app: &mut App) {
|
|
app.add_systems(OnEnter(AppState::InMatch), battle_ui::spawn_battle_ui)
|
|
.add_systems(OnExit(AppState::InMatch), battle_ui::cleanup_battle_ui)
|
|
.add_systems(PostUpdate, fighter_info::update_fighter_info_damage)
|
|
.add_systems(
|
|
PostUpdate,
|
|
fighter_info::update_fighter_info_stocks.run_if(
|
|
resource_exists::<MatchState>
|
|
.and_then(resource_exists::<MatchConfig>)
|
|
.and_then(|match_config: Res<MatchConfig>| {
|
|
if let MatchRules::Stock { .. } = match_config.rules {
|
|
true
|
|
} else {
|
|
false
|
|
}
|
|
}),
|
|
),
|
|
)
|
|
.add_systems(Update, sync_pause_overlay);
|
|
}
|
|
}
|
|
|
|
pub fn sync_pause_overlay(
|
|
pause: Res<PauseState>,
|
|
overlay: Query<Entity, With<PauseOverlay>>,
|
|
mut commands: Commands,
|
|
) {
|
|
if !pause.is_changed() {
|
|
return;
|
|
}
|
|
|
|
if pause.paused {
|
|
if overlay.is_empty() {
|
|
commands.spawn((
|
|
PauseOverlay,
|
|
Node {
|
|
position_type: PositionType::Absolute,
|
|
left: px(0),
|
|
right: px(0),
|
|
top: px(0),
|
|
bottom: px(0),
|
|
align_items: AlignItems::Center,
|
|
justify_content: JustifyContent::Center,
|
|
flex_direction: FlexDirection::Column,
|
|
..default()
|
|
},
|
|
BackgroundColor(Color::srgba(0.0, 0.0, 0.0, 0.7)),
|
|
ZIndex(100),
|
|
children![
|
|
(
|
|
Text::new("Paused"),
|
|
TextFont::from_font_size(crate::menus::style::H1_SIZE as f32),
|
|
TextColor(Color::WHITE),
|
|
),
|
|
(
|
|
Text::new("Press Esc or Start to resume"),
|
|
TextFont::from_font_size(crate::menus::style::TEXT_SIZE as f32),
|
|
TextColor(Color::WHITE),
|
|
),
|
|
],
|
|
));
|
|
}
|
|
} else {
|
|
for entity in &overlay {
|
|
commands.entity(entity).despawn();
|
|
}
|
|
}
|
|
}
|