2D Collision

Archives Forums/Blitz3D SDK Programming/2D Collision

verfum(Posted 2008) [#1]
High there, I am using something similar to the SDK so I think I am in the right place, basically I've got a wrapped c++ version of Blitzmax and I'm having problems with basic collisions within a class, i.e. comparing itself with other objects created by using an iterator to scroll through a list, I've converted the rectsOverLap function. In Bmax the way you stop an object from comparing itself with itself is:
If obj:TObject <> Self Then
     Do collision


Here is my code at the moment which simply draws a rectangle for every player created and in the update() it's looking through the list do a rects overlap, but it's not working, I think it's the if(*iter ? ! this : false), but I'm not sure what to do?
using namespace std;


class CPlayer
{
public:
	CPlayer(double x, double y)
	{
		this->m_x = x;
		this->m_y = y;
		this->m_list.push_back(this);
	}
	virtual ~CPlayer(){}

	void draw()
	{
		ezSetColor(150, 150, 150);
		ezDrawRect(this->m_x, this->m_y, 32, 32);

		update();
	}

	double getX()
	{
		return this->m_x;
	}

	double getY()
	{
		return this->m_y;
	}

	void update()
	{
		list<CPlayer*>::iterator iter;

		for(iter = this->m_list.begin(); iter != this->m_list.end(); iter++)
		{
			double pos_x = (*iter)->getX();
			double pos_y = (*iter)->getY();
			
			if(*iter ? !this : false){
				if(this->rectsOverlap(this->m_x, this->m_y, 32, 32, pos_x, pos_y, 32, 32)){
					ezSetColor(255, 255, 255);
					ezDrawText("C", this->m_x+5, this->m_y+5);
				}
			}
		}
	}

	bool rectsOverlap(double x0, double y0, double w0, double h0, double x2, double y2, double w2, double h2)
	{
		if(x0 > (x2 + w2) || (x0 + w0) < x2) {return false;}
		if(y0 > (y2 + h2) || (y0 + h0) < y2) {return false;}
		return true;
	}

private:
	double m_x, m_y;
	list<CPlayer*> m_list;

};

//Write your game/application here
void ezRunApp()
{   

    ezGraphics(800,600,false);
    
    CPlayer player1(40, 40);
    CPlayer player2(30, 30);

    while(!ezKeyHit(27))    // Main Loop
    {
        ezCls();

	player1.draw();
	player2.draw();

        ezFlip();
    }
}


Thanks