diff --git a/Cargo.lock b/Cargo.lock index ee4f5e6..7621658 100644 --- a/Cargo.lock +++ b/Cargo.lock @@ -1319,6 +1319,7 @@ dependencies = [ "bevy_egui", "noise", "paste", + "rand 0.8.5", "serde", ] diff --git a/crates/border-wars/Cargo.toml b/crates/border-wars/Cargo.toml index fabf283..68e7ebf 100644 --- a/crates/border-wars/Cargo.toml +++ b/crates/border-wars/Cargo.toml @@ -17,3 +17,4 @@ noise = "0.8.2" paste = "1.0.14" bevnet = { path = "../bevnet" } serde = "1.0.197" +rand = "0.8.5" diff --git a/crates/border-wars/src/scenes/lobby.rs b/crates/border-wars/src/scenes/lobby.rs index 1bbbfa5..ffdbb2b 100644 --- a/crates/border-wars/src/scenes/lobby.rs +++ b/crates/border-wars/src/scenes/lobby.rs @@ -3,6 +3,7 @@ use bevnet::{Connection, SendTo}; use bevy::prelude::*; use bevy_egui::{egui, EguiContexts}; +use rand::Rng; use crate::map::generation::StartMapGeneration; use crate::networking::connection::RemovePlayer; @@ -70,24 +71,26 @@ fn lobby_ui( ui.add(egui::Slider::new(&mut (*map_size), 0..=5).text("map size")); - if ui.button("Run the game").clicked() { - for player in all_players_query.iter() { - start_game_event.send(SendTo( - player.uuid, - StartGame(StartMapGeneration { - seed: 0, - radius: get_map_sizes(all_players_query.iter().count() as u64) - [*map_size as usize] as u16 - * 2, - }), - )); - } + if !ui.button("Run the game").clicked() { + return; + } + + let seed = rand::thread_rng().gen::(); + let radius = + get_map_sizes(all_players_query.iter().count() as u32)[*map_size as usize] as u16; + + // Start the game. + for player in all_players_query.iter() { + start_game_event.send(SendTo( + player.uuid, + StartGame(StartMapGeneration { seed, radius }), + )); } }); } /// Get the map sizes form a given number of players. -fn get_map_sizes(number_of_players: u64) -> Vec { +fn get_map_sizes(number_of_players: u32) -> Vec { let mut result = Vec::with_capacity(6); let mut current = 0;