From 16b67b0d549b785dd83a0cd279e43a0ac44fb980 Mon Sep 17 00:00:00 2001 From: Deukhoofd Date: Tue, 26 May 2020 15:11:04 +0200 Subject: [PATCH] Make most of the battle library use unique_ptr. --- CInterface/Battling/BattleLibrary.cpp | 13 +++++++----- src/Battling/Flow/TurnHandler.cpp | 2 +- src/Battling/Library/BattleLibrary.cpp | 13 +++++------- src/Battling/Library/BattleLibrary.hpp | 20 ++++++++++--------- src/Battling/Models/Creature.cpp | 2 +- .../ScriptHandling/ScriptResolver.hpp | 2 +- 6 files changed, 27 insertions(+), 25 deletions(-) diff --git a/CInterface/Battling/BattleLibrary.cpp b/CInterface/Battling/BattleLibrary.cpp index 076d84c..db478ac 100644 --- a/CInterface/Battling/BattleLibrary.cpp +++ b/CInterface/Battling/BattleLibrary.cpp @@ -15,11 +15,14 @@ export void CreatureLib_BattleLibrary_Destruct(const BattleLibrary* p) { delete #define SIMPLE_GET_FUNC(type, name, returnType) \ export returnType CreatureLib_##type##_##name(const type* p) { return p->name(); } +#define SIMPLE_GET_FUNC_SMART_PTR(type, name, returnType) \ + export returnType CreatureLib_##type##_##name(const type* p) { return p->name().operator->(); } SIMPLE_GET_FUNC(BattleLibrary, GetStaticLib, const CreatureLib::Library::DataLibrary*); -SIMPLE_GET_FUNC(BattleLibrary, GetStatCalculator, const BattleStatCalculator*); -SIMPLE_GET_FUNC(BattleLibrary, GetDamageLibrary, const DamageLibrary*); -SIMPLE_GET_FUNC(BattleLibrary, GetMiscLibrary, const MiscLibrary*); -SIMPLE_GET_FUNC(BattleLibrary, GetExperienceLibrary, const ExperienceLibrary*); +SIMPLE_GET_FUNC_SMART_PTR(BattleLibrary, GetStatCalculator, const BattleStatCalculator*); +SIMPLE_GET_FUNC_SMART_PTR(BattleLibrary, GetDamageLibrary, const DamageLibrary*); +SIMPLE_GET_FUNC_SMART_PTR(BattleLibrary, GetMiscLibrary, const MiscLibrary*); +SIMPLE_GET_FUNC_SMART_PTR(BattleLibrary, GetExperienceLibrary, const ExperienceLibrary*); -#undef SIMPLE_GET_FUNC \ No newline at end of file +#undef SIMPLE_GET_FUNC +#undef SIMPLE_GET_FUNC_SMART_PTR \ No newline at end of file diff --git a/src/Battling/Flow/TurnHandler.cpp b/src/Battling/Flow/TurnHandler.cpp index a796e39..40172b8 100644 --- a/src/Battling/Flow/TurnHandler.cpp +++ b/src/Battling/Flow/TurnHandler.cpp @@ -129,7 +129,7 @@ void TurnHandler::HandleAttackForTarget(ExecutingAttack* attack, Creature* targe auto attackData = attack->GetAttack()->GetAttack(); auto library = user->GetBattle()->GetLibrary(); AssertNotNull(library) - auto dmgLibrary = library->GetDamageLibrary(); + auto& dmgLibrary = library->GetDamageLibrary(); auto hitIterator = attack->GetTargetIteratorBegin(target); for (uint8_t hitIndex = 0; hitIndex < numberOfHits; hitIndex++) { if (user->IsFainted()) { diff --git a/src/Battling/Library/BattleLibrary.cpp b/src/Battling/Library/BattleLibrary.cpp index cb02504..d3ee007 100644 --- a/src/Battling/Library/BattleLibrary.cpp +++ b/src/Battling/Library/BattleLibrary.cpp @@ -17,18 +17,15 @@ BattleLibrary::BattleLibrary(const CreatureLib::Library::DataLibrary* staticLib, BattleLibrary::~BattleLibrary() { delete _staticLib; - delete _statCalculator; - delete _damageLibrary; - delete _experienceLibrary; - delete _scriptResolver; - delete _miscLibrary; } const std::unique_ptr& BattleLibrary::GetSettings() const noexcept { return _staticLib->GetSettings(); } -const BattleStatCalculator* BattleLibrary::GetStatCalculator() const noexcept { return _statCalculator; } +const std::unique_ptr& BattleLibrary::GetStatCalculator() const noexcept { + return _statCalculator; +} const std::unique_ptr& BattleLibrary::GetSpeciesLibrary() const noexcept { return _staticLib->GetSpeciesLibrary(); @@ -46,9 +43,9 @@ const std::unique_ptr& BattleLibrary::G return _staticLib->GetTypeLibrary(); } -const DamageLibrary* BattleLibrary::GetDamageLibrary() const noexcept { return _damageLibrary; } +const std::unique_ptr& BattleLibrary::GetDamageLibrary() const noexcept { return _damageLibrary; } -const MiscLibrary* BattleLibrary::GetMiscLibrary() const noexcept { return _miscLibrary; } +const std::unique_ptr& BattleLibrary::GetMiscLibrary() const noexcept { return _miscLibrary; } Script* BattleLibrary::LoadScript(ScriptCategory category, const Arbutils::CaseInsensitiveConstString& scriptName) const { diff --git a/src/Battling/Library/BattleLibrary.hpp b/src/Battling/Library/BattleLibrary.hpp index d2c88a0..b9802eb 100644 --- a/src/Battling/Library/BattleLibrary.hpp +++ b/src/Battling/Library/BattleLibrary.hpp @@ -12,11 +12,11 @@ namespace CreatureLib::Battling { class BattleLibrary { protected: const Library::DataLibrary* _staticLib = nullptr; - BattleStatCalculator* _statCalculator = nullptr; - DamageLibrary* _damageLibrary = nullptr; - ExperienceLibrary* _experienceLibrary = nullptr; - ScriptResolver* _scriptResolver = nullptr; - MiscLibrary* _miscLibrary = nullptr; + std::unique_ptr _statCalculator = nullptr; + std::unique_ptr _damageLibrary = nullptr; + std::unique_ptr _experienceLibrary = nullptr; + std::unique_ptr _scriptResolver = nullptr; + std::unique_ptr _miscLibrary = nullptr; public: BattleLibrary(const Library::DataLibrary* staticLib, BattleStatCalculator* statCalculator, @@ -34,10 +34,12 @@ namespace CreatureLib::Battling { return _staticLib->GetGrowthRates(); } - [[nodiscard]] const BattleStatCalculator* GetStatCalculator() const noexcept; - [[nodiscard]] const DamageLibrary* GetDamageLibrary() const noexcept; - [[nodiscard]] const MiscLibrary* GetMiscLibrary() const noexcept; - [[nodiscard]] const ExperienceLibrary* GetExperienceLibrary() const noexcept { return _experienceLibrary; } + [[nodiscard]] const std::unique_ptr& GetStatCalculator() const noexcept; + [[nodiscard]] const std::unique_ptr& GetDamageLibrary() const noexcept; + [[nodiscard]] const std::unique_ptr& GetMiscLibrary() const noexcept; + [[nodiscard]] const std::unique_ptr& GetExperienceLibrary() const noexcept { + return _experienceLibrary; + } [[nodiscard]] Script* LoadScript(ScriptCategory category, const Arbutils::CaseInsensitiveConstString& scriptName) const; diff --git a/src/Battling/Models/Creature.cpp b/src/Battling/Models/Creature.cpp index 3f4ee2d..5d7b1c0 100644 --- a/src/Battling/Models/Creature.cpp +++ b/src/Battling/Models/Creature.cpp @@ -63,7 +63,7 @@ bool Battling::Creature::ChangeStatBoost(Library::Statistic stat, int8_t diffAmo } void Battling::Creature::RecalculateFlatStats() { - auto statCalc = this->_library->GetStatCalculator(); + auto& statCalc = this->_library->GetStatCalculator(); this->_flatStats = statCalc->CalculateFlatStats(this); RecalculateBoostedStats(); } diff --git a/src/Battling/ScriptHandling/ScriptResolver.hpp b/src/Battling/ScriptHandling/ScriptResolver.hpp index 6d32db2..dec4df7 100644 --- a/src/Battling/ScriptHandling/ScriptResolver.hpp +++ b/src/Battling/ScriptHandling/ScriptResolver.hpp @@ -14,7 +14,7 @@ namespace CreatureLib::Battling { virtual ~ScriptResolver() = default; virtual void Initialize(BattleLibrary* library){}; - virtual Script* LoadScript(ScriptCategory category, const ConstString& scriptName) { return nullptr; }; + virtual Script* LoadScript(ScriptCategory category, const ConstString& scriptName) const { return nullptr; }; }; }