From: Rudolf Polzer Date: Fri, 2 Dec 2011 13:18:48 +0000 (+0100) Subject: add cl_precacheplayermodels cvar X-Git-Tag: xonotic-v0.6.0~74^2~100^2~18 X-Git-Url: https://git.rm.cloudns.org/?a=commitdiff_plain;h=3778834ed3d7798c4d4d878fc98f51ae12b834ba;p=xonotic%2Fxonotic-data.pk3dir.git add cl_precacheplayermodels cvar --- diff --git a/defaultXonotic.cfg b/defaultXonotic.cfg index 91a761018..b537e5f87 100644 --- a/defaultXonotic.cfg +++ b/defaultXonotic.cfg @@ -1882,6 +1882,7 @@ set g_debug_bot_commands 0 "print scripted bot commands before executing" set g_debug_defaultsounds 0 "always use default sounds" set sv_use_csqc_players 0 "set to 1 to network players to CSQC (not compatible to old clients)" set cl_forceplayermodels 0 "set to 1 to make everyone look like yourself (requires server to have sv_use_csqc_players 1)" +set cl_precacheplayermodels 0 "TODO please check if this needs to be 1 or if precaching a model the server already requested is fast enough to do it at runtime" // debug cvars for keyhunt attaching set _angles "0 0 0" diff --git a/qcsrc/client/Main.qc b/qcsrc/client/Main.qc index b80bd9ef9..af7787c0f 100644 --- a/qcsrc/client/Main.qc +++ b/qcsrc/client/Main.qc @@ -41,6 +41,55 @@ void menu_sub_null() float __engine_check; #endif +void precache_playermodel(string m) +{ + float globhandle, i, n; + string f; + + if(substring(m, -9,5) == "_lod1") + return; + if(substring(m, -9,5) == "_lod2") + return; + precache_model(m); + f = strcat(substring(m, 0, -5), "_lod1", substring(m, -4, -1)); + if(fexists(f)) + precache_model(f); + f = strcat(substring(m, 0, -5), "_lod2", substring(m, -4, -1)); + if(fexists(f)) + precache_model(f); + + /* + globhandle = search_begin(strcat(m, "_*.sounds"), TRUE, FALSE); + if (globhandle < 0) + return; + n = search_getsize(globhandle); + for (i = 0; i < n; ++i) + { + //print(search_getfilename(globhandle, i), "\n"); + f = search_getfilename(globhandle, i); + PrecachePlayerSounds(f); + } + search_end(globhandle); + */ +} +void precache_all_playermodels(string pattern) +{ + float globhandle, i, n; + string f; + + globhandle = search_begin(pattern, TRUE, FALSE); + if (globhandle < 0) + return; + n = search_getsize(globhandle); + for (i = 0; i < n; ++i) + { + //print(search_getfilename(globhandle, i), "\n"); + f = search_getfilename(globhandle, i); + precache_playermodel(f); + } + search_end(globhandle); +} + string forcefog; void WaypointSprite_Load(); void CSQC_Init(void) @@ -130,6 +179,15 @@ void CSQC_Init(void) precache_model("null"); precache_sound("misc/hit.wav"); precache_sound("misc/typehit.wav"); + if (autocvar_cl_precacheplayermodels) + { + precache_all_playermodels("models/player/*.zym"); + precache_all_playermodels("models/player/*.dpm"); + precache_all_playermodels("models/player/*.md3"); + precache_all_playermodels("models/player/*.psk"); + precache_all_playermodels("models/player/*.iqm"); + } + Projectile_Precache(); Hook_Precache(); GibSplash_Precache(); diff --git a/qcsrc/client/autocvars.qh b/qcsrc/client/autocvars.qh index 7495becd8..d82990463 100644 --- a/qcsrc/client/autocvars.qh +++ b/qcsrc/client/autocvars.qh @@ -379,3 +379,4 @@ float autocvar_cl_loddistance2 = 4096; float autocvar_cl_forceplayermodels; float autocvar__cl_playerskin; string autocvar__cl_playermodel; +float autocvar_cl_precacheplayermodels;