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); }
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 }); }