#pragma once class EntitySelector { public: static const EntitySelector *ENTITY_STILL_ALIVE; static const EntitySelector *CONTAINER_ENTITY_SELECTOR; virtual bool matches(shared_ptr entity) const = 0; }; class AliveEntitySelector : public EntitySelector { public: bool matches(shared_ptr entity) const; }; class ContainerEntitySelector : public EntitySelector { public: bool matches(shared_ptr entity) const; }; class MobCanWearArmourEntitySelector : public EntitySelector { private: shared_ptr item; public: MobCanWearArmourEntitySelector(shared_ptr item); bool matches(shared_ptr entity) const; };