mirror of
https://github.com/mangosfour/server.git
synced 2025-12-15 10:37:02 +00:00
[9207] Fixed chase/follow functions calls in movegen templates system.
This commit specially made indeepndent from other changes for show problem in my prev. commit where 2 new movegens added. For proper call Initilize/Finilize/Reset/Interrupt/Update functions _important_ set second template arg in MovementGeneratorMedium< T, D > in _last_ class in class chain. In other case in chase/follow instead TargetedMovementGeneratorMedium In other cases will called referenced functions from TargetedMovementGeneratorMedium instead proper subclasses.
This commit is contained in:
parent
98adbbc3d3
commit
7d6b1b292e
3 changed files with 38 additions and 31 deletions
|
|
@ -28,8 +28,8 @@
|
||||||
#include <cmath>
|
#include <cmath>
|
||||||
|
|
||||||
//-----------------------------------------------//
|
//-----------------------------------------------//
|
||||||
template<class T>
|
template<class T, typename D>
|
||||||
void TargetedMovementGeneratorMedium<T>::_setTargetLocation(T &owner)
|
void TargetedMovementGeneratorMedium<T,D>::_setTargetLocation(T &owner)
|
||||||
{
|
{
|
||||||
if (!i_target.isValid() || !i_target->IsInWorld())
|
if (!i_target.isValid() || !i_target->IsInWorld())
|
||||||
return;
|
return;
|
||||||
|
|
@ -77,26 +77,33 @@ void TargetedMovementGeneratorMedium<T>::_setTargetLocation(T &owner)
|
||||||
}
|
}
|
||||||
|
|
||||||
template<>
|
template<>
|
||||||
void TargetedMovementGeneratorMedium<Player>::UpdateFinalDistance(float fDistance)
|
void TargetedMovementGeneratorMedium<Player,ChaseMovementGenerator<Player> >::UpdateFinalDistance(float fDistance)
|
||||||
{
|
{
|
||||||
// nothing to do for Player
|
// nothing to do for Player
|
||||||
}
|
}
|
||||||
|
|
||||||
template<>
|
template<>
|
||||||
void TargetedMovementGeneratorMedium<Creature>::UpdateFinalDistance(float fDistance)
|
void TargetedMovementGeneratorMedium<Player,FollowMovementGenerator<Player> >::UpdateFinalDistance(float fDistance)
|
||||||
|
{
|
||||||
|
// nothing to do for Player
|
||||||
|
}
|
||||||
|
|
||||||
|
template<>
|
||||||
|
void TargetedMovementGeneratorMedium<Creature,ChaseMovementGenerator<Creature> >::UpdateFinalDistance(float fDistance)
|
||||||
{
|
{
|
||||||
i_offset = fDistance;
|
i_offset = fDistance;
|
||||||
i_recalculateTravel = true;
|
i_recalculateTravel = true;
|
||||||
}
|
}
|
||||||
|
|
||||||
template<class T>
|
template<>
|
||||||
Unit* TargetedMovementGeneratorMedium<T>::GetTarget() const
|
void TargetedMovementGeneratorMedium<Creature,FollowMovementGenerator<Creature> >::UpdateFinalDistance(float fDistance)
|
||||||
{
|
{
|
||||||
return i_target.getTarget();
|
i_offset = fDistance;
|
||||||
|
i_recalculateTravel = true;
|
||||||
}
|
}
|
||||||
|
|
||||||
template<class T>
|
template<class T, typename D>
|
||||||
bool TargetedMovementGeneratorMedium<T>::Update(T &owner, const uint32 & time_diff)
|
bool TargetedMovementGeneratorMedium<T,D>::Update(T &owner, const uint32 & time_diff)
|
||||||
{
|
{
|
||||||
if (!i_target.isValid() || !i_target->IsInWorld())
|
if (!i_target.isValid() || !i_target->IsInWorld())
|
||||||
return false;
|
return false;
|
||||||
|
|
@ -236,10 +243,14 @@ void FollowMovementGenerator<T>::Reset(T &owner)
|
||||||
}
|
}
|
||||||
|
|
||||||
//-----------------------------------------------//
|
//-----------------------------------------------//
|
||||||
template Unit* TargetedMovementGeneratorMedium<Player>::GetTarget() const;
|
template void TargetedMovementGeneratorMedium<Player,ChaseMovementGenerator<Player> >::_setTargetLocation(Player &);
|
||||||
template Unit* TargetedMovementGeneratorMedium<Creature>::GetTarget() const;
|
template void TargetedMovementGeneratorMedium<Player,FollowMovementGenerator<Player> >::_setTargetLocation(Player &);
|
||||||
template bool TargetedMovementGeneratorMedium<Player>::Update(Player &, const uint32 &);
|
template void TargetedMovementGeneratorMedium<Creature,ChaseMovementGenerator<Creature> >::_setTargetLocation(Creature &);
|
||||||
template bool TargetedMovementGeneratorMedium<Creature>::Update(Creature &, const uint32 &);
|
template void TargetedMovementGeneratorMedium<Creature,FollowMovementGenerator<Creature> >::_setTargetLocation(Creature &);
|
||||||
|
template bool TargetedMovementGeneratorMedium<Player,ChaseMovementGenerator<Player> >::Update(Player &, const uint32 &);
|
||||||
|
template bool TargetedMovementGeneratorMedium<Player,FollowMovementGenerator<Player> >::Update(Player &, const uint32 &);
|
||||||
|
template bool TargetedMovementGeneratorMedium<Creature,ChaseMovementGenerator<Creature> >::Update(Creature &, const uint32 &);
|
||||||
|
template bool TargetedMovementGeneratorMedium<Creature,FollowMovementGenerator<Creature> >::Update(Creature &, const uint32 &);
|
||||||
|
|
||||||
template void ChaseMovementGenerator<Player>::Finalize(Player &);
|
template void ChaseMovementGenerator<Player>::Finalize(Player &);
|
||||||
template void ChaseMovementGenerator<Creature>::Finalize(Creature &);
|
template void ChaseMovementGenerator<Creature>::Finalize(Creature &);
|
||||||
|
|
|
||||||
|
|
@ -33,13 +33,13 @@ class MANGOS_DLL_SPEC TargetedMovementGeneratorBase
|
||||||
FollowerReference i_target;
|
FollowerReference i_target;
|
||||||
};
|
};
|
||||||
|
|
||||||
template<class T>
|
template<class T, typename D>
|
||||||
class MANGOS_DLL_SPEC TargetedMovementGeneratorMedium
|
class MANGOS_DLL_SPEC TargetedMovementGeneratorMedium
|
||||||
: public MovementGeneratorMedium< T, TargetedMovementGeneratorMedium<T> >, public TargetedMovementGeneratorBase
|
: public MovementGeneratorMedium< T, D >, public TargetedMovementGeneratorBase
|
||||||
{
|
{
|
||||||
protected:
|
protected:
|
||||||
TargetedMovementGeneratorMedium() : MovementGeneratorMedium< T, TargetedMovementGeneratorMedium<T> >(), TargetedMovementGeneratorBase() {}
|
TargetedMovementGeneratorMedium()
|
||||||
|
: TargetedMovementGeneratorBase(), i_offset(0), i_angle(0), i_recalculateTravel(false) {}
|
||||||
TargetedMovementGeneratorMedium(Unit &target)
|
TargetedMovementGeneratorMedium(Unit &target)
|
||||||
: TargetedMovementGeneratorBase(target), i_offset(0), i_angle(0), i_recalculateTravel(false) {}
|
: TargetedMovementGeneratorBase(target), i_offset(0), i_angle(0), i_recalculateTravel(false) {}
|
||||||
TargetedMovementGeneratorMedium(Unit &target, float offset, float angle)
|
TargetedMovementGeneratorMedium(Unit &target, float offset, float angle)
|
||||||
|
|
@ -47,13 +47,9 @@ class MANGOS_DLL_SPEC TargetedMovementGeneratorMedium
|
||||||
~TargetedMovementGeneratorMedium() {}
|
~TargetedMovementGeneratorMedium() {}
|
||||||
|
|
||||||
public:
|
public:
|
||||||
void Initialize(T &) {}
|
|
||||||
void Finalize(T &) {}
|
|
||||||
void Interrupt(T &) {}
|
|
||||||
void Reset(T &) {}
|
|
||||||
bool Update(T &, const uint32 &);
|
bool Update(T &, const uint32 &);
|
||||||
|
|
||||||
Unit* GetTarget() const;
|
Unit* GetTarget() const { return i_target.getTarget(); }
|
||||||
|
|
||||||
bool GetDestination(float &x, float &y, float &z) const
|
bool GetDestination(float &x, float &y, float &z) const
|
||||||
{
|
{
|
||||||
|
|
@ -76,12 +72,13 @@ class MANGOS_DLL_SPEC TargetedMovementGeneratorMedium
|
||||||
};
|
};
|
||||||
|
|
||||||
template<class T>
|
template<class T>
|
||||||
class MANGOS_DLL_SPEC ChaseMovementGenerator : public TargetedMovementGeneratorMedium<T>
|
class MANGOS_DLL_SPEC ChaseMovementGenerator : public TargetedMovementGeneratorMedium<T, ChaseMovementGenerator<T> >
|
||||||
{
|
{
|
||||||
public:
|
public:
|
||||||
ChaseMovementGenerator(Unit &target) : TargetedMovementGeneratorMedium<T>(target) {}
|
ChaseMovementGenerator(Unit &target)
|
||||||
|
: TargetedMovementGeneratorMedium<T, ChaseMovementGenerator<T> >(target) {}
|
||||||
ChaseMovementGenerator(Unit &target, float offset, float angle)
|
ChaseMovementGenerator(Unit &target, float offset, float angle)
|
||||||
: TargetedMovementGeneratorMedium<T>(target, offset, angle) {}
|
: TargetedMovementGeneratorMedium<T, ChaseMovementGenerator<T> >(target, offset, angle) {}
|
||||||
~ChaseMovementGenerator() {}
|
~ChaseMovementGenerator() {}
|
||||||
|
|
||||||
MovementGeneratorType GetMovementGeneratorType() { return CHASE_MOTION_TYPE; }
|
MovementGeneratorType GetMovementGeneratorType() { return CHASE_MOTION_TYPE; }
|
||||||
|
|
@ -90,16 +87,16 @@ class MANGOS_DLL_SPEC ChaseMovementGenerator : public TargetedMovementGeneratorM
|
||||||
void Finalize(T &);
|
void Finalize(T &);
|
||||||
void Interrupt(T &);
|
void Interrupt(T &);
|
||||||
void Reset(T &);
|
void Reset(T &);
|
||||||
bool Update(T &, const uint32 &);
|
|
||||||
};
|
};
|
||||||
|
|
||||||
template<class T>
|
template<class T>
|
||||||
class MANGOS_DLL_SPEC FollowMovementGenerator : public TargetedMovementGeneratorMedium<T>
|
class MANGOS_DLL_SPEC FollowMovementGenerator : public TargetedMovementGeneratorMedium<T, FollowMovementGenerator<T> >
|
||||||
{
|
{
|
||||||
public:
|
public:
|
||||||
FollowMovementGenerator(Unit &target) : TargetedMovementGeneratorMedium<T>(target) {}
|
FollowMovementGenerator(Unit &target)
|
||||||
|
: TargetedMovementGeneratorMedium<T, FollowMovementGenerator<T> >(target){}
|
||||||
FollowMovementGenerator(Unit &target, float offset, float angle)
|
FollowMovementGenerator(Unit &target, float offset, float angle)
|
||||||
: TargetedMovementGeneratorMedium<T>(target, offset, angle) {}
|
: TargetedMovementGeneratorMedium<T, FollowMovementGenerator<T> >(target, offset, angle) {}
|
||||||
~FollowMovementGenerator() {}
|
~FollowMovementGenerator() {}
|
||||||
|
|
||||||
MovementGeneratorType GetMovementGeneratorType() { return FOLLOW_MOTION_TYPE; }
|
MovementGeneratorType GetMovementGeneratorType() { return FOLLOW_MOTION_TYPE; }
|
||||||
|
|
@ -108,7 +105,6 @@ class MANGOS_DLL_SPEC FollowMovementGenerator : public TargetedMovementGenerator
|
||||||
void Finalize(T &);
|
void Finalize(T &);
|
||||||
void Interrupt(T &);
|
void Interrupt(T &);
|
||||||
void Reset(T &);
|
void Reset(T &);
|
||||||
bool Update(T &, const uint32 &);
|
|
||||||
};
|
};
|
||||||
|
|
||||||
#endif
|
#endif
|
||||||
|
|
|
||||||
|
|
@ -1,4 +1,4 @@
|
||||||
#ifndef __REVISION_NR_H__
|
#ifndef __REVISION_NR_H__
|
||||||
#define __REVISION_NR_H__
|
#define __REVISION_NR_H__
|
||||||
#define REVISION_NR "9206"
|
#define REVISION_NR "9207"
|
||||||
#endif // __REVISION_NR_H__
|
#endif // __REVISION_NR_H__
|
||||||
|
|
|
||||||
Loading…
Add table
Add a link
Reference in a new issue