Rewrite helper to read from asset files instead of using hard coded values

This commit is contained in:
Chomp 2021-08-14 09:44:45 +01:00
parent df0e01afaf
commit 0cad6b769f

View File

@ -1,81 +1,64 @@
using Generator.Models.Output; using Generator.Models.Output;
using Generator.Models.Output.Difficulty;
using Newtonsoft.Json;
using System.Collections.Generic;
using System.IO;
using System.Linq;
namespace Generator.Helpers namespace Generator.Helpers
{ {
public static class DifficultyHelper public static class DifficultyHelper
{ {
public static void AddAssaultDifficulties(Bot bot) private static readonly string[] _difficulties = new[] { "easy", "normal", "hard", "impossible" };
public static void AddDifficultySettings(Bot bot, List<string> difficultyFilePaths)
{ {
bot.difficulty.easy = new Models.Output.Difficulty.DifficultySettings // Read bot setting files from assets folder that match this bots type
// Save into dictionary with difficulty as key
var difficultySettingsJsons = new Dictionary<string, DifficultySettings>();
foreach (var path in difficultyFilePaths.Where(x=>x.Contains(bot.botType.ToString())))
{ {
Lay = EasyHelper.GenerateLay(), var json = File.ReadAllText(path);
Aiming = EasyHelper.GenerateAiming(), var serialisedObject = JsonConvert.DeserializeObject<DifficultySettings>(json);
Look = EasyHelper.GenerateLook(),
Shoot = EasyHelper.GenerateShoot(),
Move = EasyHelper.GenerateMove(),
Grenade = EasyHelper.GenerateGrenade(),
Change = EasyHelper.GenerateChange(),
Cover = EasyHelper.GenerateCover(),
Patrol = EasyHelper.GeneratePatrol(),
Hearing = EasyHelper.GenerateHearing(),
Mind = EasyHelper.GenerateMind(),
Boss = EasyHelper.GenerateBoss(),
Core = EasyHelper.GenerateCore(),
Scattering = EasyHelper.GenerateScattering()
};
bot.difficulty.normal = new Models.Output.Difficulty.DifficultySettings(){ var difficultyOfFile = GetFileDifficultyFromPath(path);
Lay = NormalHelper.GenerateLay(), difficultySettingsJsons.Add(difficultyOfFile, serialisedObject);
Aiming = NormalHelper.GenerateAiming(), }
Look = NormalHelper.GenerateLook(),
Shoot = NormalHelper.GenerateShoot(),
Move = NormalHelper.GenerateMove(),
Grenade = NormalHelper.GenerateGrenade(),
Change = NormalHelper.GenerateChange(),
Cover = NormalHelper.GenerateCover(),
Patrol = NormalHelper.GeneratePatrol(),
Hearing = NormalHelper.GenerateHearing(),
Mind = NormalHelper.GenerateMind(),
Boss = NormalHelper.GenerateBoss(),
Core = NormalHelper.GenerateCore(),
Scattering = NormalHelper.GenerateScattering()
};
bot.difficulty.hard = new Models.Output.Difficulty.DifficultySettings() // Find each difficulty in dictionary and save into bot
foreach (var difficulty in _difficulties)
{ {
Lay = HardHelper.GenerateLay(), var settings = difficultySettingsJsons.FirstOrDefault(x => x.Key.Contains(difficulty));
Aiming = HardHelper.GenerateAiming(),
Look = HardHelper.GenerateLook(), SaveSettingsIntoBotFile(bot, difficulty, settings.Value);
Shoot = HardHelper.GenerateShoot(), }
Move = HardHelper.GenerateMove(),
Grenade = HardHelper.GenerateGrenade(),
Change = HardHelper.GenerateChange(),
Cover = HardHelper.GenerateCover(),
Patrol = HardHelper.GeneratePatrol(),
Hearing = HardHelper.GenerateHearing(),
Mind = HardHelper.GenerateMind(),
Boss = HardHelper.GenerateBoss(),
Core = HardHelper.GenerateCore(),
Scattering = HardHelper.GenerateScattering()
};
bot.difficulty.impossible = new Models.Output.Difficulty.DifficultySettings()
{
Lay = ImpossibleHelper.GenerateLay(),
Aiming = ImpossibleHelper.GenerateAiming(),
Look = ImpossibleHelper.GenerateLook(),
Shoot = ImpossibleHelper.GenerateShoot(),
Move = ImpossibleHelper.GenerateMove(),
Grenade = ImpossibleHelper.GenerateGrenade(),
Change = ImpossibleHelper.GenerateChange(),
Cover = ImpossibleHelper.GenerateCover(),
Patrol = ImpossibleHelper.GeneratePatrol(),
Hearing = ImpossibleHelper.GenerateHearing(),
Mind = ImpossibleHelper.GenerateMind(),
Boss = ImpossibleHelper.GenerateBoss(),
Core = ImpossibleHelper.GenerateCore(),
Scattering = ImpossibleHelper.GenerateScattering()
};
} }
private static string GetFileDifficultyFromPath(string path)
{
// Split path into parts and find the last part (filename)
// Split filename and take the first part (difficulty, easy/normal etc)
var splitPath = path.Split("\\");
return splitPath.Last().Split("_").First();
}
private static void SaveSettingsIntoBotFile(Bot bot, string difficulty, DifficultySettings settings)
{
switch (difficulty)
{
case "easy":
bot.difficulty.easy = settings;
break;
case "normal":
bot.difficulty.normal = settings;
break;
case "hard":
bot.difficulty.hard = settings;
break;
case "impossible":
bot.difficulty.impossible = settings;
break;
}
}
} }
} }