about summary refs log tree commit diff
path: root/src/game/client/components/camera.cpp
diff options
context:
space:
mode:
Diffstat (limited to 'src/game/client/components/camera.cpp')
-rw-r--r--src/game/client/components/camera.cpp45
1 files changed, 45 insertions, 0 deletions
diff --git a/src/game/client/components/camera.cpp b/src/game/client/components/camera.cpp
new file mode 100644
index 00000000..32442031
--- /dev/null
+++ b/src/game/client/components/camera.cpp
@@ -0,0 +1,45 @@
+extern "C" {
+	#include <engine/e_config.h>
+	#include <engine/e_client_interface.h>
+}
+
+#include <base/math.hpp>
+#include <game/collision.hpp>
+#include <game/client/gameclient.hpp>
+#include <game/client/component.hpp>
+
+#include "camera.hpp"
+#include "controls.hpp"
+
+CAMERA::CAMERA()
+{
+}
+
+void CAMERA::on_render()
+{
+	//vec2 center;
+	zoom = 1.0f;
+	
+	bool spectate = false;
+
+	if(spectate)
+		center = gameclient.controls->mouse_pos;
+	else
+	{
+
+		float l = length(gameclient.controls->mouse_pos);
+		float deadzone = config.cl_mouse_deadzone;
+		float follow_factor = config.cl_mouse_followfactor/100.0f;
+		vec2 camera_offset(0, 0);
+
+		float offset_amount = max(l-deadzone, 0.0f) * follow_factor;
+		if(l > 0.0001f) // make sure that this isn't 0
+			camera_offset = normalize(gameclient.controls->mouse_pos)*offset_amount;
+		
+		center = gameclient.local_character_pos + camera_offset;
+	}
+
+	// set listner pos
+	snd_set_listener_pos(center.x, center.y);
+}
+