public void UpdateRacer(int index, float deltaTime) { if (Racers[index].Finished > 0) { return; } Racers[index].Time += deltaTime; if (CheckptCount > 0) { if (Racers[index].CurRaceNode < 0) { Racers[index].CurRaceNode = FirstCheckpt; Racers[index].CheckptsPassed = 0; } else { int curNode = Racers[index].CurRaceNode; int nextNode = Checkpoints[curNode].next; if (nextNode >= 0 && VectorF.distance(Cars[index].position, Checkpoints[nextNode].pt) < VectorF.distance(Checkpoints[curNode].pt, Checkpoints[nextNode].pt)) { Racers[index].SwitchToNextNode(); if (Checkpoints[curNode].order == 0 && Racers[index].CheckptsPassed > 1) { } } } } }
public int TryHitNode(int x, int y, float threshold) { if (PathNodeCount == 0) { return(-1); } VectorF hit = VectorF.create(x, y); float minDist = 9999.0f; int nearestNode = -1; int i = 0; for (i = 0; i < MAX_PATH_NODES; i += 1) { if (Paths[i].pt == null) { continue; } float dist = VectorF.distance(hit, Paths[i].pt); if (dist <= threshold && dist < minDist) { minDist = dist; nearestNode = i; } } return(nearestNode); }
public bool RacerIsBehind(int racer1, int racer2) { if (!Racers[racer1].IsActive) { return(true); } if (!Racers[racer2].IsActive) { return(false); } if (Racers[racer2].Finished > 0 && Racers[racer1].Finished == 0) { return(true); } if (Racers[racer1].Finished > 0 && Racers[racer2].Finished == 0) { return(false); } if (Racers[racer1].Finished > 0 && Racers[racer2].Finished > 0) { return(Racers[racer1].Finished > Racers[racer2].Finished); } if (Racers[racer1].CheckptsPassed < Racers[racer2].CheckptsPassed) { return(true); } if (Racers[racer1].CheckptsPassed > Racers[racer2].CheckptsPassed) { return(false); } return(VectorF.distance(Cars[racer1].position, Checkpoints[Racers[racer1].CurRaceNode].pt) > VectorF.distance(Cars[racer2].position, Checkpoints[Racers[racer2].CurRaceNode].pt)); }
// Methods public bool TestShouldChooseNewTarget() { if (this.targetPos == null) { return(true); } int curNode = this.currentNode; if (curNode >= 0) { int prevNode = Paths[curNode].prev; int nextNode = Paths[curNode].next; if (nextNode >= 0 && (prevNode < 0 || VectorF.distance(Cars[this.vehicleIndex].position, Paths[prevNode].pt) > VectorF.distance(Paths[this.currentNode].pt, Paths[prevNode].pt)) && VectorF.distance(Cars[this.vehicleIndex].position, Paths[nextNode].pt) < VectorF.distance(Paths[this.currentNode].pt, Paths[nextNode].pt)) { return(true); } } return(VectorF.distance(Cars[this.vehicleIndex].position, this.targetPos) <= this.targetCheckRadius); }