From 9f04fc030b9c3a3eb2b46e884a734564bef50f9a Mon Sep 17 00:00:00 2001 From: Viktor Gustavsson Date: Sun, 17 Nov 2024 00:34:06 +0100 Subject: [PATCH] Expose BRP system scheduling and add system set (#16400) # Objective When adding custom BRP methods one might need to: - Run custom systems in the `RemoteLast` schedule. - Order those systems before/after request processing and cleanup. For example in `bevy_remote_inspector` we need a way to perform some preparation _before_ request processing. And to perform cleanup _between_ request processing and watcher cleanup. ## Solution - Make `RemoteLast` public - Add `RemoteSet` with `ProcessRequests` and `Cleanup` variants. --- crates/bevy_remote/src/lib.rs | 29 ++++++++++++++++++++++------- 1 file changed, 22 insertions(+), 7 deletions(-) diff --git a/crates/bevy_remote/src/lib.rs b/crates/bevy_remote/src/lib.rs index 9dab9fc4f1..576ee7dbf1 100644 --- a/crates/bevy_remote/src/lib.rs +++ b/crates/bevy_remote/src/lib.rs @@ -305,7 +305,7 @@ use bevy_app::{prelude::*, MainScheduleOrder}; use bevy_derive::{Deref, DerefMut}; use bevy_ecs::{ entity::Entity, - schedule::{IntoSystemConfigs, ScheduleLabel}, + schedule::{IntoSystemConfigs, IntoSystemSetConfigs, ScheduleLabel, SystemSet}, system::{Commands, In, IntoSystem, ResMut, Resource, System, SystemId}, world::World, }; @@ -442,21 +442,36 @@ impl Plugin for RemotePlugin { app.insert_resource(remote_methods) .init_resource::() .add_systems(PreStartup, setup_mailbox_channel) + .configure_sets( + RemoteLast, + (RemoteSet::ProcessRequests, RemoteSet::Cleanup).chain(), + ) .add_systems( RemoteLast, ( - process_remote_requests, - process_ongoing_watching_requests, - remove_closed_watching_requests, - ) - .chain(), + (process_remote_requests, process_ongoing_watching_requests) + .chain() + .in_set(RemoteSet::ProcessRequests), + remove_closed_watching_requests.in_set(RemoteSet::Cleanup), + ), ); } } /// Schedule that contains all systems to process Bevy Remote Protocol requests #[derive(ScheduleLabel, Clone, Debug, PartialEq, Eq, Hash)] -struct RemoteLast; +pub struct RemoteLast; + +/// The systems sets of the [`RemoteLast`] schedule. +/// +/// These can be useful for ordering. +#[derive(Debug, Hash, PartialEq, Eq, Clone, SystemSet)] +pub enum RemoteSet { + /// Processing of remote requests. + ProcessRequests, + /// Cleanup (remove closed watchers etc) + Cleanup, +} /// A type to hold the allowed types of systems to be used as method handlers. #[derive(Debug)]