about summary refs log tree commit diff
path: root/src/game
diff options
context:
space:
mode:
authoroy <Tom_Adams@web.de>2011-03-10 17:57:15 +0100
committeroy <Tom_Adams@web.de>2011-03-10 17:57:15 +0100
commit7b98b3ddeddd34bf0fa0c84b13d928a9dafe140c (patch)
tree31df3ee5655e6fc7867e77b6ca9be64f3f9b9543 /src/game
parent740242a2c80ca343e894215620fc76e288270df3 (diff)
downloadzcatch-7b98b3ddeddd34bf0fa0c84b13d928a9dafe140c.tar.gz
zcatch-7b98b3ddeddd34bf0fa0c84b13d928a9dafe140c.zip
fixed camera in spectator mode
Diffstat (limited to 'src/game')
-rw-r--r--src/game/client/components/camera.cpp19
-rw-r--r--src/game/client/components/controls.cpp40
2 files changed, 26 insertions, 33 deletions
diff --git a/src/game/client/components/camera.cpp b/src/game/client/components/camera.cpp
index f1ca6a1b..b4c2debb 100644
--- a/src/game/client/components/camera.cpp
+++ b/src/game/client/components/camera.cpp
@@ -21,7 +21,7 @@ void CCamera::OnRender()
 	m_Zoom = 1.0f;
 
 	// update camera center		
-	if(m_pClient->m_Snap.m_Spectate)
+	if(m_pClient->m_Snap.m_Spectate && (!m_pClient->m_Snap.m_pSpectatorInfo || m_pClient->m_Snap.m_pSpectatorInfo->m_SpectatorID == SPEC_FREEVIEW))
 	{
 		if(!m_WasSpectator)
 		{
@@ -37,15 +37,22 @@ void CCamera::OnRender()
 			m_pClient->m_pControls->ClampMousePos();
 			m_WasSpectator = false;
 		}
-		float l = length(m_pClient->m_pControls->m_MousePos);
-		float DeadZone = g_Config.m_ClMouseDeadzone;
-		float FollowFactor = g_Config.m_ClMouseFollowfactor/100.0f;
+
 		vec2 CameraOffset(0, 0);
 
-		float OffsetAmount = max(l-DeadZone, 0.0f) * FollowFactor;
+		float l = length(m_pClient->m_pControls->m_MousePos);
 		if(l > 0.0001f) // make sure that this isn't 0
+		{
+			float DeadZone = g_Config.m_ClMouseDeadzone;
+			float FollowFactor = g_Config.m_ClMouseFollowfactor/100.0f;
+			float OffsetAmount = max(l-DeadZone, 0.0f) * FollowFactor;
+
 			CameraOffset = normalize(m_pClient->m_pControls->m_MousePos)*OffsetAmount;
+		}
 		
-		m_Center = m_pClient->m_LocalCharacterPos + CameraOffset;
+		if(m_pClient->m_Snap.m_Spectate)
+			m_Center = m_pClient->m_Snap.m_SpectatorPos + CameraOffset;
+		else
+			m_Center = m_pClient->m_LocalCharacterPos + CameraOffset;
 	}
 }
diff --git a/src/game/client/components/controls.cpp b/src/game/client/components/controls.cpp
index f67caa8e..c884b394 100644
--- a/src/game/client/components/controls.cpp
+++ b/src/game/client/components/controls.cpp
@@ -202,16 +202,18 @@ void CControls::OnRender()
 	if(m_pClient->m_Snap.m_pGameInfoObj && !(m_pClient->m_Snap.m_pGameInfoObj->m_GameStateFlags&GAMESTATEFLAG_PAUSED || m_pClient->m_Snap.m_Spectate))
 		m_TargetPos = m_pClient->m_LocalCharacterPos + m_MousePos;
 
-	if(m_pClient->m_Snap.m_Spectate && m_pClient->m_Snap.m_pSpectatorInfo)
-		m_MousePos = m_pClient->m_Snap.m_SpectatorPos;
+	if(m_pClient->m_Snap.m_Spectate && m_pClient->m_Snap.m_pSpectatorInfo && m_pClient->m_Snap.m_pSpectatorInfo->m_SpectatorID != SPEC_FREEVIEW)
+		m_TargetPos = m_pClient->m_Snap.m_SpectatorPos + m_MousePos;
 }
 
 bool CControls::OnMouseMove(float x, float y)
 {
-	if((m_pClient->m_Snap.m_pGameInfoObj && m_pClient->m_Snap.m_pGameInfoObj->m_GameStateFlags&GAMESTATEFLAG_PAUSED) || (m_pClient->m_Snap.m_Spectate && m_pClient->m_pChat->IsActive()))
+	if((m_pClient->m_Snap.m_pGameInfoObj && m_pClient->m_Snap.m_pGameInfoObj->m_GameStateFlags&GAMESTATEFLAG_PAUSED) ||
+		(m_pClient->m_Snap.m_Spectate  && (!m_pClient->m_Snap.m_pSpectatorInfo || m_pClient->m_Snap.m_pSpectatorInfo->m_SpectatorID == SPEC_FREEVIEW) &&
+		m_pClient->m_pChat->IsActive()))
 		return false;
+	
 	m_MousePos += vec2(x, y); // TODO: ugly
-
 	ClampMousePos();
 
 	return true;
@@ -219,35 +221,19 @@ bool CControls::OnMouseMove(float x, float y)
 
 void CControls::ClampMousePos()
 {
-	//
-	float CameraMaxDistance = 200.0f;
-	float FollowFactor = g_Config.m_ClMouseFollowfactor/100.0f;
-	float DeadZone = g_Config.m_ClMouseDeadzone;
-	float MouseMax = min(CameraMaxDistance/FollowFactor + DeadZone, (float)g_Config.m_ClMouseMaxDistance);
-	
-	//vec2 camera_offset(0, 0);
-
-	if(m_pClient->m_Snap.m_Spectate)
+	if(m_pClient->m_Snap.m_Spectate && (!m_pClient->m_Snap.m_pSpectatorInfo || m_pClient->m_Snap.m_pSpectatorInfo->m_SpectatorID == SPEC_FREEVIEW))
 	{
-		if(m_MousePos.x < 200.0f) m_MousePos.x = 200.0f;
-		if(m_MousePos.y < 200.0f) m_MousePos.y = 200.0f;
-		if(m_MousePos.x > Collision()->GetWidth()*32-200.0f) m_MousePos.x = Collision()->GetWidth()*32-200.0f;
-		if(m_MousePos.y > Collision()->GetHeight()*32-200.0f) m_MousePos.y = Collision()->GetHeight()*32-200.0f;
-		
+		m_MousePos.x = clamp(m_MousePos.x, 200.0f, Collision()->GetWidth()*32-200.0f);
+		m_MousePos.y = clamp(m_MousePos.y, 200.0f, Collision()->GetHeight()*32-200.0f);
 		m_TargetPos = m_MousePos;
 	}
 	else
 	{
-		float l = length(m_MousePos);
+		float CameraMaxDistance = 200.0f;
+		float FollowFactor = g_Config.m_ClMouseFollowfactor/100.0f;
+		float MouseMax = min(CameraMaxDistance/FollowFactor + g_Config.m_ClMouseDeadzone, (float)g_Config.m_ClMouseMaxDistance);
 		
-		if(l > MouseMax)
-		{
+		if(length(m_MousePos) > MouseMax)
 			m_MousePos = normalize(m_MousePos)*MouseMax;
-			l = MouseMax;
-		}
-		
-		//float offset_amount = max(l-deadzone, 0.0f) * follow_factor;
-		//if(l > 0.0001f) // make sure that this isn't 0
-			//camera_offset = normalize(mouse_pos)*offset_amount;
 	}
 }