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;
}