From 49ee6daa8ed24087315d2cdb39cf447fb1fed3c5 Mon Sep 17 00:00:00 2001 From: CoCo_Sol007 Date: Thu, 21 Mar 2024 09:53:11 +0100 Subject: [PATCH] SAVE --- .../border-wars/src/networkinig/connection.rs | 29 ++++++++++++------- 1 file changed, 18 insertions(+), 11 deletions(-) diff --git a/crates/border-wars/src/networkinig/connection.rs b/crates/border-wars/src/networkinig/connection.rs index 19be805..1db57cd 100644 --- a/crates/border-wars/src/networkinig/connection.rs +++ b/crates/border-wars/src/networkinig/connection.rs @@ -1,12 +1,13 @@ -//! All the code related to the connection . +//! All the code related to the connection. use bevnet::{Connection, NetworkAppExt, Receive, SendTo, Uuid}; use bevy::prelude::*; use serde::{Deserialize, Serialize}; +use super::GameRank; use crate::{AllPlayers, CurrentScene, Player}; -/// A plugin that handle, send or remove connections. +/// A plugin that manage connections (add, remove). pub struct ConnectionPuglin; impl Plugin for ConnectionPuglin { @@ -14,10 +15,7 @@ impl Plugin for ConnectionPuglin { app.add_network_event::() .add_network_event::() .add_network_event::() - .add_systems( - Update, - (accept_connection, handle_change_player).run_if(in_state(CurrentScene::Lobby)), - ); + .add_systems(Update, (accept_connection, handle_change_player)); } } @@ -39,6 +37,7 @@ pub fn accept_connection( mut requests_join: EventReader>, mut add_players: EventWriter>, connection: Res, + state: Res>, ) { // Check if the player is an admin if all_players @@ -51,14 +50,22 @@ pub fn accept_connection( for request_join in requests_join.read() { let new_uuid = request_join.0; - let new_name = request_join.1.0.clone(); + let mut new_player = request_join.1.0.clone(); - add_players.send(SendTo(new_uuid, AddPlayer(new_uuid, new_name.clone()))); + let current_state = *state.get(); - for (uuid, name) in all_players.0.iter() { + if current_state == CurrentScene::Menu { + return; + } else if current_state == CurrentScene::Game { + new_player.rank = GameRank::Spectator; + } + + add_players.send(SendTo(new_uuid, AddPlayer(new_uuid, new_player.clone()))); + + for (uuid, player) in all_players.0.iter() { // Link all players - add_players.send(SendTo(*uuid, AddPlayer(new_uuid, new_name.clone()))); - add_players.send(SendTo(new_uuid, AddPlayer(*uuid, name.clone()))); + add_players.send(SendTo(*uuid, AddPlayer(new_uuid, new_player.clone()))); + add_players.send(SendTo(new_uuid, AddPlayer(*uuid, player.clone()))); } } }