Files
shinespark/src/ui/mod.rs
T
EIREXE 90412fa80d
CI / build-and-test (push) Successful in 1m54s
CI / production-build (push) Successful in 11m11s
Add the ability to pause singleplayer matches (#68)
Reviewed-on: #68
Co-authored-by: Álex Román Núñez <eirexe@eirteam.moe>
2026-09-26 16:25:36 +00:00

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();
}
}
}