private void AniadirPokemonAlEquipoEnemigo(PokemonEntrenador p) { if (p.id != PokemonID.NINGUNO) { EquipoPokemonEnemigos.Add(new PokemonLuchador(p.id, p.nivel, 1, new AtaqueID[] { p.ataque1, p.ataque2, p.ataque3, p.ataque4 })); } }
private void GenerarPokemonSalvaje(EventoIniciarCombatePokemonSalvaje pokemonSalvaje) { int posibilidadTotal = 0; ProbabilidadEncuentroPokemon[] pokemonOrdenadorPorProbabilidad = new ProbabilidadEncuentroPokemon[pokemonSalvaje.PokemonEnLaZona.pokemons.Count]; //Almacenamos el porcentaje de todos los pokémon for (int i = 0; i < pokemonSalvaje.PokemonEnLaZona.pokemons.Count; i++) { posibilidadTotal += pokemonSalvaje.PokemonEnLaZona.pokemons[i].posibilidadAparicion; } //Calculamos el porcentaje individual de cada pokémon en proporción al total for (int i = 0; i < pokemonSalvaje.PokemonEnLaZona.pokemons.Count; i++) { pokemonOrdenadorPorProbabilidad[i].probabilidad = ((pokemonSalvaje.PokemonEnLaZona.pokemons[i].posibilidadAparicion * 100) / posibilidadTotal); pokemonOrdenadorPorProbabilidad[i].pokemon = pokemonSalvaje.PokemonEnLaZona.pokemons[i]; } //Lo ordenamos por porcentaje de menos a más pokemonOrdenadorPorProbabilidad = pokemonOrdenadorPorProbabilidad.OrderBy(i => i.probabilidad).ToArray(); //Sumamos el porcentaje del pokémon anterior al actual para establecer el rango de aparición y que no se solapen float porcentajeYaAsignado = 0; for (int i = 0; i < pokemonOrdenadorPorProbabilidad.Length; i++) { pokemonOrdenadorPorProbabilidad[i].probabilidad += porcentajeYaAsignado; porcentajeYaAsignado = pokemonOrdenadorPorProbabilidad[i].probabilidad; } float random = UnityEngine.Random.Range(0f, 100f); int nivelPokemon = UnityEngine.Random.Range(pokemonSalvaje.PokemonEnLaZona.nivelMinimoPokemonSalvaje, pokemonSalvaje.PokemonEnLaZona.nivelMaximoPokemonSalvaje + 1); int calidadPokemon = UnityEngine.Random.Range(Ajustes.calidadMinimaPokemon, Ajustes.calidadMaximaPokemon + 1); for (int i = 0; i < pokemonOrdenadorPorProbabilidad.Length; i++) { if (random < pokemonOrdenadorPorProbabilidad[i].probabilidad || i == pokemonOrdenadorPorProbabilidad.Length - 1) //Si es el último pokémon y no se ha asgiando todavía el pokémon salvaje forzamos que se asigne el último { EquipoPokemonEnemigos.Add(new PokemonLuchador(pokemonOrdenadorPorProbabilidad[i].pokemon.id, nivelPokemon, calidadPokemon, new AtaqueID[] { pokemonOrdenadorPorProbabilidad[i].pokemon.ataque1, pokemonOrdenadorPorProbabilidad[i].pokemon.ataque2, pokemonOrdenadorPorProbabilidad[i].pokemon.ataque3, pokemonOrdenadorPorProbabilidad[i].pokemon.ataque4 })); break; } } }