BRP System Ordering (#16198)

# Objective

- Attempts to fix #16042

## Solution

- Added a new `RemoteSystem` `SystemSet` for the BRP systems.
- Changed the schedule on which these systems run from `Update` to
`Last`.

## Testing

- I did not test these changes and would appreciate a hand in doing so.
I assume it would be good to test that you can order against these
systems easily now.

---

## Migration Guide

- `process_remote_requests`, `process_ongoing_watching_requests` and
`remove_closed_watching_requests` now run in the `Last` schedule. Make
sure you use `RemoteSystem` `SystemSet` in case you need to order your
systems against them.
This commit is contained in:
Martín Maita 2024-11-05 22:05:11 +01:00 committed by GitHub
parent a44b668b90
commit 7fc8318b7f
No known key found for this signature in database
GPG key ID: B5690EEEBB952194

View file

@ -301,11 +301,11 @@
//! [fully-qualified type name]: bevy_reflect::TypePath::type_path //! [fully-qualified type name]: bevy_reflect::TypePath::type_path
use async_channel::{Receiver, Sender}; use async_channel::{Receiver, Sender};
use bevy_app::prelude::*; use bevy_app::{prelude::*, MainScheduleOrder};
use bevy_derive::{Deref, DerefMut}; use bevy_derive::{Deref, DerefMut};
use bevy_ecs::{ use bevy_ecs::{
entity::Entity, entity::Entity,
schedule::IntoSystemConfigs, schedule::{IntoSystemConfigs, ScheduleLabel},
system::{Commands, In, IntoSystem, ResMut, Resource, System, SystemId}, system::{Commands, In, IntoSystem, ResMut, Resource, System, SystemId},
world::World, world::World,
}; };
@ -434,11 +434,16 @@ impl Plugin for RemotePlugin {
); );
} }
app.init_schedule(RemoteLast)
.world_mut()
.resource_mut::<MainScheduleOrder>()
.insert_after(Last, RemoteLast);
app.insert_resource(remote_methods) app.insert_resource(remote_methods)
.init_resource::<RemoteWatchingRequests>() .init_resource::<RemoteWatchingRequests>()
.add_systems(PreStartup, setup_mailbox_channel) .add_systems(PreStartup, setup_mailbox_channel)
.add_systems( .add_systems(
Update, RemoteLast,
( (
process_remote_requests, process_remote_requests,
process_ongoing_watching_requests, process_ongoing_watching_requests,
@ -449,6 +454,10 @@ impl Plugin for RemotePlugin {
} }
} }
/// Schedule that contains all systems to process Bevy Remote Protocol requests
#[derive(ScheduleLabel, Clone, Debug, PartialEq, Eq, Hash)]
struct RemoteLast;
/// A type to hold the allowed types of systems to be used as method handlers. /// A type to hold the allowed types of systems to be used as method handlers.
#[derive(Debug)] #[derive(Debug)]
pub enum RemoteMethodHandler { pub enum RemoteMethodHandler {