From aba56d2fddbd48aceeb3114969034c87bc9b5c67 Mon Sep 17 00:00:00 2001 From: Deukhoofd Date: Tue, 26 May 2020 14:41:43 +0200 Subject: [PATCH] Make Attack secondary effect a unique_ptr. --- src/Battling/Flow/TurnHandler.cpp | 4 ++-- src/Battling/TurnChoices/AttackTurnChoice.hpp | 2 +- src/Library/Attacks/AttackData.hpp | 7 ++++--- 3 files changed, 7 insertions(+), 6 deletions(-) diff --git a/src/Battling/Flow/TurnHandler.cpp b/src/Battling/Flow/TurnHandler.cpp index c28d610..a796e39 100644 --- a/src/Battling/Flow/TurnHandler.cpp +++ b/src/Battling/Flow/TurnHandler.cpp @@ -150,7 +150,7 @@ void TurnHandler::HandleAttackForTarget(ExecutingAttack* attack, Creature* targe if (attackData->GetCategory() == Library::AttackCategory::Status) { if (attackData->HasSecondaryEffect()) { - auto effect = attackData->GetSecondaryEffect(); + auto& effect = attackData->GetSecondaryEffect(); bool hasSecondaryEffect; if (effect->GetChance() == -1) { hasSecondaryEffect = true; @@ -175,7 +175,7 @@ void TurnHandler::HandleAttackForTarget(ExecutingAttack* attack, Creature* targe bool preventSecondary = false; HOOK(PreventSecondaryEffects, targetSource, attack, target, hitIndex, &preventSecondary); if (!preventSecondary) { - auto effect = attackData->GetSecondaryEffect(); + auto& effect = attackData->GetSecondaryEffect(); bool hasSecondaryEffect; if (effect->GetChance() == -1) { hasSecondaryEffect = true; diff --git a/src/Battling/TurnChoices/AttackTurnChoice.hpp b/src/Battling/TurnChoices/AttackTurnChoice.hpp index e5d7248..251c45e 100644 --- a/src/Battling/TurnChoices/AttackTurnChoice.hpp +++ b/src/Battling/TurnChoices/AttackTurnChoice.hpp @@ -23,7 +23,7 @@ namespace CreatureLib::Battling { if (battle != nullptr) { if (_attack->GetAttack()->HasSecondaryEffect()) { auto library = battle->GetLibrary(); - auto effect = _attack->GetAttack()->GetSecondaryEffect(); + auto& effect = _attack->GetAttack()->GetSecondaryEffect(); _attackScript = library->LoadScript(ScriptCategory::Attack, effect->GetEffectName()); if (_attackScript != nullptr) { _attackScript->OnInitialize(effect->GetParameters()); diff --git a/src/Library/Attacks/AttackData.hpp b/src/Library/Attacks/AttackData.hpp index fb8c0a0..df3a89e 100644 --- a/src/Library/Attacks/AttackData.hpp +++ b/src/Library/Attacks/AttackData.hpp @@ -2,6 +2,7 @@ #define CREATURELIB_ATTACKDATA_HPP #include +#include #include #include #include "AttackCategory.hpp" @@ -21,14 +22,14 @@ namespace CreatureLib::Library { uint8_t _baseUsages; AttackTarget _target; int8_t _priority; - const SecondaryEffect* _effect = nullptr; + std::unique_ptr _effect = nullptr; std::unordered_set _flags; public: AttackData(const ConstString& name, uint8_t type, AttackCategory category, uint8_t power, uint8_t accuracy, uint8_t baseUsage, AttackTarget target, int8_t priority, const SecondaryEffect* effect, std::unordered_set flags); - virtual ~AttackData() { delete _effect; }; + virtual ~AttackData() = default; inline const ConstString& GetName() const noexcept { return _name; } inline const uint8_t GetType() const noexcept { return _type; } @@ -41,7 +42,7 @@ namespace CreatureLib::Library { inline bool HasSecondaryEffect() const noexcept { return _effect != nullptr && !_effect->GetEffectName().Empty(); } - inline const SecondaryEffect* GetSecondaryEffect() const noexcept { return _effect; } + inline const std::unique_ptr& GetSecondaryEffect() const noexcept { return _effect; } bool HasFlag(const ConstString& key) const noexcept; bool HasFlag(uint32_t keyHash) const noexcept;