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 crate::net::prelude::*;
|
||||||
|
|
||||||
use super::seed::Seed;
|
pub fn handle_new_peer(new_peers: Query<&Peer, Added<Peer>>) {
|
||||||
|
for peer in new_peers {
|
||||||
pub fn handle_new_peer(
|
info!("Peer {} was added", peer.uuid);
|
||||||
seed: Option<Res<Seed>>,
|
|
||||||
new_peers: Query<&Peer, Added<Peer>>,
|
|
||||||
mut outbound: EventWriter<OutboundPacket>,
|
|
||||||
) {
|
|
||||||
if let Some(seed) = seed {
|
|
||||||
for peer in new_peers {
|
|
||||||
outbound.write(OutboundPacket(Packet::new((*seed).into(), peer.uuid)));
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -27,12 +19,8 @@ pub fn handle_deleted_peer(mut old_peers: RemovedComponents<Peer>, peers: Query<
|
||||||
Ok(())
|
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() {
|
for packet in packets.read() {
|
||||||
if let Ok(seed) = packet.0.message.clone().try_into() {
|
info!("Packet received: {:?}", packet.0.message);
|
||||||
commands.insert_resource::<Seed>(seed);
|
|
||||||
} else {
|
|
||||||
info!("Packet not seed: {:?}", packet.0.message);
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
|
@ -96,10 +96,10 @@ impl Plugin for GamePlugin {
|
||||||
info!("Will retrieve seed from peer => {peer}");
|
info!("Will retrieve seed from peer => {peer}");
|
||||||
}
|
}
|
||||||
DataSource::Seed(seed) => {
|
DataSource::Seed(seed) => {
|
||||||
app.insert_resource(seed);
|
app.world_mut().spawn(seed);
|
||||||
}
|
}
|
||||||
DataSource::None => {
|
DataSource::None => {
|
||||||
app.insert_resource(Seed::random());
|
app.world_mut().spawn(Seed::random());
|
||||||
}
|
}
|
||||||
};
|
};
|
||||||
}
|
}
|
||||||
|
|
|
@ -7,7 +7,7 @@ use bevy::prelude::*;
|
||||||
use rand::random;
|
use rand::random;
|
||||||
|
|
||||||
/// Value with which to initialize the PRNG
|
/// Value with which to initialize the PRNG
|
||||||
#[derive(Resource, Debug, Clone, Copy)]
|
#[derive(Clone, Component, Copy, Debug)]
|
||||||
pub struct Seed(u64);
|
pub struct Seed(u64);
|
||||||
|
|
||||||
impl Seed {
|
impl Seed {
|
||||||
|
|
|
@ -23,7 +23,7 @@ const BALL_COUNT: u8 = 32;
|
||||||
const BALL_SIZES: Range<f32> = 10.0..25.0;
|
const BALL_SIZES: Range<f32> = 10.0..25.0;
|
||||||
const DIMENSION_SIZES: Range<f32> = 500.0..2000.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() {
|
if seed.is_some() {
|
||||||
next_state.set(AppState::InGame);
|
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);
|
pub struct PlayableArea(f32, f32);
|
||||||
|
|
||||||
/// Initialize deterministic values
|
/// Initialize deterministic values
|
||||||
pub fn setup_from_seed(mut commands: Commands, seed: Res<Seed>) {
|
pub fn setup_from_seed(mut commands: Commands, seed: Single<&Seed>) {
|
||||||
let mut rng = WyRand::from_seed((*seed).into());
|
let mut rng = WyRand::from_seed((**seed).into());
|
||||||
commands.insert_resource(PlayableArea(
|
commands.insert_resource(PlayableArea(
|
||||||
rng.random_range(DIMENSION_SIZES),
|
rng.random_range(DIMENSION_SIZES),
|
||||||
rng.random_range(DIMENSION_SIZES),
|
rng.random_range(DIMENSION_SIZES),
|
||||||
|
|
|
@ -21,13 +21,11 @@ pub fn setup_seed_ui(mut commands: Commands) {
|
||||||
.with_child((TextSpan::new("<N/A>"), SeedUI));
|
.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 let Some(value) = seed {
|
||||||
if value.is_changed() {
|
for mut span in text {
|
||||||
for mut span in text {
|
let number: u64 = (**value).into();
|
||||||
let number: u64 = (*value).into();
|
**span = format!("{}", number);
|
||||||
**span = format!("{}", number);
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
Loading…
Add table
Add a link
Reference in a new issue