Skip to content

Commit ea6801d

Browse files
committed
update for generation change
1 parent d7b8364 commit ea6801d

File tree

1 file changed

+9
-24
lines changed

1 file changed

+9
-24
lines changed

crates/bevy_ecs/src/schedule/run_criteria.rs

Lines changed: 9 additions & 24 deletions
Original file line numberDiff line numberDiff line change
@@ -55,8 +55,7 @@ impl Default for BoxedRunCriteria {
5555
Self {
5656
criteria_system: None,
5757
initialized: false,
58-
// MAX ensures access information will be initialized on first run.
59-
archetype_generation: ArchetypeGeneration::new(usize::MAX),
58+
archetype_generation: ArchetypeGeneration::initial(),
6059
}
6160
}
6261
}
@@ -74,20 +73,14 @@ impl BoxedRunCriteria {
7473
self.initialized = true;
7574
}
7675
let archetypes = world.archetypes();
77-
let old_generation = self.archetype_generation;
7876
let new_generation = archetypes.generation();
79-
if old_generation != new_generation {
80-
let archetype_index_range = if old_generation.value() == usize::MAX {
81-
0..archetypes.len()
82-
} else {
83-
old_generation.value()..archetypes.len()
84-
};
85-
for archetype in archetypes.archetypes[archetype_index_range].iter() {
86-
run_criteria.new_archetype(archetype);
87-
}
77+
let old_generation = std::mem::replace(&mut self.archetype_generation, new_generation);
78+
let archetype_index_range = old_generation.value()..new_generation.value();
8879

89-
self.archetype_generation = new_generation;
80+
for archetype in archetypes.archetypes[archetype_index_range].iter() {
81+
run_criteria.new_archetype(archetype);
9082
}
83+
9184
let should_run = run_criteria.run((), world);
9285
run_criteria.apply_buffers(world);
9386
should_run
@@ -125,8 +118,7 @@ impl RunCriteriaContainer {
125118
label: descriptor.label,
126119
before: descriptor.before,
127120
after: descriptor.after,
128-
// MAX ensures access information will be initialized on first run.
129-
archetype_generation: ArchetypeGeneration::new(usize::MAX),
121+
archetype_generation: ArchetypeGeneration::initial(),
130122
}
131123
}
132124

@@ -146,16 +138,9 @@ impl RunCriteriaContainer {
146138

147139
pub fn update_archetypes(&mut self, world: &World) {
148140
let archetypes = world.archetypes();
149-
let old_generation = self.archetype_generation;
150141
let new_generation = archetypes.generation();
151-
if old_generation == new_generation {
152-
return;
153-
}
154-
let archetype_index_range = if old_generation.value() == usize::MAX {
155-
0..archetypes.len()
156-
} else {
157-
old_generation.value()..archetypes.len()
158-
};
142+
let old_generation = std::mem::replace(&mut self.archetype_generation, new_generation);
143+
let archetype_index_range = old_generation.value()..new_generation.value();
159144
for archetype in archetypes.archetypes[archetype_index_range].iter() {
160145
match &mut self.inner {
161146
RunCriteriaInner::Single(system) => {

0 commit comments

Comments
 (0)