r3257 - in trunk/data/qcsrc: common menu/nexuiz
DONOTREPLY at icculus.org
DONOTREPLY at icculus.org
Thu Jan 24 10:48:56 EST 2008
Author: div0
Date: 2008-01-24 10:48:55 -0500 (Thu, 24 Jan 2008)
New Revision: 3257
Modified:
trunk/data/qcsrc/common/mapinfo.qc
trunk/data/qcsrc/common/mapinfo.qh
trunk/data/qcsrc/menu/nexuiz/util.qc
Log:
MapInfo cache. Untested. Enjoy the bugs. Make your time ha ha ha ha.
Modified: trunk/data/qcsrc/common/mapinfo.qc
===================================================================
--- trunk/data/qcsrc/common/mapinfo.qc 2008-01-24 12:46:19 UTC (rev 3256)
+++ trunk/data/qcsrc/common/mapinfo.qc 2008-01-24 15:48:55 UTC (rev 3257)
@@ -84,6 +84,84 @@
return substring(s, o + 1, strlen(s) - (o + 1));
}
+float _MapInfo_Cache_Active;
+float _MapInfo_Cache_DB_NameToIndex;
+float _MapInfo_Cache_Buf_IndexToMapData;
+
+void MapInfo_Cache_Destroy()
+{
+ if(!_MapInfo_Cache_Active)
+ return;
+
+ db_close(_MapInfo_Cache_DB_NameToIndex);
+ buf_del(_MapInfo_Cache_Buf_IndexToMapData);
+ _MapInfo_Cache_Active = 0;
+}
+
+void MapInfo_Cache_Create()
+{
+ MapInfo_Cache_Destroy();
+ _MapInfo_Cache_DB_NameToIndex = db_create();
+ _MapInfo_Cache_Buf_IndexToMapData = buf_create();
+ _MapInfo_Cache_Active = 1;
+}
+
+void MapInfo_Cache_Invalidate()
+{
+ if(!_MapInfo_Cache_Active)
+ return;
+
+ MapInfo_Cache_Create();
+}
+
+void MapInfo_Cache_Store()
+{
+ float i;
+ string s;
+ if(!_MapInfo_Cache_Active)
+ return;
+
+ s = db_get(_MapInfo_Cache_DB_NameToIndex, MapInfo_Map_bspname);
+ if(!s) // empty string is NOT valid here!
+ i = buf_getsize(_MapInfo_Cache_Buf_IndexToMapData);
+ else
+ i = stof(s);
+
+ // now store all the stuff
+ bufstr_set(_MapInfo_Cache_Buf_IndexToMapData, i++, MapInfo_Map_bspname);
+ bufstr_set(_MapInfo_Cache_Buf_IndexToMapData, i++, MapInfo_Map_title);
+ bufstr_set(_MapInfo_Cache_Buf_IndexToMapData, i++, MapInfo_Map_description);
+ bufstr_set(_MapInfo_Cache_Buf_IndexToMapData, i++, MapInfo_Map_author);
+ bufstr_set(_MapInfo_Cache_Buf_IndexToMapData, i++, ftos(MapInfo_Map_supportedGametypes));
+ bufstr_set(_MapInfo_Cache_Buf_IndexToMapData, i++, ftos(MapInfo_Map_supportedFeatures));
+ bufstr_set(_MapInfo_Cache_Buf_IndexToMapData, i++, ftos(MapInfo_Map_diameter));
+ bufstr_set(_MapInfo_Cache_Buf_IndexToMapData, i++, ftos(MapInfo_Map_spawnpoints));
+}
+
+float MapInfo_Cache_Retrieve(string map)
+{
+ float i;
+ string s;
+ if(!_MapInfo_Cache_Active)
+ return 0;
+
+ s = db_get(_MapInfo_Cache_DB_NameToIndex, map);
+ if(!s)
+ return 0;
+ i = stof(s);
+
+ // now retrieve all the stuff
+ MapInfo_Map_bspname = bufstr_get(_MapInfo_Cache_Buf_IndexToMapData, i++);
+ MapInfo_Map_title = bufstr_get(_MapInfo_Cache_Buf_IndexToMapData, i++);
+ MapInfo_Map_description = bufstr_get(_MapInfo_Cache_Buf_IndexToMapData, i++);
+ MapInfo_Map_author = bufstr_get(_MapInfo_Cache_Buf_IndexToMapData, i++);
+ MapInfo_Map_supportedGametypes = stof(bufstr_get(_MapInfo_Cache_Buf_IndexToMapData, i++));
+ MapInfo_Map_supportedFeatures = stof(bufstr_get(_MapInfo_Cache_Buf_IndexToMapData, i++));
+ MapInfo_Map_diameter = stof(bufstr_get(_MapInfo_Cache_Buf_IndexToMapData, i++));
+ MapInfo_Map_spawnpoints = stof(bufstr_get(_MapInfo_Cache_Buf_IndexToMapData, i++));
+ return 1;
+}
+
// GLOB HANDLING (for all BSP files)
float _MapInfo_globopen;
float _MapInfo_globcount;
@@ -99,6 +177,7 @@
{
if(_MapInfo_globopen)
search_end(_MapInfo_globhandle);
+ MapInfo_Cache_Invalidate();
_MapInfo_globhandle = search_begin("maps/*.bsp", TRUE, TRUE);
_MapInfo_globcount = search_getsize(_MapInfo_globhandle);
_MapInfo_globopen = 1;
@@ -379,6 +458,10 @@
float fh, fh2;
float r, f;
+ if(pGametypeToSet == 0)
+ if(MapInfo_Cache_Retrieve(pFilename))
+ return 1;
+
r = 1;
MapInfo_Map_bspname = pFilename;
@@ -498,6 +581,7 @@
if(pGametypeToSet)
if(!(MapInfo_Map_supportedGametypes & pGametypeToSet))
error("Can't select the requested game type. Bailing out.");
+ MapInfo_Cache_Store();
if(MapInfo_Map_supportedGametypes != 0)
return r;
dprint("Map ", pFilename, " supports no game types, ignored\n");
Modified: trunk/data/qcsrc/common/mapinfo.qh
===================================================================
--- trunk/data/qcsrc/common/mapinfo.qh 2008-01-24 12:46:19 UTC (rev 3256)
+++ trunk/data/qcsrc/common/mapinfo.qh 2008-01-24 15:48:55 UTC (rev 3257)
@@ -59,3 +59,7 @@
// to be called from worldspawn to set up cvars
void MapInfo_LoadMapSettings(string s);
+
+void MapInfo_Cache_Destroy(); // disable caching
+void MapInfo_Cache_Create(); // enable caching
+void MapInfo_Cache_Invalidate(); // delete cache if any, but keep enabled
Modified: trunk/data/qcsrc/menu/nexuiz/util.qc
===================================================================
--- trunk/data/qcsrc/menu/nexuiz/util.qc 2008-01-24 12:46:19 UTC (rev 3256)
+++ trunk/data/qcsrc/menu/nexuiz/util.qc 2008-01-24 15:48:55 UTC (rev 3257)
@@ -160,6 +160,7 @@
string s;
float i, w, sz;
+ MapInfo_Cache_Create();
MapInfo_Enumerate();
if(!MapInfo_FilterGametype(MAPINFO_TYPE_ALL, 0, 1))
{
More information about the nexuiz-commits
mailing list