enum CollisionGroup {
/** Objects in DISABLED group are not tested for collisions */
- COLGROUP_DISABLED,
+ COLGROUP_DISABLED = 0,
/**
* "default" is moving object. MovingObjects get tested against all other
* objects and against other movingobjects
* MovingOnlyStatic objects), but is tested against all other objects.
*/
COLGROUP_MOVING_ONLY_STATIC,
+ /** TODO write docu :-/ */
+ COLGROUP_MOVING_STATIC,
/**
* Doesn't move and isn't explicitely checked for collisions with other
* objects (but other objects might check with this)
* coins
*/
COLGROUP_TOUCHABLE,
-
+
/**
* Should be used for tilemaps
*/
public:
MovingObject();
virtual ~MovingObject();
-
- /** this function is called when the object collided with any other object
+
+ /** this function is called when the object collided with something solid */
+ virtual void collision_solid(const CollisionHit& hit)
+ {
+ (void) hit;
+ }
+ /**
+ * when 2 objects collided, we will first call the pre_collision_check
+ * functions of both objects that can decide on how to react to the collision.
*/
- virtual HitResponse collision(GameObject& other,
- const CollisionHit& hit) = 0;
+ virtual bool collides(GameObject& other, const CollisionHit& hit)
+ {
+ (void) other;
+ (void) hit;
+ return true;
+ }
+ /** this function is called when the object collided with any other object */
+ virtual HitResponse collision(GameObject& other, const CollisionHit& hit) = 0;
/** called when tiles with special attributes have been touched */
virtual void collision_tile(uint32_t tile_attributes)
{
(void) tile_attributes;
}
-
+
const Vector& get_pos() const
{
return bbox.p1;
}
-
+
/** returns the bounding box of the Object */
const Rect& get_bbox() const
{
return bbox;
}
-
+
const Vector& get_movement() const
{
return movement;
}
-
+
/** places the moving object at a specific position. Be carefull when
* using this function. There are no collision detection checks performed
* here so bad things could happen.
*/
virtual void set_pos(const Vector& pos)
{
+ dest.move(pos-get_pos());
bbox.set_pos(pos);
}
- CollisionGroup get_group() const
+ /**
+ * sets the moving object's bbox to a specific width. Be careful when
+ * using this function. There are no collision detection checks performed
+ * here so bad things could happen.
+ */
+ virtual void set_width(float w)
{
- return group;
+ dest.set_width(w);
+ bbox.set_width(w);
}
- void set_group(CollisionGroup group)
+ /**
+ * sets the moving object's bbox to a specific size. Be careful when
+ * using this function. There are no collision detection checks performed
+ * here so bad things could happen.
+ */
+ virtual void set_size(float w, float h)
{
- this->group = group;
+ dest.set_size(w, h);
+ bbox.set_size(w, h);
}
-
+
+ CollisionGroup get_group() const
+ {
+ return group;
+ }
+
protected:
friend class Sector;
friend class CollisionGrid;
friend class Platform;
-
+
+ void set_group(CollisionGroup group)
+ {
+ this->group = group;
+ }
+
/** The bounding box of the object (as used for collision detection, this
* isn't necessarily the bounding box for graphics)
*/