Core/Movement: Simplify ConfusedMovementGenerator explicit template instantiations (do it once on class level instead of every function separately)

This commit is contained in:
Shauren
2026-01-04 21:46:40 +01:00
parent 0b85b1b0bc
commit fd337aaa4a

View File

@@ -42,10 +42,10 @@ MovementGeneratorType ConfusedMovementGenerator<T>::GetMovementGeneratorType() c
template<class T>
void ConfusedMovementGenerator<T>::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<T>::DoInitialize(T* owner)
template<class T>
void ConfusedMovementGenerator<T>::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<T>::DoReset(T* owner)
template<class T>
bool ConfusedMovementGenerator<T>::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<T>::DoUpdate(T* owner, uint32 diff)
template<class T>
void ConfusedMovementGenerator<T>::DoDeactivate(T* owner)
{
MovementGenerator::AddFlag(MOVEMENTGENERATOR_FLAG_DEACTIVATED);
this->AddFlag(MOVEMENTGENERATOR_FLAG_DEACTIVATED);
owner->ClearUnitState(UNIT_STATE_CONFUSED_MOVE);
}
template<class T>
void ConfusedMovementGenerator<T>::DoFinalize(T*, bool, bool) { }
template<>
void ConfusedMovementGenerator<Player>::DoFinalize(Player* owner, bool active, bool/* movementInform*/)
void ConfusedMovementGenerator<T>::DoFinalize(T* owner, bool active, bool/* movementInform*/)
{
AddFlag(MOVEMENTGENERATOR_FLAG_FINALIZED);
if (active)
{
owner->RemoveUnitFlag(UNIT_FLAG_CONFUSED);
owner->StopMoving();
}
}
template<>
void ConfusedMovementGenerator<Creature>::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<Creature, T>)
{
if (Unit* victim = owner->GetVictim())
owner->SetTarget(victim->GetGUID());
}
else if constexpr (std::is_base_of_v<Player, T>)
owner->StopMoving();
}
}
template ConfusedMovementGenerator<Player>::ConfusedMovementGenerator();
template ConfusedMovementGenerator<Creature>::ConfusedMovementGenerator();
template MovementGeneratorType ConfusedMovementGenerator<Player>::GetMovementGeneratorType() const;
template MovementGeneratorType ConfusedMovementGenerator<Creature>::GetMovementGeneratorType() const;
template void ConfusedMovementGenerator<Player>::DoInitialize(Player*);
template void ConfusedMovementGenerator<Creature>::DoInitialize(Creature*);
template void ConfusedMovementGenerator<Player>::DoReset(Player*);
template void ConfusedMovementGenerator<Creature>::DoReset(Creature*);
template bool ConfusedMovementGenerator<Player>::DoUpdate(Player*, uint32);
template bool ConfusedMovementGenerator<Creature>::DoUpdate(Creature*, uint32);
template void ConfusedMovementGenerator<Player>::DoDeactivate(Player*);
template void ConfusedMovementGenerator<Creature>::DoDeactivate(Creature*);
template class ConfusedMovementGenerator<Player>;
template class ConfusedMovementGenerator<Creature>;