public override void UpdateRacers(float deltaTimeS, List<Racer> racers)
 {
     int numRacer = racers.Count;
     deltaTimeS *= 1000.0f;
     for (int racerIndex1 = 0; racerIndex1 < numRacer; racerIndex1++)
     {
         Racer racerA = racers[racerIndex1];
         // Updates the racers that are alive
         if (racerA.IsAlive())
         {
             //Racer update takes milliseconds
             racerA.update(deltaTimeS);
             for (int racerIndex2 = 0; racerIndex2 < numRacer; racerIndex2++)
             {
                 
                 if (racerIndex1 != racerIndex2)
                 {
                     Racer racerB = racers[racerIndex2];
                     // Collides
                     if (racerA.IsCollidable() && racerB.IsCollidable() && racerA.CollidesWith(racerB))
                     {
                         OnRacerExplodes(racerA);
                         // Get rid of all the exploded racers
                         racers.RemoveAt(racerIndex1);
                         racerIndex1--;
                         numRacer--;
                         break;
                         //
                     }
                 }
                 
             }
         }
         else
         {
             racerA.Destroy();
             racers.RemoveAt(racerIndex1);
             racerIndex1--;
             numRacer--;
         }
     }
 }
        public override void UpdateRacers(float deltaTimeS, List<Racer> racers)
        {
            List<Racer> racersNeedingRemoved = new List<Racer>();
            racersNeedingRemoved.Clear();

            // Updates the racers that are alive
            int racerIndex = 0;
            for (racerIndex = 1; racerIndex <= 1000; racerIndex++)
            {
                if (racerIndex <= racers.Count)
                {
                    if (racers[racerIndex - 1].IsAlive())
                    {
                        //Racer update takes milliseconds
                        racers[racerIndex - 1].update(deltaTimeS * 1000.0f);
                    }
                }
            }
            // Collides
            for (int racerIndex1 = 0; racerIndex1 < racers.Count; racerIndex1++)
            {
                for (int racerIndex2 = 0; racerIndex2 < racers.Count; racerIndex2++)
                {
                    Racer racer1 = racers[racerIndex1];
                    Racer racer2 = racers[racerIndex2];
                    if (racerIndex1 != racerIndex2)
                    {
                        if (racer1.IsCollidable() && racer2.IsCollidable() && racer1.CollidesWith(racer2))
                        {
                            OnRacerExplodes(racer1);
                            racersNeedingRemoved.Add(racer1);
                            racersNeedingRemoved.Add(racer2);
                        }
                    }
                }
            }
            // Gets the racers that are still alive
            List<Racer> newRacerList = new List<Racer>();
            for (racerIndex = 0; racerIndex != racers.Count; racerIndex++)
            {
                // check if this racer must be removed
                if (racersNeedingRemoved.IndexOf(racers[racerIndex]) < 0)
                {
                    newRacerList.Add(racers[racerIndex]);
                }
            }
            // Get rid of all the exploded racers
            for (racerIndex = 0; racerIndex != racersNeedingRemoved.Count; racerIndex++)
            {
                int foundRacerIndex = racers.IndexOf(racersNeedingRemoved[racerIndex]);
                if (foundRacerIndex >= 0) // Check we've not removed this already!
                {
                    racersNeedingRemoved[racerIndex].Destroy();
                    racers.Remove(racersNeedingRemoved[racerIndex]);
                }
            }
            // Builds the list of remaining racers
            racers.Clear();
            for (racerIndex = 0; racerIndex < newRacerList.Count; racerIndex++)
            {
                racers.Add(newRacerList[racerIndex]);
            }

            for (racerIndex = 0; racerIndex < newRacerList.Count; racerIndex++)
            {
                newRacerList.RemoveAt(0);
            }
        }