fix first refresh
This commit is contained in:
parent
f978b8af17
commit
b204118b82
6 changed files with 91 additions and 8 deletions
|
@ -5,6 +5,10 @@ use serde::{Deserialize, Serialize};
|
||||||
pub mod server_msg {
|
pub mod server_msg {
|
||||||
use super::*;
|
use super::*;
|
||||||
|
|
||||||
|
#[derive(Debug, Serialize, Deserialize)]
|
||||||
|
pub struct ServerGreeting;
|
||||||
|
netify!(ServerGreeting);
|
||||||
|
|
||||||
#[derive(Debug, Serialize, Deserialize)]
|
#[derive(Debug, Serialize, Deserialize)]
|
||||||
pub struct MapUpdates(pub Vec<(IVec2, (char, char))>);
|
pub struct MapUpdates(pub Vec<(IVec2, (char, char))>);
|
||||||
netify!(MapUpdates);
|
netify!(MapUpdates);
|
||||||
|
@ -13,6 +17,10 @@ pub mod server_msg {
|
||||||
pub mod client_msg {
|
pub mod client_msg {
|
||||||
use super::*;
|
use super::*;
|
||||||
|
|
||||||
|
#[derive(Debug, Serialize, Deserialize)]
|
||||||
|
pub struct ClientGreeting;
|
||||||
|
netify!(ClientGreeting);
|
||||||
|
|
||||||
#[derive(Debug, Serialize, Deserialize)]
|
#[derive(Debug, Serialize, Deserialize)]
|
||||||
pub struct Move(pub IVec2);
|
pub struct Move(pub IVec2);
|
||||||
netify!(Move);
|
netify!(Move);
|
||||||
|
|
|
@ -4,10 +4,12 @@ use bevy::{
|
||||||
};
|
};
|
||||||
use bevy_eventwork::{
|
use bevy_eventwork::{
|
||||||
tcp::{NetworkSettings, TcpProvider},
|
tcp::{NetworkSettings, TcpProvider},
|
||||||
ConnectionId, EventworkPlugin, EventworkRuntime, Network, NetworkEvent,
|
AppNetworkMessage, ConnectionId, EventworkPlugin, EventworkRuntime, Network, NetworkEvent,
|
||||||
};
|
};
|
||||||
use termion::clear;
|
use termion::clear;
|
||||||
|
|
||||||
|
use crate::common::client_msg::ClientGreeting;
|
||||||
|
|
||||||
pub struct NetPlugin;
|
pub struct NetPlugin;
|
||||||
|
|
||||||
impl Plugin for NetPlugin {
|
impl Plugin for NetPlugin {
|
||||||
|
@ -17,6 +19,7 @@ impl Plugin for NetPlugin {
|
||||||
.insert_resource(NetworkSettings::default())
|
.insert_resource(NetworkSettings::default())
|
||||||
.add_systems(Update, handle_net_event)
|
.add_systems(Update, handle_net_event)
|
||||||
.init_resource::<Server>()
|
.init_resource::<Server>()
|
||||||
|
.listen_for_message::<ClientGreeting, TcpProvider>()
|
||||||
.add_systems(Startup, do_connect);
|
.add_systems(Startup, do_connect);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -24,12 +27,13 @@ impl Plugin for NetPlugin {
|
||||||
#[derive(Debug, Resource, Default)]
|
#[derive(Debug, Resource, Default)]
|
||||||
pub struct Server(pub Option<ConnectionId>);
|
pub struct Server(pub Option<ConnectionId>);
|
||||||
|
|
||||||
fn handle_net_event(mut events: EventReader<NetworkEvent>, mut server: ResMut<Server>) {
|
fn handle_net_event(mut events: EventReader<NetworkEvent>, mut server: ResMut<Server>, net: Res<Network<TcpProvider>>) {
|
||||||
for event in events.read() {
|
for event in events.read() {
|
||||||
match event {
|
match event {
|
||||||
NetworkEvent::Connected(connection_id) => {
|
NetworkEvent::Connected(connection_id) => {
|
||||||
println!("Connected '{connection_id:?}'.");
|
println!("Connected '{connection_id:?}'.");
|
||||||
server.0 = Some(*connection_id);
|
server.0 = Some(*connection_id);
|
||||||
|
net.send_message(*connection_id, ClientGreeting).ok();
|
||||||
}
|
}
|
||||||
NetworkEvent::Disconnected(connection_id) => {
|
NetworkEvent::Disconnected(connection_id) => {
|
||||||
print!("{}", clear::All);
|
print!("{}", clear::All);
|
||||||
|
|
46
src/lib_server/generation.rs
Normal file
46
src/lib_server/generation.rs
Normal file
|
@ -0,0 +1,46 @@
|
||||||
|
use bevy::{prelude::*, utils::HashSet};
|
||||||
|
|
||||||
|
use super::physics::Pos;
|
||||||
|
|
||||||
|
pub struct GenerationPlugin;
|
||||||
|
|
||||||
|
impl Plugin for GenerationPlugin {
|
||||||
|
fn build(&self, app: &mut bevy::prelude::App) {
|
||||||
|
app.insert_resource(GeneratedRegistry::default())
|
||||||
|
// .add_systems(schedule, systems)
|
||||||
|
;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
fn chunk_loading(cmd: &mut Commands, loaders: Query<&Pos, With<Loader>>, reg: ResMut<GeneratedRegistry>) {
|
||||||
|
for pos in &loaders {
|
||||||
|
chunks_surrounding(&pos.pos());
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
const CHUNK_WIDTH: i32 = 8;
|
||||||
|
|
||||||
|
fn chunks_surrounding(pos: &IVec2) -> Vec<IVec2> {
|
||||||
|
todo!()
|
||||||
|
}
|
||||||
|
|
||||||
|
fn snap(value: i32, increment: i32) -> i32 {
|
||||||
|
todo!()
|
||||||
|
}
|
||||||
|
|
||||||
|
#[test]
|
||||||
|
fn test_snap() {
|
||||||
|
// assert_eq!();
|
||||||
|
}
|
||||||
|
|
||||||
|
#[derive(Debug, Resource, Default)]
|
||||||
|
pub struct GeneratedRegistry(HashSet<IVec2>);
|
||||||
|
|
||||||
|
#[derive(Debug, Component)]
|
||||||
|
pub struct Loader;
|
||||||
|
|
||||||
|
#[derive(Debug, Component)]
|
||||||
|
pub struct Generated;
|
||||||
|
|
||||||
|
#[derive(Debug, Component)]
|
||||||
|
pub struct Chunk(IVec2);
|
|
@ -1,5 +1,6 @@
|
||||||
pub mod counter;
|
pub mod counter;
|
||||||
pub mod display;
|
pub mod display;
|
||||||
|
pub mod generation;
|
||||||
pub mod map;
|
pub mod map;
|
||||||
pub mod metrics;
|
pub mod metrics;
|
||||||
pub mod net;
|
pub mod net;
|
||||||
|
|
|
@ -4,12 +4,15 @@ use bevy::{
|
||||||
};
|
};
|
||||||
use bevy_eventwork::{
|
use bevy_eventwork::{
|
||||||
tcp::{NetworkSettings, TcpProvider},
|
tcp::{NetworkSettings, TcpProvider},
|
||||||
EventworkPlugin, EventworkRuntime, Network, NetworkEvent,
|
AppNetworkMessage, EventworkPlugin, EventworkRuntime, Network, NetworkData, NetworkEvent,
|
||||||
};
|
};
|
||||||
|
|
||||||
use crate::lib_server::player::{remove_player, spawn_player};
|
use crate::{
|
||||||
|
common::{client_msg::ClientGreeting, server_msg::ServerGreeting},
|
||||||
|
lib_server::player::{remove_player, spawn_player},
|
||||||
|
};
|
||||||
|
|
||||||
use super::{display::RenderUpdate, player::Player};
|
use super::{display::RenderUpdate, physics::Pos, player::Player};
|
||||||
|
|
||||||
pub struct NetPlugin;
|
pub struct NetPlugin;
|
||||||
|
|
||||||
|
@ -19,7 +22,9 @@ impl Plugin for NetPlugin {
|
||||||
.insert_resource(EventworkRuntime(TaskPoolBuilder::new().num_threads(2).build()))
|
.insert_resource(EventworkRuntime(TaskPoolBuilder::new().num_threads(2).build()))
|
||||||
.insert_resource(NetworkSettings::default())
|
.insert_resource(NetworkSettings::default())
|
||||||
.add_systems(Update, handle_net_event)
|
.add_systems(Update, handle_net_event)
|
||||||
.add_systems(Startup, do_listen);
|
.add_systems(Startup, do_listen)
|
||||||
|
.listen_for_message::<ClientGreeting, TcpProvider>()
|
||||||
|
.add_systems(Update, respond_greet);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -45,6 +50,23 @@ fn handle_net_event(
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
fn respond_greet(
|
||||||
|
mut greetings: EventReader<NetworkData<ClientGreeting>>,
|
||||||
|
players: Query<(&Pos, &Player)>,
|
||||||
|
net: Res<Network<TcpProvider>>,
|
||||||
|
mut render_update: EventWriter<RenderUpdate>,
|
||||||
|
) {
|
||||||
|
for greet in greetings.read() {
|
||||||
|
let source = *greet.source();
|
||||||
|
net.send_message(source, ServerGreeting).ok();
|
||||||
|
for (pos, player) in &players {
|
||||||
|
if player.0 == source {
|
||||||
|
render_update.send(RenderUpdate(pos.pos()));
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
fn do_listen(
|
fn do_listen(
|
||||||
mut net: ResMut<Network<TcpProvider>>,
|
mut net: ResMut<Network<TcpProvider>>,
|
||||||
settings: Res<NetworkSettings>,
|
settings: Res<NetworkSettings>,
|
||||||
|
|
|
@ -5,7 +5,8 @@ use std::time::Duration;
|
||||||
|
|
||||||
use bevy::{app::ScheduleRunnerPlugin, prelude::*, time::TimePlugin};
|
use bevy::{app::ScheduleRunnerPlugin, prelude::*, time::TimePlugin};
|
||||||
use lib_server::{
|
use lib_server::{
|
||||||
display::DisplayPlugin, map, metrics::MetricsPlugin, net::NetPlugin, physics::PhysicsPlugin, player::PlayerPlugin,
|
display::DisplayPlugin, generation::GenerationPlugin, map, metrics::MetricsPlugin, net::NetPlugin,
|
||||||
|
physics::PhysicsPlugin, player::PlayerPlugin,
|
||||||
};
|
};
|
||||||
|
|
||||||
mod common;
|
mod common;
|
||||||
|
@ -14,12 +15,13 @@ mod lib_server;
|
||||||
fn main() {
|
fn main() {
|
||||||
App::new()
|
App::new()
|
||||||
// Core.
|
// Core.
|
||||||
.add_plugins(ScheduleRunnerPlugin::run_loop(Duration::from_millis(50)))
|
.add_plugins(ScheduleRunnerPlugin::run_loop(Duration::from_millis(100)))
|
||||||
.add_plugins(TimePlugin)
|
.add_plugins(TimePlugin)
|
||||||
// World.
|
// World.
|
||||||
.add_plugins(PhysicsPlugin)
|
.add_plugins(PhysicsPlugin)
|
||||||
.add_plugins(DisplayPlugin)
|
.add_plugins(DisplayPlugin)
|
||||||
.add_plugins(NetPlugin)
|
.add_plugins(NetPlugin)
|
||||||
|
.add_plugins(GenerationPlugin)
|
||||||
// Content.
|
// Content.
|
||||||
.add_plugins(PlayerPlugin)
|
.add_plugins(PlayerPlugin)
|
||||||
// Debug.
|
// Debug.
|
||||||
|
|
Loading…
Add table
Add a link
Reference in a new issue