Skip to content

Commit

Permalink
update for generation change
Browse files Browse the repository at this point in the history
  • Loading branch information
mockersf committed May 18, 2021
1 parent 17e7e8e commit c0494d1
Showing 1 changed file with 9 additions and 24 deletions.
33 changes: 9 additions & 24 deletions crates/bevy_ecs/src/schedule/run_criteria.rs
Original file line number Diff line number Diff line change
Expand Up @@ -55,8 +55,7 @@ impl Default for BoxedRunCriteria {
Self {
criteria_system: None,
initialized: false,
// MAX ensures access information will be initialized on first run.
archetype_generation: ArchetypeGeneration::new(usize::MAX),
archetype_generation: ArchetypeGeneration::initial(),
}
}
}
Expand All @@ -74,20 +73,14 @@ impl BoxedRunCriteria {
self.initialized = true;
}
let archetypes = world.archetypes();
let old_generation = self.archetype_generation;
let new_generation = archetypes.generation();
if old_generation != new_generation {
let archetype_index_range = if old_generation.value() == usize::MAX {
0..archetypes.len()
} else {
old_generation.value()..archetypes.len()
};
for archetype in archetypes.archetypes[archetype_index_range].iter() {
run_criteria.new_archetype(archetype);
}
let old_generation = std::mem::replace(&mut self.archetype_generation, new_generation);
let archetype_index_range = old_generation.value()..new_generation.value();

self.archetype_generation = new_generation;
for archetype in archetypes.archetypes[archetype_index_range].iter() {
run_criteria.new_archetype(archetype);
}

let should_run = run_criteria.run((), world);
run_criteria.apply_buffers(world);
should_run
Expand Down Expand Up @@ -125,8 +118,7 @@ impl RunCriteriaContainer {
label: descriptor.label,
before: descriptor.before,
after: descriptor.after,
// MAX ensures access information will be initialized on first run.
archetype_generation: ArchetypeGeneration::new(usize::MAX),
archetype_generation: ArchetypeGeneration::initial(),
}
}

Expand All @@ -146,16 +138,9 @@ impl RunCriteriaContainer {

pub fn update_archetypes(&mut self, world: &World) {
let archetypes = world.archetypes();
let old_generation = self.archetype_generation;
let new_generation = archetypes.generation();
if old_generation == new_generation {
return;
}
let archetype_index_range = if old_generation.value() == usize::MAX {
0..archetypes.len()
} else {
old_generation.value()..archetypes.len()
};
let old_generation = std::mem::replace(&mut self.archetype_generation, new_generation);
let archetype_index_range = old_generation.value()..new_generation.value();
for archetype in archetypes.archetypes[archetype_index_range].iter() {
match &mut self.inner {
RunCriteriaInner::Single(system) => {
Expand Down

0 comments on commit c0494d1

Please sign in to comment.