private void LoadTechnologies()
{
var techManager = _gameMain.EmpireManager.CurrentEmpire.TechnologyManager;
_availableArmorTechs = new List<Technology>();
_availableComputerTechs = new List<Technology>();
_availableECMTechs = new List<Technology>();
_availableEngineTechs = new List<Technology>();
_availableShieldTechs = new List<Technology>();
_availableSpecialTechs = new List<Technology>();
_availableWeaponTechs = new List<Technology>();
foreach (var construction in techManager.ResearchedConstructionTechs)
{
if (construction.Armor > 0)
{
_availableArmorTechs.Add(construction);
}
if (construction.Repair > 0 || construction.ReserveFuelTanks)
{
_availableSpecialTechs.Add(construction);
}
}
_availableArmorTechs.Sort((a, b) => a.Armor.CompareTo(b.Armor));
foreach (var computer in techManager.ResearchedComputerTechs)
{
if (computer.BattleComputer > 0)
{
_availableComputerTechs.Add(computer);
}
if (computer.ECM > 0)
{
_availableECMTechs.Add(computer);
}
if (computer.BattleScanner || computer.OracleInterface || computer.TechnologyNullifier)
{
_availableSpecialTechs.Add(computer);
}
}
_availableComputerTechs.Sort((a, b) => a.BattleComputer.CompareTo(b.BattleComputer));
_availableECMTechs.Sort((a, b) => a.ECM.CompareTo(b.ECM));
foreach (var propulsion in techManager.ResearchedPropulsionTechs)
{
if (propulsion.Speed > 0)
{
_availableEngineTechs.Add(propulsion);
}
if (propulsion.WarpDissipator || propulsion.InertialStabilizer || propulsion.InertialNullifier || propulsion.EnergyPulsar || propulsion.HighEnergyFocus || propulsion.SubspaceTeleporter || propulsion.IonicPulsar || propulsion.DisplacementDevice)
{
_availableSpecialTechs.Add(propulsion);
}
}
_availableEngineTechs.Sort((a, b) => a.Speed.CompareTo(b.Speed));
foreach (var forceField in techManager.ResearchedForceFieldTechs)
{
if (forceField.Shield > 0)
{
_availableShieldTechs.Add(forceField);
}
if (forceField.RepulsorBeam || forceField.CloakingDevice || forceField.MissileShield > 0 || forceField.StatisField || forceField.BlackHoleGenerator)
{
_availableSpecialTechs.Add(forceField);
}
}
_availableShieldTechs.Sort((a, b) => a.Shield.CompareTo(b.Shield));
//Weapons contains technologies from both Weapons and Planetology fields
foreach (var weapon in techManager.ResearchedWeaponTechs)
{
if (weapon.MaximumWeaponDamage > 0) //Ensure that it's not a special device, MaximumWeaponDamage is used in ALL weapons, while MinimumWeaponDamage is not (i.e. missiles)
{
_availableWeaponTechs.Add(weapon);
}
if (weapon.AntiMissileRockets || weapon.NeutronStreamProjector)
{
_availableSpecialTechs.Add(weapon);
}
}
foreach (var planetology in techManager.ResearchedPlanetologyTechs)
{
if (planetology.BioWeapon > 0)
{
_availableWeaponTechs.Add(planetology);
}
if (planetology.Colony > 0)
{
_availableSpecialTechs.Add(planetology);
}
}
_availableWeaponTechs.Sort((a, b) => a.TechLevel.CompareTo(b.TechLevel));
_availableSpecialTechs.Sort((a, b) => a.TechLevel.CompareTo(b.TechLevel));
}