generated from tipragot/rust
Implement generic online system #82
|
@ -3,12 +3,12 @@
|
||||||
use bevnet::Uuid;
|
use bevnet::Uuid;
|
||||||
use bevy::prelude::*;
|
use bevy::prelude::*;
|
||||||
use bevy::utils::HashMap;
|
use bevy::utils::HashMap;
|
||||||
use networkinig::GameRank;
|
use networking::GameRank;
|
||||||
use serde::{Deserialize, Serialize};
|
use serde::{Deserialize, Serialize};
|
||||||
|
|
||||||
pub mod camera;
|
pub mod camera;
|
||||||
pub mod map;
|
pub mod map;
|
||||||
pub mod networkinig;
|
pub mod networking;
|
||||||
pub mod responsive_scale;
|
pub mod responsive_scale;
|
||||||
pub mod scenes;
|
pub mod scenes;
|
||||||
|
|
||||||
|
|
|
@ -4,7 +4,7 @@ use bevy::prelude::*;
|
||||||
use border_wars::camera::CameraPlugin;
|
use border_wars::camera::CameraPlugin;
|
||||||
use border_wars::map::renderer::RendererPlugin;
|
use border_wars::map::renderer::RendererPlugin;
|
||||||
use border_wars::map::selected_tile::SelectTilePlugin;
|
use border_wars::map::selected_tile::SelectTilePlugin;
|
||||||
use border_wars::networkinig::NetworkingPlugin;
|
use border_wars::networking::NetworkingPlugin;
|
||||||
use border_wars::scenes::ScenesPlugin;
|
use border_wars::scenes::ScenesPlugin;
|
||||||
|
|
||||||
fn main() {
|
fn main() {
|
||||||
|
|
|
@ -8,9 +8,9 @@ use super::GameRank;
|
||||||
use crate::{AllPlayers, CurrentScene, Player};
|
use crate::{AllPlayers, CurrentScene, Player};
|
||||||
|
|
||||||
/// A plugin that manage connections (add, remove).
|
/// A plugin that manage connections (add, remove).
|
||||||
pub struct ConnectionPuglin;
|
pub struct ConnectionPlugin;
|
||||||
|
|
||||||
impl Plugin for ConnectionPuglin {
|
impl Plugin for ConnectionPlugin {
|
||||||
fn build(&self, app: &mut App) {
|
fn build(&self, app: &mut App) {
|
||||||
app.add_network_event::<RequestJoin>()
|
app.add_network_event::<RequestJoin>()
|
||||||
.add_network_event::<AddPlayer>()
|
.add_network_event::<AddPlayer>()
|
||||||
|
@ -19,23 +19,24 @@ impl Plugin for ConnectionPuglin {
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
/// An event that is trigger whene a new player request to join a game.
|
/// An event that is trigger when a new player request to join a game.
|
||||||
#[derive(Event, Serialize, Deserialize)]
|
#[derive(Event, Serialize, Deserialize)]
|
||||||
pub struct RequestJoin(pub Player);
|
pub struct RequestJoin(pub Player);
|
||||||
|
|
||||||
/// An event that is trigger whene a new player is added.
|
/// An event that is trigger when a new player is added.
|
||||||
#[derive(Event, Serialize, Deserialize)]
|
#[derive(Event, Serialize, Deserialize)]
|
||||||
pub struct AddPlayer(Uuid, Player);
|
pub struct AddPlayer(Uuid, Player);
|
||||||
|
|
||||||
/// An event that is trigger whene a player is removed.
|
/// An event that is trigger when a player is removed.
|
||||||
#[derive(Event, Serialize, Deserialize)]
|
#[derive(Event, Serialize, Deserialize)]
|
||||||
pub struct RemovePlayer(pub Uuid);
|
pub struct RemovePlayer(pub Uuid);
|
||||||
|
|
||||||
/// A fonction that handle join request and add it.
|
/// A fonction that accept new connection.
|
||||||
|
/// It add the player to the list of all players.
|
||||||
pub fn accept_connection(
|
pub fn accept_connection(
|
||||||
all_players: Res<AllPlayers>,
|
all_players: Res<AllPlayers>,
|
||||||
mut requests_join: EventReader<Receive<RequestJoin>>,
|
mut requests_join_event: EventReader<Receive<RequestJoin>>,
|
||||||
mut add_players: EventWriter<SendTo<AddPlayer>>,
|
mut add_players_event: EventWriter<SendTo<AddPlayer>>,
|
||||||
connection: Res<Connection>,
|
connection: Res<Connection>,
|
||||||
state: Res<State<CurrentScene>>,
|
state: Res<State<CurrentScene>>,
|
||||||
) {
|
) {
|
||||||
|
@ -48,7 +49,7 @@ pub fn accept_connection(
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
for request_join in requests_join.read() {
|
for request_join in requests_join_event.read() {
|
||||||
let new_uuid = request_join.0;
|
let new_uuid = request_join.0;
|
||||||
let mut new_player = request_join.1.0.clone();
|
let mut new_player = request_join.1.0.clone();
|
||||||
|
|
||||||
|
@ -60,17 +61,17 @@ pub fn accept_connection(
|
||||||
new_player.rank = GameRank::Spectator;
|
new_player.rank = GameRank::Spectator;
|
||||||
}
|
}
|
||||||
|
|
||||||
add_players.send(SendTo(new_uuid, AddPlayer(new_uuid, new_player.clone())));
|
add_players_event.send(SendTo(new_uuid, AddPlayer(new_uuid, new_player.clone())));
|
||||||
|
|
||||||
for (uuid, player) in all_players.0.iter() {
|
for (uuid, player) in all_players.0.iter() {
|
||||||
// Link all players
|
// Link all players
|
||||||
add_players.send(SendTo(*uuid, AddPlayer(new_uuid, new_player.clone())));
|
add_players_event.send(SendTo(*uuid, AddPlayer(new_uuid, new_player.clone())));
|
||||||
add_players.send(SendTo(new_uuid, AddPlayer(*uuid, player.clone())));
|
add_players_event.send(SendTo(new_uuid, AddPlayer(*uuid, player.clone())));
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
/// A fonction that handle new / remove players events.
|
/// A fonction that handle new / remove players when a events.
|
||||||
pub fn handle_change_player(
|
pub fn handle_change_player(
|
||||||
mut add_players: EventReader<Receive<AddPlayer>>,
|
mut add_players: EventReader<Receive<AddPlayer>>,
|
||||||
mut remove_players: EventReader<Receive<RemovePlayer>>,
|
mut remove_players: EventReader<Receive<RemovePlayer>>,
|
|
@ -4,7 +4,7 @@ use bevnet::{Connection, NetworkPlugin};
|
||||||
use bevy::prelude::*;
|
use bevy::prelude::*;
|
||||||
use serde::{Deserialize, Serialize};
|
use serde::{Deserialize, Serialize};
|
||||||
|
|
||||||
use self::connection::ConnectionPuglin;
|
use self::connection::ConnectionPlugin;
|
||||||
use crate::{AllPlayers, Player};
|
use crate::{AllPlayers, Player};
|
||||||
|
|
||||||
pub mod connection;
|
pub mod connection;
|
||||||
|
@ -15,7 +15,7 @@ pub struct NetworkingPlugin;
|
||||||
impl Plugin for NetworkingPlugin {
|
impl Plugin for NetworkingPlugin {
|
||||||
fn build(&self, app: &mut App) {
|
fn build(&self, app: &mut App) {
|
||||||
app.add_plugins(NetworkPlugin::new("relay.cocosol.fr".to_string()))
|
app.add_plugins(NetworkPlugin::new("relay.cocosol.fr".to_string()))
|
||||||
.add_plugins(ConnectionPuglin)
|
.add_plugins(ConnectionPlugin)
|
||||||
.init_resource::<AllPlayers>();
|
.init_resource::<AllPlayers>();
|
||||||
}
|
}
|
||||||
}
|
}
|
|
@ -4,8 +4,8 @@ use bevnet::{Connection, SendTo};
|
||||||
use bevy::prelude::*;
|
use bevy::prelude::*;
|
||||||
use bevy_egui::{egui, EguiContexts};
|
use bevy_egui::{egui, EguiContexts};
|
||||||
|
|
||||||
use crate::networkinig::connection::RemovePlayer;
|
use crate::networking::connection::RemovePlayer;
|
||||||
use crate::networkinig::GameRank;
|
use crate::networking::GameRank;
|
||||||
use crate::{AllPlayers, CurrentScene};
|
use crate::{AllPlayers, CurrentScene};
|
||||||
|
|
||||||
/// The plugin for the lobby.
|
/// The plugin for the lobby.
|
||||||
|
|
|
@ -4,8 +4,8 @@ use bevnet::{Connection, SendTo, Uuid};
|
||||||
use bevy::prelude::*;
|
use bevy::prelude::*;
|
||||||
use bevy_egui::{egui, EguiContexts};
|
use bevy_egui::{egui, EguiContexts};
|
||||||
|
|
||||||
use crate::networkinig::connection::RequestJoin;
|
use crate::networking::connection::RequestJoin;
|
||||||
use crate::networkinig::GameRank;
|
use crate::networking::GameRank;
|
||||||
use crate::{AllPlayers, CurrentScene, Player};
|
use crate::{AllPlayers, CurrentScene, Player};
|
||||||
|
|
||||||
/// The plugin for the menu.
|
/// The plugin for the menu.
|
||||||
|
|
Loading…
Reference in a new issue