Beispiel #1
0
 /// <summary>
 /// Constructor.
 /// </summary>
 public DatabaseCommon()
 {
     EnemyAirDefense = new DatabaseCommonAirDefenseInfo[Toolbox.EnumCount <AmountN>()];
     EnemyAirDefenseDistanceFromObjectives      = new MinMaxD[Toolbox.EnumCount <AirDefenseRange>()];
     EnemyAirDefenseDistanceFromTakeOffLocation = new int[Toolbox.EnumCount <AirDefenseRange>()];
     AllyAirDefense = new DatabaseCommonAirDefenseInfo[Toolbox.EnumCount <AmountN>()];
     AllyAirDefenseDistanceFromObjectives      = new int[Toolbox.EnumCount <AirDefenseRange>()];
     AllyAirDefenseDistanceFromTakeOffLocation = new MinMaxD[Toolbox.EnumCount <AirDefenseRange>()];
     EnemyCAPRelativePower = new double[Toolbox.EnumCount <AmountN>()];
 }
        /// <summary>
        /// Loads common settings from <see cref="COMMON_SETTINGS_FILE"/>
        /// </summary>
        public void Load()
        {
            int i;

            DebugLog.Instance.WriteLine("Loading common global settings...", 1);
            using (INIFile ini = new INIFile($"{BRPaths.DATABASE}Common.ini"))
            {
                CommonOGG = ini.GetValueArray <string>("Include", "CommonOgg");
                foreach (string f in CommonOGG)
                {
                    if (!File.Exists($"{BRPaths.INCLUDE_OGG}{f}.ogg"))
                    {
                        DebugLog.Instance.WriteLine($"File \"Include\\Ogg\\{f}.ogg\" doesn't exist.", 1, DebugLogMessageErrorLevel.Warning);
                    }
                }

                CommonOGGForGameMode = new string[Toolbox.EnumCount <MissionType>()][];
                for (i = 0; i < CommonOGGForGameMode.Length; i++)
                {
                    CommonOGGForGameMode[i] = ini.GetValueArray <string>("Include", $"CommonOgg.{(MissionType)i}");
                    foreach (string f in CommonOGGForGameMode[i])
                    {
                        if (!File.Exists($"{BRPaths.INCLUDE_OGG}{f}.ogg"))
                        {
                            DebugLog.Instance.WriteLine($"File \"Include\\Ogg\\{f}.ogg\" doesn't exist.", 1, DebugLogMessageErrorLevel.Warning);
                        }
                    }
                }
            }

            DebugLog.Instance.WriteLine("Loading template defaults...", 1);
            using (INIFile ini = new INIFile($"{BRPaths.DATABASE}Defaults.ini"))
            {
                DefaultCoalitionBlue  = ini.GetValue <string>("TemplateDefaults", "Coalition.Blue");
                DefaultCoalitionRed   = ini.GetValue <string>("TemplateDefaults", "Coalition.Red");
                DefaultObjective      = ini.GetValue <string>("TemplateDefaults", "Objective");
                DefaultObjectiveCount = ini.GetValue <int>("TemplateDefaults", "ObjectiveCount");
                DefaultPlayerAircraft = ini.GetValue <string>("TemplateDefaults", "PlayerAircraft");
                DefaultTheater        = ini.GetValue <string>("TemplateDefaults", "Theater");
            }

            DebugLog.Instance.WriteLine("Loading common enemy air defense settings...", 1);
            using (INIFile ini = new INIFile($"{BRPaths.DATABASE}EnemyAirDefense.ini"))
            {
                EnemyCAPDistanceFromObjectives         = ini.GetValue <MinMaxD>("CombatAirPatrols", "DistanceFromObjectives");
                EnemyCAPMinDistanceFromTakeOffLocation = ini.GetValue <int>("CombatAirPatrols", "MinDistanceFromTakeOffLocation");

                for (i = 0; i < Toolbox.EnumCount <AmountN>(); i++)
                {
                    EnemyAirDefense[i] = new DatabaseCommonAirDefenseInfo(ini, (AmountN)i);

                    EnemyCAPRelativePower[i] = (i == 0) ? 0.0 :
                                               Toolbox.Clamp(ini.GetValue <int>("CombatAirPatrols", $"RelativePower.{(AmountN)i}"), 0, 100) / 100.0;
                }

                for (i = 0; i < Toolbox.EnumCount <AirDefenseRange>(); i++)
                {
                    EnemyAirDefenseDistanceFromTakeOffLocation[i] = ini.GetValue <int>("AirDefenseRange", $"{(AirDefenseRange)i}.MinDistanceFromTakeOffLocation");
                    EnemyAirDefenseDistanceFromObjectives[i]      = ini.GetValue <MinMaxD>("AirDefenseRange", $"{(AirDefenseRange)i}.DistanceFromObjectives");
                }
            }

            DebugLog.Instance.WriteLine("Loading common ally air defense settings...", 1);
            using (INIFile ini = new INIFile($"{BRPaths.DATABASE}AllyAirDefense.ini"))
            {
                for (i = 0; i < Toolbox.EnumCount <AmountN>(); i++)
                {
                    AllyAirDefense[i] = new DatabaseCommonAirDefenseInfo(ini, (AmountN)i);
                }

                for (i = 0; i < Toolbox.EnumCount <AirDefenseRange>(); i++)
                {
                    AllyAirDefenseDistanceFromTakeOffLocation[i] = ini.GetValue <MinMaxD>("AirDefenseRange", $"{(AirDefenseRange)i}.DistanceFromTakeOffLocation");
                    AllyAirDefenseDistanceFromObjectives[i]      = ini.GetValue <int>("AirDefenseRange", $"{(AirDefenseRange)i}.MinDistanceFromObjectives");
                }
            }

            DebugLog.Instance.WriteLine("Loading common names settings...", 1);
            using (INIFile ini = new INIFile($"{BRPaths.DATABASE}Names.ini"))
            {
                MissionNameTemplate = ini.GetValue <string>("Mission", "Template");
                for (i = 0; i < MISSION_NAMES_PART_COUNT; i++)
                {
                    MissionNameParts[i] = ini.GetValueArray <string>("Mission", $"Part{i + 1}");
                }

                for (i = 0; i < Toolbox.EnumCount <UnitFamily>(); i++)
                {
                    UnitBriefingNames[i] = ini.GetValueArray <string>("UnitBriefing", ((UnitFamily)i).ToString());
                    Array.Resize(ref UnitBriefingNames[i], 2);
                    UnitGroupNames[i] = ini.GetValue <string>("UnitGroup", ((UnitFamily)i).ToString());
                }

                WPNameFinal       = ini.GetValue <string>("Waypoints", "Final");
                WPNameInitial     = ini.GetValue <string>("Waypoints", "Initial");
                WPNameNavigation  = ini.GetValue <string>("Waypoints", "Navigation");
                WPNamesObjectives = ini.GetValueArray <string>("Waypoints", "Objectives");
            }

            DebugLog.Instance.WriteLine("Loading common objective settings...", 1);
            using (INIFile ini = new INIFile($"{BRPaths.DATABASE}Objectives.ini"))
            {
                for (i = 0; i < Toolbox.EnumCount <Amount>(); i++)
                {
                    DistanceBetweenObjectives[i]   = Math.Max(0, ini.GetValue <int>("DistanceToObjective", $"{(Amount)i}.DistanceBetweenObjectives"));
                    DistanceFromTakeOffLocation[i] = Math.Max(0, ini.GetValue <int>("DistanceToObjective", $"{(Amount)i}.DistanceFromTakeOffLocation"));
                }
            }
        }