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