package fr.technicalgames.render;
import static org.lwjgl.glfw.GLFW.*;

import org.lwjgl.glfw.*;
import org.lwjgl.opengl.*;

import fr.technicalgames.*;
import fr.technicalgames.input.*;
import fr.technicalgames.math.*;



public class Camera {

	public static Matrix4f matrix = new Matrix4f();
	public static final float SPEED = 1.0f;
	public static final float sens = 0.5f;
	public static float speed = 1.0f;



	public static Vector3f rot = new Vector3f();
	public static Vector3f pos = new Vector3f();

	public static void update(){
		speed = SPEED * Main.delta;
		if(Input.isKey(GLFW_KEY_LEFT_CONTROL))speed *= 2.0f;
		rot.x += -Input.getDMouse().getY() * sens;
		rot.y += -Input.getDMouse().getX() * sens;
		if(rot.x > 90)rot.x = 90;
		if(rot.x < -90)rot.x = -90;
		if(Input.isKey(GLFW.GLFW_KEY_W)){
			pos.x += Mathf.cos(Mathf.toRadians(rot.y + 90)) * speed;
			pos.z += Mathf.sin(Mathf.toRadians(rot.y + 90)) * speed;
		}
		if(Input.isKey(GLFW.GLFW_KEY_S)){
			pos.x += -Mathf.cos(Mathf.toRadians(rot.y + 90)) * speed;
			pos.z += -Mathf.sin(Mathf.toRadians(rot.y + 90)) * speed;
		}
		if(Input.isKey(GLFW.GLFW_KEY_A)){
			pos.x += -Mathf.cos(Mathf.toRadians(rot.y)) * speed;
			pos.z += -Mathf.sin(Mathf.toRadians(rot.y)) * speed;
		}
		if(Input.isKey(GLFW.GLFW_KEY_D)){
			pos.x += Mathf.cos(Mathf.toRadians(rot.y)) * speed;
			pos.z += Mathf.sin(Mathf.toRadians(rot.y)) * speed;
		}
		if(Input.isKey(GLFW.GLFW_KEY_LEFT_SHIFT)){
			pos.y -= speed;
		}
		if(Input.isKey(GLFW.GLFW_KEY_SPACE)){
			pos.y += speed;
		}
		if(Input.isKeyDown(GLFW_KEY_ESCAPE))glfwSetWindowShouldClose(Main.windowID, true);
		if(Input.isButtonDown(0))glfwSetInputMode(Main.windowID, GLFW_CURSOR, GLFW_CURSOR_DISABLED);
		if(Input.isButtonDown(1))glfwSetInputMode(Main.windowID, GLFW_CURSOR, GLFW_CURSOR_NORMAL);
	}

	public static void transform(){
		matrix.loadIdentity();
		matrix.rotate(new Quaternion(new Vector3f(1,0,0),rot.x));
		matrix.rotate(new Quaternion(new Vector3f(0,1,0),rot.y));
		matrix.rotate(new Quaternion(new Vector3f(0,0,1),rot.z));
		matrix.tranlate(-pos.x, -pos.y, -pos.z);
	}

}
