![]() |
xyginext
0.2.0
Second generation of xygine game creation framework
|
Dynamic AABB tree for broadphase queries. Based on Erin Catto's dynamic tree in Box2D (http://www.box2d.org) which is in turn inspired by Nathanael Presson's btDbvt. (https://pybullet.org/wordpress/) More...
#include <DynamicTreeSystem.hpp>
Public Member Functions | |
DynamicTreeSystem (xy::MessageBus &) | |
void | process (float) override |
Implement this for system specific processing to entities. | |
void | onEntityAdded (xy::Entity) override |
Optional callback performed when an entity is added. | |
void | onEntityRemoved (xy::Entity) override |
Optional callback performed when an entity is removed. | |
std::vector< xy::Entity > | query (sf::FloatRect area, std::uint64_t filter=std::numeric_limits< std::uint64_t >::max()) const |
returns a list of entities whose broadphase bounds intersect the given query area. More... | |
![]() | |
System (MessageBus &mb, UniqueType t) | |
Constructor. Pass in a reference to the concrete implementation to generate a unique type ID for this system. | |
UniqueType | getType () const |
Returns the unique type ID of the system. | |
const std::vector< Entity > & | getEntities () const |
Returns a list of entities that this system is currently interested in. | |
void | addEntity (Entity) |
Adds an entity to the list to process. | |
void | removeEntity (Entity) |
Removes an entity from the list to process. | |
const ComponentMask & | getComponentMask () const |
Returns the component mask used to mask entities with corresponding components for this system to process. | |
virtual void | handleMessage (const Message &) |
Used to process any incoming system messages. | |
bool | isActive () const |
Returns true if the system is currently active. Systems can be activeated and deactivated with Scene::setSystemActive() | |
template<typename T > | |
void | requireComponent () |
template<typename T > | |
T * | postMessage (Message::ID id) |
Additional Inherited Members | |
![]() | |
using | Ptr = std::unique_ptr< System > |
![]() | |
template<typename T > | |
void | requireComponent () |
Adds a component type to the list of components required by the system for it to be interested in a particular entity. This should only be used in the constructor of the System else types will not be registered. | |
std::vector< Entity > & | getEntities () |
template<typename T > | |
T * | postMessage (Message::ID id) |
Posts a message on the system wide message bus. | |
MessageBus & | getMessageBus () |
Returns a reference to the MessageBus. | |
void | setScene (Scene &) |
Scene * | getScene () |
Returns a pointer to the scene to which this system belongs. | |
Dynamic AABB tree for broadphase queries. Based on Erin Catto's dynamic tree in Box2D (http://www.box2d.org) which is in turn inspired by Nathanael Presson's btDbvt. (https://pybullet.org/wordpress/)
Dynamic trees can perform 33%-50% faster on a scene containing a lot of moving objects compared to a Quad Tree (in personal bench marks at least). On the other hand a Quad Tree is usually more optimal for a scene with a lot of static geometry (such as a platformer game). One or the other should usually be chosen based on the type of scene to which it is applied - although bench marking will give the most accurate results. Using both in a single scene is generally considered redundant.
std::vector<xy::Entity> xy::DynamicTreeSystem::query | ( | sf::FloatRect | area, |
std::uint64_t | filter = std::numeric_limits< std::uint64_t >::max() |
||
) | const |
returns a list of entities whose broadphase bounds intersect the given query area.
area | Area in world coordinates to query |
filter | Only entities with BroadphaseComponents matching the given bit flags are returned. Defaults to all flags set. |