The colored dlight fix!

This commit is contained in:
Zephaniah E. Hull 2000-04-12 05:01:36 +00:00
parent b7df9b7d1f
commit 995b1859bd
5 changed files with 78 additions and 62 deletions

View file

@ -100,39 +100,46 @@ dlight_t *CL_AllocDlight (int key)
/*
===============
CL_NewDlight
Note, this is just a quick short cut for a few colors, if you need other
colors please just create your own dlight, instead of extending this..
===============
*/
void CL_NewDlight (int key, float x, float y, float z, float radius, float time,
int type)
void CL_NewDlight (int key, vec3_t origin, float radius, float time, int type)
{
dlight_t *dl;
dl = CL_AllocDlight (key);
dl->origin[0] = x;
dl->origin[1] = y;
dl->origin[2] = z;
dl->origin[0] = origin[0];
dl->origin[1] = origin[1];
dl->origin[2] = origin[2];
dl->radius = radius;
dl->die = cl.time + time;
if (type == 0) {
dl->color[0] = 0.2;
dl->color[1] = 0.1;
dl->color[2] = 0.05;
dl->color[3] = 0.7;
} else if (type == 1) {
dl->color[0] = 0.05;
dl->color[1] = 0.05;
dl->color[2] = 0.3;
dl->color[3] = 0.7;
} else if (type == 2) {
dl->color[0] = 0.5;
dl->color[1] = 0.05;
dl->color[2] = 0.05;
dl->color[3] = 0.7;
} else if (type == 3) {
dl->color[0]=0.5;
dl->color[1] = 0.05;
dl->color[2] = 0.4;
dl->color[3] = 0.7;
switch (type) {
case 0:
dl->color[0] = 0.2;
dl->color[1] = 0.1;
dl->color[2] = 0.05;
dl->color[3] = 0.7;
break;
case 1: // Blue
dl->color[0] = 0.05;
dl->color[1] = 0.05;
dl->color[2] = 0.5;
dl->color[3] = 0.7;
break;
case 2: // Red
dl->color[0] = 0.5;
dl->color[1] = 0.05;
dl->color[2] = 0.05;
dl->color[3] = 0.7;
break;
case 3: // Blue and Red
dl->color[0] = 0.5;
dl->color[1] = 0.05;
dl->color[2] = 0.5;
dl->color[3] = 0.7;
break;
}
}
@ -455,16 +462,19 @@ void CL_LinkPacketEntities (void)
s2 = s1; // FIXME: no interpolation right now
// spawn light flashes, even ones coming from invisible objects
if ((s1->effects & (EF_BLUE | EF_RED)) == (EF_BLUE | EF_RED))
CL_NewDlight (s1->number, s1->origin[0], s1->origin[1], s1->origin[2], 200 + (rand()&31), 0.1, 3);
else if (s1->effects & EF_BLUE)
CL_NewDlight (s1->number, s1->origin[0], s1->origin[1], s1->origin[2], 200 + (rand()&31), 0.1, 1);
else if (s1->effects & EF_RED)
CL_NewDlight (s1->number, s1->origin[0], s1->origin[1], s1->origin[2], 200 + (rand()&31), 0.1, 2);
else if (s1->effects & EF_BRIGHTLIGHT)
CL_NewDlight (s1->number, s1->origin[0], s1->origin[1], s1->origin[2] + 16, 400 + (rand()&31), 0.1, 0);
else if (s1->effects & EF_DIMLIGHT)
CL_NewDlight (s1->number, s1->origin[0], s1->origin[1], s1->origin[2], 200 + (rand()&31), 0.1, 0);
if ((s1->effects & (EF_BLUE | EF_RED)) == (EF_BLUE | EF_RED)) {
CL_NewDlight (s1->number, s1->origin, 200 + (rand()&31), 0.1, 3);
} else if (s1->effects & EF_BLUE) {
CL_NewDlight (s1->number, s1->origin, 200 + (rand()&31), 0.1, 1);
} else if (s1->effects & EF_RED) {
CL_NewDlight (s1->number, s1->origin, 200 + (rand()&31), 0.1, 2);
} else if (s1->effects & EF_BRIGHTLIGHT) {
s1->origin[2] += 16;
CL_NewDlight (s1->number, s1->origin, 400 + (rand()&31), 0.1, 0);
s1->origin[2] -= 16;
} else if (s1->effects & EF_DIMLIGHT) {
CL_NewDlight (s1->number, s1->origin, 200 + (rand()&31), 0.1, 0);
}
// if set to invisible, skip
if (!s1->modelindex)
@ -839,16 +849,19 @@ void CL_LinkPlayers (void)
// spawn light flashes, even ones coming from invisible objects
if (!gl_flashblend->value || j != cl.playernum) {
if ((state->effects & (EF_BLUE | EF_RED)) == (EF_BLUE | EF_RED))
CL_NewDlight (j, state->origin[0], state->origin[1], state->origin[2], 200 + (rand()&31), 0.1, 3);
else if (state->effects & EF_BLUE)
CL_NewDlight (j, state->origin[0], state->origin[1], state->origin[2], 200 + (rand()&31), 0.1, 1);
else if (state->effects & EF_RED)
CL_NewDlight (j, state->origin[0], state->origin[1], state->origin[2], 200 + (rand()&31), 0.1, 2);
else if (state->effects & EF_BRIGHTLIGHT)
CL_NewDlight (j, state->origin[0], state->origin[1], state->origin[2] + 16, 400 + (rand()&31), 0.1, 0);
else if (state->effects & EF_DIMLIGHT)
CL_NewDlight (j, state->origin[0], state->origin[1], state->origin[2], 200 + (rand()&31), 0.1, 0);
if ((state->effects & (EF_BLUE | EF_RED)) == (EF_BLUE | EF_RED)) {
CL_NewDlight (j, state->origin, 200 + (rand()&31), 0.1, 3);
} else if (state->effects & EF_BLUE) {
CL_NewDlight (j, state->origin, 200 + (rand()&31), 0.1, 1);
} else if (state->effects & EF_RED) {
CL_NewDlight (j, state->origin, 200 + (rand()&31), 0.1, 2);
} else if (state->effects & EF_BRIGHTLIGHT) {
state->origin[2] += 16;
CL_NewDlight (j, state->origin, 400 + (rand()&31), 0.1, 0);
state->origin[2] -= 16;
} else if (state->effects & EF_DIMLIGHT) {
CL_NewDlight (j, state->origin, 200 + (rand()&31), 0.1, 0);
}
}
// the player object never gets added

View file

@ -754,7 +754,9 @@ void CL_FullServerinfo_f (void)
return;
}
Con_DPrintf("Cmd_Argv(1): '%s'\n", Cmd_Argv(1));
strcpy (cl.serverinfo, Cmd_Argv(1));
Con_DPrintf("cl.serverinfo: '%s'\n", cl.serverinfo);
if ((p = Info_ValueForKey(cl.serverinfo, "*qf_version")) && *p) {
if (!server_version)

View file

@ -108,13 +108,13 @@ void R_InitBubble() {
void R_RenderDlight (dlight_t *light)
{
int i, j;
// float a;
float a;
vec3_t v;
float rad;
float *bub_sin, *bub_cos;
// float *bub_sin, *bub_cos;
bub_sin = bubble_sintable;
bub_cos = bubble_costable;
//bub_sin = bubble_sintable;
//bub_cos = bubble_costable;
rad = light->radius * 0.35;
VectorSubtract (light->origin, r_origin, v);
@ -137,12 +137,17 @@ void R_RenderDlight (dlight_t *light)
glColor3f (0,0,0);
for (i=16 ; i>=0 ; i--)
{
// a = i/16.0 * M_PI*2;
a = i/16.0 * M_PI*2;
for (j=0 ; j<3 ; j++)
v[j] = light->origin[j] + vright[j]*cos(a)*rad + vup[j]*sin(a)*rad;
/*
for (j=0 ; j<3 ; j++)
v[j] = light->origin[j] + (vright[j]*(*bub_cos) +
+ vup[j]*(*bub_sin)) * rad;
bub_sin++;
bub_cos++;
*/
glVertex3fv (v);
}
glEnd ();

View file

@ -328,11 +328,11 @@ GL_DrawAliasFrame (aliashdr_t *paliashdr, int posenum)
// normals and vertexes come from the frame list
l = shadedots[verts->lightnormalindex]
* shadelight[3];
l = shadedots[verts->lightnormalindex] * shadelight[3];
if (shadelight[0] || shadelight[1] || shadelight[2])
glColor3f (l*shadelight[0], l*shadelight[1],
l*shadelight[2]);
//glColor3f (l*shadelight[0], l*shadelight[1], l*shadelight[2]);
glColor3f (min(l+shadelight[0], 1), min(l+shadelight[1], 1),
min(l+shadelight[2], 1));
else
glColor3f (l, l, l);
@ -481,12 +481,9 @@ R_DrawAliasModel (entity_t *e) {
// ZOID: models should be affected by
// dlights as well
if (r_dynamic->value) {
shadelight[0] +=
cl_dlights[lnum].color[0];
shadelight[1] +=
cl_dlights[lnum].color[1];
shadelight[2] +=
cl_dlights[lnum].color[2];
shadelight[0] += cl_dlights[lnum].color[0];
shadelight[1] += cl_dlights[lnum].color[1];
shadelight[2] += cl_dlights[lnum].color[2];
shadelight[3] += add;
}
}

View file

@ -1184,8 +1184,7 @@ void R_DrawBrushModel (entity_t *e)
{
for (k=0 ; k<MAX_DLIGHTS ; k++)
{
if ((cl_dlights[k].die < cl.time) ||
(!cl_dlights[k].radius))
if ((cl_dlights[k].die < cl.time) || (!cl_dlights[k].radius))
continue;
R_MarkLights (&cl_dlights[k], 1<<k,