#include "edge.h"

namespace ngObjects
{
	Edge::Edge(GLdouble rad, GLdouble h, vector3D pos, GLfloat r, GLfloat g, GLfloat b, GLfloat a, int w, int d)
	{
		setColor(r, g, b, a);
		setDirection(d);
		setWeight(w);
		position = pos;
		radius = rad;
		height = h;

		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);

		weight = w;
		char buff [10];
		weightStr = itoa(w,buff,10);
	}

	void Edge::setColor(GLfloat r, GLfloat g, GLfloat b, GLfloat a)
	{
		font.setColor(r, g, b);
		material.ambient[0] = r;
		material.ambient[1] = g;
		material.ambient[2] = b;
		material.ambient[3] = a;
		if (r == 0.0 && g == 0.0 && b == 0.0)
			{ r = 1.0; g = 1.0; b = 1.0; }
		material.diffuse[0] = r;
		material.diffuse[1] = g;
		material.diffuse[2] = b;
		material.diffuse[3] = a;
		material.shininess = 1.0f;
		material.specular[0] = 0.0f;
		material.specular[1] = 0.0f;
		material.specular[2] = 0.0f;
		material.specular[3] = a;
	}

	void Edge::render()
	{
		glPushMatrix();
		glTranslatef(position.x, position.y, position.z);
		glRotatef(position.angle, 0.0, 1.0, 0.0);
		// Bind our materials
		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);
		gluCylinder(quadratic, radius, radius, height, 12, 12);
		glPushMatrix();
			glTranslatef(0.0, 1.0, 15.0);
			glRotatef(-90, 0.0, 1.0, 0.0);
			glScalef(0.8, 0.8, 0.8);
			font.render(weightStr);
		glPopMatrix();
		glPopMatrix();
	}
}
