aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorHenauxg <19689618+Henauxg@users.noreply.github.com>2023-07-11 19:00:13 +0200
committerHenauxg <19689618+Henauxg@users.noreply.github.com>2023-07-11 19:00:13 +0200
commit3c235f5ca9515bdf31a1b50b1e6b992098f8287e (patch)
tree154a831826fc07442d3bd2267b535fb330d420ec
parentfac3534d173ef76f6beb4ee683f85c5cdf6ab98d (diff)
[example:breakout] Update to bevy 0.11
-rw-r--r--examples/breakout/breakout.rs41
-rw-r--r--examples/breakout/client.rs38
-rw-r--r--examples/breakout/server.rs1
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,
}