mirror of
https://github.com/TrinityCore/TrinityCore.git
synced 2026-02-12 04:59:01 +01:00
Core/Movement: Simplify ConfusedMovementGenerator explicit template instantiations (do it once on class level instead of every function separately)
This commit is contained in:
@@ -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>;
|
||||
|
||||
Reference in New Issue
Block a user