Added command that generates a .precache file for a map

This commit is contained in:
Walter Julius Hennecke 2012-12-14 20:47:08 +01:00
parent 039985bd27
commit f776fdf3e3
5 changed files with 87 additions and 12 deletions

View File

@ -915,5 +915,8 @@ void CG_InitConsoleCommands( void ) {
trap_AddCommand("selfdestruct");
trap_AddCommand("shipdamage");
trap_AddCommand("shiphealth");
/* precacheFile */
trap_AddCommand("generatePrecacheFile");
}

View File

@ -350,7 +350,7 @@ void CG_PrecacheRemapShaders(void) {
len = trap_FS_FOpenFile(filepath, &f, FS_READ);
if(!len) {
if(!f) {
CG_Printf("No precache file ...\n");
return;
}
@ -371,7 +371,8 @@ void CG_PrecacheRemapShaders(void) {
ptr = data;
token = COM_Parse(&ptr);
while(token != NULL) {
CG_Printf("\t%s\n", token);
if(!token[0]) break;
trap_R_RegisterShader(token);
token = COM_Parse(&ptr);

View File

@ -7346,6 +7346,72 @@ void Cmd_CamtestEnd_f(gentity_t *ent) {
}
// END CCAM
extern target_alert_Shaders_s alertShaders;
void Cmd_GeneratePrecacheFile(gentity_t *ent) {
int i;
char info[MAX_INFO_STRING];
char file[MAX_QPATH];
fileHandle_t f;
trap_GetServerinfo(info, MAX_INFO_STRING);
Com_sprintf(file, MAX_QPATH, "maps/%s.precache", Info_ValueForKey(info, "mapname"));
trap_FS_FOpenFile(file, &f, FS_APPEND);
if(!f) {
G_Printf(S_COLOR_RED "[Error] - Could not create/open 'maps/%s.precache'\n", file);
return;
}
G_Printf("Generating precache file '%s' ...\n", file);
for(i = 0; i < alertShaders.numShaders; i++) {
G_Printf("\t%s\n", alertShaders.greenShaders[i]);
G_Printf("\t%s\n", alertShaders.blueShaders[i]);
G_Printf("\t%s\n", alertShaders.redShaders[i]);
G_Printf("\t%s\n", alertShaders.yellowShaders[i]);
trap_FS_Write("\"", 1, f);
trap_FS_Write(alertShaders.greenShaders[i], strlen(alertShaders.greenShaders[i]), f);
trap_FS_Write("\"\n\"", 3, f);
trap_FS_Write(alertShaders.blueShaders[i], strlen(alertShaders.blueShaders[i]), f);
trap_FS_Write("\"\n\"", 3, f);
trap_FS_Write(alertShaders.redShaders[i], strlen(alertShaders.redShaders[i]), f);
trap_FS_Write("\"\n\"", 3, f);
trap_FS_Write(alertShaders.yellowShaders[i], strlen(alertShaders.yellowShaders[i]), f);
trap_FS_Write("\"\n", 2, f);
}
for(i = 0; i < MAX_GENTITIES; i++) {
if(!g_entities[i].inuse) continue;
if(g_entities[i].classname != NULL && !strcmp(g_entities[i].classname, "target_turbolift")) {
if(g_entities[i].falsename != NULL && g_entities[i].falsename[0] != 0) {
G_Printf("\t%s\n", g_entities[i].falsename);
trap_FS_Write("\"", 1, f);
trap_FS_Write(g_entities[i].falsename, strlen(g_entities[i].falsename), f);
trap_FS_Write("\"\n", 2, f);
}
if(g_entities[i].truename != NULL && g_entities[i].truename[0] != 0) {
G_Printf("\t%s\n", g_entities[i].truename);
trap_FS_Write("\"", 1, f);
trap_FS_Write(g_entities[i].truename, strlen(g_entities[i].truename), f);
trap_FS_Write("\"\n", 2, f);
}
continue;
}
if(g_entities[i].targetShaderNewName != NULL && g_entities[i].targetShaderNewName[0] != 0) {
G_Printf("\t%s\n", g_entities[i].targetShaderNewName);
trap_FS_Write("\"", 1, f);
trap_FS_Write(g_entities[i].targetShaderNewName, strlen(g_entities[i].targetShaderNewName), f);
trap_FS_Write("\"\n", 2, f);
}
}
G_Printf("Done.\n");
trap_FS_FCloseFile(f);
}
/*
=================
G_Client_Command
@ -7606,6 +7672,9 @@ void G_Client_Command( int clientNum )
else if (Q_stricmp(cmd, "camtestend") == 0)
Cmd_CamtestEnd_f(ent);
// END CCAM
else if (Q_stricmp (cmd, "generatePrecacheFile") == 0) {
Cmd_GeneratePrecacheFile(ent);
}
else if (Q_strncmp (cmd, "\n", 1) == 0 || Q_strncmp (cmd, " ", 1) == 0 || Q_strncmp (cmd, "\0", 1) == 0) // sorry
(void)(0);
else

View File

@ -2102,4 +2102,13 @@ struct timedMessage_s {
char* message;
} timedMessage_s;
/* alert shaders */
typedef struct {
char *greenShaders[10];
char *redShaders[10];
char *yellowShaders[10];
char *blueShaders[10];
int numShaders;
} target_alert_Shaders_s;
#endif //_G_LOCAL_H_

View File

@ -1133,7 +1133,7 @@ static void target_turbolift_endMove ( gentity_t *ent )
}
// check for shader remaps
if(rpg_calcLiftTravelDuration.integer) {
if(rpg_calcLiftTravelDuration.integer || level.overrideCalcLiftTravelDuration) {
if((ent->truename && otherLift->truename) || (ent->falsename && otherLift->falsename)) {
f = level.time * 0.001;
AddRemap(ent->targetShaderName, ent->targetShaderName, f);
@ -1403,7 +1403,7 @@ static void target_turbolift_startMove ( gentity_t *ent )
}
// check for shader remaps
if(rpg_calcLiftTravelDuration.integer) {
if(rpg_calcLiftTravelDuration.integer || level.overrideCalcLiftTravelDuration) {
if(time2 < 0 && ent->truename && otherLift->truename) {
f = level.time * 0.001;
AddRemap(ent->targetShaderName, ent->truename, f);
@ -1858,15 +1858,8 @@ shader remapping:
You can remap multiple shaders by separating them with \n.
Example: "greenshader" "textures/alert/green1\ntextures/alert/green2"
*/
typedef struct {
char *greenShaders[10];
char *redShaders[10];
char *yellowShaders[10];
char *blueShaders[10];
int numShaders;
} target_alert_Shaders_s;
static target_alert_Shaders_s alertShaders;
target_alert_Shaders_s alertShaders;
void target_alert_remapShaders(int target_condition) {
float f = 0;