Example #1
0
        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);
        }