initial mesh and physics support
This commit is contained in:
@@ -71,15 +71,30 @@ void draw_team(Team *team) {
|
||||
gluSphere(quadratic, 50.f, 32, 32);
|
||||
glPopMatrix();
|
||||
}
|
||||
|
||||
void draw_player(player_t *player) {
|
||||
GLuint wallTex = 0;
|
||||
void Client::drawPlayer(player_t *player) {
|
||||
if (player->status == 0)
|
||||
return;
|
||||
glMaterialfv(GL_FRONT, GL_AMBIENT_AND_DIFFUSE, player->team->color);
|
||||
glMatrixMode( GL_MODELVIEW);
|
||||
glPushMatrix();
|
||||
glTranslated(player->x, player->y, player->z);
|
||||
gluSphere(quadratic, 10.f, 32, 32);
|
||||
glEnableClientState( GL_VERTEX_ARRAY);
|
||||
glEnableClientState( GL_TEXTURE_COORD_ARRAY);
|
||||
glEnableClientState( GL_NORMAL_ARRAY);
|
||||
glVertexPointer(3, GL_FLOAT, game.shipMesh->vertex_size,
|
||||
game.shipMesh->vertices);
|
||||
glTexCoordPointer(2, GL_FLOAT, game.shipMesh->vertex_size,
|
||||
game.shipMesh->vertices + 3);
|
||||
glNormalPointer(GL_FLOAT, game.shipMesh->vertex_size,
|
||||
game.shipMesh->vertices + 5);
|
||||
for (size_t i = 0; i < game.shipMesh->object_count; i++) {
|
||||
glDrawElements(GL_TRIANGLES, game.shipMesh->objects[i].face_count * 3,
|
||||
GL_UNSIGNED_SHORT,
|
||||
&game.shipMesh->faces[game.shipMesh->objects[i].face_index]);
|
||||
}
|
||||
glDisableClientState(GL_VERTEX_ARRAY);
|
||||
glDisableClientState(GL_TEXTURE_COORD_ARRAY);
|
||||
glPopMatrix();
|
||||
}
|
||||
|
||||
@@ -152,9 +167,7 @@ void setup_explosion() {
|
||||
textures[4]);
|
||||
}
|
||||
|
||||
GLuint wallTex = 0;
|
||||
|
||||
void draw_box() {
|
||||
void Client::drawLevel() {
|
||||
|
||||
if (wallTex == 0) {
|
||||
glGenTextures(1, &wallTex);
|
||||
@@ -180,13 +193,14 @@ void draw_box() {
|
||||
//glDisable( GL_DEPTH_TEST);
|
||||
// glEnable( GL_LIGHTING);
|
||||
// glDisable( GL_BLEND);
|
||||
glColor4f(1, 1, 1, 1);
|
||||
glMatrixMode( GL_MODELVIEW);
|
||||
glPushMatrix();
|
||||
#if 0
|
||||
glTranslated(2000.0, 0.0, 0.0);
|
||||
//glScaled(5000.0f, 5000.0f, 5000.0f);
|
||||
float s = 3000.0f, t = 10.0f;
|
||||
// Just in case we set all vertices to white.
|
||||
glColor4f(1, 1, 1, 1);
|
||||
|
||||
// Render the front quad
|
||||
glBegin( GL_QUADS);
|
||||
@@ -278,6 +292,24 @@ void draw_box() {
|
||||
glTexCoord2f(t, 0);
|
||||
glVertex3f(s, -s, -s);
|
||||
glEnd();
|
||||
#else
|
||||
glEnableClientState( GL_VERTEX_ARRAY);
|
||||
glEnableClientState( GL_TEXTURE_COORD_ARRAY);
|
||||
glEnableClientState( GL_NORMAL_ARRAY);
|
||||
glVertexPointer(3, GL_FLOAT, game.levelMesh->vertex_size,
|
||||
game.levelMesh->vertices);
|
||||
glTexCoordPointer(2, GL_FLOAT, game.levelMesh->vertex_size,
|
||||
game.levelMesh->vertices + 3);
|
||||
glNormalPointer(GL_FLOAT, game.levelMesh->vertex_size,
|
||||
game.levelMesh->vertices + 5);
|
||||
for (size_t i = 0; i < game.levelMesh->object_count; i++) {
|
||||
glDrawElements(GL_TRIANGLES, game.levelMesh->objects[i].face_count * 3,
|
||||
GL_UNSIGNED_SHORT,
|
||||
&game.levelMesh->faces[game.levelMesh->objects[i].face_index]);
|
||||
}
|
||||
glDisableClientState(GL_VERTEX_ARRAY);
|
||||
glDisableClientState(GL_TEXTURE_COORD_ARRAY);
|
||||
#endif
|
||||
|
||||
// Restore enable bits and matrix
|
||||
glPopAttrib();
|
||||
@@ -450,7 +482,7 @@ void Client::update() {
|
||||
draw_team(&game.teams[i]);
|
||||
|
||||
for (size_t i = 0; i < GAME_PLAYER_COUNT; i++)
|
||||
draw_player(&game.player[i]);
|
||||
drawPlayer(&game.player[i]);
|
||||
|
||||
for (size_t i = 0; i < GAME_BOMB_COUNT; i++)
|
||||
draw_bomb(&game.bomb[i]);
|
||||
@@ -458,7 +490,7 @@ void Client::update() {
|
||||
for (size_t i = 0; i < GAME_POINT_COUNT; i++)
|
||||
draw_point(&game.point[i]);
|
||||
|
||||
draw_box();
|
||||
drawLevel();
|
||||
|
||||
glDisable(GL_LIGHT0);
|
||||
glDisable(GL_LIGHTING);
|
||||
|
@@ -33,6 +33,9 @@ private:
|
||||
void loadConsoleFont();
|
||||
|
||||
void onExplosion(double x, double y, double z);
|
||||
|
||||
void drawLevel();
|
||||
void drawPlayer(player_t *player);
|
||||
};
|
||||
|
||||
#endif /* CLIENT_H_ */
|
||||
|
Reference in New Issue
Block a user