private BRSkillLevel GetSkillLevel(AmountN amount, CampaignDifficultyVariation variation, int missionIndex, int missionsCount) { if (amount == AmountN.Random) { return(BRSkillLevel.Random); } double campaignProgress = missionIndex / (double)(Math.Max(2, missionsCount) - 1.0); BRSkillLevel baseSkillLevel = BRSkillLevel.Regular; switch (amount) { case AmountN.VeryLow: baseSkillLevel = BRSkillLevel.Rookie; break; case AmountN.Low: baseSkillLevel = Toolbox.RandomFrom(BRSkillLevel.Rookie, BRSkillLevel.Regular); break; case AmountN.Average: baseSkillLevel = Toolbox.RandomFrom(BRSkillLevel.Rookie, BRSkillLevel.Regular, BRSkillLevel.Veteran); break; case AmountN.High: baseSkillLevel = Toolbox.RandomFrom(BRSkillLevel.Veteran, BRSkillLevel.Ace); break; case AmountN.VeryHigh: baseSkillLevel = BRSkillLevel.Ace; break; } if (variation == CampaignDifficultyVariation.Steady) { return(baseSkillLevel); } double amountOffset = 0; switch (variation) { case CampaignDifficultyVariation.ConsiderablyEasier: amountOffset = -2.25; break; case CampaignDifficultyVariation.MuchEasier: amountOffset = -1.5; break; case CampaignDifficultyVariation.SomewhatEasier: amountOffset = -1.0; break; case CampaignDifficultyVariation.SomewhatHarder: amountOffset = 1.0; break; case CampaignDifficultyVariation.MuchHarder: amountOffset = 1.5; break; case CampaignDifficultyVariation.ConsiderablyHarder: amountOffset = 2.25; break; } double skillDouble = (double)baseSkillLevel + amountOffset * campaignProgress; return((BRSkillLevel)Toolbox.Clamp((int)skillDouble, (int)BRSkillLevel.Regular, (int)BRSkillLevel.Ace)); }
/// <summary> /// Converts a BriefingRoom skill level to a DCS World skill level. /// </summary> /// <param name="skillLevel">A BriefingRoom skill level</param> /// <returns>A DCS World skill level.</returns> public static DCSSkillLevel BRSkillLevelToDCSSkillLevel(BRSkillLevel skillLevel) { switch (skillLevel) { //case BRSkillLevel.Random default: return(RandomFrom(DCSSkillLevel.Average, DCSSkillLevel.Good, DCSSkillLevel.High, DCSSkillLevel.Excellent)); case BRSkillLevel.Rookie: return(DCSSkillLevel.Average); case BRSkillLevel.Regular: return(DCSSkillLevel.Good); case BRSkillLevel.Veteran: return(DCSSkillLevel.High); case BRSkillLevel.Ace: return(DCSSkillLevel.Excellent); } }
/// <summary> /// Constructor. /// </summary> /// <param name="unitMaker">Unit maker class to use to generate units</param> public MissionGeneratorAirDefense(UnitMaker unitMaker, bool _ally, MissionTemplate template, DCSMission mission) { UnitMaker = unitMaker; ally = _ally; if (ally) { airDefense = template.SituationFriendlyAirDefense.Get(); centerPoint = mission.InitialPosition; opposingPoint = mission.ObjectivesCenter; distsFromCenter = Database.Instance.Common.AllyAirDefenseDistanceFromTakeOffLocation; minDistFromOpposingPoint = Database.Instance.Common.AllyAirDefenseDistanceFromObjectives; skillLevel = template.SituationFriendlyAISkillLevel; optionsShowEnemyUnits = 0; return; } airDefense = template.SituationEnemyAirDefense.Get(); centerPoint = mission.ObjectivesCenter; opposingPoint = mission.InitialPosition; distsFromCenter = Database.Instance.Common.EnemyAirDefenseDistanceFromObjectives; minDistFromOpposingPoint = Database.Instance.Common.EnemyAirDefenseDistanceFromTakeOffLocation; skillLevel = template.SituationEnemySkillLevelGround; optionsShowEnemyUnits = template.Realism.Contains(RealismOption.HideEnemyUnits) ? DCSMissionUnitGroupFlags.Hidden : 0; }