implemented axis aligned collision box check
authorunknown <ivan@.ne.tamu.edu>
Mon, 31 Jan 2011 18:13:49 +0000 (12:13 -0600)
committerunknown <ivan@.ne.tamu.edu>
Mon, 31 Jan 2011 18:13:49 +0000 (12:13 -0600)
Collision.cpp
Level.cpp

index e2848c3..061b432 100644 (file)
@@ -193,9 +193,21 @@ bool Collision::checkCollisions(const vector<Collision*>& c, const Point2D cPos,
 }
 
 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!!!!!!
@@ -209,6 +221,7 @@ bool CollisionCircle::collision(const Collision *c, const Point2D cPos, const Po
                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
@@ -219,5 +232,6 @@ bool CollisionCircle::collision(const Collision *c, const Point2D cPos, const Po
 }
 
 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
index d5ae3e5..b96217d 100644 (file)
--- a/Level.cpp
+++ b/Level.cpp
@@ -114,6 +114,8 @@ void Level::update(){
 
        //check collision with sun sprite
        mSprites[0]->collisionWithSprite("sun");
+       //check collision with sun sprite
+       mSprites[0]->collisionWithSprite("viking2");
 }