Terrarium.Game.GameEngine.sortOrganismsForDisease C# (CSharp) Method

sortOrganismsForDisease() private method

Fills in the hashtables with sorted lists keyed on SpeciesName
private sortOrganismsForDisease ( IDictionary plantsToKill, IDictionary animalsToKill, IList deadAnimals ) : void
plantsToKill IDictionary
animalsToKill IDictionary
deadAnimals IList
return void
        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);
                        }
                    }
                }
            }
        }