diff --git a/client/src/main.rs b/client/src/main.rs index 8a15b0c..749d123 100644 --- a/client/src/main.rs +++ b/client/src/main.rs @@ -42,7 +42,7 @@ impl Default for ClientSettings { } } -#[derive(Debug, Default, Serialize, Deserialize, Component, Resource)] +#[derive(Debug, Default, Serialize, Deserialize, Component, Resource, Clone)] struct PlayerInput { up: bool, down: bool, @@ -64,23 +64,36 @@ enum ServerMessages { /// Run bevy client fn main() { let client_settings = ClientSettings::default(); - let (renet_client, renet_transport) = new_renet_client(&client_settings); + // Check MULTIPLAYER from environment, default false. + let multiplayer = env::var("MULTIPLAYER").unwrap_or_default().to_lowercase() == "true"; let mut app = App::new(); app.add_plugins(DefaultPlugins) .init_resource::() - .add_plugins((RenetClientPlugin, NetcodeClientPlugin)) .init_resource::() - .insert_resource(renet_client) - .insert_resource(renet_transport) - .insert_resource(client_settings) - .add_systems(Startup, setup) - .add_systems( + .insert_resource(client_settings.clone()); + + if multiplayer { + // Multiplayer: initialize renet client and add network plugins/systems. + let (renet_client, renet_transport) = new_renet_client(&client_settings); + app.insert_resource(renet_client) + .insert_resource(renet_transport) + .add_plugins((RenetClientPlugin, NetcodeClientPlugin)) + .add_systems(Startup, setup) + .add_systems( + Update, + (player_input, client_send_input, client_sync_players).run_if(client_connected), + ) + .add_systems(Update, (reconnect_on_error_system, reconnect_check_system, exit_system)); + } else { + // Local mode: spawn local player, update input, then move the player. + app.add_systems(Startup, (setup, local_spawn_player)).add_systems( Update, - (player_input, client_send_input, client_sync_players).run_if(client_connected), - ) - .add_systems(Update, (reconnect_on_error_system, reconnect_check_system, exit_system)) - .run(); + (player_input, exit_system, local_update_player_input, local_move_players_system), + ); + } + + app.run(); } /// Create a new RenetClient and NetcodeClientTransport using settings from ClientSettings. @@ -293,3 +306,45 @@ fn reconnect_check_system(mut commands: Commands, client: Res, time println!("✅ Reconnected to server!"); } + +/// For local simulation, add a simple system that updates transformations using local input. +fn local_move_players_system(mut query: Query<(&mut Transform, &PlayerInput)>, time: Res