diff --git a/.gitignore b/.gitignore index 27e4eed..baf251a 100644 --- a/.gitignore +++ b/.gitignore @@ -1,3 +1,4 @@ /cmake-build-debug/ /cmake-build-release/ +/build-release-windows/ /.idea/ \ No newline at end of file diff --git a/src/Battling/Flow/TurnHandler.cpp b/src/Battling/Flow/TurnHandler.cpp index 58e230e..d4fc6cd 100644 --- a/src/Battling/Flow/TurnHandler.cpp +++ b/src/Battling/Flow/TurnHandler.cpp @@ -138,9 +138,10 @@ void TurnHandler::HandleAttackForTarget(ExecutingAttack* attack, Creature* targe if (target->IsFainted()) { break; } - auto& hit = *(hitIterator++); - auto hitType = hit.GetType(); + auto& hit = hitIterator[hitIndex]; + uint8_t hitType = hit.GetType(); HOOK(ChangeAttackType, targetSource, attack, target, hitIndex, &hitType); + hit.SetType(hitType); auto effectiveness = library->GetTypeLibrary()->GetEffectiveness(hitType, target->GetTypes()); HOOK(ChangeEffectiveness, attack, attack, target, hitIndex, &effectiveness) hit.SetEffectiveness(effectiveness); diff --git a/src/Battling/Models/ExecutingAttack.hpp b/src/Battling/Models/ExecutingAttack.hpp index aef47e8..d26cdaa 100644 --- a/src/Battling/Models/ExecutingAttack.hpp +++ b/src/Battling/Models/ExecutingAttack.hpp @@ -38,7 +38,7 @@ namespace CreatureLib::Battling { private: ArbUt::List _targets; uint8_t _numberHits; - ArbUt::List _hits; + HitData* _hits; Creature* _user; LearnedAttack* _attack; Script* _script; @@ -46,15 +46,16 @@ namespace CreatureLib::Battling { public: ExecutingAttack(const ArbUt::List& targets, uint8_t numberHits, Creature* user, LearnedAttack* attack, Script* script) - : _targets(targets.Count()), _numberHits(numberHits), _hits(targets.Count() * numberHits), _user(user), - _attack(attack), _script(script) { + : _targets(targets.Count()), _numberHits(numberHits), _hits(new HitData[targets.Count() * numberHits]), + _user(user), _attack(attack), _script(script) { AssertNotNull(user) AssertNotNull(attack) for (auto target : targets) { _targets.Append(target); - _hits.Resize(numberHits); } } + ExecutingAttack(const ExecutingAttack&) = delete; + ExecutingAttack& operator=(const ExecutingAttack&) = delete; virtual ~ExecutingAttack() noexcept { delete _script; }; @@ -67,10 +68,11 @@ namespace CreatureLib::Battling { throw CreatureException("Invalid target requested."); } - std::vector::iterator GetTargetIteratorBegin(Creature* creature) { + HitData* GetTargetIteratorBegin(Creature* creature) { for (size_t i = 0; i < _targets.Count(); i++) { if (_targets[i] == creature) { - return _hits.begin() + (i * _numberHits); + auto v = _hits + (i * _numberHits * sizeof(HitData)); + return v; } } throw CreatureException("Invalid target requested.");