/*! * @file collision_tube.h * * collision tube collects all collisions from all entities */ #ifndef _COLLISION_TUBE_H #define _COLLISION_TUBE_H #include "base_object.h" #include "cr_engine.h" #include "world_entity.h" #include "vector.h" #include class Collision; class WorldEntity; class BoundingVolume; namespace CoRe { class CollisionReaction; //! A class for defining collision reactions and storing events class CollisionTube : public BaseObject { ObjectListDeclaration(CollisionTube); public: CollisionTube(); ~CollisionTube(); /** @returns true if at least one of both WorldEntities are subscribed for a collision check */ inline bool isReactive(const WorldEntity& entityA, const WorldEntity& entityB) const { return (entityA.isReactive() && entityB.isReactive()); } bool registerCollisionEvent(WorldEntity* entityA, WorldEntity* entityB, BoundingVolume* bvA, BoundingVolume* bvB); bool registerCollisionEvent(int type, WorldEntity* entity, WorldEntity* groundEntity, const Vector& normal, const Vector& position, bool bInWall = false); void handleCollisions(); private: /* private copy constructor so this object can't be passed as a */ CollisionTube(const CollisionTube& tube) {} private: std::vector _collisionList; //!< the list of collisions since the last processing }; } #endif /* _COLLISION_TUBE_H */