| 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; |
| } |
| } |
| } |
| } |