fix the persistent fires. For sanity's sake, the non-renderer specific parts

of gl_dyn_fires.c have been moved to r_main.c (for now).
This commit is contained in:
Bill Currie 2001-06-29 02:43:04 +00:00
parent 85d2176bb6
commit f61ca0e321
11 changed files with 116 additions and 153 deletions

View file

@ -1,45 +0,0 @@
/*
qf_rlight.h
GL light stuff from the renderer.
Copyright (C) 1996-1997 Id Software, Inc.
This program is free software; you can redistribute it and/or
modify it under the terms of the GNU General Public License
as published by the Free Software Foundation; either version 2
of the License, or (at your option) any later version.
This program is distributed in the hope that it will be useful,
but WITHOUT ANY WARRANTY; without even the implied warranty of
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.
See the GNU General Public License for more details.
You should have received a copy of the GNU General Public License
along with this program; if not, write to:
Free Software Foundation, Inc.
59 Temple Place - Suite 330
Boston, MA 02111-1307, USA
$Id$
*/
#ifndef __QF_GL_fires_h
#define __QF_GL_fires_h
#ifdef HAVE_CONFIG_H
# include "config.h"
#endif
#ifdef HAVE_WINDOWS_H
# include <windows.h>
#endif
#include "QF/qtypes.h"
void R_AddFire (vec3_t, vec3_t, struct entity_s *ent);
void R_UpdateFires (void);
#endif // __QF_GL_fires_h

View file

@ -49,6 +49,7 @@ extern struct cvar_s *r_draworder;
extern struct cvar_s *r_drawviewmodel;
extern struct cvar_s *r_dspeeds;
extern struct cvar_s *r_dynamic;
extern struct cvar_s *r_firecolor;
extern struct cvar_s *r_fullbright;
extern struct cvar_s *r_graphheight;
extern struct cvar_s *r_lightmap;

View file

@ -50,7 +50,7 @@ void R_RunPuffEffect (vec3_t org, particle_effect_t type, byte count);
void R_RunSpikeEffect (vec3_t org, particle_effect_t type);
#ifdef QUAKE2
void R_DarkFieldParticles (entity_t *ent);
void R_DarkFieldParticles (struct entity_s *ent);
#endif
void R_EntityParticles (struct entity_s *ent);
void R_BlobExplosion (vec3_t org);
@ -64,4 +64,23 @@ void R_InitParticles (void);
void R_ClearParticles (void);
void R_DrawParticles (void);
#define MAX_FIRES 128 // rocket flames
typedef struct {
int key; // allows reusability
vec3_t origin, owner;
float size;
float die, decay; // duration settings
float minlight; // lighting threshold
float color[3]; // RGB
} fire_t;
extern fire_t r_fires[];
void R_AddFire (vec3_t start, vec3_t end, struct entity_s *ent);
void R_DrawFire (fire_t *f);
void R_UpdateFires (void);
fire_t *R_AllocFire (int key);
void R_ClearFires (void);
#endif // _R_DYNAMIC_H

View file

@ -47,100 +47,9 @@
#include "QF/GL/qf_rlight.h"
#include "r_cvar.h"
#include "r_dynamic.h"
#include "r_shared.h"
#define MAX_FIRES 128 // rocket flames
typedef struct {
int key; // allows reusability
vec3_t origin, owner;
float size;
float die, decay; // duration settings
float minlight; // lighting threshold
float color[3]; // RGB
} fire_t;
static fire_t r_fires[MAX_FIRES];
extern cvar_t *gl_fires;
extern cvar_t *r_firecolor;
void R_AddFire (vec3_t, vec3_t, struct entity_s *ent);
fire_t *R_AllocFire (int);
void R_DrawFire (fire_t *);
void R_UpdateFires (void);
/*
R_AddFire
Nifty ball of fire GL effect. Kinda a meshing of the dlight and
particle engine code.
*/
void
R_AddFire (vec3_t start, vec3_t end, entity_t *ent)
{
float len;
fire_t *f;
vec3_t vec;
int key;
if (!gl_fires->int_val)
return;
VectorSubtract (end, start, vec);
len = VectorNormalize (vec);
key = ent->keynum;
if (len) {
f = R_AllocFire (key);
VectorCopy (end, f->origin);
VectorCopy (start, f->owner);
f->size = 10;
f->die = r_realtime + 0.5;
f->decay = 1;
VectorCopy (r_firecolor->vec, f->color);
}
}
/*
R_AllocFire
Clears out and returns a new fireball
*/
fire_t *
R_AllocFire (int key)
{
int i;
fire_t *f;
if (key) // first try to find/reuse a keyed
// spot
{
f = r_fires;
for (i = 0; i < MAX_FIRES; i++, f++)
if (f->key == key) {
memset (f, 0, sizeof (*f));
f->key = key;
return f;
}
}
f = r_fires; // no match, look for a free spot
for (i = 0; i < MAX_FIRES; i++, f++) {
if (f->die < r_realtime) {
memset (f, 0, sizeof (*f));
f->key = key;
return f;
}
}
f = &r_fires[0];
memset (f, 0, sizeof (*f));
f->key = key;
return f;
}
/*
R_DrawFire

View file

@ -39,21 +39,20 @@
#include <stdlib.h>
#include "QF/cmd.h"
#include "compat.h"
#include "QF/console.h"
#include "QF/cvar.h"
#include "QF/qargs.h"
#include "QF/render.h"
#include "QF/sys.h"
#include "varrays.h"
#include "QF/vfs.h"
#include "QF/GL/defines.h"
#include "QF/GL/funcs.h"
#include "r_cvar.h"
#include "QF/GL/qf_fires.h"
#include "compat.h"
#include "r_cvar.h"
#include "r_dynamic.h"
#include "r_shared.h"
#include "varrays.h"
static particle_t *particles, **freeparticles;
static short r_numparticles, numparticles;

View file

@ -58,7 +58,6 @@
#include "QF/GL/qf_vid.h"
#include "QF/GL/qf_rsurf.h"
#include "QF/GL/qf_rlight.h"
#include "QF/GL/qf_fires.h"
#include "r_cvar.h"
#include "r_dynamic.h"

View file

@ -85,6 +85,7 @@ cvar_t *r_drawflat;
cvar_t *r_drawviewmodel;
cvar_t *r_dspeeds;
cvar_t *r_dynamic;
cvar_t *r_firecolor;
cvar_t *r_graphheight;
cvar_t *r_maxedges;
cvar_t *r_maxsurfs;
@ -222,6 +223,8 @@ R_Init_Cvars (void)
"Toggles the display of drawing speed information");
r_dynamic = Cvar_Get ("r_dynamic", "1", CVAR_NONE, NULL,
"Set to 0 to disable lightmap changes");
r_firecolor = Cvar_Get ("r_firecolor", "0.9 0.4 0", CVAR_ARCHIVE, NULL,
"color of rocket and lava ball fires");
r_graphheight = Cvar_Get ("r_graphheight", "32", CVAR_NONE, NULL,
"Set the number of lines displayed in the "
"various graphs");

View file

@ -8,9 +8,12 @@
# include <strings.h>
#endif
#include "QF/cvar.h"
#include "QF/qtypes.h"
#include "QF/render.h"
#include "r_cvar.h"
#include "r_dynamic.h"
#include "r_local.h"
qboolean r_inhibit_viewmodel;
@ -26,6 +29,7 @@ int r_lineadj;
qboolean r_active;
float r_time1;
fire_t r_fires[MAX_FIRES];
dlight_t *
R_AllocDlight (int key)
@ -86,3 +90,80 @@ R_ClearDlights (void)
{
memset (r_dlights, 0, sizeof (r_dlights));
}
void
R_ClearFires (void)
{
memset (r_fires, 0, sizeof (r_fires));
}
/*
R_AddFire
Nifty ball of fire GL effect. Kinda a meshing of the dlight and
particle engine code.
*/
void
R_AddFire (vec3_t start, vec3_t end, entity_t *ent)
{
float len;
fire_t *f;
vec3_t vec;
int key;
if (!gl_fires->int_val)
return;
VectorSubtract (end, start, vec);
len = VectorNormalize (vec);
key = ent->keynum;
if (len) {
f = R_AllocFire (key);
VectorCopy (end, f->origin);
VectorCopy (start, f->owner);
f->size = 10;
f->die = r_realtime + 0.5;
f->decay = 1;
VectorCopy (r_firecolor->vec, f->color);
}
}
/*
R_AllocFire
Clears out and returns a new fireball
*/
fire_t *
R_AllocFire (int key)
{
int i;
fire_t *f;
if (key) // first try to find/reuse a keyed
// spot
{
f = r_fires;
for (i = 0; i < MAX_FIRES; i++, f++)
if (f->key == key) {
memset (f, 0, sizeof (*f));
f->key = key;
return f;
}
}
f = r_fires; // no match, look for a free spot
for (i = 0; i < MAX_FIRES; i++, f++) {
if (f->die < r_realtime) {
memset (f, 0, sizeof (*f));
f->key = key;
return f;
}
}
f = &r_fires[0];
memset (f, 0, sizeof (*f));
f->key = key;
return f;
}

View file

@ -31,7 +31,6 @@
#endif
#include "QF/cmd.h"
#include "compat.h"
#include "QF/console.h"
#include "QF/cvar.h"
#include "QF/input.h"
@ -42,10 +41,12 @@
#include "QF/skin.h"
#include "QF/va.h"
#include "client.h"
#include "chase.h"
#include "client.h"
#include "compat.h"
#include "host.h"
#include "host.h"
#include "r_cvar.h"
#include "r_dynamic.h"
#include "server.h"
@ -74,8 +75,6 @@ cvar_t *m_yaw;
cvar_t *m_forward;
cvar_t *m_side;
cvar_t *r_firecolor;
cvar_t *show_fps;
cvar_t *show_time;
@ -152,8 +151,6 @@ CL_InitCvars (void)
"mouse forward/back speed");
m_side = Cvar_Get ("m_side", "0.8", CVAR_ARCHIVE, NULL,
"mouse strafe speed");
r_firecolor = Cvar_Get ("r_firecolor", "0.9 0.4 0", CVAR_ARCHIVE, NULL,
"color of rocket and lava ball fires");
show_fps = Cvar_Get ("show_fps", "0", CVAR_NONE, NULL,
"display realtime frames per second");
show_time = Cvar_Get ("show_time", "0", CVAR_NONE, NULL,
@ -183,6 +180,7 @@ CL_ClearState (void)
R_ClearEfrags ();
R_ClearDlights ();
R_ClearFires ();
for (i = 0; i < MAX_EDICTS; i++) {
cl_entities[i].baseline = &cl_baselines[i];

View file

@ -53,6 +53,7 @@
#include "host.h"
#include "msg_ucmd.h"
#include "pmove.h"
#include "r_cvar.h"
#include "r_dynamic.h"
#include "view.h"
@ -60,8 +61,6 @@ extern cvar_t *cl_predict_players;
extern cvar_t *cl_predict_players2;
extern cvar_t *cl_solid_players;
cvar_t *r_firecolor;
static struct predicted_player {
int flags;
qboolean active;
@ -1076,6 +1075,4 @@ CL_EmitEntities (void)
void
CL_Ents_Init (void)
{
r_firecolor = Cvar_Get ("r_firecolor", "0.9 0.4 0", CVAR_ARCHIVE, NULL,
"color of rocket and lava ball fires");
}

View file

@ -100,6 +100,7 @@
#include "net.h"
#include "pmove.h"
#include "r_cvar.h"
#include "r_dynamic.h"
#include "sbar.h"
#include "view.h"
@ -426,6 +427,7 @@ CL_ClearState (void)
R_ClearEfrags ();
R_ClearDlights ();
R_ClearFires ();
// wipe the entire cl structure
memset (&cl, 0, sizeof (cl));