private void sortOrganismsForDisease(IDictionary plantsToKill, IDictionary animalsToKill, IList deadAnimals)
{
// This is just to ensure that each strength is unique so we can use the sorted list
// We allow strengths to be from 0 - 9,999,000 and we never use numbers in the hundreds
// we add the uniquifier which is a number from 0 - 999 just to break ties
int uniquifier = 0;
foreach (string organismID in _organismIDList)
{
OrganismState organismState = _newWorldState.GetOrganismState(organismID);
if (organismState == null)
{
continue;
}
// Old animals get sick first
int strength;
if (organismState.IsAlive)
{
strength = (int) ((organismState.PercentLifespanRemaining)*1000)*1000 + uniquifier;
uniquifier++;
Debug.Assert(uniquifier < 1000);
}
else
{
strength = -1;
}
string speciesName = ((Species) organismState.Species).Name;
SortedList addList;
if (plantsToKill != null && organismState is PlantState)
{
if (plantsToKill.Contains(speciesName))
{
addList = (SortedList) plantsToKill[speciesName];
}
else
{
addList = new SortedList();
plantsToKill.Add(speciesName, addList);
}
if (strength == -1)
{
removeOrganism(new KilledOrganism(organismState));
}
else
{
Debug.Assert(strength > -1);
addList.Add(strength, organismState);
}
}
else if (animalsToKill != null && organismState is AnimalState)
{
if (strength == -1)
{
deadAnimals.Add(organismState);
}
else
{
if (!((AnimalSpecies) organismState.Species).IsCarnivore)
{
if (animalsToKill.Contains(speciesName))
{
addList = (SortedList) animalsToKill[speciesName];
}
else
{
addList = new SortedList();
animalsToKill.Add(speciesName, addList);
}
addList.Add(strength, organismState);
}
}
}
}
}