diff options
Diffstat (limited to 'ecs/src/query/options.rs')
-rw-r--r-- | ecs/src/query/options.rs | 59 |
1 files changed, 0 insertions, 59 deletions
diff --git a/ecs/src/query/options.rs b/ecs/src/query/options.rs deleted file mode 100644 index 6318359..0000000 --- a/ecs/src/query/options.rs +++ /dev/null @@ -1,59 +0,0 @@ -use std::marker::PhantomData; - -use hashbrown::HashSet; - -use crate::component::Component; -use crate::EntityComponent; - -/// Query options. -pub trait Options -{ - fn entity_filter(components: &[EntityComponent]) -> bool; -} - -impl Options for () -{ - fn entity_filter(_components: &[EntityComponent]) -> bool - { - true - } -} - -pub struct With<ComponentT> -where - ComponentT: Component, -{ - _pd: PhantomData<ComponentT>, -} - -impl<ComponentT> Options for With<ComponentT> -where - ComponentT: Component, -{ - fn entity_filter(components: &[EntityComponent]) -> bool - { - let ids_set = components - .iter() - .map(|component| component.id) - .collect::<HashSet<_>>(); - - ids_set.contains(&ComponentT::id()) - } -} - -pub struct Not<OptionsT> -where - OptionsT: Options, -{ - _pd: PhantomData<OptionsT>, -} - -impl<OptionsT> Options for Not<OptionsT> -where - OptionsT: Options, -{ - fn entity_filter(components: &[EntityComponent]) -> bool - { - !OptionsT::entity_filter(components) - } -} |