Network updates enabled
This commit is contained in:
parent
eafc7cfced
commit
fc96a81424
3 changed files with 57 additions and 26 deletions
|
|
@ -21,9 +21,25 @@ fn main() {
|
||||||
App::new()
|
App::new()
|
||||||
.add_plugins((DefaultPlugins, WireframePlugin::default()))
|
.add_plugins((DefaultPlugins, WireframePlugin::default()))
|
||||||
.add_systems(Startup, (setup_scene, start_socket))
|
.add_systems(Startup, (setup_scene, start_socket))
|
||||||
.add_systems(Update, (receive_messages, update_stars))
|
.add_systems(Update, (receive_messages, update_stars, keep_alive))
|
||||||
.run();
|
.run();
|
||||||
}
|
}
|
||||||
|
fn keep_alive(mut commands: Commands, mut socket: ResMut<MatchboxSocket>) {
|
||||||
|
match socket.try_update_peers() {
|
||||||
|
Ok(peers) => {
|
||||||
|
for (peer, state) in peers {
|
||||||
|
info!("{peer}: {state:?}");
|
||||||
|
}
|
||||||
|
}
|
||||||
|
Err(e) => {
|
||||||
|
error!("{e:?}");
|
||||||
|
commands.remove_resource::<MatchboxSocket>();
|
||||||
|
let socket = MatchboxSocket::new_reliable("ws://localhost:3536/hello");
|
||||||
|
info!("Connection established");
|
||||||
|
commands.insert_resource(socket);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
fn create_star_system_annotation(
|
fn create_star_system_annotation(
|
||||||
commands: &mut Commands,
|
commands: &mut Commands,
|
||||||
asset_server: &Res<AssetServer>,
|
asset_server: &Res<AssetServer>,
|
||||||
|
|
@ -245,18 +261,25 @@ fn start_socket(mut commands: Commands) {
|
||||||
fn update_stars(
|
fn update_stars(
|
||||||
mut commands: Commands,
|
mut commands: Commands,
|
||||||
network_stars: Query<(Entity, &StarInfo)>,
|
network_stars: Query<(Entity, &StarInfo)>,
|
||||||
spawned_stars: Query<(Entity, &EntityID)>,
|
mut spawned_stars: Query<(Entity, &EntityID, &mut Transform)>,
|
||||||
mut meshes: ResMut<Assets<Mesh>>,
|
mut meshes: ResMut<Assets<Mesh>>,
|
||||||
mut materials: ResMut<Assets<StandardMaterial>>,
|
mut materials: ResMut<Assets<StandardMaterial>>,
|
||||||
asset_server: Res<AssetServer>,
|
asset_server: Res<AssetServer>,
|
||||||
mut images: ResMut<Assets<Image>>,
|
mut images: ResMut<Assets<Image>>,
|
||||||
) {
|
) {
|
||||||
for (id, network_star) in network_stars {
|
for (id, network_star) in network_stars {
|
||||||
if let Some((entity, _)) = spawned_stars
|
if let Some((entity, _, transform)) = spawned_stars
|
||||||
.iter()
|
.iter_mut()
|
||||||
.filter(|(_, spawned_id)| **spawned_id == network_star.id)
|
.filter(|(_, spawned_id, _)| **spawned_id == network_star.id)
|
||||||
.last()
|
.last()
|
||||||
|
.as_mut()
|
||||||
{
|
{
|
||||||
|
commands
|
||||||
|
.get_entity(*entity)
|
||||||
|
.unwrap()
|
||||||
|
.insert(network_star.transform);
|
||||||
|
// *transform = network_star.transform;
|
||||||
|
|
||||||
// let entity_command = commands.get_entity(entity).unwrap();
|
// let entity_command = commands.get_entity(entity).unwrap();
|
||||||
} else {
|
} else {
|
||||||
spawn_star(
|
spawn_star(
|
||||||
|
|
@ -272,18 +295,15 @@ fn update_stars(
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
fn receive_messages(mut socket: ResMut<MatchboxSocket>, mut commands: Commands) {
|
fn receive_messages(mut socket: ResMut<MatchboxSocket>, mut commands: Commands) {
|
||||||
for (peer, state) in socket.update_peers() {
|
|
||||||
info!("{peer}: {state:?}");
|
|
||||||
}
|
|
||||||
|
|
||||||
for (_id, message) in socket.channel_mut(CHANNEL_ID).receive() {
|
for (_id, message) in socket.channel_mut(CHANNEL_ID).receive() {
|
||||||
match NetworkObject::deserialize(&mut Deserializer::new(&*message)) {
|
match NetworkObject::deserialize(&mut Deserializer::new(&*message)) {
|
||||||
Ok(message) => {
|
Ok(message) => {
|
||||||
info!("Received message: {message:?}");
|
// info!("Received message: {message:?}");
|
||||||
match message {
|
match message {
|
||||||
NetworkObject::Star(star_info) => {
|
NetworkObject::Star(star_info) => {
|
||||||
commands.spawn(star_info);
|
commands.spawn(star_info);
|
||||||
}
|
}
|
||||||
|
NetworkObject::Planet() => todo!(),
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
Err(e) => error!("Failed to convert message to string: {e}"),
|
Err(e) => error!("Failed to convert message to string: {e}"),
|
||||||
|
|
|
||||||
|
|
@ -6,4 +6,5 @@ pub struct EntityID(pub u32);
|
||||||
#[derive(Serialize, Deserialize, Debug, Component)]
|
#[derive(Serialize, Deserialize, Debug, Component)]
|
||||||
pub enum NetworkObject {
|
pub enum NetworkObject {
|
||||||
Star(StarInfo),
|
Star(StarInfo),
|
||||||
|
Planet(),
|
||||||
}
|
}
|
||||||
|
|
|
||||||
|
|
@ -1,7 +1,7 @@
|
||||||
pub mod temporal_management;
|
pub mod temporal_management;
|
||||||
use bevy::{
|
use bevy::{
|
||||||
prelude::*,
|
prelude::*,
|
||||||
render::{RenderPlugin, settings::WgpuSettings, view::Hdr},
|
render::{RenderPlugin, settings::WgpuSettings},
|
||||||
time::common_conditions::on_timer,
|
time::common_conditions::on_timer,
|
||||||
};
|
};
|
||||||
use bevy_matchbox::{matchbox_signaling::SignalingServer, prelude::*};
|
use bevy_matchbox::{matchbox_signaling::SignalingServer, prelude::*};
|
||||||
|
|
@ -14,8 +14,8 @@ use rand::{
|
||||||
distr::{Distribution, Uniform},
|
distr::{Distribution, Uniform},
|
||||||
rng,
|
rng,
|
||||||
};
|
};
|
||||||
use rmp_serde::{Deserializer, Serializer};
|
use rmp_serde::Serializer;
|
||||||
use serde::{Deserialize, Serialize};
|
use serde::Serialize;
|
||||||
use std::{
|
use std::{
|
||||||
collections::HashSet,
|
collections::HashSet,
|
||||||
net::{Ipv4Addr, SocketAddrV4},
|
net::{Ipv4Addr, SocketAddrV4},
|
||||||
|
|
@ -25,6 +25,8 @@ use std::{
|
||||||
const CHANNEL_ID: usize = 0;
|
const CHANNEL_ID: usize = 0;
|
||||||
#[derive(Component)]
|
#[derive(Component)]
|
||||||
struct Changed;
|
struct Changed;
|
||||||
|
#[derive(Component)]
|
||||||
|
struct Star;
|
||||||
fn main() {
|
fn main() {
|
||||||
App::new()
|
App::new()
|
||||||
.add_plugins((DefaultPlugins.set(RenderPlugin {
|
.add_plugins((DefaultPlugins.set(RenderPlugin {
|
||||||
|
|
@ -45,7 +47,10 @@ fn main() {
|
||||||
)
|
)
|
||||||
.add_systems(
|
.add_systems(
|
||||||
Update,
|
Update,
|
||||||
(send_message.run_if(on_timer(Duration::from_secs(5))),),
|
(
|
||||||
|
move_stars,
|
||||||
|
send_message.run_if(on_timer(Duration::from_millis(100))),
|
||||||
|
),
|
||||||
)
|
)
|
||||||
.run();
|
.run();
|
||||||
}
|
}
|
||||||
|
|
@ -95,16 +100,7 @@ fn setup_scene(mut commands: Commands, mut socket: ResMut<MatchboxSocket>) {
|
||||||
transform: Transform::from_xyz(x as f32 / 100.0, z as f32 / 20000.0, z as f32 / 100.0),
|
transform: Transform::from_xyz(x as f32 / 100.0, z as f32 / 20000.0, z as f32 / 100.0),
|
||||||
};
|
};
|
||||||
|
|
||||||
commands.spawn((NetworkObject::Star(star_info), Changed));
|
commands.spawn((NetworkObject::Star(star_info), Changed, Star));
|
||||||
let peers: Vec<_> = socket.connected_peers().collect();
|
|
||||||
|
|
||||||
for peer in peers {
|
|
||||||
let message = "Hello";
|
|
||||||
info!("Sending message: {message:?} to {peer}");
|
|
||||||
socket
|
|
||||||
.channel_mut(CHANNEL_ID)
|
|
||||||
.send(message.as_bytes().into(), peer);
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
fn start_socket(mut commands: Commands) {
|
fn start_socket(mut commands: Commands) {
|
||||||
|
|
@ -115,7 +111,7 @@ fn start_socket(mut commands: Commands) {
|
||||||
|
|
||||||
fn send_message(mut socket: ResMut<MatchboxSocket>, network_objects: Query<&NetworkObject>) {
|
fn send_message(mut socket: ResMut<MatchboxSocket>, network_objects: Query<&NetworkObject>) {
|
||||||
for (peer, state) in socket.update_peers() {
|
for (peer, state) in socket.update_peers() {
|
||||||
info!("{peer}: {state:?}");
|
// info!("{peer}: {state:?}");
|
||||||
}
|
}
|
||||||
|
|
||||||
let peers: Vec<_> = socket.connected_peers().collect();
|
let peers: Vec<_> = socket.connected_peers().collect();
|
||||||
|
|
@ -124,10 +120,24 @@ fn send_message(mut socket: ResMut<MatchboxSocket>, network_objects: Query<&Netw
|
||||||
for network_object in network_objects.iter() {
|
for network_object in network_objects.iter() {
|
||||||
let mut ser_buf: Vec<u8> = Vec::new();
|
let mut ser_buf: Vec<u8> = Vec::new();
|
||||||
network_object.serialize(&mut Serializer::new(&mut ser_buf));
|
network_object.serialize(&mut Serializer::new(&mut ser_buf));
|
||||||
info!("Sending message: {ser_buf:?} to {peer}");
|
// info!("Sending message: {ser_buf:?} to {peer}");
|
||||||
socket
|
socket
|
||||||
.channel_mut(CHANNEL_ID)
|
.channel_mut(CHANNEL_ID)
|
||||||
.send(ser_buf.as_slice().into(), peer);
|
.send(ser_buf.as_slice().into(), peer);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
fn move_stars(mut network_objects: Query<&mut NetworkObject, With<Star>>, time: Res<Time>) {
|
||||||
|
for mut no in network_objects.iter_mut() {
|
||||||
|
if let NetworkObject::Star(star) = no.as_mut() {
|
||||||
|
star.transform.rotate_around(
|
||||||
|
Vec3 {
|
||||||
|
x: 0.0,
|
||||||
|
y: 0.0,
|
||||||
|
z: 0.0,
|
||||||
|
},
|
||||||
|
Quat::from_rotation_y(time.delta_secs() * 0.05),
|
||||||
|
)
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
|
||||||
Loading…
Add table
Add a link
Reference in a new issue