From d251973dd3df9430bcc4e9f865aa7161f8a97130 Mon Sep 17 00:00:00 2001 From: Sofia Date: Fri, 17 Jul 2026 23:28:28 +0300 Subject: [PATCH] Refactor a bit --- rust/src/game_manager.rs | 11 ++++++++- rust/src/net/network_manager.rs | 1 - rust/src/ui/lobby.rs | 40 +++++++++++++++++---------------- 3 files changed, 31 insertions(+), 21 deletions(-) diff --git a/rust/src/game_manager.rs b/rust/src/game_manager.rs index 4962440..0b8349f 100644 --- a/rust/src/game_manager.rs +++ b/rust/src/game_manager.rs @@ -5,7 +5,7 @@ use serde::{Deserialize, Serialize}; use crate::{ map_resource::Map, - net::network_manager::{NetworkManager, PeerKind}, + net::network_manager::{NetworkManager, Package, PeerKind}, }; pub const GAME_MANAGER_GLOBAL: &str = "GameManagerGlobal"; @@ -116,6 +116,15 @@ impl Game { self.base().get_tree().change_scene_to_packed(scene); } } + + self.run_deferred(|_| { + if let Some(peer) = &mut NetworkManager::singleton().bind_mut().peer { + if let PeerKind::Server(peer, _) = peer { + peer.broadcast_reliable(Package::GameStarted); + peer.set_accepting_connections(false); + } + } + }); } pub fn set_self(&mut self, id: u16) { diff --git a/rust/src/net/network_manager.rs b/rust/src/net/network_manager.rs index a17d77d..4e318ea 100644 --- a/rust/src/net/network_manager.rs +++ b/rust/src/net/network_manager.rs @@ -203,7 +203,6 @@ impl INode for NetworkManager { } Package::GameStarted => { if let Some(game) = &mut Game::singleton() { - godot_print!("Game started"); game.bind_mut().start_game(); } } diff --git a/rust/src/ui/lobby.rs b/rust/src/ui/lobby.rs index a7b0e98..7e1f230 100644 --- a/rust/src/ui/lobby.rs +++ b/rust/src/ui/lobby.rs @@ -160,28 +160,30 @@ impl LobbyPanel { } pub fn on_ready(&mut self) { - if let Some(peer) = &mut NetworkManager::singleton().bind_mut().peer { - match peer { - PeerKind::Client(peer, socket_addr) => { - self.is_ready = !self.is_ready; - if let Some(button) = &mut self.ready_button { - if self.is_ready { - button.set_text("Ready"); - } else { - button.set_text("Not Ready"); - } - } + let is_host = if let Some(peer) = &NetworkManager::singleton().bind().peer { + peer.is_host() + } else { + false + }; + if !is_host { + self.is_ready = !self.is_ready; + if let Some(button) = &mut self.ready_button { + if self.is_ready { + button.set_text("Ready"); + } else { + button.set_text("Not Ready"); + } + } - peer.send_reliable(socket_addr, Package::SetReady(0, self.is_ready)); - } - PeerKind::Server(peer, _) => { - if let Some(game) = &mut Game::singleton() { - game.bind_mut().start_game(); - } - peer.broadcast_reliable(Package::GameStarted); - peer.set_accepting_connections(false); + if let Some(peer) = &mut NetworkManager::singleton().bind_mut().peer { + if let PeerKind::Client(peer, socket_addr) = peer { + peer.send_reliable(&socket_addr, Package::SetReady(0, self.is_ready)); } } + } else { + if let Some(game) = &mut Game::singleton() { + game.bind_mut().start_game(); + } } }