diff --git a/src/world/Util/ActorFilter.h b/src/world/Util/ActorFilter.h new file mode 100644 index 00000000..4b3a6bfb --- /dev/null +++ b/src/world/Util/ActorFilter.h @@ -0,0 +1,47 @@ +#ifndef _WORLD_UTIL_H +#define _WORLD_UTIL_H + +#include +#include +#include +#include +#include + +namespace Sapphire::World::Util +{ + + class ActorFilter + { + public: + ActorFilter() = default; + virtual ~ActorFilter() = default; + virtual bool conditionApplies( const Entity::Actor& actor ); + }; + + class ActorFilterRange : public ActorFilter + { + FFXIVARR_POSITION3 m_startPos; + float m_range; + public: + ActorFilterInRange( FFXIVARR_POSITION3 startPos, float range ) : m_startPos( startPos ), m_range( range ); + + bool conditionApplies( const Entity::Actor& actor ) override + { + return Util::distance( m_startPos.x, m_startPos.y, m_startPos.z, + actor.getPos().x, actor.getPos().y, actor.getPos().z ) <= m_range; + } + }; + + // usage in psudocode + // + // std::set< ActorPtr > filterActorList( inputSet, filter ) + // { + // std::set< ActorPtr > resultSet; + // for( every actor in inputSet ) + // { + // if( filter.conditionApplies( actor ) ) + // resultSet.insert( actor.asPointer() ); + // } + // return resultSet; + // +} \ No newline at end of file