AzerothCore 3.3.5a
OpenSource WoW Emulator
Loading...
Searching...
No Matches
EscortMovementGenerator< T > Class Template Reference

#include "EscortMovementGenerator.h"

Inheritance diagram for EscortMovementGenerator< T >:
MovementGeneratorMedium< T, EscortMovementGenerator< T > > MovementGenerator

Public Member Functions

 EscortMovementGenerator (ForcedMovement forcedMovement, Movement::PointsArray *_path=nullptr)
 
void DoInitialize (T *)
 
void DoFinalize (T *)
 
void DoReset (T *)
 
bool DoUpdate (T *, uint32)
 
void unitSpeedChanged ()
 
MovementGeneratorType GetMovementGeneratorType ()
 
uint32 GetSplineId () const
 
- Public Member Functions inherited from MovementGeneratorMedium< T, EscortMovementGenerator< T > >
void Initialize (Unit *u) override
 
void Finalize (Unit *u) override
 
void Reset (Unit *u) override
 
bool Update (Unit *u, uint32 time_diff) override
 
- Public Member Functions inherited from MovementGenerator
virtual ~MovementGenerator ()
 
virtual void Pause (uint32)
 
virtual void Resume (uint32)
 
virtual bool GetResetPosition (float &, float &, float &)
 

Private Attributes

bool i_recalculateSpeed
 
Movement::PointsArray m_precomputedPath
 
uint32 _splineId
 
ForcedMovement _forcedMovement
 

Detailed Description

template<class T>
class EscortMovementGenerator< T >

Constructor & Destructor Documentation

◆ EscortMovementGenerator()

template<class T >
EscortMovementGenerator< T >::EscortMovementGenerator ( ForcedMovement  forcedMovement,
Movement::PointsArray _path = nullptr 
)
inline
27 : i_recalculateSpeed(false), _forcedMovement(forcedMovement)
28 {
29 if (_path)
30 m_precomputedPath = *_path;
31 }
ForcedMovement _forcedMovement
Definition EscortMovementGenerator.h:49
Movement::PointsArray m_precomputedPath
Definition EscortMovementGenerator.h:46
bool i_recalculateSpeed
Definition EscortMovementGenerator.h:45

References EscortMovementGenerator< T >::m_precomputedPath.

Member Function Documentation

◆ DoFinalize()

template<class T >
template void EscortMovementGenerator< T >::DoFinalize ( T *  )
102{
103 unit->ClearUnitState(UNIT_STATE_ROAMING | UNIT_STATE_ROAMING_MOVE);
104}
@ UNIT_STATE_ROAMING_MOVE
Definition UnitDefines.h:192
@ UNIT_STATE_ROAMING
Definition UnitDefines.h:174

References UNIT_STATE_ROAMING, and UNIT_STATE_ROAMING_MOVE.

◆ DoInitialize()

template<class T >
template void EscortMovementGenerator< T >::DoInitialize ( T *  )
26{
27 if (!unit->IsStopped())
28 unit->StopMoving();
29
30 unit->AddUnitState(UNIT_STATE_ROAMING | UNIT_STATE_ROAMING_MOVE);
31 i_recalculateSpeed = false;
32 Movement::MoveSplineInit init(unit);
33
34 if (m_precomputedPath.size() == 2) // xinef: simple case, just call move to
35 init.MoveTo(m_precomputedPath[1].x, m_precomputedPath[1].y, m_precomputedPath[1].z, true);
36 else if (m_precomputedPath.size())
37 init.MovebyPath(m_precomputedPath);
38
40 init.SetWalk(true);
42 init.SetWalk(false);
43
44 init.Launch();
45
46 _splineId = unit->movespline->GetId();
47}
@ FORCED_MOVEMENT_WALK
Definition MotionMaster.h:86
@ FORCED_MOVEMENT_RUN
Definition MotionMaster.h:87
uint32 _splineId
Definition EscortMovementGenerator.h:48
Definition MoveSplineInit.h:71

References FORCED_MOVEMENT_RUN, FORCED_MOVEMENT_WALK, Movement::MoveSplineInit::Launch(), Movement::MoveSplineInit::MovebyPath(), Movement::MoveSplineInit::MoveTo(), Movement::MoveSplineInit::SetWalk(), UNIT_STATE_ROAMING, and UNIT_STATE_ROAMING_MOVE.

◆ DoReset()

template<class T >
template void EscortMovementGenerator< T >::DoReset ( T *  )
108{
109 if (!unit->IsStopped())
110 unit->StopMoving();
111
112 unit->AddUnitState(UNIT_STATE_ROAMING | UNIT_STATE_ROAMING_MOVE);
113}

References UNIT_STATE_ROAMING, and UNIT_STATE_ROAMING_MOVE.

◆ DoUpdate()

template<class T >
template bool EscortMovementGenerator< T >::DoUpdate ( T *  ,
uint32   
)
51{
52 if (!unit)
53 return false;
54
55 if (unit->HasUnitState(UNIT_STATE_NOT_MOVE) || unit->IsMovementPreventedByCasting())
56 {
57 unit->ClearUnitState(UNIT_STATE_ROAMING_MOVE);
58 return true;
59 }
60
61 unit->AddUnitState(UNIT_STATE_ROAMING_MOVE);
62
63 bool arrived = unit->movespline->Finalized();
64
65 if (i_recalculateSpeed && !arrived)
66 {
67 i_recalculateSpeed = false;
68 Movement::MoveSplineInit init(unit);
69
70 // xinef: speed changed during path execution, calculate remaining path and launch it once more
71 if (m_precomputedPath.size())
72 {
73 uint32 offset = std::min(uint32(unit->movespline->_currentSplineIdx()), uint32(m_precomputedPath.size()));
74 Movement::PointsArray::iterator offsetItr = m_precomputedPath.begin();
75 std::advance(offsetItr, offset);
76 m_precomputedPath.erase(m_precomputedPath.begin(), offsetItr);
77
78 // restore 0 element (current position)
79 m_precomputedPath.insert(m_precomputedPath.begin(), G3D::Vector3(unit->GetPositionX(), unit->GetPositionY(), unit->GetPositionZ()));
80
81 if (m_precomputedPath.size() > 2)
82 init.MovebyPath(m_precomputedPath);
83 else if (m_precomputedPath.size() == 2)
84 init.MoveTo(m_precomputedPath[1].x, m_precomputedPath[1].y, m_precomputedPath[1].z, true);
85 }
86
88 init.SetWalk(true);
90 init.SetWalk(false);
91
92 init.Launch();
93 // Xinef: Override spline Id on recalculate launch
94 _splineId = unit->movespline->GetId();
95 }
96
97 return !arrived;
98}
std::uint32_t uint32
Definition Define.h:107
@ UNIT_STATE_NOT_MOVE
Definition UnitDefines.h:222

References FORCED_MOVEMENT_RUN, FORCED_MOVEMENT_WALK, Movement::MoveSplineInit::Launch(), Movement::MoveSplineInit::MovebyPath(), Movement::MoveSplineInit::MoveTo(), Movement::MoveSplineInit::SetWalk(), UNIT_STATE_NOT_MOVE, and UNIT_STATE_ROAMING_MOVE.

◆ GetMovementGeneratorType()

template<class T >
MovementGeneratorType EscortMovementGenerator< T >::GetMovementGeneratorType ( )
inlinevirtual

Implements MovementGenerator.

40{ return ESCORT_MOTION_TYPE; }
@ ESCORT_MOTION_TYPE
Definition MotionMaster.h:57

References ESCORT_MOTION_TYPE.

◆ GetSplineId()

template<class T >
uint32 EscortMovementGenerator< T >::GetSplineId ( ) const
inlinevirtual

Reimplemented from MovementGenerator.

42{ return _splineId; }

References EscortMovementGenerator< T >::_splineId.

◆ unitSpeedChanged()

template<class T >
void EscortMovementGenerator< T >::unitSpeedChanged ( )
inlinevirtual

Member Data Documentation

◆ _forcedMovement

template<class T >
ForcedMovement EscortMovementGenerator< T >::_forcedMovement
private

◆ _splineId

template<class T >
uint32 EscortMovementGenerator< T >::_splineId
private

◆ i_recalculateSpeed

template<class T >
bool EscortMovementGenerator< T >::i_recalculateSpeed
private

◆ m_precomputedPath

template<class T >
Movement::PointsArray EscortMovementGenerator< T >::m_precomputedPath
private

The documentation for this class was generated from the following files: