public PokemonDto GetById(int id, int idUser)
        {
            var pokemon = _pokemonRepository.GetById <Pokemons>(id);

            if (pokemon.Id_User != idUser)
            {
                throw new DomainException("This pokemon belongs to someone else!");
            }
            pokemon.Pokemon_Species = _pokemonSpeciesRepository.GetById(pokemon.Id_Pokemon_Species);

            if (pokemon.Id_Move_1 != null)
            {
                pokemon.Move1 = _moveRepository.GetById <Moves>(pokemon.Id_Move_1.Value);
            }
            if (pokemon.Id_Move_2 != null)
            {
                pokemon.Move2 = _moveRepository.GetById <Moves>(pokemon.Id_Move_2.Value);
            }
            if (pokemon.Id_Move_3 != null)
            {
                pokemon.Move3 = _moveRepository.GetById <Moves>(pokemon.Id_Move_3.Value);
            }
            if (pokemon.Id_Move_4 != null)
            {
                pokemon.Move4 = _moveRepository.GetById <Moves>(pokemon.Id_Move_4.Value);
            }

            pokemon.Nature = _natureRepository.GetById <Natures>(pokemon.Id_Nature);

            var pokemonDto = pokemon.ToDto();

            return(pokemonDto);
        }
Example #2
0
        public SimulationReturnDto GetMoveDamage(SimulationDto simulationDto)
        {
            //GET DATA
            var attackingPokemon = _pokemonRepository.GetById <Pokemons>(simulationDto.AttackingPokemonId);
            var defendingPokemon = _pokemonRepository.GetById <Pokemons>(simulationDto.DefendingPokemonId);
            var move             = _moveRepository.GetById <Moves>(simulationDto.MoveId);

            attackingPokemon.Pokemon_Species = _pokemonRepository.GetById <Pokemon_Species>(attackingPokemon.Id_Pokemon_Species);
            defendingPokemon.Pokemon_Species = _pokemonRepository.GetById <Pokemon_Species>(defendingPokemon.Id_Pokemon_Species);
            var listTypeAdvantage = _typeAdvantageRepository.GetByIdAttackingType(move.Id_Type);

            //GET TYPES ADVANTAGES
            var firstTypeAdvantage  = listTypeAdvantage.FirstOrDefault(x => x.DefendingType.Id == defendingPokemon.Pokemon_Species.First_Type_Id);
            var secondTypeAdvantage = listTypeAdvantage.FirstOrDefault(x => x.DefendingType.Id == defendingPokemon.Pokemon_Species.Second_Type_Id);

            //SET CALCULATOR
            var simulationCalc = new SimulationCalc(
                attackerLevel: attackingPokemon.Level,
                moveBasePower: move.Base_Power,
                attackingStat: move.Move_Category == MoveCategoryEnum.Physical ? attackingPokemon.Attack : attackingPokemon.Sp_Attack,
                defendingStat: move.Move_Category == MoveCategoryEnum.Physical ? defendingPokemon.Defense : defendingPokemon.Sp_Defense,
                modifier: simulationDto.Modifier);
            var hasStab = attackingPokemon.Pokemon_Species.First_Type_Id == move.Id_Type ||
                          attackingPokemon.Pokemon_Species.Second_Type_Id == move.Id_Type;

            var typeEffect = secondTypeAdvantage == null ? firstTypeAdvantage.Effect : firstTypeAdvantage.Effect * secondTypeAdvantage.Effect;

            simulationCalc.AddTypesDataToModifier(hasStab, typeEffect);

            var damage = simulationCalc.CalculateDamage();

            return(new SimulationReturnDto()
            {
                Damage = damage, EffectDecimal = typeEffect
            });
        }