ecs 0.17.1

An Entity Component System (ECS) Framework

use {ComponentManager, EntityData};

pub struct Aspect<T: ComponentManager>(Box<Fn(&EntityData, &T) -> bool + 'static>);

impl<T: ComponentManager> Aspect<T>
{
    pub fn all() -> Aspect<T>
    {
        Aspect(box |_, _| true)
    }

    pub fn none() -> Aspect<T>
    {
        Aspect(box |_, _| false)
    }

    pub unsafe fn new(inner: Box<Fn(&EntityData, &T) -> bool + 'static>) -> Aspect<T>
    {
        Aspect(inner)
    }

    pub fn check<'a>(&self, entity: &EntityData<'a>, components: &T) -> bool
    {
        (self.0)(entity, components)
    }
}