Beyond_Beyaan.TechnologyManager.RollForDiscoveries C# (CSharp) Метод

RollForDiscoveries() публичный Метод

public RollForDiscoveries ( Random r, SitRepManager sitRepManager ) : List
r Random
sitRepManager SitRepManager
Результат List
        public List<TechField> RollForDiscoveries(Random r, SitRepManager sitRepManager)
        {
            List<TechField> fieldsNeedingNewItems = new List<TechField>();
            //Only items being currently researched have a chance of being discovered, otherwise they degrade (handled in AccureResearch function)
            if (ComputerPercentage > 0)
            {
                if (WhichComputerBeingResearched == null && UnresearchedComputerTechs.Count > 0 && ComputerResearchAmount > 0)
                {
                    fieldsNeedingNewItems.Add(TechField.COMPUTER);
                }
                else if (WhichComputerBeingResearched != null)
                {
                    //See if it is discovered this turn
                    int chance = GetChanceForDiscovery(TechField.COMPUTER);
                    if (chance > 0 && (r.Next(100) + 1) < chance) //Eureka!  We've discovered the tech!  +1 is to change from 0-99 to 1-100
                    {
                        sitRepManager.AddItem(new SitRepItem(Screen.Research, null, null, new Point(), WhichComputerBeingResearched.TechName + " has been discovered."));
                        ResearchedComputerTechs.Add(WhichComputerBeingResearched);
                        UnresearchedComputerTechs.Remove(WhichComputerBeingResearched);
                        ComputerResearchAmount = 0;
                        fieldsNeedingNewItems.Add(TechField.COMPUTER);
                    }
                }
            }

            if (ConstructionPercentage > 0)
            {
                if (WhichConstructionBeingResearched == null && UnresearchedConstructionTechs.Count > 0 && ConstructionResearchAmount > 0)
                {
                    fieldsNeedingNewItems.Add(TechField.CONSTRUCTION);
                }
                else if (WhichConstructionBeingResearched != null)
                {
                    //See if it is discovered this turn
                    int chance = GetChanceForDiscovery(TechField.CONSTRUCTION);
                    if (chance > 0 && (r.Next(100) + 1) < chance) //Eureka!  We've discovered the tech!  +1 is to change from 0-99 to 1-100
                    {
                        sitRepManager.AddItem(new SitRepItem(Screen.Research, null, null, new Point(), WhichConstructionBeingResearched.TechName + " has been discovered."));
                        ResearchedConstructionTechs.Add(WhichConstructionBeingResearched);
                        UnresearchedConstructionTechs.Remove(WhichConstructionBeingResearched);
                        ConstructionResearchAmount = 0;
                        fieldsNeedingNewItems.Add(TechField.CONSTRUCTION);
                    }
                }
            }

            if (ForceFieldPercentage > 0)
            {
                if (WhichForceFieldBeingResearched == null && UnresearchedForceFieldTechs.Count > 0 && ForceFieldResearchAmount > 0)
                {
                    fieldsNeedingNewItems.Add(TechField.FORCE_FIELD);
                }
                else if (WhichForceFieldBeingResearched != null)
                {
                    //See if it is discovered this turn
                    int chance = GetChanceForDiscovery(TechField.FORCE_FIELD);
                    if (chance > 0 && (r.Next(100) + 1) < chance) //Eureka!  We've discovered the tech!  +1 is to change from 0-99 to 1-100
                    {
                        sitRepManager.AddItem(new SitRepItem(Screen.Research, null, null, new Point(), WhichForceFieldBeingResearched.TechName + " has been discovered."));
                        ResearchedForceFieldTechs.Add(WhichForceFieldBeingResearched);
                        UnresearchedForceFieldTechs.Remove(WhichForceFieldBeingResearched);
                        ForceFieldResearchAmount = 0;
                        fieldsNeedingNewItems.Add(TechField.FORCE_FIELD);
                    }
                }
            }

            if (PlanetologyPercentage > 0)
            {
                if (WhichPlanetologyBeingResearched == null && UnresearchedPlanetologyTechs.Count > 0 && PlanetologyResearchAmount > 0)
                {
                    fieldsNeedingNewItems.Add(TechField.PLANETOLOGY);
                }
                else if (WhichPlanetologyBeingResearched != null)
                {
                    //See if it is discovered this turn
                    int chance = GetChanceForDiscovery(TechField.PLANETOLOGY);
                    if (chance > 0 && (r.Next(100) + 1) < chance) //Eureka!  We've discovered the tech!  +1 is to change from 0-99 to 1-100
                    {
                        sitRepManager.AddItem(new SitRepItem(Screen.Research, null, null, new Point(), WhichPlanetologyBeingResearched.TechName + " has been discovered."));
                        ResearchedPlanetologyTechs.Add(WhichPlanetologyBeingResearched);
                        UnresearchedPlanetologyTechs.Remove(WhichPlanetologyBeingResearched);
                        PlanetologyResearchAmount = 0;
                        fieldsNeedingNewItems.Add(TechField.PLANETOLOGY);
                    }
                }
            }

            if (PropulsionPercentage > 0)
            {
                if (WhichPropulsionBeingResearched == null && UnresearchedPropulsionTechs.Count > 0 && PropulsionResearchAmount > 0)
                {
                    fieldsNeedingNewItems.Add(TechField.PROPULSION);
                }
                else if (WhichPropulsionBeingResearched != null)
                {
                    //See if it is discovered this turn
                    int chance = GetChanceForDiscovery(TechField.PROPULSION);
                    if (chance > 0 && (r.Next(100) + 1) < chance) //Eureka!  We've discovered the tech!  +1 is to change from 0-99 to 1-100
                    {
                        sitRepManager.AddItem(new SitRepItem(Screen.Research, null, null, new Point(), WhichPropulsionBeingResearched.TechName + " has been discovered."));
                        ResearchedPropulsionTechs.Add(WhichPropulsionBeingResearched);
                        UnresearchedPropulsionTechs.Remove(WhichPropulsionBeingResearched);
                        PropulsionResearchAmount = 0;
                        fieldsNeedingNewItems.Add(TechField.PROPULSION);
                    }
                }
            }

            if (WeaponPercentage > 0)
            {
                if (WhichWeaponBeingResearched == null && UnresearchedWeaponTechs.Count > 0 && WeaponResearchAmount > 0)
                {
                    fieldsNeedingNewItems.Add(TechField.WEAPON);
                }
                else if (WhichWeaponBeingResearched != null)
                {
                    //See if it is discovered this turn
                    int chance = GetChanceForDiscovery(TechField.WEAPON);
                    if (chance > 0 && (r.Next(100) + 1) < chance) //Eureka!  We've discovered the tech!  +1 is to change from 0-99 to 1-100
                    {
                        sitRepManager.AddItem(new SitRepItem(Screen.Research, null, null, new Point(), WhichWeaponBeingResearched.TechName + " has been discovered."));
                        ResearchedWeaponTechs.Add(WhichWeaponBeingResearched);
                        UnresearchedWeaponTechs.Remove(WhichWeaponBeingResearched);
                        WeaponResearchAmount = 0;
                        fieldsNeedingNewItems.Add(TechField.WEAPON);
                    }
                }
            }

            UpdateValues();

            return fieldsNeedingNewItems;
        }