From: unknown Date: Mon, 31 Jan 2011 18:13:49 +0000 (-0600) Subject: implemented axis aligned collision box check X-Git-Url: http://git.mmlx.us/?a=commitdiff_plain;h=7c20685c4c678ae5881623c298eae57b333f64b1;p=IvanGame.git implemented axis aligned collision box check --- diff --git a/Collision.cpp b/Collision.cpp index e2848c3..061b432 100644 --- a/Collision.cpp +++ b/Collision.cpp @@ -193,9 +193,21 @@ bool Collision::checkCollisions(const vector& c, const Point2D cPos, } bool CollisionRectangle::collision(const Collision *c, const Point2D cPos, const Point2D pos) const { - if(dynamic_cast(c)){ - //const CollisionRectangle* rec = dynamic_cast(c); - + if(const CollisionRectangle* rec = dynamic_cast(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(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(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 diff --git a/Level.cpp b/Level.cpp index d5ae3e5..b96217d 100644 --- 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"); }