diff --git a/CInterface/Battling/Creature.cpp b/CInterface/Battling/Creature.cpp index 5699b1b..e735939 100644 --- a/CInterface/Battling/Creature.cpp +++ b/CInterface/Battling/Creature.cpp @@ -44,7 +44,7 @@ export void CreatureLib_Creature_SetHeldItemFromItem(Creature* p, const Creature } SIMPLE_GET_FUNC(Creature, GetCurrentHealth, uint32_t); SIMPLE_GET_FUNC_SMART_PTR(Creature, GetBattle, Battle*); -SIMPLE_GET_FUNC(Creature, GetBattleSide, BattleSide*); +SIMPLE_GET_FUNC_SMART_PTR(Creature, GetBattleSide, BattleSide*); SIMPLE_GET_FUNC(Creature, IsOnBattleField, bool); export const char* CreatureLib_Creature_GetNickname(Creature* p) { return p->GetNickname().c_str(); } export size_t CreatureLib_Creature_GetTypesCount(Creature* p) { return p->GetTypes().Count(); } diff --git a/CInterface/Battling/ExperienceLibrary.cpp b/CInterface/Battling/ExperienceLibrary.cpp index 2f5e912..b98ae9f 100644 --- a/CInterface/Battling/ExperienceLibrary.cpp +++ b/CInterface/Battling/ExperienceLibrary.cpp @@ -8,6 +8,7 @@ export void CreatureLib_ExperienceLibrary_Destruct(const ExperienceLibrary* p) { export uint8_t CreatureLib_ExperienceLibrary_HandleExperienceGain(const ExperienceLibrary* p, Creature* faintedMon, Creature* opponents[], size_t opponentsCount) { - Try(auto set = std::unordered_set(opponents, opponents + opponentsCount); - p->HandleExperienceGain(faintedMon, set);) + Try(auto set = std::unordered_set>(opponentsCount); + for (size_t i = 0; i < opponentsCount; + i++) { set.insert(opponents[i]); } p->HandleExperienceGain(faintedMon, set);) } diff --git a/src/Battling/Library/ExperienceLibrary.cpp b/src/Battling/Library/ExperienceLibrary.cpp index 0f5637a..93e6356 100644 --- a/src/Battling/Library/ExperienceLibrary.cpp +++ b/src/Battling/Library/ExperienceLibrary.cpp @@ -2,7 +2,8 @@ #include "../Models/Creature.hpp" void CreatureLib::Battling::ExperienceLibrary::HandleExperienceGain( - CreatureLib::Battling::Creature* faintedMon, const std::unordered_set& opponents) const { + CreatureLib::Battling::Creature* faintedMon, + const std::unordered_set>& opponents) const { for (auto opponent : opponents) { if (opponent == nullptr) continue; diff --git a/src/Battling/Library/ExperienceLibrary.hpp b/src/Battling/Library/ExperienceLibrary.hpp index c59880e..57294dd 100644 --- a/src/Battling/Library/ExperienceLibrary.hpp +++ b/src/Battling/Library/ExperienceLibrary.hpp @@ -1,5 +1,6 @@ #ifndef CREATURELIB_EXPERIENCELIBRARY_HPP #define CREATURELIB_EXPERIENCELIBRARY_HPP +#include #include namespace CreatureLib::Battling { @@ -9,7 +10,8 @@ namespace CreatureLib::Battling { public: virtual ~ExperienceLibrary() = default; - virtual void HandleExperienceGain(Creature* faintedMon, const std::unordered_set& opponents) const; + virtual void HandleExperienceGain(Creature* faintedMon, + const std::unordered_set>& opponents) const; }; } diff --git a/src/Battling/Models/Creature.cpp b/src/Battling/Models/Creature.cpp index 816b0fd..2d7e42c 100644 --- a/src/Battling/Models/Creature.cpp +++ b/src/Battling/Models/Creature.cpp @@ -6,7 +6,7 @@ using namespace CreatureLib; -Battling::Creature::Creature(const BattleLibrary* library, +Battling::Creature::Creature(ArbUt::BorrowedPtr library, const ArbUt::BorrowedPtr& species, const ArbUt::BorrowedPtr& variant, uint8_t level, uint32_t experience, uint32_t uid, Library::Gender gender, uint8_t coloring, @@ -87,7 +87,7 @@ void Battling::Creature::RecalculateBoostedStat(Library::Statistic stat) { const ArbUt::BorrowedPtr& Battling::Creature::GetBattle() const { return _battle; } -Battling::BattleSide* Battling::Creature::GetBattleSide() const { return _side; } +const ArbUt::BorrowedPtr& Battling::Creature::GetBattleSide() const { return _side; } bool Battling::Creature::IsFainted() const noexcept { return this->_currentHealth == 0; } diff --git a/src/Battling/Models/Creature.hpp b/src/Battling/Models/Creature.hpp index c639c6d..fd1bb50 100644 --- a/src/Battling/Models/Creature.hpp +++ b/src/Battling/Models/Creature.hpp @@ -21,7 +21,7 @@ namespace CreatureLib::Battling { class Creature : public ScriptSource { protected: - const BattleLibrary* _library; + ArbUt::BorrowedPtr _library; ArbUt::BorrowedPtr _species; ArbUt::BorrowedPtr _variant; @@ -42,7 +42,7 @@ namespace CreatureLib::Battling { Library::StatisticSet _boostedStats; ArbUt::BorrowedPtr _battle = nullptr; - BattleSide* _side = nullptr; + ArbUt::BorrowedPtr _side = nullptr; bool _onBattleField = false; std::string _nickname = ""; @@ -51,7 +51,7 @@ namespace CreatureLib::Battling { bool _hasOverridenTalent; ArbUt::CaseInsensitiveConstString _overridenTalentName = ""_cnc; - std::unordered_set _seenOpponents = {}; + std::unordered_set> _seenOpponents; ArbUt::UniquePtrList _attacks; bool _allowedExperienceGain; @@ -63,7 +63,8 @@ namespace CreatureLib::Battling { void OnFaint(); public: - Creature(const BattleLibrary* library, const ArbUt::BorrowedPtr& species, + Creature(ArbUt::BorrowedPtr library, + const ArbUt::BorrowedPtr& species, const ArbUt::BorrowedPtr& variant, uint8_t level, uint32_t experience, uint32_t uid, Library::Gender gender, uint8_t coloring, const ArbUt::BorrowedPtr heldItem, std::string nickname, @@ -100,7 +101,7 @@ namespace CreatureLib::Battling { void SetBattleData(ArbUt::BorrowedPtr battle, BattleSide* side); const ArbUt::BorrowedPtr& GetBattle() const; - BattleSide* GetBattleSide() const; + const ArbUt::BorrowedPtr& GetBattleSide() const; void SetOnBattleField(bool value) { _onBattleField = value; } bool IsOnBattleField() const { return _onBattleField; } @@ -118,8 +119,8 @@ namespace CreatureLib::Battling { void OverrideActiveTalent(const ArbUt::CaseInsensitiveConstString& talent); void AddExperience(uint32_t amount); - void MarkOpponentAsSeen(Creature* creature) { _seenOpponents.insert(creature); } - const std::unordered_set& GetSeenOpponents() const { return _seenOpponents; } + void MarkOpponentAsSeen(ArbUt::BorrowedPtr creature) { _seenOpponents.insert(creature); } + const std::unordered_set>& GetSeenOpponents() const { return _seenOpponents; } size_t ScriptCount() const override; void GetActiveScripts(ArbUt::List& scripts) override;