9 #ifndef hifi_PickFilter_h
10 #define hifi_PickFilter_h
62 PICK_ALL_INTERSECTIONS,
68 typedef std::bitset<NUM_FLAGS> Flags;
74 PickFilter(
const Flags& flags) : _flags(flags) {}
76 bool operator==(
const PickFilter& rhs)
const {
return _flags == rhs._flags; }
77 bool operator!=(
const PickFilter& rhs)
const {
return _flags != rhs._flags; }
79 void setFlag(FlagBit flag,
bool value) { _flags[flag] = value; }
82 bool doesPickDomainEntities()
const {
return _flags[DOMAIN_ENTITIES] || !(_flags[AVATAR_ENTITIES] || _flags[LOCAL_ENTITIES] || _flags[AVATARS] || _flags[HUD]); }
83 bool doesPickAvatarEntities()
const {
return _flags[AVATAR_ENTITIES] || !(_flags[DOMAIN_ENTITIES] || _flags[LOCAL_ENTITIES] || _flags[AVATARS] || _flags[HUD]); }
84 bool doesPickLocalEntities()
const {
return _flags[LOCAL_ENTITIES] || !(_flags[DOMAIN_ENTITIES] || _flags[AVATAR_ENTITIES] || _flags[AVATARS] || _flags[HUD]); }
85 bool doesPickAvatars()
const {
return _flags[AVATARS] || !(_flags[DOMAIN_ENTITIES] || _flags[AVATAR_ENTITIES] || _flags[LOCAL_ENTITIES] || _flags[HUD]); }
86 bool doesPickHUD()
const {
return _flags[HUD] || !(_flags[DOMAIN_ENTITIES] || _flags[AVATAR_ENTITIES] || _flags[LOCAL_ENTITIES] || _flags[AVATARS]); }
88 bool doesPickVisible()
const {
return _flags[VISIBLE] || !_flags[INVISIBLE]; }
89 bool doesPickInvisible()
const {
return _flags[INVISIBLE] || !_flags[VISIBLE]; }
91 bool doesPickCollidable()
const {
return _flags[COLLIDABLE] || !_flags[NONCOLLIDABLE]; }
92 bool doesPickNonCollidable()
const {
return _flags[NONCOLLIDABLE] || !_flags[COLLIDABLE]; }
94 bool isPrecise()
const {
return _flags[PRECISE] || !_flags[COARSE]; }
95 bool isCoarse()
const {
return _flags[COARSE]; }
97 bool doesWantAllIntersections()
const {
return _flags[PICK_ALL_INTERSECTIONS]; }
99 bool bypassIgnore()
const {
return _flags[PICK_BYPASS_IGNORE]; }
102 Flags getEntityFlags()
const {
103 unsigned int toReturn = 0;
104 for (
int i = DOMAIN_ENTITIES; i <= LOCAL_ENTITIES; i++) {
106 toReturn |= getBitMask(FlagBit(i));
109 for (
int i = HUD + 1; i < NUM_FLAGS; i++) {
111 toReturn |= getBitMask(FlagBit(i));
114 return Flags(toReturn);
116 Flags getAvatarFlags()
const {
return Flags(getBitMask(AVATARS)); }
117 Flags getHUDFlags()
const {
return Flags(getBitMask(HUD)); }
119 static constexpr
unsigned int getBitMask(FlagBit bit) {
return 1 << bit; }