private void RunTurn(int turn) { int[] agentOrder = null; if (_randomOrder) { agentOrder = RandomPermutation(this.NoAgents); } else { agentOrder = SortedPermutation(this.NoAgents); } // address situations when the agent list changes during the turn TurnBasedAgent[] agentsCopy = new TurnBasedAgent[this.NoAgents]; Agents.CopyTo(agentsCopy); for (int i = 0; i < agentsCopy.Length; i++) { int aoi = agentOrder[i]; if (agentsCopy[aoi] != null && Agents.Contains(agentsCopy[aoi])) // agent not stopped { if (agentsCopy[aoi].MustRunSetup) // first turn runs Setup { agentsCopy[aoi].Setup(); agentsCopy[aoi].MustRunSetup = false; } else { agentsCopy[aoi].InternalAct(); } } } Thread.Sleep(_delayAfterTurn); TurnFinished(turn); }