PkmnLib/src/Battling/Pokemon/CreatePokemon.hpp

78 lines
3.2 KiB
C++
Raw Normal View History

#ifndef PKMNLIB_CREATEPOKEMON_HPP
#define PKMNLIB_CREATEPOKEMON_HPP
#include <utility>
2020-01-05 14:18:30 +00:00
#include "Pokemon.hpp"
namespace PkmnLib::Battling {
class CreatePokemon {
private:
ArbUt::BorrowedPtr<const BattleLibrary> _library;
2020-05-27 15:26:25 +00:00
ArbUt::CaseInsensitiveConstString _species = ""_cnc;
ArbUt::CaseInsensitiveConstString _forme = "default"_cnc;
uint8_t _level;
std::string _nickname = "";
2020-05-27 15:26:25 +00:00
ArbUt::CaseInsensitiveConstString _ability = ""_cnc;
ArbUt::CaseInsensitiveConstString _nature;
CreatureLib::Library::Gender _gender = static_cast<CreatureLib::Library::Gender>(-1);
2020-05-27 15:26:25 +00:00
ArbUt::CaseInsensitiveConstString _heldItem = ""_cnc;
uint32_t _identifier = 0;
struct ToLearnMethod {
2020-05-27 15:26:25 +00:00
ArbUt::BorrowedPtr<const Library::MoveData> Move;
CreatureLib::Battling::AttackLearnMethod LearnMethod;
ToLearnMethod() : Move(nullptr), LearnMethod(CreatureLib::Battling::AttackLearnMethod::Unknown){};
2020-05-27 15:26:25 +00:00
ToLearnMethod(ArbUt::BorrowedPtr<const Library::MoveData> move,
CreatureLib::Battling::AttackLearnMethod method)
2020-04-25 08:55:23 +00:00
: Move(move), LearnMethod(method){};
};
2020-05-27 15:26:25 +00:00
ArbUt::List<ToLearnMethod> _attacks;
2020-04-22 12:16:53 +00:00
uint8_t _currentMove = 0;
uint8_t _ivHp = 0;
uint8_t _ivAttack = 0;
uint8_t _ivDefense = 0;
uint8_t _ivSpAtt = 0;
uint8_t _ivSpDef = 0;
uint8_t _ivSpeed = 0;
uint8_t _evHp = 0;
uint8_t _evAttack = 0;
uint8_t _evDefense = 0;
uint8_t _evSpAtt = 0;
uint8_t _evSpDef = 0;
uint8_t _evSpeed = 0;
bool _shininessSet = false;
bool _isShiny = false;
2020-05-20 14:05:52 +00:00
bool _allowedExperienceGain = true;
public:
2020-05-27 15:26:25 +00:00
CreatePokemon(const BattleLibrary* library, const ArbUt::CaseInsensitiveConstString& species, uint8_t level)
2020-04-25 08:55:23 +00:00
: _library(library), _species(species), _level(level), _attacks(library->GetSettings()->GetMaximalMoves()) {
}
2020-05-27 15:26:25 +00:00
CreatePokemon WithForme(const ArbUt::CaseInsensitiveConstString& forme);
CreatePokemon WithGender(CreatureLib::Library::Gender gender);
CreatePokemon IsShiny(bool value);
2020-05-27 15:26:25 +00:00
CreatePokemon WithHeldItem(const ArbUt::CaseInsensitiveConstString& item);
CreatePokemon LearnMove(const ArbUt::CaseInsensitiveConstString& move,
2020-04-25 08:55:23 +00:00
CreatureLib::Battling::AttackLearnMethod method);
2020-05-27 15:26:25 +00:00
CreatePokemon WithRandomIndividualValues(ArbUt::Random rand = ArbUt::Random());
CreatePokemon WithIndividualValue(CreatureLib::Library::Statistic stat, uint8_t value);
CreatePokemon WithIndividualValues(uint8_t hp, uint8_t att, uint8_t def, uint8_t spAtt, uint8_t spDef,
2020-04-25 08:55:23 +00:00
uint8_t speed);
CreatePokemon WithEffortValue(CreatureLib::Library::Statistic stat, uint8_t value);
CreatePokemon WithEffortValues(uint8_t hp, uint8_t att, uint8_t def, uint8_t spAtt, uint8_t spDef,
2020-04-25 08:55:23 +00:00
uint8_t speed);
2020-01-05 14:18:30 +00:00
2020-05-27 15:26:25 +00:00
CreatePokemon WithNature(const ArbUt::CaseInsensitiveConstString& nature);
2020-05-20 14:05:52 +00:00
CreatePokemon IsAllowedExperienceGain(bool value);
Pokemon* Build();
};
}
#endif // PKMNLIB_CREATEPOKEMON_HPP