Example #1
0
 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)
                 {
                 }
             }
         }
     }
 }
Example #2
0
        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);
        }
Example #3
0
 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));
 }
Example #4
0
        // 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);
        }