// @ts-ignore
import mat4 from 'gl-mat4';

/**
 * Updates the camera position depending on keyboard input
 * @param {any} context the program context
 */
export function updateCamera(context: any) {
	const xAxis = mat4.create();
	mat4.rotateY(xAxis, xAxis, context.params.camRot.y);
	const xMat = mat4.create();
	mat4.rotateY(xMat, xMat, context.params.camRot.y);
	mat4.rotate(xMat, xMat, context.params.camRot.x, [
		xAxis[0],
		xAxis[4],
		xAxis[8],
	]);
	const zMat = mat4.create();
	mat4.rotateY(zMat, zMat, context.params.camRot.y);
	mat4.rotate(zMat, zMat, context.params.camRot.x, [
		xAxis[0],
		xAxis[4],
		xAxis[8],
	]);
	if (context.params.keyboard.a) {
		context.params.camPos.x += xMat[0];
		context.params.camPos.y += xMat[4];
		context.params.camPos.z += xMat[8];
	}
	if (context.params.keyboard.d) {
		context.params.camPos.x -= xMat[0];
		context.params.camPos.y -= xMat[4];
		context.params.camPos.z -= xMat[8];
	}
	if (context.params.keyboard.space) {
		context.params.camPos.y -= 1;
	}
	if (context.params.keyboard.shift) {
		context.params.camPos.y += 1;
	}
	if (context.params.keyboard.w) {
		context.params.camPos.x += zMat[2];
		context.params.camPos.y += zMat[6];
		context.params.camPos.z += zMat[10];
	}
	if (context.params.keyboard.s) {
		context.params.camPos.x -= zMat[2];
		context.params.camPos.y -= zMat[6];
		context.params.camPos.z -= zMat[10];
	}
}
