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.
This commit is contained in:
parent
9ab8db41de
commit
d89d539f3b
5 changed files with 15 additions and 29 deletions
|
@ -2,17 +2,9 @@ use bevy::prelude::*;
|
|||
|
||||
use crate::net::prelude::*;
|
||||
|
||||
use super::seed::Seed;
|
||||
|
||||
pub fn handle_new_peer(
|
||||
seed: Option<Res<Seed>>,
|
||||
new_peers: Query<&Peer, Added<Peer>>,
|
||||
mut outbound: EventWriter<OutboundPacket>,
|
||||
) {
|
||||
if let Some(seed) = seed {
|
||||
pub fn handle_new_peer(new_peers: Query<&Peer, Added<Peer>>) {
|
||||
for peer in new_peers {
|
||||
outbound.write(OutboundPacket(Packet::new((*seed).into(), peer.uuid)));
|
||||
}
|
||||
info!("Peer {} was added", peer.uuid);
|
||||
}
|
||||
}
|
||||
|
||||
|
@ -27,12 +19,8 @@ pub fn handle_deleted_peer(mut old_peers: RemovedComponents<Peer>, peers: Query<
|
|||
Ok(())
|
||||
}
|
||||
|
||||
pub fn handle_incoming_packets(mut packets: EventReader<InboundPacket>, mut commands: Commands) {
|
||||
pub fn handle_incoming_packets(mut packets: EventReader<InboundPacket>) {
|
||||
for packet in packets.read() {
|
||||
if let Ok(seed) = packet.0.message.clone().try_into() {
|
||||
commands.insert_resource::<Seed>(seed);
|
||||
} else {
|
||||
info!("Packet not seed: {:?}", packet.0.message);
|
||||
}
|
||||
info!("Packet received: {:?}", packet.0.message);
|
||||
}
|
||||
}
|
||||
|
|
|
@ -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());
|
||||
}
|
||||
};
|
||||
}
|
||||
|
|
|
@ -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 {
|
||||
|
|
|
@ -23,7 +23,7 @@ const BALL_COUNT: u8 = 32;
|
|||
const BALL_SIZES: Range<f32> = 10.0..25.0;
|
||||
const DIMENSION_SIZES: Range<f32> = 500.0..2000.0;
|
||||
|
||||
pub fn check_for_seed(seed: Option<Res<Seed>>, mut next_state: ResMut<NextState<AppState>>) {
|
||||
pub fn check_for_seed(seed: Option<Single<&Seed>>, mut next_state: ResMut<NextState<AppState>>) {
|
||||
if seed.is_some() {
|
||||
next_state.set(AppState::InGame);
|
||||
}
|
||||
|
@ -34,8 +34,8 @@ pub fn check_for_seed(seed: Option<Res<Seed>>, mut next_state: ResMut<NextState<
|
|||
pub struct PlayableArea(f32, f32);
|
||||
|
||||
/// Initialize deterministic values
|
||||
pub fn setup_from_seed(mut commands: Commands, seed: Res<Seed>) {
|
||||
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),
|
||||
|
|
|
@ -21,15 +21,13 @@ pub fn setup_seed_ui(mut commands: Commands) {
|
|||
.with_child((TextSpan::new("<N/A>"), SeedUI));
|
||||
}
|
||||
|
||||
pub fn update_seed_ui(seed: Option<Res<Seed>>, text: Query<&mut TextSpan, With<SeedUI>>) {
|
||||
pub fn update_seed_ui(seed: Option<Single<&Seed>>, text: Query<&mut TextSpan, With<SeedUI>>) {
|
||||
if let Some(value) = seed {
|
||||
if value.is_changed() {
|
||||
for mut span in text {
|
||||
let number: u64 = (*value).into();
|
||||
let number: u64 = (**value).into();
|
||||
**span = format!("{}", number);
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
#[derive(Component, Debug)]
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue