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 (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 Initialize (Unit *)=0
 
virtual void Finalize (Unit *)=0
 
virtual void Reset (Unit *)=0
 
virtual bool Update (Unit *, uint32 time_diff)=0
 
virtual MovementGeneratorType GetMovementGeneratorType ()=0
 
virtual uint32 GetSplineId () const
 
virtual void unitSpeedChanged ()
 
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
 

Detailed Description

template<class T>
class EscortMovementGenerator< T >

Constructor & Destructor Documentation

◆ EscortMovementGenerator()

template<class T >
EscortMovementGenerator< T >::EscortMovementGenerator ( Movement::PointsArray _path = nullptr)
inline
27 : i_recalculateSpeed(false)
28 {
29 if (_path)
30 m_precomputedPath = *_path;
31 }
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 *  )
95{
96 unit->ClearUnitState(UNIT_STATE_ROAMING | UNIT_STATE_ROAMING_MOVE);
97}
@ UNIT_STATE_ROAMING_MOVE
Definition: Unit.h:347
@ UNIT_STATE_ROAMING
Definition: Unit.h:329

References UNIT_STATE_ROAMING, and UNIT_STATE_ROAMING_MOVE.

◆ DoInitialize()

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

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

◆ DoReset()

template<class T >
template void EscortMovementGenerator< T >::DoReset ( T *  )
101{
102 if (!unit->IsStopped())
103 unit->StopMoving();
104
105 unit->AddUnitState(UNIT_STATE_ROAMING | UNIT_STATE_ROAMING_MOVE);
106}

References UNIT_STATE_ROAMING, and UNIT_STATE_ROAMING_MOVE.

◆ DoUpdate()

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

References Movement::MoveSplineInit::Launch(), Movement::MoveSplineInit::MovebyPath(), Movement::MoveSplineInit::MoveTo(), 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:55

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

◆ _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