From de6d39376f5fab5c89b509277dcd2c26570196dd Mon Sep 17 00:00:00 2001 From: Deukhoofd Date: Sat, 14 May 2022 16:07:32 +0200 Subject: [PATCH] Rework script handling to use smart pointers properly --- CInterface/Battling/ExecutingAttack.cpp | 12 +++-- CInterface/Battling/ScriptResolver.cpp | 2 +- CInterface/Battling/TurnChoices.cpp | 2 +- CInterface/Core.hpp | 2 +- src/Battling/Flow/TurnHandler.cpp | 5 +- src/Battling/Library/BattleLibrary.cpp | 7 +-- src/Battling/Library/BattleLibrary.hpp | 6 +-- src/Battling/Models/Battle.cpp | 4 +- src/Battling/Models/BattleSide.cpp | 2 +- src/Battling/Models/Creature.cpp | 50 ++++++++++--------- src/Battling/Models/Creature.hpp | 10 ++-- src/Battling/Models/ExecutingAttack.hpp | 9 ++-- src/Battling/ScriptHandling/ScriptMacros.hpp | 4 +- src/Battling/ScriptHandling/ScriptWrapper.hpp | 8 +-- src/Battling/TurnChoices/AttackTurnChoice.hpp | 13 ++--- .../ScriptTests/ScriptAggregatorTests.cpp | 20 ++++---- .../ScriptTests/ScriptSourceTest.cpp | 6 +-- 17 files changed, 85 insertions(+), 77 deletions(-) diff --git a/CInterface/Battling/ExecutingAttack.cpp b/CInterface/Battling/ExecutingAttack.cpp index 85cb585..682d813 100644 --- a/CInterface/Battling/ExecutingAttack.cpp +++ b/CInterface/Battling/ExecutingAttack.cpp @@ -7,10 +7,14 @@ export_func u8 CreatureLib_ExecutingAttack_Construct(ExecutingAttack*& out, Crea LearnedAttack* attack, CreatureLib::Library::AttackData* attackData, BattleScript* script) { - Try(auto ls = ArbUt::List>(targetCount); - for (size_t i = 0; i < targetCount; i++) { ls.Append(targets[i]); } auto s = - std::unique_ptr(script); - out = new ExecutingAttack(ls, numberHits, user, attack, attackData, s);) + Try({ + auto ls = ArbUt::List>(targetCount); + for (size_t i = 0; i < targetCount; i++) { + ls.Append(targets[i]); + } + auto s = ArbUt::OptionalUniquePtr(script); + out = new ExecutingAttack(ls, numberHits, user, attack, attackData, s); + }) } export_func void CreatureLib_ExecutingAttack_Destruct(ExecutingAttack* p) { delete p; } diff --git a/CInterface/Battling/ScriptResolver.cpp b/CInterface/Battling/ScriptResolver.cpp index 18e2cb3..63abc43 100644 --- a/CInterface/Battling/ScriptResolver.cpp +++ b/CInterface/Battling/ScriptResolver.cpp @@ -11,7 +11,7 @@ export_func u8 CreatureLib_ScriptResolver_Initialize(ScriptResolver* p, BattleLi }; export_func u8 CreatureLib_ScriptResolver_LoadScript(BattleScript*& out, ScriptResolver* p, void* owner, ScriptCategory category, const char* scriptName) { - Try(out = p->LoadScript(owner, category, ArbUt::StringView(scriptName));) + Try(out = p->LoadScript(owner, category, ArbUt::StringView(scriptName)).TakeOwnership();) }; export_func u8 CreatureLib_ScriptResolver_LoadItemScript(ItemUseScript*& out, ScriptResolver* p, diff --git a/CInterface/Battling/TurnChoices.cpp b/CInterface/Battling/TurnChoices.cpp index 982fc4d..9f65e19 100644 --- a/CInterface/Battling/TurnChoices.cpp +++ b/CInterface/Battling/TurnChoices.cpp @@ -39,7 +39,7 @@ SIMPLE_GET_FUNC(AttackTurnChoice, GetKind, TurnChoiceKind) export_func u8 CreatureLib_AttackTurnChoice_GetPriority(i8& out, AttackTurnChoice* p) { Try(out = p->GetPriority()); } -SMART_GET_FUNC(AttackTurnChoice, GetAttackScript, BattleScript*) +OPTIONAL_GET_FUNC(AttackTurnChoice, GetAttackScript, BattleScript*) export_func u8 CreatureLib_AttackTurnChoice_GetTargetSideIndex(const AttackTurnChoice* p) { return p->GetTarget().GetSideIndex(); } diff --git a/CInterface/Core.hpp b/CInterface/Core.hpp index cc1ef90..a72d5cf 100644 --- a/CInterface/Core.hpp +++ b/CInterface/Core.hpp @@ -51,7 +51,7 @@ public: #define BORROWED_GET_FUNC(type, name, returnType) \ export_func returnType CreatureLib_##type##_##name(const type* p) { return p->name().GetRaw(); } #define OPTIONAL_GET_FUNC(type, name, returnType) \ - export_func returnType CreatureLib_##type##_##name(const type* p) { \ + export_func returnType CreatureLib_##type##_##name(type* p) { \ if (p->name().HasValue()) \ return p->name().GetValue(); \ return nullptr; \ diff --git a/src/Battling/Flow/TurnHandler.cpp b/src/Battling/Flow/TurnHandler.cpp index 568923e..2919996 100644 --- a/src/Battling/Flow/TurnHandler.cpp +++ b/src/Battling/Flow/TurnHandler.cpp @@ -115,8 +115,9 @@ void TurnHandler::ExecuteAttackChoice(const ArbUt::BorrowedPtr return; } - auto attackScoped = ArbUt::ScopedPtr(new ExecutingAttack( - targets, numberHits, choice->GetUser(), choice->GetAttack(), attackData, choice->GetAttackScript())); + auto attackScoped = ArbUt::ScopedPtr( + new ExecutingAttack(targets, numberHits, choice->GetUser(), choice->GetAttack(), attackData, + choice->GetAttackScript().TakeOwnership())); bool prevented = false; HOOK(PreventAttack, attackScoped, attackScoped, &prevented); if (prevented) { diff --git a/src/Battling/Library/BattleLibrary.cpp b/src/Battling/Library/BattleLibrary.cpp index be46d5b..57ceb59 100644 --- a/src/Battling/Library/BattleLibrary.cpp +++ b/src/Battling/Library/BattleLibrary.cpp @@ -44,7 +44,8 @@ const std::unique_ptr& BattleLibrary::GetDamageLibrary() co const std::unique_ptr& BattleLibrary::GetMiscLibrary() const noexcept { return _miscLibrary; } -BattleScript* nullable BattleLibrary::LoadScript(const ArbUt::OptionalBorrowedPtr& owner, ScriptCategory category, - const ArbUt::StringView& scriptName) const { - return _scriptResolver->LoadScript(owner, category, scriptName); +ArbUt::OptionalUniquePtr BattleLibrary::LoadScript(const ArbUt::OptionalBorrowedPtr& owner, + ScriptCategory category, + const ArbUt::StringView& scriptName) const { + return _scriptResolver->LoadScript(owner, category, scriptName).TakeOwnership(); } \ No newline at end of file diff --git a/src/Battling/Library/BattleLibrary.hpp b/src/Battling/Library/BattleLibrary.hpp index 6f5369b..d7b3e6d 100644 --- a/src/Battling/Library/BattleLibrary.hpp +++ b/src/Battling/Library/BattleLibrary.hpp @@ -44,9 +44,9 @@ namespace CreatureLib::Battling { return _scriptResolver; } - [[nodiscard]] BattleScript* nullable LoadScript(const ArbUt::OptionalBorrowedPtr& owner, - ScriptCategory category, - const ArbUt::StringView& scriptName) const; + [[nodiscard]] ArbUt::OptionalUniquePtr LoadScript(const ArbUt::OptionalBorrowedPtr& owner, + ScriptCategory category, + const ArbUt::StringView& scriptName) const; }; } diff --git a/src/Battling/Models/Battle.cpp b/src/Battling/Models/Battle.cpp index 03480bd..fa5737b 100644 --- a/src/Battling/Models/Battle.cpp +++ b/src/Battling/Models/Battle.cpp @@ -167,11 +167,11 @@ BattleScript* Battle::AddVolatileScript(const ArbUt::StringView& key) { script.GetValue()->Stack(); return script.GetValue(); } - script = _library->LoadScript(this, ScriptCategory::Battle, key); + script = _library->LoadScript(this, ScriptCategory::Battle, key).TakeOwnership(); if (!script.HasValue()) { THROW("Invalid volatile script requested for battle: '", key.c_str(), "'."); } - return _volatile.Add(script.GetValue()); + return _volatile.Add(script); } BattleScript* Battle::AddVolatileScript(BattleScript* script) { return _volatile.Add(script); } void Battle::RemoveVolatileScript(BattleScript* script) { _volatile.Remove(script->GetName()); } diff --git a/src/Battling/Models/BattleSide.cpp b/src/Battling/Models/BattleSide.cpp index 280f7f7..c5fc37d 100644 --- a/src/Battling/Models/BattleSide.cpp +++ b/src/Battling/Models/BattleSide.cpp @@ -145,7 +145,7 @@ BattleScript* BattleSide::AddVolatileScript(const ArbUt::StringView& key) { script.GetValue()->Stack(); return script.GetValue(); } - script = _battle->GetLibrary()->LoadScript(this, ScriptCategory::Side, key); + script = _battle->GetLibrary()->LoadScript(this, ScriptCategory::Side, key).TakeOwnership(); if (!script.HasValue()) { THROW("Invalid volatile script requested for battleside: '", key.c_str(), "'."); } diff --git a/src/Battling/Models/Creature.cpp b/src/Battling/Models/Creature.cpp index 64d26fa..dda4849 100644 --- a/src/Battling/Models/Creature.cpp +++ b/src/Battling/Models/Creature.cpp @@ -21,15 +21,17 @@ namespace CreatureLib::Battling { _height(variant->GetHeight()), _nickname(std::move(nickname)), _talentIndex(talent), _hasOverridenTalent(false), _attacks(attacks), _allowedExperienceGain(allowedExperienceGain), _heldItem(heldItem) { - _activeTalent = std::unique_ptr( - _library->LoadScript(this, ScriptCategory::Talent, GetActiveTalent()->GetEffect())); - if (_activeTalent != nullptr) { - _activeTalent->OnInitialize(_library.GetRaw(), GetActiveTalent()->GetParameters()); + _activeTalent = + _library->LoadScript(this, ScriptCategory::Talent, GetActiveTalent()->GetEffect()).TakeOwnership(); + if (_activeTalent.HasValue()) { + _activeTalent.GetValue()->OnInitialize(_library.GetRaw(), GetActiveTalent()->GetParameters()); } if (_heldItem.HasValue() && _heldItem.GetValue()->GetBattleTriggerEffect().HasValue()) { - _heldItemTriggerScript = std::unique_ptr( - _library->LoadScript(this, ScriptCategory::ItemBattleTrigger, - _heldItem.GetValue()->GetBattleTriggerEffect().GetValue()->GetEffectName())); + _heldItemTriggerScript = + _library + ->LoadScript(this, ScriptCategory::ItemBattleTrigger, + _heldItem.GetValue()->GetBattleTriggerEffect().GetValue()->GetEffectName()) + .TakeOwnership(); } for (auto t : _variant->GetTypes()) { _types.push_back(t); @@ -82,10 +84,10 @@ namespace CreatureLib::Battling { _height = variant->GetHeight(); // Grab the new active talent. - _activeTalent = std::unique_ptr( - _library->LoadScript(this, ScriptCategory::Talent, GetActiveTalent()->GetEffect())); - if (_activeTalent != nullptr) { - _activeTalent->OnInitialize(_library.GetRaw(), GetActiveTalent()->GetParameters()); + _activeTalent = + _library->LoadScript(this, ScriptCategory::Talent, GetActiveTalent()->GetEffect()).TakeOwnership(); + if (_activeTalent.HasValue()) { + _activeTalent.GetValue()->OnInitialize(_library.GetRaw(), GetActiveTalent()->GetParameters()); } // We modify the health of the creature by the change in its max health. @@ -264,9 +266,9 @@ namespace CreatureLib::Battling { void Creature::OverrideActiveTalent(const ArbUt::StringView& talent) { _hasOverridenTalent = true; - if (_activeTalent != nullptr) { - _activeTalent->OnRemove(); - _activeTalent.reset(this->_library->LoadScript(this, ScriptCategory::Talent, talent)); + if (_activeTalent.HasValue()) { + _activeTalent.GetValue()->OnRemove(); + _activeTalent = this->_library->LoadScript(this, ScriptCategory::Talent, talent).TakeOwnership(); } _overridenTalent = _library->GetStaticLib()->GetTalentLibrary()->Get(talent); } @@ -395,7 +397,7 @@ namespace CreatureLib::Battling { script.GetValue()->Stack(); return script.GetValue(); } - script = this->_library->LoadScript(this, ScriptCategory::Creature, name); + script = this->_library->LoadScript(this, ScriptCategory::Creature, name).TakeOwnership(); if (!script.HasValue()) { THROW("Invalid volatile script requested for creature: '", name.c_str(), "'."); } @@ -463,13 +465,13 @@ namespace CreatureLib::Battling { c->_battleData.Side = _battleData.Side; c->_battleData.OnBattleField = _battleData.OnBattleField; c->_battleData.Index = _battleData.Index; - if (_activeTalent != nullptr) { - c->_activeTalent = std::unique_ptr(_activeTalent->Clone(c)); + if (_activeTalent.HasValue()) { + c->_activeTalent = _activeTalent.GetValue()->Clone(c); } c->_hasOverridenTalent = _hasOverridenTalent; c->_overridenTalent = _overridenTalent; - if (_status != nullptr) { - c->_status = std::unique_ptr(_status->Clone(c)); + if (_status.HasValue()) { + c->_status = _status.GetValue()->Clone(c); } _volatile.Clone(c, c->_volatile); c->_types = std::vector(_types); @@ -479,19 +481,19 @@ namespace CreatureLib::Battling { } void Creature::SetStatus(const ArbUt::StringView& name) { - if (_status != nullptr) { - _status->OnRemove(); + if (_status.HasValue()) { + _status.GetValue()->OnRemove(); } - _status = std::unique_ptr(_library->LoadScript(this, ScriptCategory::Status, name)); + _status = _library->LoadScript(this, ScriptCategory::Status, name).TakeOwnership(); if (_battleData.Battle.HasValue()) { _battleData.Battle.GetValue()->TriggerEventListener(this, name); } } void Creature::ClearStatus() { - if (_status == nullptr) { + if (!_status.HasValue()) { return; } - _status->OnRemove(); + _status.GetValue()->OnRemove(); _status = nullptr; if (_battleData.Battle.HasValue()) { _battleData.Battle.GetValue()->TriggerEventListener(this, ""_cnc); diff --git a/src/Battling/Models/Creature.hpp b/src/Battling/Models/Creature.hpp index 27bf98d..de9ea0a 100644 --- a/src/Battling/Models/Creature.hpp +++ b/src/Battling/Models/Creature.hpp @@ -53,7 +53,7 @@ namespace CreatureLib::Battling { std::optional _nickname = {}; CreatureLib::Library::TalentIndex _talentIndex = {}; - std::unique_ptr _activeTalent = {}; + ArbUt::OptionalUniquePtr _activeTalent = {}; bool _hasOverridenTalent = false; ArbUt::OptionalBorrowedPtr _overridenTalent = {}; @@ -61,13 +61,13 @@ namespace CreatureLib::Battling { ArbUt::OptionalUniquePtrList _attacks = {}; bool _allowedExperienceGain = {}; - std::unique_ptr _status = nullptr; + ArbUt::OptionalUniquePtr _status = nullptr; ScriptSet _volatile = {}; std::vector _types = {}; ArbUt::OptionalBorrowedPtr _heldItem; - std::unique_ptr _heldItemTriggerScript = nullptr; + ArbUt::OptionalUniquePtr _heldItemTriggerScript = nullptr; private: void OnFaint(DamageSource damageSource); @@ -212,9 +212,9 @@ namespace CreatureLib::Battling { void SetStatus(const ArbUt::StringView& name); void ClearStatus(); const ArbUt::StringView& GetStatusName() const noexcept { - if (_status == nullptr) + if (!_status.HasValue()) return ArbUt::StringView::EmptyString(); - return _status->GetName(); + return _status.GetValue()->GetName(); } // region Stat APIs diff --git a/src/Battling/Models/ExecutingAttack.hpp b/src/Battling/Models/ExecutingAttack.hpp index 77fda1e..f0f2b46 100644 --- a/src/Battling/Models/ExecutingAttack.hpp +++ b/src/Battling/Models/ExecutingAttack.hpp @@ -38,18 +38,17 @@ namespace CreatureLib::Battling { ArbUt::BorrowedPtr _user; ArbUt::BorrowedPtr _attack; ArbUt::BorrowedPtr _useAttack; - std::unique_ptr _script = nullptr; + ArbUt::OptionalUniquePtr _script = nullptr; ArbUt::List> _targets; public: ExecutingAttack(const ArbUt::List>& targets, u8 numberHits, ArbUt::BorrowedPtr user, const ArbUt::BorrowedPtr& attack, - const ArbUt::BorrowedPtr& useAttack, - const std::unique_ptr& script) + const ArbUt::BorrowedPtr& useAttack, BattleScript* nullable script) : _numberHits(numberHits), _hits(std::make_unique(targets.Count() * numberHits)), _user(user), _attack(attack), _useAttack(useAttack), _targets(targets) { // Take ownership of the script of the attack choice, and give attack choice our initial nullptr. - _script.swap(const_cast&>(script)); + _script = script; } ExecutingAttack(const ExecutingAttack&) = delete; ExecutingAttack& operator=(const ExecutingAttack&) = delete; @@ -103,7 +102,7 @@ namespace CreatureLib::Battling { inline const ArbUt::BorrowedPtr& GetUseAttack() noexcept { return _useAttack; } size_t ScriptCount() const override { return _user->ScriptCount() + 1; } - inline ArbUt::BorrowedPtr GetScript() const noexcept { return _script; } + inline ArbUt::BorrowedPtr GetScript() const noexcept { return _script.GetValue(); } void GetActiveScripts(ArbUt::List& scripts) override { GetOwnScripts(scripts); diff --git a/src/Battling/ScriptHandling/ScriptMacros.hpp b/src/Battling/ScriptHandling/ScriptMacros.hpp index e1420e6..92a77b6 100644 --- a/src/Battling/ScriptHandling/ScriptMacros.hpp +++ b/src/Battling/ScriptHandling/ScriptMacros.hpp @@ -32,10 +32,10 @@ scriptIterator->hookName(__VA_ARGS__); \ } \ } else { \ - if (scriptWrapper.GetScript()->get()->IsSuppressed()) { \ + if (scriptWrapper.GetScript()->GetValue()->IsSuppressed()) { \ continue; \ } \ - scriptWrapper.GetScript()->get()->hookName(__VA_ARGS__); \ + scriptWrapper.GetScript()->GetValue()->hookName(__VA_ARGS__); \ } \ } \ } catch (const ArbUt::Exception& e) { \ diff --git a/src/Battling/ScriptHandling/ScriptWrapper.hpp b/src/Battling/ScriptHandling/ScriptWrapper.hpp index e97056b..2efafb1 100644 --- a/src/Battling/ScriptHandling/ScriptWrapper.hpp +++ b/src/Battling/ScriptHandling/ScriptWrapper.hpp @@ -9,22 +9,22 @@ namespace CreatureLib::Battling { bool _isSet; union { - std::unique_ptr const* nullable _script; + ArbUt::OptionalUniquePtr const* nullable _script; const ScriptSet* nullable _scriptSet; }; - ScriptWrapper(std::unique_ptr* nullable s, bool isSet) : _isSet(isSet), _script(s){}; + ScriptWrapper(ArbUt::OptionalUniquePtr* nullable s, bool isSet) : _isSet(isSet), _script(s){}; ScriptWrapper(ScriptSet* nullable s, bool isSet) : _isSet(isSet), _scriptSet(s){}; public: - static inline ScriptWrapper FromScript(std::unique_ptr* nullable s) { + static inline ScriptWrapper FromScript(ArbUt::OptionalUniquePtr* nullable s) { return ScriptWrapper(s, false); } static inline ScriptWrapper FromSet(ScriptSet* nullable s) { return ScriptWrapper(s, true); } inline bool IsSet() const noexcept { return _isSet; } - inline const std::unique_ptr* nullable GetScript() const noexcept { return _script; } + inline const ArbUt::OptionalUniquePtr* nullable GetScript() const noexcept { return _script; } inline const ScriptSet* nullable GetScriptSet() const noexcept { return _scriptSet; } inline bool HasValue() const noexcept { diff --git a/src/Battling/TurnChoices/AttackTurnChoice.hpp b/src/Battling/TurnChoices/AttackTurnChoice.hpp index e394857..7b63445 100644 --- a/src/Battling/TurnChoices/AttackTurnChoice.hpp +++ b/src/Battling/TurnChoices/AttackTurnChoice.hpp @@ -12,7 +12,7 @@ namespace CreatureLib::Battling { class AttackTurnChoice : public BaseTurnChoice { ArbUt::BorrowedPtr _attack; CreatureIndex _target; - std::unique_ptr _attackScript = nullptr; + ArbUt::OptionalUniquePtr _attackScript = nullptr; i8 _priority = 0; bool _hasFailed = false; @@ -25,10 +25,11 @@ namespace CreatureLib::Battling { if (attack->HasSecondaryEffect()) { auto library = battle.GetValue()->GetLibrary(); auto& effect = attack->GetSecondaryEffect(); - _attackScript = std::unique_ptr( - library->LoadScript(this, ScriptCategory::Attack, effect->GetEffectName())); - if (_attackScript != nullptr) { - _attackScript->OnInitialize(battle.GetValue()->GetLibrary().GetRaw(), effect->GetParameters()); + _attackScript = + library->LoadScript(this, ScriptCategory::Attack, effect->GetEffectName()).TakeOwnership(); + if (_attackScript.HasValue()) { + _attackScript.GetValue()->OnInitialize(battle.GetValue()->GetLibrary().GetRaw(), + effect->GetParameters()); } } } @@ -64,7 +65,7 @@ namespace CreatureLib::Battling { const CreatureIndex& GetTarget() const noexcept { return _target; } - const std::unique_ptr& GetAttackScript() const noexcept { return _attackScript; } + ArbUt::OptionalUniquePtr& GetAttackScript() noexcept { return _attackScript; } size_t ScriptCount() const override { return 1 + GetUser()->ScriptCount(); } void GetActiveScripts(ArbUt::List& scripts) override { diff --git a/tests/BattleTests/ScriptTests/ScriptAggregatorTests.cpp b/tests/BattleTests/ScriptTests/ScriptAggregatorTests.cpp index bf72e23..5d292a3 100644 --- a/tests/BattleTests/ScriptTests/ScriptAggregatorTests.cpp +++ b/tests/BattleTests/ScriptTests/ScriptAggregatorTests.cpp @@ -24,7 +24,7 @@ TEST_CASE("Script Aggregator properly iterates containing script.") { auto script = std::make_unique("test"); auto ran = 0; auto vec = ArbUt::List{ - ScriptWrapper::FromScript(reinterpret_cast*>(&script))}; + ScriptWrapper::FromScript(reinterpret_cast*>(&script))}; auto aggr = ScriptAggregator(vec); ArbUt::BorrowedPtr next = (CreatureLib::Battling::BattleScript*)1; while (aggr.GetNext(next)) { @@ -39,9 +39,9 @@ TEST_CASE("Script Aggregator properly iterates multiple scripts.") { auto script3 = std::make_unique("test3"); auto ran = 0; auto vec = ArbUt::List{ - ScriptWrapper::FromScript(reinterpret_cast*>(&script)), - ScriptWrapper::FromScript(reinterpret_cast*>(&script2)), - ScriptWrapper::FromScript(reinterpret_cast*>(&script3))}; + ScriptWrapper::FromScript(reinterpret_cast*>(&script)), + ScriptWrapper::FromScript(reinterpret_cast*>(&script2)), + ScriptWrapper::FromScript(reinterpret_cast*>(&script3))}; auto aggr = ScriptAggregator(vec); ArbUt::BorrowedPtr next = (CreatureLib::Battling::BattleScript*)1; while (aggr.GetNext(next)) { @@ -98,7 +98,7 @@ TEST_CASE("Script Aggregator properly iterates data of Script Set and Script.") set.Add(script3); auto vec = ArbUt::List{ ScriptWrapper::FromSet(&set), - ScriptWrapper::FromScript(reinterpret_cast*>(&script))}; + ScriptWrapper::FromScript(reinterpret_cast*>(&script))}; auto aggr = ScriptAggregator(vec); ArbUt::BorrowedPtr next = (CreatureLib::Battling::BattleScript*)1; while (aggr.GetNext(next)) { @@ -115,9 +115,9 @@ TEST_CASE("Script Aggregator properly iterates data of Script and Script Set.") auto set = ScriptSet(); set.Add(script2); set.Add(script3); - auto vec = - ArbUt::List{ScriptWrapper::FromScript(reinterpret_cast*>(&script)), - ScriptWrapper::FromSet(&set)}; + auto vec = ArbUt::List{ + ScriptWrapper::FromScript(reinterpret_cast*>(&script)), + ScriptWrapper::FromSet(&set)}; auto aggr = ScriptAggregator(vec); ArbUt::BorrowedPtr next = (CreatureLib::Battling::BattleScript*)1; while (aggr.GetNext(next)) { @@ -136,9 +136,9 @@ TEST_CASE("Script Aggregator properly iterates data of Script, Script Set and Sc set.Add(script2); set.Add(script3); auto vec = ArbUt::List{ - ScriptWrapper::FromScript(reinterpret_cast*>(&script)), + ScriptWrapper::FromScript(reinterpret_cast*>(&script)), ScriptWrapper::FromSet(&set), - ScriptWrapper::FromScript(reinterpret_cast*>(&script4))}; + ScriptWrapper::FromScript(reinterpret_cast*>(&script4))}; auto aggr = ScriptAggregator(vec); ArbUt::BorrowedPtr next = (CreatureLib::Battling::BattleScript*)1; while (aggr.GetNext(next)) { diff --git a/tests/BattleTests/ScriptTests/ScriptSourceTest.cpp b/tests/BattleTests/ScriptTests/ScriptSourceTest.cpp index 47cdce5..c84a324 100644 --- a/tests/BattleTests/ScriptTests/ScriptSourceTest.cpp +++ b/tests/BattleTests/ScriptTests/ScriptSourceTest.cpp @@ -20,7 +20,7 @@ public: class ScriptSourceWithScriptPtr : public ScriptSource { public: - std::unique_ptr ScriptPtr = nullptr; + ArbUt::OptionalUniquePtr ScriptPtr = nullptr; protected: size_t ScriptCount() const override { return 1; } @@ -49,7 +49,7 @@ TEST_CASE("Script source with unset script ptr.") { TEST_CASE("Script source with script ptr being set.") { auto source = ScriptSourceWithScriptPtr(); - source.ScriptPtr = std::make_unique("foobar"); + source.ScriptPtr = new TestScript("foobar"); auto scripts = source.GetScriptIterator(); ArbUt::BorrowedPtr next = (CreatureLib::Battling::BattleScript*)1; REQUIRE(scripts.GetNext(next)); @@ -60,7 +60,7 @@ TEST_CASE("Script source with script ptr being set after first iteration.") { auto scripts = source.GetScriptIterator(); ArbUt::BorrowedPtr next = (CreatureLib::Battling::BattleScript*)1; REQUIRE_FALSE(scripts.GetNext(next)); - source.ScriptPtr = std::make_unique("foobar"); + source.ScriptPtr = new TestScript("foobar"); scripts = source.GetScriptIterator(); REQUIRE(scripts.GetNext(next)); }