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_lastCinematicCheck;
public uint m_activeCinematicCameraId;
CinematicSequencesRecord m_activeCinematic;
public int m_activeCinematicCameraIndex;
public uint m_cinematicLength;
List<FlyByCamera> m_cinematicCamera;
Position m_remoteSightPosition;
@@ -39,33 +40,38 @@ namespace Game.Entities
public CinematicManager(Player playerref)
{
player = playerref;
m_cinematicDiff = 0;
m_lastCinematicCheck = 0;
m_activeCinematicCameraId = 0;
m_cinematicLength = 0;
m_cinematicCamera = null;
m_activeCinematicCameraIndex = -1;
m_remoteSightPosition = new Position(0.0f, 0.0f, 0.0f);
m_CinematicObject = null;
}
public virtual void Dispose()
{
if (m_cinematicCamera != null && m_activeCinematicCameraId != 0)
if (m_cinematicCamera != null && m_activeCinematic != null)
EndCinematic();
}
public void BeginCinematic()
public void BeginCinematic(CinematicSequencesRecord cinematic)
{
m_activeCinematic = cinematic;
m_activeCinematicCameraIndex = -1;
}
public void NextCinematicCamera()
{
// Sanity check for active camera set
if (m_activeCinematicCameraId == 0)
if (m_activeCinematic == null || m_activeCinematicCameraIndex >= m_activeCinematic.Camera.Length)
return;
var list = M2Storage.GetFlyByCameras(m_activeCinematicCameraId);
if (!list.Empty())
uint cinematicCameraId = m_activeCinematic.Camera[++m_activeCinematicCameraIndex];
if (cinematicCameraId == 0)
return;
var flyByCameras = M2Storage.GetFlyByCameras(cinematicCameraId);
if (!flyByCameras.Empty())
{
// Initialize diff, and set camera
m_cinematicDiff = 0;
m_cinematicCamera = list;
m_cinematicCamera = flyByCameras;
if (!m_cinematicCamera.Empty())
{
@@ -90,12 +96,13 @@ namespace Game.Entities
public void EndCinematic()
{
if (m_activeCinematicCameraId == 0)
if (m_activeCinematic == null)
return;
m_cinematicDiff = 0;
m_cinematicCamera = null;
m_activeCinematicCameraId = 0;
m_activeCinematic = null;
m_activeCinematicCameraIndex = -1;
if (m_CinematicObject)
{
WorldObject vpObject = player.GetViewpoint();
@@ -109,7 +116,7 @@ namespace Game.Entities
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;
Position lastPosition = new Position();
@@ -185,8 +192,6 @@ namespace Game.Entities
EndCinematic();
}
uint GetActiveCinematicCamera() { return m_activeCinematicCameraId; }
public void SetActiveCinematicCamera(uint cinematicCameraId = 0) { m_activeCinematicCameraId = cinematicCameraId; }
public bool IsOnCinematic() { return (m_cinematicCamera != null); }
public bool IsOnCinematic() { return m_cinematicCamera != null; }
}
}
+1 -1
View File
@@ -144,7 +144,7 @@ namespace Game
void HandleNextCinematicCamera(NextCinematicCamera packet)
{
// Sent by client when cinematic actually begun. So we begin the server side process
GetPlayer().GetCinematicMgr().BeginCinematic();
GetPlayer().GetCinematicMgr().NextCinematicCamera();
}
[WorldPacketHandler(ClientOpcodes.CompleteMovie)]