Skip to content

Commit d41a88f

Browse files
committed
Unpartial the Commit- Made QueryRelationFilter a proper type
1 parent acf2be6 commit d41a88f

File tree

4 files changed

+25
-24
lines changed

4 files changed

+25
-24
lines changed

crates/bevy_ecs/src/query/fetch.rs

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -23,7 +23,7 @@ pub trait WorldQuery {
2323

2424
pub trait Fetch<'w>: Sized {
2525
type Item;
26-
type State: FetchState;
26+
type State: FetchState<RelationFilter = Self::RelationFilter>;
2727
type RelationFilter: Clone + std::hash::Hash + PartialEq + Eq + Default + Send + Sync + 'static;
2828

2929
/// Creates a new instance of this fetch.
@@ -1010,4 +1010,4 @@ macro_rules! impl_tuple_fetch {
10101010
};
10111011
}
10121012

1013-
all_tuples!(impl_tuple_fetch, 0, 15, F, S, R);
1013+
all_tuples!(impl_tuple_fetch, 0, 11, F, S, R);

crates/bevy_ecs/src/query/filter.rs

Lines changed: 9 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -437,10 +437,11 @@ macro_rules! impl_query_filter_tuple {
437437
unsafe fn set_archetype(&mut self, state: &Self::State, relation_filter: &Self::RelationFilter, archetype: &Archetype, tables: &Tables) {
438438
let ($($filter,)*) = &mut self.0;
439439
let ($($state,)*) = &state.0;
440+
let ($($relation_filter,)*) = relation_filter;
440441
$(
441-
$filter.matches = $state.matches_archetype(archetype, relation_filter);
442+
$filter.matches = $state.matches_archetype(archetype, $relation_filter);
442443
if $filter.matches {
443-
$filter.fetch.set_archetype($state, relation_filter, archetype, tables);
444+
$filter.fetch.set_archetype($state, $relation_filter, archetype, tables);
444445
}
445446
)*
446447
}
@@ -462,7 +463,7 @@ macro_rules! impl_query_filter_tuple {
462463
#[allow(unused_variables)]
463464
#[allow(non_snake_case)]
464465
unsafe impl<$($filter: FetchState),*> FetchState for Or<($($filter,)*)> {
465-
type RelationFilter = ();
466+
type RelationFilter = ($($filter::RelationFilter,)*);
466467

467468
fn init(world: &mut World) -> Self {
468469
Or(($($filter::init(world),)*))
@@ -480,18 +481,20 @@ macro_rules! impl_query_filter_tuple {
480481

481482
fn matches_archetype(&self, archetype: &Archetype, relation_filter: &Self::RelationFilter) -> bool {
482483
let ($($filter,)*) = &self.0;
483-
false $(|| $filter.matches_archetype(archetype, relation_filter))*
484+
let ($($relation_filter,)*) = relation_filter;
485+
false $(|| $filter.matches_archetype(archetype, $relation_filter))*
484486
}
485487

486488
fn matches_table(&self, table: &Table, relation_filter: &Self::RelationFilter,) -> bool {
487489
let ($($filter,)*) = &self.0;
488-
false $(|| $filter.matches_table(table, relation_filter))*
490+
let ($($relation_filter,)*) = relation_filter;
491+
false $(|| $filter.matches_table(table, $relation_filter))*
489492
}
490493
}
491494
};
492495
}
493496

494-
all_tuples!(impl_query_filter_tuple, 0, 15, F, S, R);
497+
all_tuples!(impl_query_filter_tuple, 0, 11, F, S, R);
495498

496499
// FIXME(Relationships) AAAAAAAAAAAAAAAA
497500
macro_rules! impl_flag_filter {

crates/bevy_ecs/src/query/relation_filter.rs

Lines changed: 2 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,3 @@
1-
use crate::prelude::Entity;
2-
31
use super::{FetchState, WorldQuery};
42
use std::{
53
hash::{Hash, Hasher},
@@ -8,8 +6,8 @@ use std::{
86

97
// FIXME(Relationships) this is not remotely correct, we want an assoc type on `Fetch`
108
pub struct QueryRelationFilter<Q: WorldQuery, F: WorldQuery>(
11-
<Q::State as FetchState>::RelationFilter,
12-
<F::State as FetchState>::RelationFilter,
9+
pub <Q::State as FetchState>::RelationFilter,
10+
pub <F::State as FetchState>::RelationFilter,
1311
PhantomData<fn() -> (Q, F)>,
1412
);
1513

crates/bevy_ecs/src/query/state.rs

Lines changed: 12 additions & 12 deletions
Original file line numberDiff line numberDiff line change
@@ -138,8 +138,8 @@ where
138138
archetype: &Archetype,
139139
) {
140140
let table_index = archetype.table_id().index();
141-
if fetch_state.matches_archetype(archetype, relation_filter)
142-
&& filter_state.matches_archetype(archetype, relation_filter)
141+
if fetch_state.matches_archetype(archetype, &relation_filter.0)
142+
&& filter_state.matches_archetype(archetype, &relation_filter.1)
143143
{
144144
// FIXME(Relationships) Use a new ArchetypeRelationKindId here instead
145145
fetch_state.update_archetype_component_access(archetype, access);
@@ -217,13 +217,13 @@ where
217217

218218
fetch.set_archetype(
219219
&self.fetch_state,
220-
&self.current_relation_filter,
220+
&self.current_relation_filter.0,
221221
archetype,
222222
&world.storages().tables,
223223
);
224224
filter.set_archetype(
225225
&self.filter_state,
226-
&self.current_relation_filter,
226+
&self.current_relation_filter.1,
227227
archetype,
228228
&world.storages().tables,
229229
);
@@ -374,8 +374,8 @@ where
374374
let tables = &world.storages().tables;
375375
for table_id in self.current_query_access_cache().matched_table_ids.iter() {
376376
let table = tables.get_unchecked(*table_id);
377-
fetch.set_table(&self.fetch_state, &self.current_relation_filter, table);
378-
filter.set_table(&self.filter_state, &self.current_relation_filter, table);
377+
fetch.set_table(&self.fetch_state, &self.current_relation_filter.0, table);
378+
filter.set_table(&self.filter_state, &self.current_relation_filter.1, table);
379379

380380
for table_index in 0..table.len() {
381381
if !filter.table_filter_fetch(table_index) {
@@ -396,13 +396,13 @@ where
396396
let archetype = archetypes.get_unchecked(*archetype_id);
397397
fetch.set_archetype(
398398
&self.fetch_state,
399-
&self.current_relation_filter,
399+
&self.current_relation_filter.0,
400400
archetype,
401401
tables,
402402
);
403403
filter.set_archetype(
404404
&self.filter_state,
405-
&self.current_relation_filter,
405+
&self.current_relation_filter.1,
406406
archetype,
407407
tables,
408408
);
@@ -447,12 +447,12 @@ where
447447
let table = tables.get_unchecked(*table_id);
448448
fetch.set_table(
449449
&self.fetch_state,
450-
&self.current_relation_filter,
450+
&self.current_relation_filter.0,
451451
table,
452452
);
453453
filter.set_table(
454454
&self.filter_state,
455-
&self.current_relation_filter,
455+
&self.current_relation_filter.1,
456456
table,
457457
);
458458
let len = batch_size.min(table.len() - offset);
@@ -485,13 +485,13 @@ where
485485
let archetype = world.archetypes.get_unchecked(*archetype_id);
486486
fetch.set_archetype(
487487
&self.fetch_state,
488-
&self.current_relation_filter,
488+
&self.current_relation_filter.0,
489489
archetype,
490490
tables,
491491
);
492492
filter.set_archetype(
493493
&self.filter_state,
494-
&self.current_relation_filter,
494+
&self.current_relation_filter.1,
495495
archetype,
496496
tables,
497497
);

0 commit comments

Comments
 (0)