Skip to content

Commit 697d297

Browse files
committed
Remove last uses of string-labels (#5420)
# Objective * Related: #4341 * Remove all remaining uses of stringly-typed labels in the repo. Right now, it's just a bunch of tests and examples.
1 parent cbb884c commit 697d297

File tree

14 files changed

+514
-424
lines changed

14 files changed

+514
-424
lines changed

benches/benches/bevy_ecs/scheduling/run_criteria.rs

Lines changed: 22 additions & 13 deletions
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,7 @@
11
use bevy_ecs::{
22
component::Component,
33
prelude::{ParallelSystemDescriptorCoercion, Res, Resource, RunCriteriaDescriptorCoercion},
4-
schedule::{ShouldRun, Stage, SystemStage},
4+
schedule::{RunCriteriaLabel, ShouldRun, Stage, SystemStage},
55
system::Query,
66
world::World,
77
};
@@ -11,6 +11,13 @@ fn run_stage(stage: &mut SystemStage, world: &mut World) {
1111
stage.run(world);
1212
}
1313

14+
/// Labels for run criteria which either always return yes, or always return no.
15+
#[derive(RunCriteriaLabel)]
16+
enum Always {
17+
Yes,
18+
No,
19+
}
20+
1421
pub fn run_criteria_yes(criterion: &mut Criterion) {
1522
let mut world = World::new();
1623
let mut group = criterion.benchmark_group("run_criteria/yes");
@@ -85,14 +92,15 @@ pub fn run_criteria_yes_with_labels(criterion: &mut Criterion) {
8592
}
8693
for amount in 0..21 {
8794
let mut stage = SystemStage::parallel();
88-
stage.add_system(empty.with_run_criteria(always_yes.label("always yes")));
95+
96+
stage.add_system(empty.with_run_criteria(always_yes.label(Always::Yes)));
8997
for _ in 0..amount {
9098
stage
91-
.add_system(empty.with_run_criteria("always yes"))
92-
.add_system(empty.with_run_criteria("always yes"))
93-
.add_system(empty.with_run_criteria("always yes"))
94-
.add_system(empty.with_run_criteria("always yes"))
95-
.add_system(empty.with_run_criteria("always yes"));
99+
.add_system(empty.with_run_criteria(Always::Yes))
100+
.add_system(empty.with_run_criteria(Always::Yes))
101+
.add_system(empty.with_run_criteria(Always::Yes))
102+
.add_system(empty.with_run_criteria(Always::Yes))
103+
.add_system(empty.with_run_criteria(Always::Yes));
96104
}
97105
// run once to initialize systems
98106
run_stage(&mut stage, &mut world);
@@ -116,14 +124,15 @@ pub fn run_criteria_no_with_labels(criterion: &mut Criterion) {
116124
}
117125
for amount in 0..21 {
118126
let mut stage = SystemStage::parallel();
119-
stage.add_system(empty.with_run_criteria(always_no.label("always no")));
127+
128+
stage.add_system(empty.with_run_criteria(always_no.label(Always::No)));
120129
for _ in 0..amount {
121130
stage
122-
.add_system(empty.with_run_criteria("always no"))
123-
.add_system(empty.with_run_criteria("always no"))
124-
.add_system(empty.with_run_criteria("always no"))
125-
.add_system(empty.with_run_criteria("always no"))
126-
.add_system(empty.with_run_criteria("always no"));
131+
.add_system(empty.with_run_criteria(Always::No))
132+
.add_system(empty.with_run_criteria(Always::No))
133+
.add_system(empty.with_run_criteria(Always::No))
134+
.add_system(empty.with_run_criteria(Always::No))
135+
.add_system(empty.with_run_criteria(Always::No));
127136
}
128137
// run once to initialize systems
129138
run_stage(&mut stage, &mut world);

crates/bevy_app/src/app.rs

Lines changed: 18 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -151,7 +151,9 @@ impl App {
151151
/// # use bevy_ecs::prelude::*;
152152
/// # let mut app = App::new();
153153
/// #
154-
/// app.add_stage("my_stage", SystemStage::parallel());
154+
/// #[derive(StageLabel)]
155+
/// struct MyStage;
156+
/// app.add_stage(MyStage, SystemStage::parallel());
155157
/// ```
156158
pub fn add_stage<S: Stage>(&mut self, label: impl StageLabel, stage: S) -> &mut Self {
157159
self.schedule.add_stage(label, stage);
@@ -168,7 +170,9 @@ impl App {
168170
/// # use bevy_ecs::prelude::*;
169171
/// # let mut app = App::new();
170172
/// #
171-
/// app.add_stage_after(CoreStage::Update, "my_stage", SystemStage::parallel());
173+
/// #[derive(StageLabel)]
174+
/// struct MyStage;
175+
/// app.add_stage_after(CoreStage::Update, MyStage, SystemStage::parallel());
172176
/// ```
173177
pub fn add_stage_after<S: Stage>(
174178
&mut self,
@@ -190,7 +194,9 @@ impl App {
190194
/// # use bevy_ecs::prelude::*;
191195
/// # let mut app = App::new();
192196
/// #
193-
/// app.add_stage_before(CoreStage::Update, "my_stage", SystemStage::parallel());
197+
/// #[derive(StageLabel)]
198+
/// struct MyStage;
199+
/// app.add_stage_before(CoreStage::Update, MyStage, SystemStage::parallel());
194200
/// ```
195201
pub fn add_stage_before<S: Stage>(
196202
&mut self,
@@ -212,7 +218,9 @@ impl App {
212218
/// # use bevy_ecs::prelude::*;
213219
/// # let mut app = App::new();
214220
/// #
215-
/// app.add_startup_stage("my_startup_stage", SystemStage::parallel());
221+
/// #[derive(StageLabel)]
222+
/// struct MyStartupStage;
223+
/// app.add_startup_stage(MyStartupStage, SystemStage::parallel());
216224
/// ```
217225
pub fn add_startup_stage<S: Stage>(&mut self, label: impl StageLabel, stage: S) -> &mut Self {
218226
self.schedule
@@ -234,9 +242,11 @@ impl App {
234242
/// # use bevy_ecs::prelude::*;
235243
/// # let mut app = App::new();
236244
/// #
245+
/// #[derive(StageLabel)]
246+
/// struct MyStartupStage;
237247
/// app.add_startup_stage_after(
238248
/// StartupStage::Startup,
239-
/// "my_startup_stage",
249+
/// MyStartupStage,
240250
/// SystemStage::parallel()
241251
/// );
242252
/// ```
@@ -265,9 +275,11 @@ impl App {
265275
/// # use bevy_ecs::prelude::*;
266276
/// # let mut app = App::new();
267277
/// #
278+
/// #[derive(StageLabel)]
279+
/// struct MyStartupStage;
268280
/// app.add_startup_stage_before(
269281
/// StartupStage::Startup,
270-
/// "my_startup_stage",
282+
/// MyStartupStage,
271283
/// SystemStage::parallel()
272284
/// );
273285
/// ```

crates/bevy_ecs/README.md

Lines changed: 5 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -148,9 +148,13 @@ fn main() {
148148
// Create a new Schedule, which defines an execution strategy for Systems
149149
let mut schedule = Schedule::default();
150150

151+
// Define a unique public name for a new Stage.
152+
#[derive(StageLabel)]
153+
pub struct UpdateLabel;
154+
151155
// Add a Stage to our schedule. Each Stage in a schedule runs all of its systems
152156
// before moving on to the next Stage
153-
schedule.add_stage("update", SystemStage::parallel()
157+
schedule.add_stage(UpdateLabel, SystemStage::parallel()
154158
.with_system(movement)
155159
);
156160

crates/bevy_ecs/examples/change_detection.rs

Lines changed: 3 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -30,7 +30,9 @@ fn main() {
3030
update.add_system(remove_old_entities.after(SimulationSystem::Age));
3131
update.add_system(print_changed_entities.after(SimulationSystem::Age));
3232
// Add the Stage with our systems to the Schedule
33-
schedule.add_stage("update", update);
33+
#[derive(StageLabel)]
34+
struct Update;
35+
schedule.add_stage(Update, update);
3436

3537
// Simulate 10 frames in our world
3638
for iteration in 1..=10 {

crates/bevy_ecs/examples/events.rs

Lines changed: 8 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -10,22 +10,28 @@ fn main() {
1010
// Create a schedule and a stage
1111
let mut schedule = Schedule::default();
1212

13+
#[derive(StageLabel)]
14+
enum Stages {
15+
First,
16+
Second,
17+
}
18+
1319
// Events need to be updated in every frame. This update should happen before we use
1420
// the events. To guarantee this, we can let the update run in an earlier stage than our logic.
1521
// Here we will use a stage called "first" that will always run it's systems before the Stage
1622
// called "second". In "first" we update the events and in "second" we run our systems
1723
// sending and receiving events.
1824
let mut first = SystemStage::parallel();
1925
first.add_system(Events::<MyEvent>::update_system);
20-
schedule.add_stage("first", first);
26+
schedule.add_stage(Stages::First, first);
2127

2228
// Add systems sending and receiving events to a "second" Stage
2329
let mut second = SystemStage::parallel();
2430
second.add_system(sending_system);
2531
second.add_system(receiving_system.after(sending_system));
2632

2733
// Run the "second" Stage after the "first" Stage, so our Events always get updated before we use them
28-
schedule.add_stage_after("first", "second", second);
34+
schedule.add_stage_after(Stages::First, Stages::Second, second);
2935

3036
// Simulate 10 frames of our world
3137
for iteration in 1..=10 {

crates/bevy_ecs/examples/resources.rs

Lines changed: 7 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -18,7 +18,13 @@ fn main() {
1818
// Add systems to increase the counter and to print out the current value
1919
update.add_system(increase_counter);
2020
update.add_system(print_counter.after(increase_counter));
21-
schedule.add_stage("update", update);
21+
22+
// Declare a unique label for the stage.
23+
#[derive(StageLabel)]
24+
struct Update;
25+
26+
// Add the stage to the schedule.
27+
schedule.add_stage(Update, update);
2228

2329
for iteration in 1..=10 {
2430
println!("Simulating frame {}/10", iteration);

crates/bevy_ecs/src/schedule/mod.rs

Lines changed: 41 additions & 15 deletions
Original file line numberDiff line numberDiff line change
@@ -106,7 +106,11 @@ impl Schedule {
106106
/// # use bevy_ecs::prelude::*;
107107
/// #
108108
/// # let mut schedule = Schedule::default();
109-
/// schedule.add_stage("my_stage", SystemStage::parallel());
109+
/// // Define a new label for the stage.
110+
/// #[derive(StageLabel)]
111+
/// struct MyStage;
112+
/// // Add a stage with that label to the schedule.
113+
/// schedule.add_stage(MyStage, SystemStage::parallel());
110114
/// ```
111115
pub fn add_stage<S: Stage>(&mut self, label: impl StageLabel, stage: S) -> &mut Self {
112116
let label = label.as_label();
@@ -124,8 +128,14 @@ impl Schedule {
124128
/// # use bevy_ecs::prelude::*;
125129
/// #
126130
/// # let mut schedule = Schedule::default();
127-
/// # schedule.add_stage("target_stage", SystemStage::parallel());
128-
/// schedule.add_stage_after("target_stage", "my_stage", SystemStage::parallel());
131+
/// # #[derive(StageLabel)]
132+
/// # struct TargetStage;
133+
/// # schedule.add_stage(TargetStage, SystemStage::parallel());
134+
/// // Define a new label for the stage.
135+
/// #[derive(StageLabel)]
136+
/// struct NewStage;
137+
/// // Add a stage with that label to the schedule.
138+
/// schedule.add_stage_after(TargetStage, NewStage, SystemStage::parallel());
129139
/// ```
130140
pub fn add_stage_after<S: Stage>(
131141
&mut self,
@@ -157,9 +167,15 @@ impl Schedule {
157167
/// # use bevy_ecs::prelude::*;
158168
/// #
159169
/// # let mut schedule = Schedule::default();
160-
/// # schedule.add_stage("target_stage", SystemStage::parallel());
170+
/// # #[derive(StageLabel)]
171+
/// # struct TargetStage;
172+
/// # schedule.add_stage(TargetStage, SystemStage::parallel());
161173
/// #
162-
/// schedule.add_stage_before("target_stage", "my_stage", SystemStage::parallel());
174+
/// // Define a new, private label for the stage.
175+
/// #[derive(StageLabel)]
176+
/// struct NewStage;
177+
/// // Add a stage with that label to the schedule.
178+
/// schedule.add_stage_before(TargetStage, NewStage, SystemStage::parallel());
163179
/// ```
164180
pub fn add_stage_before<S: Stage>(
165181
&mut self,
@@ -192,9 +208,11 @@ impl Schedule {
192208
/// #
193209
/// # fn my_system() {}
194210
/// # let mut schedule = Schedule::default();
195-
/// # schedule.add_stage("my_stage", SystemStage::parallel());
211+
/// # #[derive(StageLabel)]
212+
/// # struct MyStage;
213+
/// # schedule.add_stage(MyStage, SystemStage::parallel());
196214
/// #
197-
/// schedule.add_system_to_stage("my_stage", my_system);
215+
/// schedule.add_system_to_stage(MyStage, my_system);
198216
/// ```
199217
pub fn add_system_to_stage<Params>(
200218
&mut self,
@@ -228,10 +246,12 @@ impl Schedule {
228246
/// #
229247
/// # fn my_system() {}
230248
/// # let mut schedule = Schedule::default();
231-
/// # schedule.add_stage("my_stage", SystemStage::parallel());
249+
/// # #[derive(StageLabel)]
250+
/// # struct MyStage;
251+
/// # schedule.add_stage(MyStage, SystemStage::parallel());
232252
/// #
233253
/// schedule.add_system_set_to_stage(
234-
/// "my_stage",
254+
/// MyStage,
235255
/// SystemSet::new()
236256
/// .with_system(system_a)
237257
/// .with_system(system_b)
@@ -265,9 +285,11 @@ impl Schedule {
265285
/// # use bevy_ecs::prelude::*;
266286
/// #
267287
/// # let mut schedule = Schedule::default();
268-
/// # schedule.add_stage("my_stage", SystemStage::parallel());
288+
/// # #[derive(StageLabel)]
289+
/// # struct MyStage;
290+
/// # schedule.add_stage(MyStage, SystemStage::parallel());
269291
/// #
270-
/// schedule.stage("my_stage", |stage: &mut SystemStage| {
292+
/// schedule.stage(MyStage, |stage: &mut SystemStage| {
271293
/// stage.add_system(my_system)
272294
/// });
273295
/// #
@@ -301,9 +323,11 @@ impl Schedule {
301323
/// #
302324
/// # fn my_system() {}
303325
/// # let mut schedule = Schedule::default();
304-
/// # schedule.add_stage("my_stage", SystemStage::parallel());
326+
/// # #[derive(StageLabel)]
327+
/// # struct MyStage;
328+
/// # schedule.add_stage(MyStage, SystemStage::parallel());
305329
/// #
306-
/// let stage = schedule.get_stage::<SystemStage>("my_stage").unwrap();
330+
/// let stage = schedule.get_stage::<SystemStage>(MyStage).unwrap();
307331
/// ```
308332
pub fn get_stage<T: Stage>(&self, stage_label: impl StageLabel) -> Option<&T> {
309333
let label = stage_label.as_label();
@@ -323,9 +347,11 @@ impl Schedule {
323347
/// #
324348
/// # fn my_system() {}
325349
/// # let mut schedule = Schedule::default();
326-
/// # schedule.add_stage("my_stage", SystemStage::parallel());
350+
/// # #[derive(StageLabel)]
351+
/// # struct MyStage;
352+
/// # schedule.add_stage(MyStage, SystemStage::parallel());
327353
/// #
328-
/// let stage = schedule.get_stage_mut::<SystemStage>("my_stage").unwrap();
354+
/// let stage = schedule.get_stage_mut::<SystemStage>(MyStage).unwrap();
329355
/// ```
330356
pub fn get_stage_mut<T: Stage>(&mut self, stage_label: impl StageLabel) -> Option<&mut T> {
331357
let label = stage_label.as_label();

0 commit comments

Comments
 (0)