UGDK
|
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_ */