From fd337aaa4aae9d08169f14bab13c9c0d97109a4c Mon Sep 17 00:00:00 2001 From: Shauren Date: Sun, 4 Jan 2026 21:46:40 +0100 Subject: [PATCH] Core/Movement: Simplify ConfusedMovementGenerator explicit template instantiations (do it once on class level instead of every function separately) --- .../ConfusedMovementGenerator.cpp | 63 +++++++------------ 1 file changed, 22 insertions(+), 41 deletions(-) diff --git a/src/server/game/Movement/MovementGenerators/ConfusedMovementGenerator.cpp b/src/server/game/Movement/MovementGenerators/ConfusedMovementGenerator.cpp index 64fbb953619..5f48c5c66e6 100755 --- a/src/server/game/Movement/MovementGenerators/ConfusedMovementGenerator.cpp +++ b/src/server/game/Movement/MovementGenerators/ConfusedMovementGenerator.cpp @@ -42,10 +42,10 @@ MovementGeneratorType ConfusedMovementGenerator::GetMovementGeneratorType() c template void ConfusedMovementGenerator::DoInitialize(T* owner) { - MovementGenerator::RemoveFlag(MOVEMENTGENERATOR_FLAG_INITIALIZATION_PENDING | MOVEMENTGENERATOR_FLAG_TRANSITORY | MOVEMENTGENERATOR_FLAG_DEACTIVATED); - MovementGenerator::AddFlag(MOVEMENTGENERATOR_FLAG_INITIALIZED); + this->RemoveFlag(MOVEMENTGENERATOR_FLAG_INITIALIZATION_PENDING | MOVEMENTGENERATOR_FLAG_TRANSITORY | MOVEMENTGENERATOR_FLAG_DEACTIVATED); + this->AddFlag(MOVEMENTGENERATOR_FLAG_INITIALIZED); - if (!owner || !owner->IsAlive()) + if (!owner->IsAlive()) return; // TODO: UNIT_FIELD_FLAGS should not be handled by generators @@ -60,7 +60,7 @@ void ConfusedMovementGenerator::DoInitialize(T* owner) template void ConfusedMovementGenerator::DoReset(T* owner) { - MovementGenerator::RemoveFlag(MOVEMENTGENERATOR_FLAG_TRANSITORY | MOVEMENTGENERATOR_FLAG_DEACTIVATED); + this->RemoveFlag(MOVEMENTGENERATOR_FLAG_TRANSITORY | MOVEMENTGENERATOR_FLAG_DEACTIVATED); DoInitialize(owner); } @@ -68,24 +68,24 @@ void ConfusedMovementGenerator::DoReset(T* owner) template bool ConfusedMovementGenerator::DoUpdate(T* owner, uint32 diff) { - if (!owner || !owner->IsAlive()) + if (!owner->IsAlive()) return false; if (owner->HasUnitState(UNIT_STATE_NOT_MOVE) || owner->IsMovementPreventedByCasting()) { - MovementGenerator::AddFlag(MOVEMENTGENERATOR_FLAG_INTERRUPTED); + this->AddFlag(MOVEMENTGENERATOR_FLAG_INTERRUPTED); owner->StopMoving(); _path = nullptr; return true; } else - MovementGenerator::RemoveFlag(MOVEMENTGENERATOR_FLAG_INTERRUPTED); + this->RemoveFlag(MOVEMENTGENERATOR_FLAG_INTERRUPTED); // waiting for next move _timer.Update(diff); - if ((MovementGenerator::HasFlag(MOVEMENTGENERATOR_FLAG_SPEED_UPDATE_PENDING) && !owner->movespline->Finalized()) || (_timer.Passed() && owner->movespline->Finalized())) + if ((this->HasFlag(MOVEMENTGENERATOR_FLAG_SPEED_UPDATE_PENDING) && !owner->movespline->Finalized()) || (_timer.Passed() && owner->movespline->Finalized())) { - MovementGenerator::RemoveFlag(MOVEMENTGENERATOR_FLAG_TRANSITORY); + this->RemoveFlag(MOVEMENTGENERATOR_FLAG_TRANSITORY); Position destination(_reference); float distance = 4.0f * frand(0.0f, 1.0f) - 2.0f; @@ -130,48 +130,29 @@ bool ConfusedMovementGenerator::DoUpdate(T* owner, uint32 diff) template void ConfusedMovementGenerator::DoDeactivate(T* owner) { - MovementGenerator::AddFlag(MOVEMENTGENERATOR_FLAG_DEACTIVATED); + this->AddFlag(MOVEMENTGENERATOR_FLAG_DEACTIVATED); owner->ClearUnitState(UNIT_STATE_CONFUSED_MOVE); } template -void ConfusedMovementGenerator::DoFinalize(T*, bool, bool) { } - -template<> -void ConfusedMovementGenerator::DoFinalize(Player* owner, bool active, bool/* movementInform*/) +void ConfusedMovementGenerator::DoFinalize(T* owner, bool active, bool/* movementInform*/) { - AddFlag(MOVEMENTGENERATOR_FLAG_FINALIZED); - - if (active) - { - owner->RemoveUnitFlag(UNIT_FLAG_CONFUSED); - owner->StopMoving(); - } -} - -template<> -void ConfusedMovementGenerator::DoFinalize(Creature* owner, bool active, bool/* movementInform*/) -{ - AddFlag(MOVEMENTGENERATOR_FLAG_FINALIZED); + this->AddFlag(MOVEMENTGENERATOR_FLAG_FINALIZED); if (active) { owner->RemoveUnitFlag(UNIT_FLAG_CONFUSED); owner->ClearUnitState(UNIT_STATE_CONFUSED_MOVE); - if (owner->GetVictim()) - owner->SetTarget(owner->EnsureVictim()->GetGUID()); + + if constexpr (std::is_base_of_v) + { + if (Unit* victim = owner->GetVictim()) + owner->SetTarget(victim->GetGUID()); + } + else if constexpr (std::is_base_of_v) + owner->StopMoving(); } } -template ConfusedMovementGenerator::ConfusedMovementGenerator(); -template ConfusedMovementGenerator::ConfusedMovementGenerator(); -template MovementGeneratorType ConfusedMovementGenerator::GetMovementGeneratorType() const; -template MovementGeneratorType ConfusedMovementGenerator::GetMovementGeneratorType() const; -template void ConfusedMovementGenerator::DoInitialize(Player*); -template void ConfusedMovementGenerator::DoInitialize(Creature*); -template void ConfusedMovementGenerator::DoReset(Player*); -template void ConfusedMovementGenerator::DoReset(Creature*); -template bool ConfusedMovementGenerator::DoUpdate(Player*, uint32); -template bool ConfusedMovementGenerator::DoUpdate(Creature*, uint32); -template void ConfusedMovementGenerator::DoDeactivate(Player*); -template void ConfusedMovementGenerator::DoDeactivate(Creature*); +template class ConfusedMovementGenerator; +template class ConfusedMovementGenerator;