Update to new Arbutils memory model.
Some checks failed
continuous-integration/drone/push Build is failing
Some checks failed
continuous-integration/drone/push Build is failing
This commit is contained in:
@@ -36,14 +36,15 @@ namespace PkmnLib::Battling {
|
||||
|
||||
Pokemon* CreatePokemon::Build() {
|
||||
auto rand = ArbUt::Random();
|
||||
ArbUt::BorrowedPtr<const Library::PokemonSpecies> species = nullptr;
|
||||
if (!this->_library->GetSpeciesLibrary()->TryGet(this->_species, species)) {
|
||||
|
||||
auto species = this->_library->GetSpeciesLibrary()->TryGet(this->_species);
|
||||
if (!species.has_value()) {
|
||||
std::stringstream err;
|
||||
err << "Invalid species '" << _species << "'.";
|
||||
throw ArbUt::Exception(err.str());
|
||||
}
|
||||
ArbUt::BorrowedPtr<const PkmnLib::Library::PokemonForme> forme;
|
||||
if (!species->TryGetForme(this->_forme, forme)) {
|
||||
auto forme = species.value()->TryGetForme(this->_forme);
|
||||
if (!forme.has_value()) {
|
||||
std::stringstream err;
|
||||
err << "Invalid forme '" << _forme << "' for species '" << _forme << "'.";
|
||||
throw ArbUt::Exception(err.str());
|
||||
@@ -51,9 +52,9 @@ namespace PkmnLib::Battling {
|
||||
AssertNotNull(forme);
|
||||
CreatureLib::Library::TalentIndex ability;
|
||||
if (this->_ability.IsEmpty()) {
|
||||
ability = forme->GetRandomTalent(rand);
|
||||
ability = forme.value()->GetRandomTalent(rand);
|
||||
} else {
|
||||
ability = forme->GetTalentIndex(this->_ability);
|
||||
ability = forme.value()->GetTalentIndex(this->_ability);
|
||||
}
|
||||
auto identifier = this->_identifier;
|
||||
if (identifier == 0) {
|
||||
@@ -61,16 +62,18 @@ namespace PkmnLib::Battling {
|
||||
}
|
||||
auto gender = this->_gender;
|
||||
if (gender == static_cast<CreatureLib::Library::Gender>(-1)) {
|
||||
gender = species->GetRandomGender(rand);
|
||||
gender = species.value()->GetRandomGender(rand);
|
||||
}
|
||||
ArbUt::BorrowedPtr<const Library::Item> heldItem = nullptr;
|
||||
ArbUt::OptionalBorrowedPtr<const Library::Item> heldItem = nullptr;
|
||||
if (!this->_heldItem.IsEmpty()) {
|
||||
if (!_library->GetItemLibrary()->TryGet(this->_heldItem, heldItem)) {
|
||||
auto item = _library->GetItemLibrary()->TryGet(this->_heldItem);
|
||||
if (!item.has_value()) {
|
||||
THROW("Unknown Item: " << this->_heldItem.std_str());
|
||||
}
|
||||
AssertNotNull(heldItem);
|
||||
heldItem = item.value();
|
||||
}
|
||||
auto experience = _library->GetGrowthRateLibrary()->CalculateExperience(species->GetGrowthRate(), _level);
|
||||
auto experience =
|
||||
_library->GetGrowthRateLibrary()->CalculateExperience(species.value()->GetGrowthRate(), _level);
|
||||
|
||||
auto attacks = std::vector<CreatureLib::Battling::LearnedAttack*>(_attacks.Count());
|
||||
for (size_t i = 0; i < _attacks.Count(); i++) {
|
||||
@@ -98,8 +101,8 @@ namespace PkmnLib::Battling {
|
||||
shiny = rand.Get(_library->GetSettings()->GetShinyRate()) == 0;
|
||||
}
|
||||
|
||||
auto pkmn = new Pokemon(_library, species, forme, _level, experience, identifier, gender, shiny, heldItem,
|
||||
_nickname, ability, attacks, ivs, evs, nature, _allowedExperienceGain);
|
||||
auto pkmn = new Pokemon(_library, species.value(), forme.value(), _level, experience, identifier, gender, shiny,
|
||||
heldItem, _nickname, ability, attacks, ivs, evs, nature, _allowedExperienceGain);
|
||||
pkmn->Initialize();
|
||||
return pkmn;
|
||||
}
|
||||
@@ -146,15 +149,15 @@ namespace PkmnLib::Battling {
|
||||
}
|
||||
CreatePokemon& CreatePokemon::LearnMove(const ArbUt::StringView& moveName,
|
||||
CreatureLib::Battling::AttackLearnMethod method) {
|
||||
ArbUt::BorrowedPtr<const PkmnLib::Library::MoveData> move = nullptr;
|
||||
if (!_library->GetMoveLibrary()->TryGet(moveName, move)) {
|
||||
auto v = _library->GetMoveLibrary()->TryGet(moveName);
|
||||
if (!v.has_value()) {
|
||||
THROW("Invalid Move given: " << moveName.std_str());
|
||||
}
|
||||
if (_currentMove >= _library->GetSettings()->GetMaximalAttacks()) {
|
||||
throw ArbUt::Exception("This pokemon already has the maximal allowed moves.");
|
||||
}
|
||||
Assert(move != nullptr);
|
||||
_attacks.Append(ToLearnMethod(move, method));
|
||||
Assert(v.value() != nullptr);
|
||||
_attacks.Append(ToLearnMethod(v.value(), method));
|
||||
return *this;
|
||||
}
|
||||
CreatePokemon& CreatePokemon::IsAllowedExperienceGain(bool value) {
|
||||
|
||||
Reference in New Issue
Block a user