From d89d539f3b1ebc23822022bce16fdd8712dcb928 Mon Sep 17 00:00:00 2001 From: Michael Bradley Date: Sun, 6 Jul 2025 17:47:19 -0400 Subject: [PATCH] Make Seed a component Conceptually it works better as a resource, but that's an extra layer of complexity for the upcoming automatic distribution work. --- src/game/net.rs | 22 +++++----------------- src/game/plugin.rs | 4 ++-- src/game/seed.rs | 2 +- src/game/setup.rs | 6 +++--- src/game/ui.rs | 10 ++++------ 5 files changed, 15 insertions(+), 29 deletions(-) diff --git a/src/game/net.rs b/src/game/net.rs index 524b376..2ffa40b 100644 --- a/src/game/net.rs +++ b/src/game/net.rs @@ -2,17 +2,9 @@ use bevy::prelude::*; use crate::net::prelude::*; -use super::seed::Seed; - -pub fn handle_new_peer( - seed: Option>, - new_peers: Query<&Peer, Added>, - mut outbound: EventWriter, -) { - if let Some(seed) = seed { - for peer in new_peers { - outbound.write(OutboundPacket(Packet::new((*seed).into(), peer.uuid))); - } +pub fn handle_new_peer(new_peers: Query<&Peer, Added>) { + for peer in new_peers { + info!("Peer {} was added", peer.uuid); } } @@ -27,12 +19,8 @@ pub fn handle_deleted_peer(mut old_peers: RemovedComponents, peers: Query< Ok(()) } -pub fn handle_incoming_packets(mut packets: EventReader, mut commands: Commands) { +pub fn handle_incoming_packets(mut packets: EventReader) { for packet in packets.read() { - if let Ok(seed) = packet.0.message.clone().try_into() { - commands.insert_resource::(seed); - } else { - info!("Packet not seed: {:?}", packet.0.message); - } + info!("Packet received: {:?}", packet.0.message); } } diff --git a/src/game/plugin.rs b/src/game/plugin.rs index 6943b7b..0e920fd 100644 --- a/src/game/plugin.rs +++ b/src/game/plugin.rs @@ -96,10 +96,10 @@ impl Plugin for GamePlugin { info!("Will retrieve seed from peer => {peer}"); } DataSource::Seed(seed) => { - app.insert_resource(seed); + app.world_mut().spawn(seed); } DataSource::None => { - app.insert_resource(Seed::random()); + app.world_mut().spawn(Seed::random()); } }; } diff --git a/src/game/seed.rs b/src/game/seed.rs index 12d6a07..a003612 100644 --- a/src/game/seed.rs +++ b/src/game/seed.rs @@ -7,7 +7,7 @@ use bevy::prelude::*; use rand::random; /// Value with which to initialize the PRNG -#[derive(Resource, Debug, Clone, Copy)] +#[derive(Clone, Component, Copy, Debug)] pub struct Seed(u64); impl Seed { diff --git a/src/game/setup.rs b/src/game/setup.rs index eb4585c..464b9db 100644 --- a/src/game/setup.rs +++ b/src/game/setup.rs @@ -23,7 +23,7 @@ const BALL_COUNT: u8 = 32; const BALL_SIZES: Range = 10.0..25.0; const DIMENSION_SIZES: Range = 500.0..2000.0; -pub fn check_for_seed(seed: Option>, mut next_state: ResMut>) { +pub fn check_for_seed(seed: Option>, mut next_state: ResMut>) { if seed.is_some() { next_state.set(AppState::InGame); } @@ -34,8 +34,8 @@ pub fn check_for_seed(seed: Option>, mut next_state: ResMut) { - let mut rng = WyRand::from_seed((*seed).into()); +pub fn setup_from_seed(mut commands: Commands, seed: Single<&Seed>) { + let mut rng = WyRand::from_seed((**seed).into()); commands.insert_resource(PlayableArea( rng.random_range(DIMENSION_SIZES), rng.random_range(DIMENSION_SIZES), diff --git a/src/game/ui.rs b/src/game/ui.rs index 4abd6d1..16dfb5e 100644 --- a/src/game/ui.rs +++ b/src/game/ui.rs @@ -21,13 +21,11 @@ pub fn setup_seed_ui(mut commands: Commands) { .with_child((TextSpan::new(""), SeedUI)); } -pub fn update_seed_ui(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 { - let number: u64 = (*value).into(); - **span = format!("{}", number); - } + for mut span in text { + let number: u64 = (**value).into(); + **span = format!("{}", number); } } }