UGDK  0.5.0
 All Classes Namespaces Files Functions Variables Typedefs Enumerations Enumerator Friends Macros
collisionobject.h
Go to the documentation of this file.
1 #ifndef PYRAMIDWORKS_COLLISION_COLLISIONOBJECT_H_
2 #define PYRAMIDWORKS_COLLISION_COLLISIONOBJECT_H_
3 
6 #include <ugdk/action.h>
7 #include <ugdk/structure.h>
8 
9 #include <ugdk/math/vector2D.h>
10 
11 #include <list>
12 #include <map>
13 #include <memory>
14 #include <string>
15 
16 namespace pyramidworks {
17 namespace collision {
18 
20 
23  public:
28  CollisionObject(CollisionData* data, const std::string& colclass, std::unique_ptr<geometry::GeometricShape>&& shape);
30 
32 
36  void SearchCollisions(std::list<CollisionInstance> &collision_list) const;
37 
39 
41  bool IsColliding(const CollisionObject* obj) const;
42 
44 
46  void AddCollisionLogic(const std::string& colclass, const CollisionLogic& logic);
47 
49 
50  void RemoveCollisionLogic(const std::string& colclass);
51 
53 
54  void ChangeCollisionClass(const std::string&);
55 
58 
60  void StopColliding();
61 
64 
67 
69  ugdk::math::Vector2D absolute_position() const { return position_ + offset_; }
70 
72 
74  void ChangeShape(std::unique_ptr<geometry::GeometricShape>&& shape);
75 
77  const std::string& collision_class() const { return collision_class_; }
78 
80  CollisionData* data() const { return data_; }
81 
83  const ugdk::math::Vector2D& position() const { return position_; }
84 
86  const ugdk::math::Vector2D& offset() const { return offset_; }
87 
89 
90  const geometry::GeometricShape* shape() const { return shape_.get(); };
91 
93  void set_offset(const ugdk::math::Vector2D& _offset) { offset_ = _offset; }
94 
96  void set_data(CollisionData* data) { data_ = data; }
97 
98  private:
99  std::string collision_class_;
100 
102  CollisionData* data_;
103 
104  ugdk::math::Vector2D position_;
105  ugdk::math::Vector2D offset_;
106 
107  std::unique_ptr<geometry::GeometricShape> shape_;
108 
109  CollisionManager* manager_;
110 
111  std::map<std::string, CollisionLogic> known_collisions_;
112 };
113 
114 } // namespace collision
115 } // namespace pyramidworks
116 
117 #endif /* PYRAMIDWORKS_COLLISION_COLLISIONOBJECT_H_ */
void MoveTo(const ugdk::math::Vector2D &position)
Moves the object to the given position.
Definition: vector2D.h:18
void set_data(CollisionData *data)
Changes the data of this object.
Definition: collisionobject.h:96
const geometry::GeometricShape * shape() const
Returns the shape used.
Definition: collisionobject.h:90
An interface for other classes implement so they can be associated with an CollsionObject.
Definition: collisiondata.h:8
Definition: collisionclass.h:13
void ChangeCollisionClass(const std::string &)
Changes the collision class associated with this object.
const ugdk::math::Vector2D & position() const
Returns the position of this object.
Definition: collisionobject.h:83
void ChangeShape(std::unique_ptr< geometry::GeometricShape > &&shape)
Changes the shape used.
ugdk::structure::Box< 2 > CreateBoundingBox() const
Wrapper to shape()->CreateBoundingBox(absolute_position())
ugdk::math::Vector2D absolute_position() const
Calculates the position of this object, with the offset added.
Definition: collisionobject.h:69
Definition: geometricshape.h:13
void AddCollisionLogic(const std::string &colclass, const CollisionLogic &logic)
Adds a new collision to the known collisions.
CollisionData * data() const
Returns the CollisionData associated with this object.
Definition: collisionobject.h:80
A class that knows how to manage collisions.
Definition: collisionobject.h:22
std::function< void(const CollisionObject *)> CollisionLogic
Definition: collision.h:17
void SearchCollisions(std::list< CollisionInstance > &collision_list) const
Search if there's any collision.
const std::string & collision_class() const
Returns the name of the collision class of this object.
Definition: collisionobject.h:77
void StartColliding(CollisionManager *)
Enables collisions with this object in the given CollisionManager.
const ugdk::math::Vector2D & offset() const
Returns the offset of this object.
Definition: collisionobject.h:86
CollisionObject(CollisionData *data, const std::string &colclass, std::unique_ptr< geometry::GeometricShape > &&shape)
Definition: collisionmanager.h:19
void set_offset(const ugdk::math::Vector2D &_offset)
Changes the offset of this object.
Definition: collisionobject.h:93
bool IsColliding(const CollisionObject *obj) const
Verifies if this CollisionObject is colliding with another CollisionObject.
void RemoveCollisionLogic(const std::string &colclass)
Removes a collision from the known collisions.
void StopColliding()
Removes this object from it's CollisionClass object list.