diff options
author | Henauxg <19689618+Henauxg@users.noreply.github.com> | 2023-07-11 19:00:13 +0200 |
---|---|---|
committer | Henauxg <19689618+Henauxg@users.noreply.github.com> | 2023-07-11 19:00:13 +0200 |
commit | 3c235f5ca9515bdf31a1b50b1e6b992098f8287e (patch) | |
tree | 154a831826fc07442d3bd2267b535fb330d420ec | |
parent | fac3534d173ef76f6beb4ee683f85c5cdf6ab98d (diff) |
[example:breakout] Update to bevy 0.11
-rw-r--r-- | examples/breakout/breakout.rs | 41 | ||||
-rw-r--r-- | examples/breakout/client.rs | 38 | ||||
-rw-r--r-- | examples/breakout/server.rs | 1 |
3 files changed, 41 insertions, 39 deletions
diff --git a/examples/breakout/breakout.rs b/examples/breakout/breakout.rs index 0ac79ed..5a51756 100644 --- a/examples/breakout/breakout.rs +++ b/examples/breakout/breakout.rs @@ -65,7 +65,7 @@ pub enum GameSystems { #[derive(Component, Deref, DerefMut)] struct Velocity(Vec2); -#[derive(Default)] +#[derive(Default, Event)] struct CollisionEvent; #[derive(Component)] @@ -118,9 +118,11 @@ fn server_is_listening(server: Res<Server>) -> bool { fn main() { let mut app = App::new(); - app.add_plugins(DefaultPlugins) - .add_plugin(QuinnetServerPlugin::default()) - .add_plugin(QuinnetClientPlugin::default()); + app.add_plugins(( + DefaultPlugins, + QuinnetServerPlugin::default(), + QuinnetClientPlugin::default(), + )); app.add_event::<CollisionEvent>(); app.add_state::<GameState>(); app.insert_resource(ClearColor(BACKGROUND_COLOR)) @@ -131,34 +133,41 @@ fn main() { .insert_resource(client::BricksMapping::default()); // ------ Main menu - app.add_system(bevy::window::close_on_esc) - .add_system(client::setup_main_menu.in_schedule(OnEnter(GameState::MainMenu))) - .add_system(client::handle_menu_buttons.in_set(OnUpdate(GameState::MainMenu))) - .add_system(client::teardown_main_menu.in_schedule(OnExit(GameState::MainMenu))); + app.add_systems(Update, bevy::window::close_on_esc) + .add_systems(OnEnter(GameState::MainMenu), client::setup_main_menu) + .add_systems( + Update, + client::handle_menu_buttons.run_if(in_state(GameState::MainMenu)), + ) + .add_systems(OnExit(GameState::MainMenu), client::teardown_main_menu); // ------ Hosting a server on a client app.add_systems( - (server::start_listening, client::start_connection) - .in_schedule(OnEnter(GameState::HostingLobby)), + OnEnter(GameState::HostingLobby), + (server::start_listening, client::start_connection), ) .add_systems( + Update, ( server::handle_client_messages, server::handle_server_events, client::handle_server_messages, ) - .in_set(OnUpdate(GameState::HostingLobby)), + .run_if(in_state(GameState::HostingLobby)), ); // ------ or just Joining as a client - app.add_system(client::start_connection.in_schedule(OnEnter(GameState::JoiningLobby))) - .add_system(client::handle_server_messages.in_set(OnUpdate(GameState::JoiningLobby))); + app.add_systems(OnEnter(GameState::JoiningLobby), client::start_connection) + .add_systems( + Update, + client::handle_server_messages.run_if(in_state(GameState::JoiningLobby)), + ); // ------ Running the game. // ------ Every app is a client - app.add_system(client::setup_breakout.in_schedule(OnEnter(GameState::Running))); - app.edit_schedule(CoreSchedule::FixedUpdate, |schedule| { + app.add_systems(OnEnter(GameState::Running), client::setup_breakout); + app.edit_schedule(FixedUpdate, |schedule| { schedule.configure_set(GameSystems::ClientSystems.run_if(in_state(GameState::Running))); schedule.add_systems( ( @@ -173,7 +182,7 @@ fn main() { }); // ------ But hosting apps are also a server - app.edit_schedule(CoreSchedule::FixedUpdate, |schedule| { + app.edit_schedule(FixedUpdate, |schedule| { schedule.configure_set( GameSystems::HostSystems .run_if(in_state(GameState::Running)) diff --git a/examples/breakout/client.rs b/examples/breakout/client.rs index e418757..88aeedc 100644 --- a/examples/breakout/client.rs +++ b/examples/breakout/client.rs @@ -2,16 +2,15 @@ use std::collections::HashMap; use bevy::{ prelude::{ - default, AssetServer, Audio, BuildChildren, Bundle, Button, ButtonBundle, Camera2dBundle, - Changed, Color, Commands, Component, DespawnRecursiveExt, Entity, EventReader, EventWriter, - Input, KeyCode, Local, NextState, PlaybackSettings, Query, Res, ResMut, Resource, - TextBundle, Transform, Vec2, Vec3, With, Without, + default, AssetServer, AudioBundle, BuildChildren, Bundle, Button, ButtonBundle, + Camera2dBundle, Changed, Color, Commands, Component, DespawnRecursiveExt, Entity, + EventReader, EventWriter, Input, KeyCode, Local, NextState, PlaybackSettings, Query, Res, + ResMut, Resource, TextBundle, Transform, Vec2, Vec3, With, Without, }, sprite::{Sprite, SpriteBundle}, text::{Text, TextSection, TextStyle}, ui::{ - AlignItems, BackgroundColor, Interaction, JustifyContent, PositionType, Size, Style, - UiRect, Val, + AlignItems, BackgroundColor, Interaction, JustifyContent, PositionType, Style, UiRect, Val, }, }; use bevy_quinnet::{ @@ -89,7 +88,6 @@ pub(crate) enum MenuItem { // This bundle is a collection of the components that define a "wall" in our game #[derive(Bundle)] struct WallBundle { - #[bundle] sprite_bundle: SpriteBundle, } pub(crate) fn start_connection(mut client: ResMut<Client>) { @@ -324,21 +322,19 @@ pub(crate) fn update_scoreboard( } pub(crate) fn play_collision_sound( + mut commands: Commands, mut collision_events: EventReader<CollisionEvent>, - audio: Res<Audio>, sound: Res<CollisionSound>, ) { // Play a sound once per frame if a collision occurred. if !collision_events.is_empty() { // This prevents events staying active on the next frame. collision_events.clear(); - audio.play_with_settings( - sound.0.clone(), - PlaybackSettings { - volume: 0.1, - ..Default::default() - }, - ); + commands.spawn(AudioBundle { + source: sound.0.clone(), + // auto-despawn the entity when playback finishes + settings: PlaybackSettings::DESPAWN, + }); } } @@ -347,7 +343,8 @@ pub(crate) fn setup_main_menu(mut commands: Commands, asset_server: Res<AssetSer commands.spawn(Camera2dBundle::default()); let button_style = Style { - size: Size::new(Val::Px(150.0), Val::Px(65.0)), + width: Val::Px(150.0), + height: Val::Px(65.0), // center button margin: UiRect::all(Val::Auto), // horizontally center child text @@ -396,7 +393,7 @@ pub(crate) fn handle_menu_buttons( ) { for (interaction, mut color, item) in &mut interaction_query { match *interaction { - Interaction::Clicked => { + Interaction::Pressed => { *color = PRESSED_BUTTON_COLOR.into(); match item { MenuItem::Host => next_state.set(GameState::HostingLobby), @@ -443,11 +440,8 @@ pub(crate) fn setup_breakout(mut commands: Commands, asset_server: Res<AssetServ ]) .with_style(Style { position_type: PositionType::Absolute, - position: UiRect { - top: SCOREBOARD_TEXT_PADDING, - left: SCOREBOARD_TEXT_PADDING, - ..default() - }, + top: SCOREBOARD_TEXT_PADDING, + left: SCOREBOARD_TEXT_PADDING, ..default() }), Score, diff --git a/examples/breakout/server.rs b/examples/breakout/server.rs index 9be514e..755546d 100644 --- a/examples/breakout/server.rs +++ b/examples/breakout/server.rs @@ -71,7 +71,6 @@ pub(crate) struct Ball { #[derive(Bundle)] struct WallBundle { - #[bundle] transform_bundle: TransformBundle, collider: Collider, } |