36,7 → 36,7 |
} |
} |
|
void Bike::draw(QPainter *painter) |
void Bike::draw(QPainter *painter, QList<Bike *> bikes) |
{ |
if (show) |
{ |
63,7 → 63,7 |
|
if (!collided) |
{ |
collided = hasCollided(); |
collided = hasCollided(bikes); |
|
if (angle == 0) |
{ |
107,7 → 107,7 |
Bike *bike = bikes[i]; |
if (bike->isReady && bike->show) |
{ |
if (bike->dead || bike->collided) |
if (bike->dead || bike->collided) |
{ |
socket->write("DEAD "); |
socket->write(bike->name.toAscii()); |
172,7 → 172,7 |
return 0; |
} |
|
bool Bike::hasCollided() |
bool Bike::hasCollided(QList<Bike *> bikes) |
{ |
// Do collision detection here |
// use linePoints |
181,25 → 181,30 |
return true; |
if(linePoints[i].x() < 0 || linePoints[i].x() > 800 || linePoints[i].y() < 0 || linePoints[i].y() > 600) |
return true; |
for(int j = 0; j < linePoints.count() - 2; j++) |
int j; |
Bike *bike; |
foreach(bike,bikes) |
{ |
if(!(linePoints[j].x() == linePoints[j+1].x() && linePoints[i].x() == linePoints[i-1].x()) && !(linePoints[j].y() == linePoints[j+1].y() && linePoints[i].y() == linePoints[i-1].y())) |
for(j = 0; j < bike->linePoints.count() - 2; j++) |
{ |
// If not parallel |
if(linePoints[j].x() == linePoints[j+1].x()) |
if(!(bike->linePoints[j].x() == bike->linePoints[j+1].x() && linePoints[i].x() == linePoints[i-1].x()) && !(bike->linePoints[j].y() == bike->linePoints[j+1].y() && linePoints[i].y() == linePoints[i-1].y())) |
{ |
// x equal |
if(linePoints[i-1].x() > linePoints[j].x() && linePoints[i].x() < linePoints[j].x() || linePoints[i-1].x() < linePoints[j].x() && linePoints[i].x() > linePoints[j].x()){ |
if((sign(linePoints[i-1].y() - linePoints[j].y()) != sign(linePoints[i-1].y() - linePoints[j+1].y()))) |
return true; |
// If not parallel |
if(bike->linePoints[j].x() == bike->linePoints[j+1].x()) |
{ |
// x equal |
if(linePoints[i-1].x() > bike->linePoints[j].x() && linePoints[i].x() < bike->linePoints[j].x() || linePoints[i-1].x() < bike->linePoints[j].x() && linePoints[i].x() > bike->linePoints[j].x()){ |
if((sign(linePoints[i-1].y() - bike->linePoints[j].y()) != sign(linePoints[i-1].y() - bike->linePoints[j+1].y()))) |
return true; |
} |
} |
} |
else if(linePoints[j].y() == linePoints[j+1].y()) |
{ |
if(linePoints[i-1].y() > linePoints[j].y() && linePoints[i].y() < linePoints[j].y() || linePoints[i-1].y() < linePoints[j].y() && linePoints[i].y() > linePoints[j].y()) |
else if(bike->linePoints[j].y() == bike->linePoints[j+1].y()) |
{ |
if((sign(linePoints[i-1].x() - linePoints[j].x()) != sign(linePoints[i-1].x() - linePoints[j+1].x()))) |
return true; |
if(linePoints[i-1].y() > bike->linePoints[j].y() && linePoints[i].y() < bike->linePoints[j].y() || linePoints[i-1].y() < bike->linePoints[j].y() && linePoints[i].y() > bike->linePoints[j].y()) |
{ |
if((sign(linePoints[i-1].x() - bike->linePoints[j].x()) != sign(linePoints[i-1].x() - bike->linePoints[j+1].x()))) |
return true; |
} |
} |
} |
} |