#include "plane.hpp"

plane::plane(float x, float y, float z, const char* modelpath){

	this->c_x = x;
	this->c_y = y;
	this->c_z = z;
	this->modelpath = modelpath;
	timestampedCout("plane.cpp: Zaladowano dane w konstruktorze.")

}

void plane::loadModel() {

	timestampedCout("plane.cpp:");
	std::cout << "              Ladowanie modelu ze sciezki " << this->modelpath << "...\n";
	bool res = loadOBJ(this->modelpath, this->vertices, this->uvs, this->normals);
	if (res) timestampedCout("Pomyslnie zaladowano model mapki.")
	else timestampedCout("Nie udalo sie zaladowac modelu mapki.");

	glGenBuffers(1, &vertexbuffer);
	glBindBuffer(GL_ARRAY_BUFFER, this->vertexbuffer);
	glBufferData(GL_ARRAY_BUFFER, this->vertices.size() * sizeof(glm::vec3), &vertices[0], GL_STATIC_DRAW);

	glGenBuffers(1, &uvbuffer);
	glBindBuffer(GL_ARRAY_BUFFER, this->uvbuffer);
	glBufferData(GL_ARRAY_BUFFER, this->uvs.size() * sizeof(glm::vec2), &uvs[0], GL_STATIC_DRAW);

}

void plane::draw() {

	// 1st attribute buffer: vertices
	glEnableVertexAttribArray(0);
	glBindBuffer(GL_ARRAY_BUFFER, this->vertexbuffer);
	glVertexAttribPointer(
		0,                  // attribute
		3,                  // size
		GL_FLOAT,           // type
		GL_FALSE,           // normalized?
		0,                  // stride
		(void*)0            // array buffer offset
	);

	// 2nd attribute buffer: UVs
	glEnableVertexAttribArray(1);
	glBindBuffer(GL_ARRAY_BUFFER, this->uvbuffer);
	glVertexAttribPointer(
		1,                                // attribute
		2,                                // size
		GL_FLOAT,                         // type
		GL_FALSE,                         // normalized?
		0,                                // stride
		(void*)0                          // array buffer offset
	);

	// Draw vertices
	glDrawArrays(GL_TRIANGLES, 0, this->vertices.size());

	glDisableVertexAttribArray(0);
	glDisableVertexAttribArray(1);

}

void plane::moveX(float x){
	timestampedCout("dummy moveX");
}

void plane::moveY(float y){
	timestampedCout("dummy moveY");
}

void plane::moveZ(float z){
	timestampedCout("dummy moveZ");
}