}
bool CollisionRectangle::collision(const Collision *c, const Point2D cPos, const Point2D pos) const {
- if(dynamic_cast<const CollisionRectangle*>(c)){
- //const CollisionRectangle* rec = dynamic_cast<const CollisionRectangle*>(c);
-
+ if(const CollisionRectangle* rec = dynamic_cast<const CollisionRectangle*>(c)){
+ ///check rect vs rect really just axis aligned box check (simpler)
+ float r1Left = -width/2 + mPos.x + pos.x;
+ float r1Right = width/2 + mPos.x + pos.x;
+ float r1Top = -height/2 + mPos.y + pos.y;
+ float r1Bottom = height/2 + mPos.y + pos.y;
+
+ float r2Left = -rec->width/2 + rec->mPos.x + cPos.x;
+ float r2Right = rec->width/2 + rec->mPos.x + cPos.x;
+ float r2Top = -rec->height/2 + rec->mPos.y + cPos.y;
+ float r2Bottom = rec->height/2 + rec->mPos.y + cPos.y;
+
+ bool outsideX = r1Right < r2Left || r1Left > r2Right;
+ bool outsideY = r1Bottom < r2Top || r1Top > r2Bottom;
+ return !(outsideY || outsideX);
}
else if(dynamic_cast<const CollisionCircle*>(c)){
c->collision(this, cPos, pos);/// \todo this flips a shit!!!!!!
collision(r, cPos, pos);///call the circle rect fn
}
else if(const CollisionCircle* col = dynamic_cast<const CollisionCircle*>(c)){
+ ///check circle vs circle
if(((col->mPos + cPos) - (mPos + pos)).length() <= (col->radius + radius))
return true;
else
}
bool CollisionCircle::collision(const CollisionRectangle* c, const Point2D cPos, const Point2D pos) const {
+ ///check rect vs circle \todo implement
return false;
}
\ No newline at end of file