private static Character Generate(CharacterGenerationDto characterGenerationDto) { try { var magusCharacterGeneratorTypes = Assembly.Load("MagusCharacterGenerator").GetTypes(); var races = magusCharacterGeneratorTypes .Where(type => !type.IsInterface && !type.IsAbstract && typeof(IRace).IsAssignableFrom(type)) .Select(raceType => (IRace)Activator.CreateInstance(raceType)); var selectedRace = races.First(race => race.ToString().ToLower() == characterGenerationDto.Race); var castes = magusCharacterGeneratorTypes .Where(type => !type.IsAbstract && typeof(ICaste).IsAssignableFrom(type)) .Select(casteType => (ICaste)Activator.CreateInstance(casteType, (byte)1)); var selectedCaste = castes.First(caste => caste.ToString().ToLower() == characterGenerationDto.Caste); var primaryCatse = (ICaste)Activator.CreateInstance(selectedCaste.GetType(), Convert.ToByte(characterGenerationDto.Level)); Character character; if (!String.IsNullOrEmpty(characterGenerationDto.SecondaryCaste)) { var secondarySelectedCaste = castes.First(caste => caste.ToString().ToLower() == characterGenerationDto.SecondaryCaste); var secondaryCaste = (ICaste)Activator.CreateInstance(secondarySelectedCaste.GetType(), Convert.ToByte(characterGenerationDto.SecondaryLevel)); character = (Character)Activator.CreateInstance(typeof(Character), characterGenerationDto.Name, selectedRace, primaryCatse, secondaryCaste); } else { character = (Character)Activator.CreateInstance(typeof(Character), characterGenerationDto.Name, selectedRace, primaryCatse); } character.CalculateChanges(); return(character); } catch { return(Generate(characterGenerationDto)); } }
public CharacterGenerationDto Parse(string[] args) { try { var result = new CharacterGenerationDto(); int i = 0; while (i < args.Length) { switch (args[i].ToLower()) { case "-n": case "--name": result.Name = args[++i].ToLower(); break; case "-c": case "--caste": result.Caste = args[++i].ToLower(); break; case "-l": case "--level": result.Level = args[++i].ToLower(); break; case "-sc": case "--secondary-caste": result.SecondaryCaste = args[++i].ToLower(); break; case "-sl": case "--secondary-level": result.SecondaryLevel = args[++i].ToLower(); break; case "-r": case "--race": result.Race = args[++i].ToLower(); break; } i++; } return(result); } catch (Exception) { CliHelp.Show(); return(null); } }