#include "point.h"

namespace ngObjects
{
	Point::Point(GLfloat rad, vector3D pos, GLfloat r, GLfloat g, GLfloat b)
	{
		setColor(r,g,b);
		radius = rad;
		position = pos;

		quadratic = gluNewQuadric();				// Create A Pointer To The Quadric Object (Return 0 If No Memory) (NEW)
		gluQuadricNormals(quadratic, GLU_SMOOTH);	// Create Smooth Normals (NEW)
		gluQuadricTexture(quadratic, GL_TRUE);		// Create Texture Coords (NEW)

		if (!font.isOpen())
			font.open("arial.ttf", 3.0, 0.2, true, 0.0, 0.0, 0.0);
	}

	void Point::setColor(GLfloat r, GLfloat g, GLfloat b)
	{
		material.ambient[0] = r;
		material.ambient[1] = g;
		material.ambient[2] = b;
		material.ambient[3] = 1.0f;
		material.diffuse[0] = r;
		material.diffuse[1] = g;
		material.diffuse[2] = b;
		material.diffuse[3] = 1.0f;
		material.shininess = 0.0f;
		material.specular[0] = 0.0f;
		material.specular[1] = 0.0f;
		material.specular[2] = 0.0f;
		material.specular[3] = 1.0f;
	}

	void Point::render(GLfloat fontAngle)
	{
		glPushMatrix();
			glTranslatef(position.x, position.y, position.z);
			glMaterialfv(GL_FRONT, GL_AMBIENT, material.ambient);
			glMaterialfv(GL_FRONT, GL_DIFFUSE, material.diffuse);
			glMaterialfv(GL_FRONT, GL_SPECULAR, material.specular);
			glMaterialf(GL_FRONT, GL_SHININESS, material.shininess);
			gluSphere(quadratic, radius, 32, 32);		
			glRotatef(fontAngle, 0.0, 1.0, 0.0);
			glPushMatrix();
				glTranslatef(-1.0, 2.0, 0.0);
				font.render(label);
			glPopMatrix();
		glPopMatrix();
	}

	void Point::render()
	{
		glPushMatrix();
			glTranslatef(position.x, position.y, position.z);
			glMaterialfv(GL_FRONT, GL_AMBIENT, material.ambient);
			glMaterialfv(GL_FRONT, GL_DIFFUSE, material.diffuse);
			glMaterialfv(GL_FRONT, GL_SPECULAR, material.specular);
			glMaterialf(GL_FRONT, GL_SHININESS, material.shininess);
			gluSphere(quadratic, radius, 32, 32);
			glPushMatrix();
				glTranslatef(-1.0, 3.0, 0.0);
				font.render(label);
			glPopMatrix();
		glPopMatrix();
	}
}
