Exemplo n.º 1
0
        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);
            }
        }