UGDK
src/pyramidworks/collision/collisionobject.h
Go to the documentation of this file.
00001 #ifndef PYRAMIDWORKS_COLLISION_COLLISIONOBJECT_H_
00002 #define PYRAMIDWORKS_COLLISION_COLLISIONOBJECT_H_
00003 
00004 #include <map>
00005 #include <vector>
00006 #include <string>
00007 #include <list>
00008 #include <ugdk/math/vector2D.h>
00009 #include <ugdk/util.h>
00010 #include <pyramidworks/collision.h>
00011 #include <pyramidworks/geometry.h>
00012 
00013 namespace pyramidworks {
00014 namespace collision {
00015 
00018 
00020 class CollisionObject {
00021   public:
00024     CollisionObject(CollisionManager* manager, void *data);
00025     ~CollisionObject();
00026 
00028 
00032     void SearchCollisions(std::vector<CollisionInstance> &collision_list) const;
00033 
00035 
00037     bool IsColliding(const CollisionObject* obj) const;
00038 
00040 
00043     void AddCollisionLogic(const std::string& colclass, CollisionLogic* logic);
00044     void AddCollisionLogic(const char n[], CollisionLogic* logic) { 
00045         const std::string str(n); AddCollisionLogic(str, logic); 
00046     }
00047 
00049 
00053     void InitializeCollisionClass(const std::string&);
00054     void InitializeCollisionClass(const char n[]) { const std::string str(n); InitializeCollisionClass(str); }
00055 
00057     void StartColliding();
00058 
00060     void StopColliding();
00061 
00063 
00064     const geometry::GeometricShape* shape() const { return shape_; };
00065 
00067 
00069     void set_shape(geometry::GeometricShape* shape);
00070 
00072     ugdk::Vector2D absolute_position() const { return position_ + offset_; }
00073 
00075     void MoveTo(const ugdk::Vector2D& position);
00076 
00078     ugdk::ikdtree::Box<2> GetBoundingBox() const;
00079 
00080   private:
00081     CollisionManager* manager_;
00082 
00083     // Data that is sent to CollisionLogic::Handle
00084     void *data_;
00085 
00086     ugdk::Vector2D position_;
00087     ugdk::Vector2D offset_;
00088 
00089     CollisionClass* collision_class_;
00090     geometry::GeometricShape* shape_;
00091 
00092     bool is_active_;
00093 
00094     std::map<const CollisionClass*, CollisionLogic*> known_collisions_;
00095 };
00096 
00097 } // namespace collision
00098 } // namespace pyramidworks
00099 
00100 #endif /* PYRAMIDWORKS_COLLISION_COLLISIONOBJECT_H_ */
 All Classes Namespaces Files Functions Variables Typedefs Enumerations Enumerator Friends Defines