add r_particlesdesc callback and removed latch, r_particlesdesc will now reload particle set on change

git-svn-id: https://svn.code.sf.net/p/fteqw/code/trunk@2245 fc73d0e0-1445-4013-8a0c-d673dee63da5
This commit is contained in:
TimeServ 2006-05-06 06:26:02 +00:00
parent 0f2a193838
commit 9e8aa5ee66
3 changed files with 17 additions and 10 deletions

View File

@ -1486,7 +1486,7 @@ void CL_ParseServerData (void)
} }
CL_ClearState (); CL_ClearState ();
P_NewServer(); Cvar_ForceCallback(&r_particlesdesc);
Stats_NewMap(); Stats_NewMap();
cl.servercount = svcnt; cl.servercount = svcnt;
@ -1692,7 +1692,7 @@ void CLQ2_ParseServerData (void)
//cl.refresh_prepped = false; //cl.refresh_prepped = false;
} }
P_NewServer(); Cvar_ForceCallback(&r_particlesdesc);
if (R_PreNewMap) if (R_PreNewMap)
R_PreNewMap(); R_PreNewMap();
@ -1712,7 +1712,7 @@ void CLNQ_ParseServerData(void) //Doesn't change gamedir - use with caution.
Con_TPrintf (TLC_GOTSVDATAPACKET); Con_TPrintf (TLC_GOTSVDATAPACKET);
CL_ClearState (); CL_ClearState ();
Stats_NewMap(); Stats_NewMap();
P_NewServer(); Cvar_ForceCallback(&r_particlesdesc);
protover = MSG_ReadLong (); protover = MSG_ReadLong ();

View File

@ -121,7 +121,10 @@ extern cvar_t r_part_rain;
extern cvar_t r_bloodstains; extern cvar_t r_bloodstains;
extern cvar_t gl_part_flame; extern cvar_t gl_part_flame;
cvar_t r_particlesdesc = SCVARF("r_particlesdesc", "spikeset", CVAR_LATCH|CVAR_SEMICHEAT); // callbacks
void R_ParticlesDesc_Callback(struct cvar_s *var, char *oldvalue);
cvar_t r_particlesdesc = SCVARFC("r_particlesdesc", "spikeset", CVAR_SEMICHEAT, R_ParticlesDesc_Callback);
cvar_t r_part_rain_quantity = SCVAR("r_part_rain_quantity", "1"); cvar_t r_part_rain_quantity = SCVAR("r_part_rain_quantity", "1");
@ -1483,14 +1486,18 @@ void P_ExportBuiltinSet_f(void)
Con_Printf("Written particles/%s.cfg\n", efname); Con_Printf("Written particles/%s.cfg\n", efname);
} }
void P_NewServer(void) void R_ParticlesDesc_Callback(struct cvar_s *var, char *oldvalue)
{ {
extern model_t mod_known[]; extern model_t mod_known[];
extern int mod_numknown; extern int mod_numknown;
int restrictlevel = Cmd_FromGamecode() ? RESTRICT_SERVER : RESTRICT_LOCAL;
model_t *mod; model_t *mod;
int i; int i;
if (cls.state == ca_disconnected)
return; // don't bother parsing while disconnected
for (i = 0; i < numparticletypes; i++) for (i = 0; i < numparticletypes; i++)
{ {
*part_type[i].texname = '\0'; *part_type[i].texname = '\0';
@ -1501,8 +1508,6 @@ void P_NewServer(void)
part_type->ramp = NULL; part_type->ramp = NULL;
} }
for (i=0 , mod=mod_known ; i<mod_numknown ; i++, mod++) for (i=0 , mod=mod_known ; i<mod_numknown ; i++, mod++)
{ {
mod->particleeffect = -1; mod->particleeffect = -1;
@ -1539,8 +1544,8 @@ void P_NewServer(void)
file = COM_LoadMallocFile(va("%s.cfg", r_particlesdesc.string)); file = COM_LoadMallocFile(va("%s.cfg", r_particlesdesc.string));
if (file) if (file)
{ {
Cbuf_AddText(file, RESTRICT_LOCAL); Cbuf_AddText(file, restrictlevel);
Cbuf_AddText("\n", RESTRICT_LOCAL); //I'm paranoid. Cbuf_AddText("\n", restrictlevel);
BZ_Free(file); BZ_Free(file);
} }
else else

View File

@ -136,7 +136,6 @@ typedef struct beamseg_s
void P_DrawParticles (void); void P_DrawParticles (void);
void P_InitParticles (void); void P_InitParticles (void);
void P_ClearParticles (void); void P_ClearParticles (void);
void P_NewServer(void);
//allocate a new effect //allocate a new effect
int P_ParticleTypeForName(char *name); int P_ParticleTypeForName(char *name);
@ -182,4 +181,7 @@ void P_DelinkTrailstate(trailstate_t **tsk);
typedef enum { BM_BLEND, BM_BLENDCOLOUR, BM_ADD, BM_SUBTRACT } blendmode_t; typedef enum { BM_BLEND, BM_BLENDCOLOUR, BM_ADD, BM_SUBTRACT } blendmode_t;
// used for callback
extern cvar_t r_particlesdesc;
#endif #endif