#include "EntityBase.h"

#include <GL/gl.h>

namespace Engine {

void EntityVisualState::Draw () {
	if (mBaseType == EntityBaseTypeActor) {
		int i, segments;
		segments = 20;
		double x, z, rad, drad;

		drad = (M_PI * 2) / segments;

		glBegin (GL_TRIANGLE_FAN);
		glVertex3f (0., 0., 0.);
		for (i = 0; i <= segments; i++) {
			rad = drad * i;
			sincos (rad, &z, &x);
			glVertex3f (x * mRadius, 0., -z * mRadius);
		}
		glEnd ();

		glDisable (GL_DEPTH_TEST);
		glColor3f (0.8, 0., 0.2);
		glBegin (GL_TRIANGLES);
			glVertex3f (mRadius, 0., 0.);
			glVertex3f (0., 0., -mRadius * 0.3);
			glVertex3f (0., 0., mRadius * 0.3);
		glEnd ();
		glEnable (GL_DEPTH_TEST);

		return;
	} else if (mBaseType == EntityBaseTypeBlock) {
		glBegin (GL_QUADS);
		glVertex3f (-0.5, 0., 0.5);
		glVertex3f (0.5, 0., 0.5);
		glVertex3f (0.5, 0., -0.5);
		glVertex3f (-0.5, 0., -0.5);
		glEnd ();
	} else if (mBaseType == EntityBaseTypeParticle) {
		int i, segments;
		segments = 20;
		double x, z, rad, drad;

		drad = (M_PI * 2) / segments;

		glDisable (GL_DEPTH_TEST);
		glColor3f (0., 0.8, 0.1);
		glBegin (GL_TRIANGLE_FAN);
		glVertex3f (0., 0., 0.);
		for (i = 0; i <= segments; i++) {
			rad = drad * i;
			sincos (rad, &z, &x);
			glVertex3f (x * mRadius, 0., -z * mRadius);
		}
		glEnd ();

		glColor3f (0.8, 0., 0.2);
		glBegin (GL_TRIANGLES);
			glVertex3f (mRadius, 0., 0.);
			glVertex3f (0., 0., -mRadius * 0.3);
			glVertex3f (0., 0., mRadius * 0.3);
		glEnd ();
		glEnable (GL_DEPTH_TEST);

		return;
	}
}

}

