Core/Players: Fixed initial cinematic camera getting stuck
Port From (https://github.com/TrinityCore/TrinityCore/commit/0913858328e93bf363d8f849afc917fa02bb95ab)
This commit is contained in:
@@ -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); }
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -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)]
|
||||||
|
|||||||
Reference in New Issue
Block a user