diff --git a/CInterface/Battling/Creature.cpp b/CInterface/Battling/Creature.cpp index e177b4b..137b44d 100644 --- a/CInterface/Battling/Creature.cpp +++ b/CInterface/Battling/Creature.cpp @@ -10,10 +10,11 @@ export uint8_t CreatureLib_Creature_Construct(Creature*& out, const BattleLibrar const char* nickname, bool secretTalent, uint8_t talent, LearnedAttack* attacks[], size_t attacksNum, bool allowedExperienceGain) { Try(auto attacksVec = std::vector(attacks, attacks + (attacksNum * sizeof(LearnedAttack*))); - out = new Creature(library, ArbUt::BorrowedPtr(species), variant, - level, experience, uid, gender, coloring, - ArbUt::BorrowedPtr(heldItem), std::string(nickname), - CreatureLib::Library::TalentIndex(secretTalent, talent), attacksVec, allowedExperienceGain);) + out = + new Creature(library, ArbUt::BorrowedPtr(species), variant, + level, experience, uid, gender, coloring, + ArbUt::OptionalBorrowedPtr(heldItem), std::string(nickname), + CreatureLib::Library::TalentIndex(secretTalent, talent), attacksVec, allowedExperienceGain);) }; export void CreatureLib_Creature_Destruct(const Creature* p) { delete p; } @@ -42,7 +43,7 @@ export bool CreatureLib_Creature_HasHeldItem(const Creature* p, const char* name return p->HasHeldItem(ArbUt::StringView(name)); } export bool CreatureLib_Creature_HasHeldItemWithHash(const Creature* p, uint32_t hash) { return p->HasHeldItem(hash); } -BORROWED_GET_FUNC(Creature, GetHeldItem, const CreatureLib::Library::Item*); +OPTIONAL_GET_FUNC(Creature, GetHeldItem, const CreatureLib::Library::Item*); export uint8_t CreatureLib_Creature_SetHeldItem(Creature* p, const char* name) { Try(p->SetHeldItem(ArbUt::StringView(name));) } diff --git a/src/Battling/Models/CreateCreature.cpp b/src/Battling/Models/CreateCreature.cpp index 2107cc7..0a9c3e9 100644 --- a/src/Battling/Models/CreateCreature.cpp +++ b/src/Battling/Models/CreateCreature.cpp @@ -46,7 +46,7 @@ Creature* CreateCreature::Create() { if (gender == static_cast(-1)) { gender = species->GetRandomGender(rand); } - ArbUt::BorrowedPtr heldItem; + ArbUt::OptionalBorrowedPtr heldItem; if (!this->_heldItem.IsEmpty()) { auto val = _library->GetItemLibrary()->TryGet(this->_heldItem.GetHash()); if (!val.has_value()) { diff --git a/src/Battling/Models/Creature.cpp b/src/Battling/Models/Creature.cpp index fab61a2..f0fd710 100644 --- a/src/Battling/Models/Creature.cpp +++ b/src/Battling/Models/Creature.cpp @@ -10,7 +10,7 @@ namespace CreatureLib::Battling { const ArbUt::BorrowedPtr& species, const ArbUt::BorrowedPtr& variant, level_int_t level, uint32_t experience, uint32_t uid, Library::Gender gender, uint8_t coloring, - const ArbUt::BorrowedPtr heldItem, const std::string& nickname, + const ArbUt::OptionalBorrowedPtr heldItem, const std::string& nickname, const Library::TalentIndex& talent, const std::vector& attacks, bool allowedExperienceGain) : _library(library), _species(species), _variant(variant), _level(level), _experience(experience), diff --git a/src/Battling/Models/Creature.hpp b/src/Battling/Models/Creature.hpp index 755b704..dbbd9d8 100644 --- a/src/Battling/Models/Creature.hpp +++ b/src/Battling/Models/Creature.hpp @@ -32,7 +32,7 @@ namespace CreatureLib::Battling { uint32_t _uniqueIdentifier; Library::Gender _gender; uint8_t _coloring; - ArbUt::BorrowedPtr _heldItem; + ArbUt::OptionalBorrowedPtr _heldItem; uint32_t _currentHealth = -1; Library::ClampedStatisticSet _statBoost; @@ -67,7 +67,7 @@ namespace CreatureLib::Battling { const ArbUt::BorrowedPtr& species, const ArbUt::BorrowedPtr& variant, level_int_t level, uint32_t experience, uint32_t uid, Library::Gender gender, uint8_t coloring, - const ArbUt::BorrowedPtr heldItem, const std::string& nickname, + const ArbUt::OptionalBorrowedPtr heldItem, const std::string& nickname, const Library::TalentIndex& talent, const std::vector& attacks, bool allowedExperienceGain = true); @@ -92,12 +92,12 @@ namespace CreatureLib::Battling { inline Library::Gender GetGender() const noexcept { return _gender; } inline uint8_t GetColoring() const noexcept { return _coloring; } inline bool HasHeldItem(const ArbUt::BasicStringView& name) const noexcept { - return _heldItem != nullptr && _heldItem->GetName() == name; + return _heldItem.HasValue() && _heldItem.GetValue()->GetName() == name; } inline bool HasHeldItem(uint32_t nameHash) const noexcept { - return _heldItem != nullptr && _heldItem->GetName() == nameHash; + return _heldItem.HasValue() && _heldItem.GetValue()->GetName() == nameHash; } - inline const ArbUt::BorrowedPtr& GetHeldItem() const noexcept { return _heldItem; } + inline const ArbUt::OptionalBorrowedPtr& GetHeldItem() const noexcept { return _heldItem; } void SetHeldItem(const ArbUt::BasicStringView& itemName); void SetHeldItem(uint32_t itemNameHash); inline void SetHeldItem(const ArbUt::BorrowedPtr& item) noexcept { _heldItem = item; };