-
-
Notifications
You must be signed in to change notification settings - Fork 3.7k
New issue
Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.
By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.
Already on GitHub? Sign in to your account
Adding ScheduleGraph::contains_set
#16206
Merged
alice-i-cecile
merged 3 commits into
bevyengine:main
from
urben1680:schedule-graph-contains-set
Nov 3, 2024
Merged
Adding ScheduleGraph::contains_set
#16206
alice-i-cecile
merged 3 commits into
bevyengine:main
from
urben1680:schedule-graph-contains-set
Nov 3, 2024
Conversation
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
For funsies, this is my current workaround: fn my_set_previously_unknown(schedule: &mut Schedule) -> bool {
let (lower_bound_before, upper_bound_before) = schedule.graph().system_sets().size_hint();
schedule.configure_sets(MySet);
let (lower_bound_after, upper_bound_after) = schedule.graph().system_sets().size_hint();
const EXPECT: &'static str = "ScheduleGraph::system_sets() expected to impl ExactSizeIterator";
debug_assert_eq!(Some(lower_bound_before), upper_bound_before, "{EXPECT}");
debug_assert_eq!(Some(lower_bound_after), upper_bound_after, "{EXPECT}");
lower_bound_before < lower_bound_after
} |
hymm
approved these changes
Nov 1, 2024
BenjaminBrienen
approved these changes
Nov 1, 2024
BenjaminBrienen
approved these changes
Nov 2, 2024
alice-i-cecile
added
A-ECS
Entities, components, systems, and events
C-Usability
A targeted quality-of-life change that makes Bevy easier to use
S-Ready-For-Final-Review
This PR has been approved by the community. It's ready for a maintainer to consider merging it
labels
Nov 3, 2024
mockersf
pushed a commit
that referenced
this pull request
Nov 5, 2024
# Objective The schedule graph can easily confirm whether a set is contained or not. This helps me in my personal project where I write an extension trait for `Schedule` and I want to configure a specific set in its methods. The set in question has a run condition though and I don't want to add that condition to the same schedule as many times as the trait methods are called. Since the non-pub set is unknown to the schedule until then, a `contains_set` is sufficient. It is probably trivial to add a method that returns an `Option<NodeId>` as well but as I personally don't need it I did not add that. If it is desired I can do so here though. It might be unneeded to have a `contains_set` then because one could check `is_some` on the returned id in that case. An argument against that is that future changes may be easier if only a `contains_set` needs to be ported. ## Solution Added `ScheduleGraph::contains_set`. ## Testing I put the below showcase code into a temporary unit test and it worked. If wanted I add it as a test too but I did not see that other more somewhat complicated methods have tests --- ## Showcase ```rs #[derive(ScheduleLabel, Debug, Default, Clone, Copy, PartialEq, Eq, Hash)] struct MySchedule; #[derive(SystemSet, Debug, Default, Clone, Copy, PartialEq, Eq, Hash)] struct MySet; let mut schedule = Schedule::new(MySchedule); assert_eq!(schedule.graph().contains_set(MySet), false); schedule.configure_sets(MySet); assert_eq!(schedule.graph().contains_set(MySet), true); ```
ecoskey
pushed a commit
to ecoskey/bevy
that referenced
this pull request
Jan 6, 2025
# Objective The schedule graph can easily confirm whether a set is contained or not. This helps me in my personal project where I write an extension trait for `Schedule` and I want to configure a specific set in its methods. The set in question has a run condition though and I don't want to add that condition to the same schedule as many times as the trait methods are called. Since the non-pub set is unknown to the schedule until then, a `contains_set` is sufficient. It is probably trivial to add a method that returns an `Option<NodeId>` as well but as I personally don't need it I did not add that. If it is desired I can do so here though. It might be unneeded to have a `contains_set` then because one could check `is_some` on the returned id in that case. An argument against that is that future changes may be easier if only a `contains_set` needs to be ported. ## Solution Added `ScheduleGraph::contains_set`. ## Testing I put the below showcase code into a temporary unit test and it worked. If wanted I add it as a test too but I did not see that other more somewhat complicated methods have tests --- ## Showcase ```rs #[derive(ScheduleLabel, Debug, Default, Clone, Copy, PartialEq, Eq, Hash)] struct MySchedule; #[derive(SystemSet, Debug, Default, Clone, Copy, PartialEq, Eq, Hash)] struct MySet; let mut schedule = Schedule::new(MySchedule); assert_eq!(schedule.graph().contains_set(MySet), false); schedule.configure_sets(MySet); assert_eq!(schedule.graph().contains_set(MySet), true); ```
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Labels
A-ECS
Entities, components, systems, and events
C-Usability
A targeted quality-of-life change that makes Bevy easier to use
S-Ready-For-Final-Review
This PR has been approved by the community. It's ready for a maintainer to consider merging it
Add this suggestion to a batch that can be applied as a single commit.
This suggestion is invalid because no changes were made to the code.
Suggestions cannot be applied while the pull request is closed.
Suggestions cannot be applied while viewing a subset of changes.
Only one suggestion per line can be applied in a batch.
Add this suggestion to a batch that can be applied as a single commit.
Applying suggestions on deleted lines is not supported.
You must change the existing code in this line in order to create a valid suggestion.
Outdated suggestions cannot be applied.
This suggestion has been applied or marked resolved.
Suggestions cannot be applied from pending reviews.
Suggestions cannot be applied on multi-line comments.
Suggestions cannot be applied while the pull request is queued to merge.
Suggestion cannot be applied right now. Please check back later.
Objective
The schedule graph can easily confirm whether a set is contained or not.
This helps me in my personal project where I write an extension trait for
Schedule
and I want to configure a specific set in its methods. The set in question has a run condition though and I don't want to add that condition to the same schedule as many times as the trait methods are called. Since the non-pub set is unknown to the schedule until then, acontains_set
is sufficient.It is probably trivial to add a method that returns an
Option<NodeId>
as well but as I personally don't need it I did not add that. If it is desired I can do so here though. It might be unneeded to have acontains_set
then because one could checkis_some
on the returned id in that case.An argument against that is that future changes may be easier if only a
contains_set
needs to be ported.Solution
Added
ScheduleGraph::contains_set
.Testing
I put the below showcase code into a temporary unit test and it worked. If wanted I add it as a test too but I did not see that other more somewhat complicated methods have tests
Showcase