Support natures for Pokemon.
All checks were successful
continuous-integration/drone/push Build is passing

This commit is contained in:
2020-01-02 20:26:01 +01:00
parent 800147c339
commit 02ab4b3272
9 changed files with 65 additions and 12 deletions

View File

@@ -1,6 +1,6 @@
#include "CreatePokemon.hpp"
#include "../../Library/Statistic.hpp"
PkmnLib::Battling::CreatePokemon* PkmnLib::Battling::CreatePokemon::RandomizeIndividualValues(CreatureLib::Core::Random rand) {
PkmnLib::Battling::CreatePokemon* PkmnLib::Battling::CreatePokemon::WithRandomIndividualValues(CreatureLib::Core::Random rand) {
_ivHp = rand.Get(0, 32);
_ivAttack = rand.Get(0, 32);
_ivDefense = rand.Get(0, 32);
@@ -10,7 +10,7 @@ PkmnLib::Battling::CreatePokemon* PkmnLib::Battling::CreatePokemon::RandomizeInd
return this;
}
PkmnLib::Battling::CreatePokemon* PkmnLib::Battling::CreatePokemon::SetIndividualValue(CreatureLib::Core::Statistic stat, uint8_t value) {
PkmnLib::Battling::CreatePokemon* PkmnLib::Battling::CreatePokemon::WithIndividualValue(CreatureLib::Core::Statistic stat, uint8_t value) {
switch (stat) {
case PkmnLib::Library::Statistic::HealthPoints: _ivHp = value; break;
case PkmnLib::Library::Statistic::PhysicalAttack: _ivAttack = value; break;
@@ -22,7 +22,7 @@ PkmnLib::Battling::CreatePokemon* PkmnLib::Battling::CreatePokemon::SetIndividua
return this;
}
PkmnLib::Battling::CreatePokemon* PkmnLib::Battling::CreatePokemon::SetEffortValue(CreatureLib::Core::Statistic stat, uint8_t value) {
PkmnLib::Battling::CreatePokemon* PkmnLib::Battling::CreatePokemon::WithEffortValue(CreatureLib::Core::Statistic stat, uint8_t value) {
switch (stat) {
case PkmnLib::Library::Statistic::HealthPoints: _evHp = value; break;
case PkmnLib::Library::Statistic::PhysicalAttack: _evAttack = value; break;
@@ -66,6 +66,14 @@ PkmnLib::Battling::Pokemon* PkmnLib::Battling::CreatePokemon::Build() {
auto ivs = CreatureLib::Core::StatisticSet(_ivHp, _ivAttack, _ivDefense, _ivSpAtt, _ivSpDef, _ivSpeed);
auto evs = CreatureLib::Core::StatisticSet(_evHp, _evAttack, _evDefense, _evSpAtt, _evSpDef, _evSpeed);
if (_nature == 255){
_nature = _library->GetNatureLibrary()->GetRandomNature(rand);
}
return new Pokemon(_library, species, forme, _level, experience, identifier, gender, _coloring, heldItem, _nickname,
ability, attacks, ivs, evs);
ability, attacks, ivs, evs,_nature);
}
PkmnLib::Battling::CreatePokemon* PkmnLib::Battling::CreatePokemon::WithNature(const std::string& nature) {
_nature = _library->GetNatureLibrary()->GetNatureIdByName(nature);
return this;
}

View File

@@ -14,6 +14,7 @@ namespace PkmnLib::Battling {
std::string _nickname = "";
std::string _ability = "";
uint8_t _nature = 255;
CreatureLib::Library::Gender _gender = static_cast<CreatureLib::Library::Gender>(-1);
uint8_t _coloring = 0;
std::string _heldItem = "";
@@ -38,9 +39,10 @@ namespace PkmnLib::Battling {
CreatePokemon(const BattleLibrary* library, std::string species, uint8_t level)
: _library(library), _species(std::move(species)), _level(level) {}
CreatePokemon* RandomizeIndividualValues(CreatureLib::Core::Random rand = CreatureLib::Core::Random());
CreatePokemon* SetIndividualValue(CreatureLib::Core::Statistic stat, uint8_t value);
CreatePokemon* SetEffortValue(CreatureLib::Core::Statistic stat, uint8_t value);
CreatePokemon* WithRandomIndividualValues(CreatureLib::Core::Random rand = CreatureLib::Core::Random());
CreatePokemon* WithIndividualValue(CreatureLib::Core::Statistic stat, uint8_t value);
CreatePokemon* WithEffortValue(CreatureLib::Core::Statistic stat, uint8_t value);
CreatePokemon* WithNature(const std::string& nature);
Pokemon* Build();
};

View File

@@ -1 +1,7 @@
#include "Pokemon.hpp"
const PkmnLib::Library::Nature& PkmnLib::Battling::Pokemon::GetNature() {
if (_natureCache == nullptr){
_natureCache = this->GetLibrary()->GetNatureLibrary()->GetNaturePtr(_nature);
}
return *_natureCache;
}

View File

@@ -12,16 +12,23 @@ namespace PkmnLib::Battling {
CreatureLib::Core::StatisticSet<uint8_t> _individualValues;
CreatureLib::Core::StatisticSet<uint8_t> _effortValues;
uint8_t _nature;
const Library::Nature* _natureCache = nullptr;
const BattleLibrary* GetLibrary() { return reinterpret_cast<const BattleLibrary*>(_library); }
public:
Pokemon(const BattleLibrary* library, const Library::PokemonSpecies* species,
const Library::PokemonForme* forme, uint8_t level, uint32_t experience, uint32_t uid,
CreatureLib::Library::Gender gender, uint8_t coloring, const Library::Item* heldItem,
const std::string& nickname, int8_t talent, std::vector<CreatureLib::Battling::LearnedAttack*> moves,
CreatureLib::Core::StatisticSet<uint8_t> individualValues,
CreatureLib::Core::StatisticSet<uint8_t> effortValues)
CreatureLib::Core::StatisticSet<uint8_t> effortValues, uint8_t nature)
: CreatureLib::Battling::Creature(library, species, forme, level, experience, uid, gender, coloring,
heldItem, nickname, talent, std::move(moves)),
_individualValues(individualValues), _effortValues(effortValues) {}
_individualValues(individualValues), _effortValues(effortValues), _nature(nature) {}
const Library::Nature& GetNature();
};
}