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