Beyond_Beyaan.Screens.ShipDesignScreen.LoadTechnologies C# (CSharp) Метод

LoadTechnologies() приватный Метод

private LoadTechnologies ( ) : void
Результат void
        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));
        }