]> de.git.xonotic.org Git - xonotic/xonotic-data.pk3dir.git/commitdiff
add cl_precacheplayermodels cvar
authorRudolf Polzer <divverent@alientrap.org>
Fri, 2 Dec 2011 13:18:48 +0000 (14:18 +0100)
committerRudolf Polzer <divverent@alientrap.org>
Fri, 2 Dec 2011 13:18:48 +0000 (14:18 +0100)
defaultXonotic.cfg
qcsrc/client/Main.qc
qcsrc/client/autocvars.qh

index 91a761018b5f3eab07453b89c3709348bd366763..b537e5f8706335a083c5d1c33ff2510b5c147b86 100644 (file)
@@ -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"
index b80bd9ef9f8a5f13b2d267c51dd33edc5f2042c8..af7787c0fc67797ea1c0c904976be2c996b5f414 100644 (file)
@@ -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();
index 7495becd8612288427543c8fdb898fb4ce68e580..d829904631ab0cf20e04d1fe5ffdea4b7b541ad4 100644 (file)
@@ -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;