diff --git a/rust/src/game/mod.rs b/rust/src/game/mod.rs index 65b99c4..8103ad3 100644 --- a/rust/src/game/mod.rs +++ b/rust/src/game/mod.rs @@ -363,6 +363,10 @@ impl Game { self.is_host || self.host_privileges } + pub fn is_host(&self) -> bool { + self.is_host + } + pub fn set_ready(&mut self, ready: bool) { if let Some(self_id) = self.self_id { self.run_deferred(move |s| { diff --git a/rust/src/net/protocol.rs b/rust/src/net/protocol.rs index 5b7d62f..91b9bef 100644 --- a/rust/src/net/protocol.rs +++ b/rust/src/net/protocol.rs @@ -557,6 +557,17 @@ impl NetworkManager { } } } + Package::GameStarted => { + if let Some(game) = &mut Game::singleton() { + let player = + game.bind().find_player_by_addr(&conn.address).cloned(); + if let Some(player) = player + && player.has_host_privileges + { + game.bind_mut().start_game(); + } + } + } _ => {} }, }, diff --git a/rust/src/ui/lobby.rs b/rust/src/ui/lobby.rs index f66baa0..31e4aac 100644 --- a/rust/src/ui/lobby.rs +++ b/rust/src/ui/lobby.rs @@ -397,7 +397,13 @@ impl LobbyPanel { } } else { if let Some(game) = &mut Game::singleton() { - game.bind_mut().start_game(); + if let Some(peer) = &mut NetworkManager::singleton().bind_mut().peer + && let PeerKind::Client(peer, addr) = peer + { + peer.send_reliable(addr, Package::GameStarted); + } else { + game.bind_mut().start_game(); + } } } }