73 lines
1.5 KiB
C++
73 lines
1.5 KiB
C++
|
#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;
|
||
|
}
|
||
|
}
|
||
|
|
||
|
}
|
||
|
|