AzerothCore 3.3.5a
OpenSource WoW Emulator
Loading...
Searching...
No Matches
CinematicMgr Class Reference

#include "CinematicMgr.h"

Public Member Functions

 CinematicMgr (Player *playerref)
 
 ~CinematicMgr ()
 
uint32 GetActiveCinematicCamera () const
 
void SetActiveCinematicCamera (uint32 cinematicCameraId=0)
 
bool IsOnCinematic () const
 
void BeginCinematic ()
 
void EndCinematic ()
 
void UpdateCinematicLocation (uint32 diff)
 

Protected Attributes

uint32 m_cinematicDiff
 
uint32 m_lastCinematicCheck
 
uint32 m_activeCinematicCameraId
 
uint32 m_cinematicLength
 
std::vector< FlyByCamera > const * m_cinematicCamera
 
Position m_remoteSightPosition
 
TempSummonm_CinematicObject
 

Private Attributes

Playerplayer
 

Friends

class Player
 

Detailed Description

Constructor & Destructor Documentation

◆ CinematicMgr()

CinematicMgr::CinematicMgr ( Player playerref)
explicit
26{
27 player = playerref;
32 m_cinematicCamera = nullptr;
33 m_remoteSightPosition = Position(0.0f, 0.0f, 0.0f);
34 m_CinematicObject = nullptr;
35}
Definition: Position.h:28
Player * player
Definition: CinematicMgr.h:47
std::vector< FlyByCamera > const * m_cinematicCamera
Definition: CinematicMgr.h:54
uint32 m_cinematicDiff
Definition: CinematicMgr.h:50
uint32 m_lastCinematicCheck
Definition: CinematicMgr.h:51
uint32 m_cinematicLength
Definition: CinematicMgr.h:53
TempSummon * m_CinematicObject
Definition: CinematicMgr.h:56
uint32 m_activeCinematicCameraId
Definition: CinematicMgr.h:52
Position m_remoteSightPosition
Definition: CinematicMgr.h:55

References m_activeCinematicCameraId, m_cinematicCamera, m_cinematicDiff, m_cinematicLength, m_CinematicObject, m_lastCinematicCheck, m_remoteSightPosition, and player.

◆ ~CinematicMgr()

CinematicMgr::~CinematicMgr ( )
38{
41}
void EndCinematic()
Definition: CinematicMgr.cpp:76

References EndCinematic(), m_activeCinematicCameraId, and m_cinematicCamera.

Member Function Documentation

◆ BeginCinematic()

void CinematicMgr::BeginCinematic ( )
44{
45 // Sanity check for active camera set
47 return;
48
49 if (std::vector<FlyByCamera> const* flyByCameras = GetFlyByCameras(m_activeCinematicCameraId))
50 {
51 // Initialize diff, and set camera
53 m_cinematicCamera = flyByCameras;
54
55 auto camitr = m_cinematicCamera->begin();
56 if (camitr != m_cinematicCamera->end())
57 {
58 Position const& pos = camitr->locations;
59 if (!pos.IsPositionValid())
60 return;
61
65 {
68 }
69
70 // Get cinematic length
71 m_cinematicLength = flyByCameras->back().timeStamp;
72 }
73 }
74}
std::vector< FlyByCamera > const * GetFlyByCameras(uint32 cinematicCameraId)
Definition: M2Stores.cpp:257
@ TEMPSUMMON_TIMED_DESPAWN
Definition: Object.h:44
#define VISUAL_WAYPOINT
Definition: MotionMaster.h:32
Map * GetMap() const
Definition: Object.h:517
TempSummon * SummonCreature(uint32 id, const Position &pos, TempSummonType spwtype=TEMPSUMMON_MANUAL_DESPAWN, uint32 despwtime=0, uint32 vehId=0, SummonPropertiesEntry const *properties=nullptr, bool visibleBySummonerOnly=false) const
Definition: Object.cpp:2318
void setActive(bool isActiveObject)
Definition: Object.cpp:1085
float m_positionZ
Definition: Position.h:58
float m_positionX
Definition: Position.h:56
float m_positionY
Definition: Position.h:57
bool IsPositionValid() const
Definition: Position.cpp:175
float GetPositionX() const
Definition: Position.h:117
float GetPositionY() const
Definition: Position.h:118
void SetViewpoint(WorldObject *target, bool apply)
Definition: Player.cpp:13062
void LoadGrid(float x, float y)
Definition: Map.cpp:494

References GetFlyByCameras(), WorldObject::GetMap(), Position::GetPositionX(), Position::GetPositionY(), Position::IsPositionValid(), Map::LoadGrid(), m_activeCinematicCameraId, m_cinematicCamera, m_cinematicDiff, m_cinematicLength, m_CinematicObject, Position::m_positionX, Position::m_positionY, Position::m_positionZ, player, WorldObject::setActive(), Player::SetViewpoint(), WorldObject::SummonCreature(), TEMPSUMMON_TIMED_DESPAWN, and VISUAL_WAYPOINT.

Referenced by WorldSession::HandleNextCinematicCamera().

◆ EndCinematic()

void CinematicMgr::EndCinematic ( )
77{
79 return;
80
82 m_cinematicCamera = nullptr;
85 {
86 if (WorldObject* vpObject = player->GetViewpoint())
87 if (vpObject == m_CinematicObject)
89
91 }
92}
Definition: Object.h:393
void AddObjectToRemoveList()
Definition: Object.cpp:2115
WorldObject * GetViewpoint() const
Definition: Player.cpp:13105

References WorldObject::AddObjectToRemoveList(), Player::GetViewpoint(), m_activeCinematicCameraId, m_cinematicCamera, m_cinematicDiff, m_CinematicObject, player, and Player::SetViewpoint().

Referenced by WorldSession::HandleCompleteCinematic(), UpdateCinematicLocation(), and ~CinematicMgr().

◆ GetActiveCinematicCamera()

uint32 CinematicMgr::GetActiveCinematicCamera ( ) const
inline

◆ IsOnCinematic()

bool CinematicMgr::IsOnCinematic ( ) const
inline
40{ return (m_cinematicCamera != nullptr); }

◆ SetActiveCinematicCamera()

void CinematicMgr::SetActiveCinematicCamera ( uint32  cinematicCameraId = 0)
inline
39{ m_activeCinematicCameraId = cinematicCameraId; }

Referenced by Player::SendCinematicStart().

◆ UpdateCinematicLocation()

void CinematicMgr::UpdateCinematicLocation ( uint32  diff)
95{
97 return;
98
99 Position lastPosition;
100 uint32 lastTimestamp = 0;
101 Position nextPosition;
102 uint32 nextTimestamp = 0;
103
104 // Obtain direction of travel
105 for (FlyByCamera cam : *m_cinematicCamera)
106 {
107 if (cam.timeStamp > m_cinematicDiff)
108 {
109 nextPosition.Relocate(cam.locations);
110 nextTimestamp = cam.timeStamp;
111 break;
112 }
113 lastPosition.Relocate(cam.locations);
114 lastTimestamp = cam.timeStamp;
115 }
116 float angle = lastPosition.GetAbsoluteAngle(&nextPosition);
117 angle -= lastPosition.GetOrientation();
118 if (angle < 0)
119 angle += 2 * float(M_PI);
120
121 // Look for position around 2 second ahead of us.
122 int32 workDiff = m_cinematicDiff;
123
124 // Modify result based on camera direction (Humans for example, have the camera point behind)
125 workDiff += static_cast<int32>(float(CINEMATIC_LOOKAHEAD) * cos(angle));
126
127 // Get an iterator to the last entry in the cameras, to make sure we don't go beyond the end
128 auto endItr = m_cinematicCamera->rbegin();
129 if (endItr != m_cinematicCamera->rend() && workDiff > static_cast<int32>(endItr->timeStamp))
130 workDiff = endItr->timeStamp;
131
132 // Never try to go back in time before the start of cinematic!
133 if (workDiff < 0)
134 workDiff = m_cinematicDiff;
135
136 // Obtain the previous and next waypoint based on timestamp
137 for (FlyByCamera cam : *m_cinematicCamera)
138 {
139 if (static_cast<int32>(cam.timeStamp) >= workDiff)
140 {
141 nextPosition.Relocate(cam.locations);
142 nextTimestamp = cam.timeStamp;
143 break;
144 }
145 lastPosition.Relocate(cam.locations);
146 lastTimestamp = cam.timeStamp;
147 }
148
149 // Never try to go beyond the end of the cinematic
150 if (workDiff > static_cast<int32>(nextTimestamp))
151 workDiff = static_cast<int32>(nextTimestamp);
152
153 // Interpolate the position for this moment in time (or the adjusted moment in time)
154 uint32 timeDiff = nextTimestamp - lastTimestamp;
155 uint32 interDiff = workDiff - lastTimestamp;
156 float xDiff = nextPosition.m_positionX - lastPosition.m_positionX;
157 float yDiff = nextPosition.m_positionY - lastPosition.m_positionY;
158 float zDiff = nextPosition.m_positionZ - lastPosition.m_positionZ;
159 Position interPosition(lastPosition.m_positionX + (xDiff * (float(interDiff) / float(timeDiff))), lastPosition.m_positionY +
160 (yDiff * (float(interDiff) / float(timeDiff))), lastPosition.m_positionZ + (zDiff * (float(interDiff) / float(timeDiff))));
161
162 // Advance (at speed) to this position. The remote sight object is used
163 // to send update information to player in cinematic
164 if (m_CinematicObject && interPosition.IsPositionValid())
165 m_CinematicObject->MonsterMoveWithSpeed(interPosition.m_positionX, interPosition.m_positionY, interPosition.m_positionZ, 500.0f);
166
167 // If we never received an end packet 10 seconds after the final timestamp then force an end
169 EndCinematic();
170}
constexpr auto IN_MILLISECONDS
Definition: Common.h:62
std::int32_t int32
Definition: Define.h:104
std::uint32_t uint32
Definition: Define.h:108
constexpr auto CINEMATIC_LOOKAHEAD
Definition: CinematicMgr.h:25
Definition: M2Stores.h:26
float GetOrientation() const
Definition: Position.h:120
float GetAbsoluteAngle(float x, float y) const
Definition: Position.h:187
void Relocate(float x, float y)
Definition: Position.h:73
void MonsterMoveWithSpeed(float x, float y, float z, float speed)
Definition: Unit.cpp:548

References CINEMATIC_LOOKAHEAD, EndCinematic(), Position::GetAbsoluteAngle(), Position::GetOrientation(), IN_MILLISECONDS, Position::IsPositionValid(), m_activeCinematicCameraId, m_cinematicCamera, m_cinematicDiff, m_cinematicLength, m_CinematicObject, Position::m_positionX, Position::m_positionY, Position::m_positionZ, Unit::MonsterMoveWithSpeed(), and Position::Relocate().

Referenced by Player::Update().

Friends And Related Function Documentation

◆ Player

friend class Player
friend

Member Data Documentation

◆ m_activeCinematicCameraId

uint32 CinematicMgr::m_activeCinematicCameraId
protected

◆ m_cinematicCamera

std::vector<FlyByCamera> const* CinematicMgr::m_cinematicCamera
protected

◆ m_cinematicDiff

uint32 CinematicMgr::m_cinematicDiff
protected

◆ m_cinematicLength

uint32 CinematicMgr::m_cinematicLength
protected

◆ m_CinematicObject

TempSummon* CinematicMgr::m_CinematicObject
protected

◆ m_lastCinematicCheck

uint32 CinematicMgr::m_lastCinematicCheck
protected

Referenced by CinematicMgr(), and Player::Update().

◆ m_remoteSightPosition

Position CinematicMgr::m_remoteSightPosition
protected

Referenced by CinematicMgr().

◆ player

Player* CinematicMgr::player
private