From 3fac2b2a596b5955c1100ac7c7b53a7aac435275 Mon Sep 17 00:00:00 2001
From: matthew <matthew@owens.tech>
Date: Mon, 5 Nov 2018 21:24:26 +0000
Subject: [PATCH] fixed nippy camera bug

---
 gl/camera.c | 26 +++++++++++++++++++-------
 gl/camera.h |  1 +
 gl/main.c   |  8 +++++---
 3 files changed, 25 insertions(+), 10 deletions(-)

diff --git a/gl/camera.c b/gl/camera.c
index 9142d3c..9980fdc 100644
--- a/gl/camera.c
+++ b/gl/camera.c
@@ -48,6 +48,7 @@ void updateMatrix(crpgCamera_t *ct)
 	vec3_t to = v3_add(ct->position, ct->front);
 
 	mat4_t lookat = m4_look_at(ct->position, to, ct->up);
+	/* TODO: change first param to calcualated value */
 	mat4_t perspective = m4_perspective(60, ct->aspectRatio, ct->near, ct->far);
 	ct->matrix = m4_mul(perspective, lookat);
 }
@@ -61,7 +62,7 @@ void updateVectors(crpgCamera_t *ct)
 	ct->front = v3_norm(ct->front);
 
 	/* calculating the new right and up vectors */
-	ct->right = v3_norm(v3_cross(ct->position, ct->worldUp));
+	ct->right = v3_norm(v3_cross(ct->front, ct->worldUp));
 	ct->up = v3_norm(v3_cross(ct->right, ct->front));
 }
 
@@ -142,10 +143,10 @@ void crpgCameraUpdate(crpgCamera *c, float dtms)
 		ct->position = v3_sub(ct->position, v3_muls(ct->right, velocity));
 	}
 	if(crpgInputHeld(INPUT_CAMERA_PAN_UP)){
-		ct->position = v3_add(ct->position, v3_muls(ct->up, velocity));
+		ct->position = v3_add(ct->position, v3_muls(ct->worldUp, velocity));
 	}
 	if(crpgInputHeld(INPUT_CAMERA_PAN_DOWN)){
-		ct->position = v3_sub(ct->position, v3_muls(ct->up, velocity));
+		ct->position = v3_sub(ct->position, v3_muls(ct->worldUp, velocity));
 	}
 
 	/* processing mouse movement */
@@ -154,11 +155,22 @@ void crpgCameraUpdate(crpgCamera *c, float dtms)
 	mouseOffset.y *= ct->mouseSensitivity;
 
 	ct->yaw += mouseOffset.x;
-	ct->pitch += mouseOffset.y;
+	ct->pitch -= mouseOffset.y;
 
-	// preventing the screen from flipping
-	ct->pitch > 89.0f ? 89.0f : ct->pitch;
-	ct->pitch < -89.0f ? -89.0f : ct->pitch;
+	/* preventing the screen from flipping */
+	ct->pitch = (ct->pitch > 89.0f) ? 89.0f : ct->pitch;
+	ct->pitch = (ct->pitch < -89.0f) ? -89.0f : ct->pitch;
+
+	/* constricting the yaw */
+	ct->yaw = (ct->yaw < 0.f) ? 360.f : ct->yaw;
+	ct->yaw = (ct->yaw > 360.f) ? 0.f : ct->yaw;
+
+	printf("ct->pitch: %f\tct->yaw: %f\tpos: (%f,%f,%f)\r",
+			ct->pitch, ct->yaw, ct->position.x, ct->position.y, ct->position.z);
 
 	updateVectors(ct);
 }
+
+void crpgCameraRender(crpgCamera *c)
+{
+}
diff --git a/gl/camera.h b/gl/camera.h
index 8fb288e..2b8ba1b 100644
--- a/gl/camera.h
+++ b/gl/camera.h
@@ -12,4 +12,5 @@ void crpgCameraSetSpeed(crpgCamera *c, float speed);
 void crpgCameraSetSensitivity(crpgCamera *c, float sensitivity);
 
 void crpgCameraUpdate(crpgCamera *c, float dtms);
+void crpgCameraRender(crpgCamera *c);
 #endif//CAMERA_H
diff --git a/gl/main.c b/gl/main.c
index 3d6ddfa..8aa5d6e 100644
--- a/gl/main.c
+++ b/gl/main.c
@@ -17,8 +17,8 @@
 
 static SDL_Window *window = NULL;
 static SDL_GLContext *context = NULL;
-static int screen_width = 1280;
-static int screen_height = 720;
+static int screen_width = 1920;
+static int screen_height = 1080;
 static bool quit = false;
 //static Uint32 ltime, ctime, numframes, cftime, lftime;
 
@@ -120,7 +120,8 @@ static bool init()
 
 	window = SDL_CreateWindow("csrpg - opengl", SDL_WINDOWPOS_CENTERED,
 			 SDL_WINDOWPOS_CENTERED, screen_width, screen_height,
-			 SDL_WINDOW_OPENGL | SDL_WINDOW_RESIZABLE | SDL_WINDOW_INPUT_FOCUS);
+			 SDL_WINDOW_OPENGL | SDL_WINDOW_RESIZABLE | SDL_WINDOW_INPUT_FOCUS |
+			 SDL_WINDOW_BORDERLESS);
 
 	if (window == NULL){
 		printf("SDL couldn't make an OpenGL window! SDL_Error: %s\n", SDL_GetError());
@@ -218,5 +219,6 @@ int main()
 	crpgInputCleanup();
 	crpgCubeFree(cubes[0]);
 	crpgCubeFree(cubes[1]);
+	printf("\n");
 	return 0;
 }
-- 
2.20.1