using Generator.Helpers; using Generator.Models; using Generator.Models.Input; using Generator.Models.Output; using System; using System.Collections.Generic; using System.Diagnostics; using System.Linq; namespace Generator { public class BaseBotGenerator { private readonly List _rawParsedBots; public BaseBotGenerator(List parsedBots) { _rawParsedBots = parsedBots; } public List AddBaseDetails() { var stopwatch = Stopwatch.StartNew(); LoggingHelpers.LogToConsole("Started processing bot base"); var assaultBot = new Bot(BotType.assault); var raiderBot = new Bot(BotType.pmcBot); var marksmanBot = new Bot(BotType.marksman); var rawBots = new List { assaultBot, raiderBot, marksmanBot }; foreach (var botToUpdate in rawBots) { var rawBotData = _rawParsedBots .Where(x => string.Equals(x.Info.Settings.Role, botToUpdate.botType.ToString(), StringComparison.OrdinalIgnoreCase)).ToList(); UpdateBodyPartHealth(botToUpdate, rawBotData); } foreach (var bot in rawBots) { AddDifficulties(bot, _rawParsedBots); foreach (var rawParsedBot in _rawParsedBots) { AddVisualAppearanceItems(bot, rawParsedBot); AddName(bot, rawParsedBot.Info.Nickname); } } stopwatch.Stop(); LoggingHelpers.LogToConsole($"Time taken to generate base bot files: {LoggingHelpers.LogTimeTaken(stopwatch.Elapsed.TotalSeconds)} seconds"); return rawBots; } private void AddDifficulties(Bot bot, List rawParsedBots) { var botType = bot.botType; var firstBotOfDesiredType = rawParsedBots.First(x => x.Info.Settings.Role == botType.ToString()); switch (botType) { case BotType.assault: DifficultyHelper.AddAssaultDifficulties(bot); break; case BotType.pmcBot: break; case BotType.marksman: break; default: break; } } private void UpdateBodyPartHealth(Bot botToUpdate, List rawParsedBots) { var firstBotOfDesiredType = rawParsedBots.First(x => x.Info.Settings.Role == botToUpdate.botType.ToString()); botToUpdate.health.BodyParts.Head.min = firstBotOfDesiredType.Health.BodyParts.Head.Health.Current; botToUpdate.health.BodyParts.Head.max = firstBotOfDesiredType.Health.BodyParts.Head.Health.Maximum; botToUpdate.health.BodyParts.Chest.min = firstBotOfDesiredType.Health.BodyParts.Chest.Health.Current; botToUpdate.health.BodyParts.Chest.max = firstBotOfDesiredType.Health.BodyParts.Chest.Health.Maximum; botToUpdate.health.BodyParts.Stomach.min = firstBotOfDesiredType.Health.BodyParts.Stomach.Health.Current; botToUpdate.health.BodyParts.Stomach.max = firstBotOfDesiredType.Health.BodyParts.Stomach.Health.Maximum; botToUpdate.health.BodyParts.LeftArm.min = firstBotOfDesiredType.Health.BodyParts.LeftArm.Health.Current; botToUpdate.health.BodyParts.LeftArm.max = firstBotOfDesiredType.Health.BodyParts.LeftArm.Health.Maximum; botToUpdate.health.BodyParts.RightArm.min = firstBotOfDesiredType.Health.BodyParts.RightArm.Health.Current; botToUpdate.health.BodyParts.RightArm.max = firstBotOfDesiredType.Health.BodyParts.RightArm.Health.Maximum; botToUpdate.health.BodyParts.LeftLeg.min = firstBotOfDesiredType.Health.BodyParts.LeftLeg.Health.Current; botToUpdate.health.BodyParts.LeftLeg.max = firstBotOfDesiredType.Health.BodyParts.LeftLeg.Health.Maximum; botToUpdate.health.BodyParts.RightLeg.min = firstBotOfDesiredType.Health.BodyParts.RightLeg.Health.Current; botToUpdate.health.BodyParts.RightLeg.max = firstBotOfDesiredType.Health.BodyParts.RightLeg.Health.Maximum; } private void AddVisualAppearanceItems(Bot finalAssaultBot, Datum bot) { finalAssaultBot.appearance.head.AddUnique(bot.Customization.Head); finalAssaultBot.appearance.body.AddUnique(bot.Customization.Body); finalAssaultBot.appearance.hands.AddUnique(bot.Customization.Hands); finalAssaultBot.appearance.feet.AddUnique(bot.Customization.Feet); finalAssaultBot.appearance.voice.AddUnique(bot.Info.Voice); } private void AddName(Bot finalAssaultBot, string nickName) { var name = nickName.Split(); finalAssaultBot.firstName.AddUnique(name[0]); if (name.Length > 1) { finalAssaultBot.lastName.AddUnique(name[1]); } } } }