diff options
-rw-r--r-- | src/server/game/Entities/Player/CinematicMgr.cpp | 23 | ||||
-rw-r--r-- | src/server/game/Entities/Player/CinematicMgr.h | 13 | ||||
-rw-r--r-- | src/server/game/Entities/Player/Player.cpp | 4 | ||||
-rw-r--r-- | src/server/game/Handlers/MiscHandler.cpp | 2 |
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*/) |