Add Bevy event queues for inbound and outbound packets, and use Bevy change detection for consumer new Peer handling.
This commit is contained in:
parent
cceca83dac
commit
c10f6cfb82
9 changed files with 348 additions and 72 deletions
|
|
@ -1,3 +1,4 @@
|
|||
mod net;
|
||||
mod objects;
|
||||
mod plugin;
|
||||
mod rng;
|
||||
|
|
|
|||
39
src/game/net.rs
Normal file
39
src/game/net.rs
Normal file
|
|
@ -0,0 +1,39 @@
|
|||
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 {
|
||||
for peer in new_peers {
|
||||
warn!("Sending seed to peer: {}", peer.uuid);
|
||||
outbound.write(OutboundPacket(Packet::new((*seed).into(), peer.uuid)));
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
pub fn handle_deleted_peer(mut old_peers: RemovedComponents<Peer>, peers: Query<&Peer>) -> Result {
|
||||
for entity in old_peers.read() {
|
||||
if let Ok(peer) = peers.get(entity) {
|
||||
info!("Peer {} was removed", peer.uuid);
|
||||
} else {
|
||||
info!("Peer {} was removed", entity);
|
||||
}
|
||||
}
|
||||
Ok(())
|
||||
}
|
||||
|
||||
pub fn handle_incoming_packets(mut packets: EventReader<InboundPacket>, mut commands: Commands) {
|
||||
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);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
|
@ -3,9 +3,10 @@ use std::net::SocketAddr;
|
|||
use avian2d::PhysicsPlugins;
|
||||
use bevy::{input::common_conditions::input_pressed, prelude::*};
|
||||
|
||||
use crate::net::NetIOPlugin;
|
||||
use crate::net::prelude::*;
|
||||
|
||||
use super::{
|
||||
net::{handle_deleted_peer, handle_incoming_packets, handle_new_peer},
|
||||
runtime::{move_camera, move_player, quit, zoom_camera},
|
||||
seed::Seed,
|
||||
setup::{check_for_seed, setup_balls, setup_from_seed, setup_player, setup_ui, setup_walls},
|
||||
|
|
@ -65,7 +66,15 @@ impl Plugin for GamePlugin {
|
|||
)
|
||||
.add_systems(
|
||||
FixedUpdate,
|
||||
check_for_seed.run_if(in_state(AppState::Loading)),
|
||||
(
|
||||
check_for_seed.run_if(in_state(AppState::Loading)),
|
||||
(
|
||||
handle_new_peer,
|
||||
handle_deleted_peer,
|
||||
handle_incoming_packets,
|
||||
)
|
||||
.run_if(in_state(NetworkState::MultiPlayer)),
|
||||
),
|
||||
)
|
||||
.add_systems(
|
||||
Update,
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue