about summary refs log tree commit diff
diff options
context:
space:
mode:
authoroy <Tom_Adams@web.de>2010-09-19 16:00:46 +0200
committeroy <Tom_Adams@web.de>2010-09-19 16:00:46 +0200
commit80b570c7952ef6cc4f54b4cbb1b873a5b770a5d7 (patch)
tree2f47635f2fcb668bc3ffaca39144fa31081599af
parent0905b7755d4d5da79144979ffae554476d44495f (diff)
downloadzcatch-80b570c7952ef6cc4f54b4cbb1b873a5b770a5d7.tar.gz
zcatch-80b570c7952ef6cc4f54b4cbb1b873a5b770a5d7.zip
fixed view offset when changing from spectator to player. Closes #152
-rw-r--r--src/game/client/components/camera.cpp10
-rw-r--r--src/game/client/components/camera.h1
-rw-r--r--src/game/client/components/controls.cpp9
-rw-r--r--src/game/client/components/controls.h1
4 files changed, 18 insertions, 3 deletions
diff --git a/src/game/client/components/camera.cpp b/src/game/client/components/camera.cpp
index 96baf459..185f02c5 100644
--- a/src/game/client/components/camera.cpp
+++ b/src/game/client/components/camera.cpp
@@ -10,6 +10,7 @@
 
 CCamera::CCamera()
 {
+	m_WasSpectator = false;
 }
 
 void CCamera::OnRender()
@@ -19,10 +20,17 @@ void CCamera::OnRender()
 
 	// update camera center		
 	if(m_pClient->m_Snap.m_Spectate)
+	{
 		m_Center = m_pClient->m_pControls->m_MousePos;
+		m_WasSpectator = true;
+	}
 	else
 	{
-
+		if(m_WasSpectator)
+		{
+			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;
diff --git a/src/game/client/components/camera.h b/src/game/client/components/camera.h
index 9654bdf6..9b865885 100644
--- a/src/game/client/components/camera.h
+++ b/src/game/client/components/camera.h
@@ -8,6 +8,7 @@ class CCamera : public CComponent
 public:
 	vec2 m_Center;
 	float m_Zoom;
+	bool m_WasSpectator;
 
 	CCamera();
 	virtual void OnRender();
diff --git a/src/game/client/components/controls.cpp b/src/game/client/components/controls.cpp
index 859bb471..1863e97c 100644
--- a/src/game/client/components/controls.cpp
+++ b/src/game/client/components/controls.cpp
@@ -199,6 +199,13 @@ bool CControls::OnMouseMove(float x, float y)
 		return false;
 	m_MousePos += vec2(x, y); // TODO: ugly
 
+	ClampMousePos();
+
+	return true;
+}
+
+void CControls::ClampMousePos()
+{
 	//
 	float CameraMaxDistance = 200.0f;
 	float FollowFactor = g_Config.m_ClMouseFollowfactor/100.0f;
@@ -230,6 +237,4 @@ bool CControls::OnMouseMove(float x, float y)
 		//if(l > 0.0001f) // make sure that this isn't 0
 			//camera_offset = normalize(mouse_pos)*offset_amount;
 	}
-	
-	return true;
 }
diff --git a/src/game/client/components/controls.h b/src/game/client/components/controls.h
index 092555d8..666d2915 100644
--- a/src/game/client/components/controls.h
+++ b/src/game/client/components/controls.h
@@ -24,5 +24,6 @@ public:
 	virtual void OnPlayerDeath();
 	
 	int SnapInput(int *pData);
+	void ClampMousePos();
 };
 #endif