aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--src/server/game/Entities/Player/CinematicMgr.cpp23
-rw-r--r--src/server/game/Entities/Player/CinematicMgr.h13
-rw-r--r--src/server/game/Entities/Player/Player.cpp4
-rw-r--r--src/server/game/Handlers/MiscHandler.cpp2
4 files changed, 27 insertions, 15 deletions
diff --git a/src/server/game/Entities/Player/CinematicMgr.cpp b/src/server/game/Entities/Player/CinematicMgr.cpp
index 78e72011354..4c8ce923829 100644
--- a/src/server/game/Entities/Player/CinematicMgr.cpp
+++ b/src/server/game/Entities/Player/CinematicMgr.cpp
@@ -16,6 +16,7 @@
*/
#include "CinematicMgr.h"
+#include "Containers.h"
#include "M2Stores.h"
#include "Map.h"
#include "MotionMaster.h"
@@ -27,7 +28,8 @@ CinematicMgr::CinematicMgr(Player* playerref)
player = playerref;
m_cinematicDiff = 0;
m_lastCinematicCheck = 0;
- m_activeCinematicCameraId = 0;
+ m_activeCinematic = nullptr;
+ m_activeCinematicCameraIndex = -1;
m_cinematicLength = 0;
m_cinematicCamera = nullptr;
m_remoteSightPosition = Position(0.0f, 0.0f, 0.0f);
@@ -36,17 +38,21 @@ CinematicMgr::CinematicMgr(Player* playerref)
CinematicMgr::~CinematicMgr()
{
- if (m_cinematicCamera && m_activeCinematicCameraId)
+ if (m_cinematicCamera && m_activeCinematic)
EndCinematic();
}
-void CinematicMgr::BeginCinematic()
+void CinematicMgr::NextCinematicCamera()
{
// Sanity check for active camera set
- if (m_activeCinematicCameraId == 0)
+ if (!m_activeCinematic || m_activeCinematicCameraIndex >= int32(Trinity::Containers::Size(m_activeCinematic->Camera)))
return;
- if (std::vector<FlyByCamera> const* flyByCameras = GetFlyByCameras(m_activeCinematicCameraId))
+ uint32 cinematicCameraId = m_activeCinematic->Camera[++m_activeCinematicCameraIndex];
+ if (!cinematicCameraId)
+ return;
+
+ if (std::vector<FlyByCamera> const* flyByCameras = GetFlyByCameras(cinematicCameraId))
{
// Initialize diff, and set camera
m_cinematicDiff = 0;
@@ -75,12 +81,13 @@ void CinematicMgr::BeginCinematic()
void CinematicMgr::EndCinematic()
{
- if (m_activeCinematicCameraId == 0)
+ if (!m_activeCinematic)
return;
m_cinematicDiff = 0;
m_cinematicCamera = nullptr;
- m_activeCinematicCameraId = 0;
+ m_activeCinematic = nullptr;
+ m_activeCinematicCameraIndex = -1;
if (m_CinematicObject)
{
if (WorldObject* vpObject = player->GetViewpoint())
@@ -93,7 +100,7 @@ void CinematicMgr::EndCinematic()
void CinematicMgr::UpdateCinematicLocation(uint32 /*diff*/)
{
- if (m_activeCinematicCameraId == 0 || !m_cinematicCamera || m_cinematicCamera->size() == 0)
+ if (!m_activeCinematic || m_activeCinematicCameraIndex == -1 || !m_cinematicCamera || m_cinematicCamera->size() == 0)
return;
Position lastPosition;
diff --git a/src/server/game/Entities/Player/CinematicMgr.h b/src/server/game/Entities/Player/CinematicMgr.h
index e38ed57faef..4a80acb8203 100644
--- a/src/server/game/Entities/Player/CinematicMgr.h
+++ b/src/server/game/Entities/Player/CinematicMgr.h
@@ -25,6 +25,7 @@
#define CINEMATIC_UPDATEDIFF 500
class Player;
+struct CinematicSequencesEntry;
struct FlyByCamera;
class TC_GAME_API CinematicMgr
@@ -34,10 +35,13 @@ public:
explicit CinematicMgr(Player* playerref);
~CinematicMgr();
// Cinematic camera data and remote sight functions
- uint32 GetActiveCinematicCamera() const { return m_activeCinematicCameraId; }
- void SetActiveCinematicCamera(uint32 cinematicCameraId = 0) { m_activeCinematicCameraId = cinematicCameraId; }
bool IsOnCinematic() const { return (m_cinematicCamera != nullptr); }
- void BeginCinematic();
+ void BeginCinematic(CinematicSequencesEntry const* cinematic)
+ {
+ m_activeCinematic = cinematic;
+ m_activeCinematicCameraIndex = -1;
+ }
+ void NextCinematicCamera();
void EndCinematic();
void UpdateCinematicLocation(uint32 diff);
@@ -48,7 +52,8 @@ private:
protected:
uint32 m_cinematicDiff;
uint32 m_lastCinematicCheck;
- uint32 m_activeCinematicCameraId;
+ CinematicSequencesEntry const* m_activeCinematic;
+ int32 m_activeCinematicCameraIndex;
uint32 m_cinematicLength;
std::vector<FlyByCamera> const* m_cinematicCamera;
Position m_remoteSightPosition;
diff --git a/src/server/game/Entities/Player/Player.cpp b/src/server/game/Entities/Player/Player.cpp
index a820218f6ed..86ed8138d7b 100644
--- a/src/server/game/Entities/Player/Player.cpp
+++ b/src/server/game/Entities/Player/Player.cpp
@@ -1035,7 +1035,7 @@ void Player::Update(uint32 p_time)
// Update cinematic location, if 500ms have passed and we're doing a cinematic now.
_cinematicMgr->m_cinematicDiff += p_time;
- if (_cinematicMgr->m_activeCinematicCameraId != 0 && GetMSTimeDiffToNow(_cinematicMgr->m_lastCinematicCheck) > CINEMATIC_UPDATEDIFF)
+ if (_cinematicMgr->m_activeCinematicCameraIndex != 0 && GetMSTimeDiffToNow(_cinematicMgr->m_lastCinematicCheck) > CINEMATIC_UPDATEDIFF)
{
_cinematicMgr->m_lastCinematicCheck = GameTime::GetGameTimeMS();
_cinematicMgr->UpdateCinematicLocation(p_time);
@@ -6047,7 +6047,7 @@ void Player::SendCinematicStart(uint32 CinematicSequenceId) const
packet.CinematicID = CinematicSequenceId;
SendDirectMessage(packet.Write());
if (CinematicSequencesEntry const* sequence = sCinematicSequencesStore.LookupEntry(CinematicSequenceId))
- _cinematicMgr->SetActiveCinematicCamera(sequence->Camera[0]);
+ _cinematicMgr->BeginCinematic(sequence);
}
void Player::SendMovieStart(uint32 movieId)
diff --git a/src/server/game/Handlers/MiscHandler.cpp b/src/server/game/Handlers/MiscHandler.cpp
index 85839e77246..83165155e50 100644
--- a/src/server/game/Handlers/MiscHandler.cpp
+++ b/src/server/game/Handlers/MiscHandler.cpp
@@ -717,7 +717,7 @@ void WorldSession::HandleCompleteCinematic(WorldPackets::Misc::CompleteCinematic
void WorldSession::HandleNextCinematicCamera(WorldPackets::Misc::NextCinematicCamera& /*packet*/)
{
// Sent by client when cinematic actually begun. So we begin the server side process
- GetPlayer()->GetCinematicMgr()->BeginCinematic();
+ GetPlayer()->GetCinematicMgr()->NextCinematicCamera();
}
void WorldSession::HandleCompleteMovie(WorldPackets::Misc::CompleteMovie& /*packet*/)