diff --git a/src/game/plugin.rs b/src/game/plugin.rs index 8929879..6943b7b 100644 --- a/src/game/plugin.rs +++ b/src/game/plugin.rs @@ -13,7 +13,7 @@ use super::{ check_for_seed, setup_balls, setup_camera, setup_from_seed, setup_player, setup_walls, }, state::AppState, - ui::{setup_seed_display, update_seed_display}, + ui::{setup_peer_ui, setup_seed_ui, update_peer_ui, update_peer_ui_timings, update_seed_ui}, }; #[derive(Debug, Clone, Copy)] @@ -59,7 +59,7 @@ impl Plugin for GamePlugin { PhysicsPlugins::default().with_length_unit(50.0), )) .init_state::() - .add_systems(Startup, (setup_camera, setup_seed_display)) + .add_systems(Startup, (setup_camera, setup_seed_ui, setup_peer_ui)) .add_systems( OnEnter(AppState::InGame), ( @@ -84,7 +84,9 @@ impl Plugin for GamePlugin { ( ((move_player, move_camera).chain(), zoom_camera) .run_if(in_state(AppState::InGame)), - update_seed_display, + update_seed_ui, + (update_peer_ui, update_peer_ui_timings) + .run_if(in_state(NetworkState::MultiPlayer)), quit.run_if(input_pressed(KeyCode::KeyQ)), ), ); diff --git a/src/game/ui.rs b/src/game/ui.rs index ad05109..4abd6d1 100644 --- a/src/game/ui.rs +++ b/src/game/ui.rs @@ -1,11 +1,13 @@ use bevy::prelude::*; +use crate::net::prelude::{Peer, PeerReceiveTiming, PeerSendTiming}; + use super::seed::Seed; #[derive(Component, Debug)] pub struct SeedUI; -pub fn setup_seed_display(mut commands: Commands) { +pub fn setup_seed_ui(mut commands: Commands) { commands .spawn(( Text::new("Seed: "), @@ -13,13 +15,13 @@ pub fn setup_seed_display(mut commands: Commands) { position_type: PositionType::Absolute, bottom: Val::Px(5.0), left: Val::Px(5.0), - ..Default::default() + ..default() }, )) .with_child((TextSpan::new(""), SeedUI)); } -pub fn update_seed_display(seed: Option>, text: Query<&mut TextSpan, With>) { +pub fn update_seed_ui(seed: Option>, text: Query<&mut TextSpan, With>) { if let Some(value) = seed { if value.is_changed() { for mut span in text { @@ -29,3 +31,72 @@ pub fn update_seed_display(seed: Option>, text: Query<&mut TextSpan, W } } } + +#[derive(Component, Debug)] +pub struct PeerUI; + +pub fn setup_peer_ui(mut commands: Commands) { + commands + .spawn(( + Node { + display: Display::Flex, + position_type: PositionType::Absolute, + top: Val::Px(5.0), + right: Val::Px(5.0), + row_gap: Val::Px(5.0), + flex_direction: FlexDirection::Column, + align_items: AlignItems::FlexEnd, + justify_content: JustifyContent::FlexStart, + ..default() + }, + PeerUI, + )) + .with_children(|builder| { + builder.spawn(Text::new("Peer Recv Send")); + }); +} + +#[derive(Component)] +pub struct PeerID(Entity); + +pub fn update_peer_ui( + ui: Query<(Entity, &Children), With>, + rows: Query<&PeerID>, + added: Query>, + mut removed: RemovedComponents, + mut commands: Commands, +) { + for (table, children) in ui { + for addition in added { + commands + .entity(table) + .with_child((Text::new("---- ---- ----"), PeerID(addition))); + } + for removal in removed.read() { + for child in children { + if let Ok(id) = rows.get(*child) { + if id.0 == removal { + commands.entity(*child).despawn(); + } + } + } + } + } +} + +pub fn update_peer_ui_timings( + rows: Query<(&mut Text, &PeerID)>, + peers: Query<(&Peer, &PeerReceiveTiming, &PeerSendTiming)>, + time: Res