Core/Players: Fixed initial cinematic camera getting stuck

Port From (https://github.com/TrinityCore/TrinityCore/commit/0913858328e93bf363d8f849afc917fa02bb95ab)
This commit is contained in:
hondacrx
2020-04-25 00:05:47 -04:00
parent 5553849226
commit 1afc5ba67a
2 changed files with 25 additions and 20 deletions
+24 -19
View File
@@ -30,7 +30,8 @@ namespace Game.Entities
public uint m_cinematicDiff; public uint m_cinematicDiff;
public uint m_lastCinematicCheck; public uint m_lastCinematicCheck;
public uint m_activeCinematicCameraId; CinematicSequencesRecord m_activeCinematic;
public int m_activeCinematicCameraIndex;
public uint m_cinematicLength; public uint m_cinematicLength;
List<FlyByCamera> m_cinematicCamera; List<FlyByCamera> m_cinematicCamera;
Position m_remoteSightPosition; Position m_remoteSightPosition;
@@ -39,33 +40,38 @@ namespace Game.Entities
public CinematicManager(Player playerref) public CinematicManager(Player playerref)
{ {
player = playerref; player = playerref;
m_cinematicDiff = 0; m_activeCinematicCameraIndex = -1;
m_lastCinematicCheck = 0;
m_activeCinematicCameraId = 0;
m_cinematicLength = 0;
m_cinematicCamera = null;
m_remoteSightPosition = new Position(0.0f, 0.0f, 0.0f); m_remoteSightPosition = new Position(0.0f, 0.0f, 0.0f);
m_CinematicObject = null;
} }
public virtual void Dispose() public virtual void Dispose()
{ {
if (m_cinematicCamera != null && m_activeCinematicCameraId != 0) if (m_cinematicCamera != null && m_activeCinematic != null)
EndCinematic(); EndCinematic();
} }
public void BeginCinematic() public void BeginCinematic(CinematicSequencesRecord cinematic)
{
m_activeCinematic = cinematic;
m_activeCinematicCameraIndex = -1;
}
public void NextCinematicCamera()
{ {
// Sanity check for active camera set // Sanity check for active camera set
if (m_activeCinematicCameraId == 0) if (m_activeCinematic == null || m_activeCinematicCameraIndex >= m_activeCinematic.Camera.Length)
return; return;
var list = M2Storage.GetFlyByCameras(m_activeCinematicCameraId); uint cinematicCameraId = m_activeCinematic.Camera[++m_activeCinematicCameraIndex];
if (!list.Empty()) if (cinematicCameraId == 0)
return;
var flyByCameras = M2Storage.GetFlyByCameras(cinematicCameraId);
if (!flyByCameras.Empty())
{ {
// Initialize diff, and set camera // Initialize diff, and set camera
m_cinematicDiff = 0; m_cinematicDiff = 0;
m_cinematicCamera = list; m_cinematicCamera = flyByCameras;
if (!m_cinematicCamera.Empty()) if (!m_cinematicCamera.Empty())
{ {
@@ -90,12 +96,13 @@ namespace Game.Entities
public void EndCinematic() public void EndCinematic()
{ {
if (m_activeCinematicCameraId == 0) if (m_activeCinematic == null)
return; return;
m_cinematicDiff = 0; m_cinematicDiff = 0;
m_cinematicCamera = null; m_cinematicCamera = null;
m_activeCinematicCameraId = 0; m_activeCinematic = null;
m_activeCinematicCameraIndex = -1;
if (m_CinematicObject) if (m_CinematicObject)
{ {
WorldObject vpObject = player.GetViewpoint(); WorldObject vpObject = player.GetViewpoint();
@@ -109,7 +116,7 @@ namespace Game.Entities
public void UpdateCinematicLocation(uint diff) public void UpdateCinematicLocation(uint diff)
{ {
if (m_activeCinematicCameraId == 0 || m_cinematicCamera == null || m_cinematicCamera.Count == 0) if (m_activeCinematic == null || m_activeCinematicCameraIndex == -1 || m_cinematicCamera == null || m_cinematicCamera.Count == 0)
return; return;
Position lastPosition = new Position(); Position lastPosition = new Position();
@@ -185,8 +192,6 @@ namespace Game.Entities
EndCinematic(); EndCinematic();
} }
uint GetActiveCinematicCamera() { return m_activeCinematicCameraId; } public bool IsOnCinematic() { return m_cinematicCamera != null; }
public void SetActiveCinematicCamera(uint cinematicCameraId = 0) { m_activeCinematicCameraId = cinematicCameraId; }
public bool IsOnCinematic() { return (m_cinematicCamera != null); }
} }
} }
+1 -1
View File
@@ -144,7 +144,7 @@ namespace Game
void HandleNextCinematicCamera(NextCinematicCamera packet) void HandleNextCinematicCamera(NextCinematicCamera packet)
{ {
// Sent by client when cinematic actually begun. So we begin the server side process // Sent by client when cinematic actually begun. So we begin the server side process
GetPlayer().GetCinematicMgr().BeginCinematic(); GetPlayer().GetCinematicMgr().NextCinematicCamera();
} }
[WorldPacketHandler(ClientOpcodes.CompleteMovie)] [WorldPacketHandler(ClientOpcodes.CompleteMovie)]