Skip to content

Commit

Permalink
fixed death camera in survival modes. closes #1641
Browse files Browse the repository at this point in the history
oy committed Nov 20, 2018
1 parent 5bc1d7c commit abdde05
Showing 3 changed files with 20 additions and 14 deletions.
22 changes: 11 additions & 11 deletions src/game/client/components/camera.cpp
Original file line number Diff line number Diff line change
@@ -41,7 +41,7 @@ void CCamera::OnRender()
m_Zoom = 1.0f;

// update camera center
if(m_pClient->m_Snap.m_SpecInfo.m_Active && !m_pClient->m_Snap.m_SpecInfo.m_UsePosition)
if(m_pClient->m_Snap.m_SpecInfo.m_Active && !m_pClient->m_Snap.m_SpecInfo.m_UsePosition && m_pClient->m_Snap.m_pLocalInfo && !(m_pClient->m_Snap.m_pLocalInfo->m_PlayerFlags&PLAYERFLAG_DEAD))
{
if(m_CamType != CAMTYPE_SPEC)
{
@@ -91,16 +91,16 @@ void CCamera::OnRender()
}
else
{
// positions for the animation
Dir = normalize(m_AnimationStartPos - m_RotationCenter);
vec2 TargetPos = m_RotationCenter + Dir * (float)g_Config.m_ClRotationRadius;
float Distance = distance(m_AnimationStartPos, TargetPos);

// move time
m_MoveTime += Client()->RenderFrameTime()*g_Config.m_ClCameraSpeed / 10.0f;
float XVal = 1 - m_MoveTime;
XVal = pow(XVal, 7.0);

// positions for the animation
Dir = normalize(m_AnimationStartPos - m_RotationCenter);
vec2 TargetPos = m_RotationCenter + Dir * (float)g_Config.m_ClRotationRadius;
float Distance = distance(m_AnimationStartPos, TargetPos);

// move time
m_MoveTime += Client()->RenderFrameTime()*g_Config.m_ClCameraSpeed / 10.0f;
float XVal = 1 - m_MoveTime;
XVal = pow(XVal, 7.0);

m_Center = TargetPos + Dir * (XVal*Distance);
}
}
5 changes: 4 additions & 1 deletion src/game/client/gameclient.cpp
Original file line number Diff line number Diff line change
@@ -402,15 +402,18 @@ void CGameClient::UpdatePositions()
vec2(m_Snap.m_aCharacters[m_Snap.m_SpecInfo.m_SpectatorID].m_Prev.m_X, m_Snap.m_aCharacters[m_Snap.m_SpecInfo.m_SpectatorID].m_Prev.m_Y),
vec2(m_Snap.m_aCharacters[m_Snap.m_SpecInfo.m_SpectatorID].m_Cur.m_X, m_Snap.m_aCharacters[m_Snap.m_SpecInfo.m_SpectatorID].m_Cur.m_Y),
Client()->IntraGameTick());
m_LocalCharacterPos = m_Snap.m_SpecInfo.m_Position;
m_Snap.m_SpecInfo.m_UsePosition = true;
}
else if(m_Snap.m_pSpectatorInfo && (Client()->State() == IClient::STATE_DEMOPLAYBACK || m_Snap.m_SpecInfo.m_SpecMode != SPEC_FREEVIEW))
else if(m_Snap.m_pSpectatorInfo && (Client()->State() == IClient::STATE_DEMOPLAYBACK || m_Snap.m_SpecInfo.m_SpecMode != SPEC_FREEVIEW) ||
(m_Snap.m_pLocalInfo && (m_Snap.m_pLocalInfo->m_PlayerFlags&PLAYERFLAG_DEAD)))
{
if(m_Snap.m_pPrevSpectatorInfo)
m_Snap.m_SpecInfo.m_Position = mix(vec2(m_Snap.m_pPrevSpectatorInfo->m_X, m_Snap.m_pPrevSpectatorInfo->m_Y),
vec2(m_Snap.m_pSpectatorInfo->m_X, m_Snap.m_pSpectatorInfo->m_Y), Client()->IntraGameTick());
else
m_Snap.m_SpecInfo.m_Position = vec2(m_Snap.m_pSpectatorInfo->m_X, m_Snap.m_pSpectatorInfo->m_Y);
m_LocalCharacterPos = m_Snap.m_SpecInfo.m_Position;
m_Snap.m_SpecInfo.m_UsePosition = true;
}
}
7 changes: 5 additions & 2 deletions src/game/server/player.cpp
Original file line number Diff line number Diff line change
@@ -333,6 +333,7 @@ void CPlayer::Respawn()
// enable spectate mode for dead players
m_DeadSpecMode = true;
m_IsReadyToPlay = true;
m_SpecMode = SPEC_PLAYER;
UpdateDeadSpecMode();
return;
}
@@ -345,9 +346,11 @@ void CPlayer::Respawn()

bool CPlayer::SetSpectatorID(int SpecMode, int SpectatorID)
{
if((SpecMode == SPEC_PLAYER && (SpectatorID == -1 || m_SpectatorID == SpectatorID || m_ClientID == SpectatorID)) ||
(SpecMode != SPEC_PLAYER && SpecMode == m_SpecMode))
if((SpecMode == m_SpecMode && SpecMode != SPEC_PLAYER) ||
(m_SpecMode == SPEC_PLAYER && SpecMode == SPEC_PLAYER && (SpectatorID == -1 || m_SpectatorID == SpectatorID || m_ClientID == SpectatorID)))
{
return false;
}

if(m_Team == TEAM_SPECTATORS)
{

0 comments on commit abdde05

Please sign in to comment.