X-Git-Url: http://git.xonotic.org/?a=blobdiff_plain;f=r_explosion.c;h=45b7f5ce12b336a5489651bbb27eb809ab8ae4ae;hb=4912a987528b78fa5cd322952acddd45ceba54d8;hp=80f4909fa1abeb7a49fc177a70806842ceaab9b1;hpb=9ee94ea2790fab90049c54c31941573802180ca6;p=xonotic%2Fdarkplaces.git diff --git a/r_explosion.c b/r_explosion.c index 80f4909f..45b7f5ce 100644 --- a/r_explosion.c +++ b/r_explosion.c @@ -101,22 +101,21 @@ void r_explosion_newmap(void) int R_ExplosionVert(int column, int row) { int i; - float a, b, c; + float yaw, pitch; + // top and bottom rows are all one position... + if (row == 0 || row == EXPLOSIONGRID) + column = 0; i = row * (EXPLOSIONGRID + 1) + column; - a = ((double) row / EXPLOSIONGRID) * M_PI * 2; - b = (((double) column / EXPLOSIONGRID) + 0.5) * M_PI; - c = cos(b); - explosionpoint[i][0] = cos(a) * c; - explosionpoint[i][1] = sin(a) * c; - explosionpoint[i][2] = -sin(b); + yaw = ((double) column / EXPLOSIONGRID) * M_PI * 2; + pitch = (((double) row / EXPLOSIONGRID) - 0.5) * M_PI; + explosionpoint[i][0] = cos(yaw) * cos(pitch); + explosionpoint[i][1] = sin(yaw) * cos(pitch); + explosionpoint[i][2] = 1 * -sin(pitch); explosionspherevertvel[i][0] = explosionpoint[i][0] * EXPLOSIONSTARTVELOCITY; explosionspherevertvel[i][1] = explosionpoint[i][1] * EXPLOSIONSTARTVELOCITY; explosionspherevertvel[i][2] = explosionpoint[i][2] * EXPLOSIONSTARTVELOCITY; explosiontexcoord2f[i][0] = (float) column / (float) EXPLOSIONGRID; explosiontexcoord2f[i][1] = (float) row / (float) EXPLOSIONGRID; - // top and bottom rows are all one position... - if (row == 0 || row == EXPLOSIONGRID) - column = 0; explosionnoiseindex[i] = (row % EXPLOSIONGRID) * EXPLOSIONGRID + (column % EXPLOSIONGRID); return i; } @@ -181,30 +180,22 @@ void R_DrawExplosionCallback(const void *calldata1, int calldata2) const explosion_t *e; e = calldata1; - memset(&m, 0, sizeof(m)); - m.blendfunc1 = GL_SRC_ALPHA; - m.blendfunc2 = GL_ONE; - m.tex[0] = R_GetTexture(explosiontexture); + GL_BlendFunc(GL_SRC_ALPHA, GL_ONE); + GL_DepthMask(false); + GL_DepthTest(true); R_Mesh_Matrix(&r_identitymatrix); numtriangles = EXPLOSIONTRIS; numverts = EXPLOSIONVERTS; - alpha = e->alpha * r_colorscale; + alpha = e->alpha; GL_Color(alpha, alpha, alpha, 1); - if (gl_mesh_copyarrays.integer) - { - R_Mesh_State(&m); - R_Mesh_GetSpace(numverts); - R_Mesh_CopyVertex3f(e->vert[0], numverts); - R_Mesh_CopyTexCoord2f(0, explosiontexcoord2f[0], numverts); - } - else - { - m.pointervertexcount = numverts; - m.pointer_vertex = e->vert[0]; - m.pointer_texcoord[0] = explosiontexcoord2f[0]; - R_Mesh_State(&m); - } + GL_VertexPointer(e->vert[0]); + + memset(&m, 0, sizeof(m)); + m.tex[0] = R_GetTexture(explosiontexture); + m.pointer_texcoord[0] = explosiontexcoord2f[0]; + R_Mesh_State_Texture(&m); + R_Mesh_Draw(numverts, numtriangles, explosiontris[0]); } @@ -231,7 +222,7 @@ void R_MoveExplosion(explosion_t *e) VectorMA(e->vert[i], frametime, e->vertvel[i], end); if (r_explosionclip.integer) { - if (CL_TraceLine(e->vert[i], end, impact, normal, 0, true, NULL) < 1) + if (CL_TraceLine(e->vert[i], end, impact, normal, true, NULL, SUPERCONTENTS_SOLID) < 1) { // clip velocity against the wall dot = DotProduct(e->vertvel[i], normal) * -1.125f; @@ -243,9 +234,6 @@ void R_MoveExplosion(explosion_t *e) VectorCopy(end, e->vert[i]); } } - for (i = 0;i < EXPLOSIONGRID;i++) - VectorCopy(e->vert[i * (EXPLOSIONGRID + 1)], e->vert[i * (EXPLOSIONGRID + 1) + EXPLOSIONGRID]); - memcpy(e->vert[EXPLOSIONGRID * (EXPLOSIONGRID + 1)], e->vert[0], sizeof(float[3]) * (EXPLOSIONGRID + 1)); }