r4946 - in trunk/data/qcsrc/menu: . nexuiz

DONOTREPLY at icculus.org DONOTREPLY at icculus.org
Fri Oct 31 04:32:02 EDT 2008


Author: div0
Date: 2008-10-31 04:31:43 -0400 (Fri, 31 Oct 2008)
New Revision: 4946

Modified:
   trunk/data/qcsrc/menu/mbuiltin.qh
   trunk/data/qcsrc/menu/nexuiz/campaign.c
   trunk/data/qcsrc/menu/nexuiz/dialog_singleplayer.c
Log:
multi campaign is back


Modified: trunk/data/qcsrc/menu/mbuiltin.qh
===================================================================
--- trunk/data/qcsrc/menu/mbuiltin.qh	2008-10-30 15:33:42 UTC (rev 4945)
+++ trunk/data/qcsrc/menu/mbuiltin.qh	2008-10-31 08:31:43 UTC (rev 4946)
@@ -299,6 +299,7 @@
 string(string in) uri_unescape = #511;
 
 string(string, float) netaddress_resolve = #625;
+string(string search, string replace, string subject) strreplace = #484;
 
 #ifdef FIXEDFOPEN
 float 	fopen( string filename, float mode ) =

Modified: trunk/data/qcsrc/menu/nexuiz/campaign.c
===================================================================
--- trunk/data/qcsrc/menu/nexuiz/campaign.c	2008-10-30 15:33:42 UTC (rev 4945)
+++ trunk/data/qcsrc/menu/nexuiz/campaign.c	2008-10-31 08:31:43 UTC (rev 4946)
@@ -8,7 +8,9 @@
 	METHOD(NexuizCampaignList, resizeNotify, void(entity, vector, vector, vector, vector))
 	METHOD(NexuizCampaignList, setSelected, void(entity, float))
 	METHOD(NexuizCampaignList, keyDown, float(entity, float, float, float))
+	METHOD(NexuizCampaignList, campaignGo, void(entity, float))
 
+	ATTRIB(NexuizCampaignList, campaignGlob, float, 0)
 	ATTRIB(NexuizCampaignList, realFontSize, vector, '0 0 0')
 	ATTRIB(NexuizCampaignList, columnPreviewOrigin, float, 0)
 	ATTRIB(NexuizCampaignList, columnPreviewSize, float, 0)
@@ -32,9 +34,16 @@
 	ATTRIB(NexuizCampaignList, cvarName, string, string_null)
 	METHOD(NexuizCampaignList, loadCvars, void(entity))
 	METHOD(NexuizCampaignList, saveCvars, void(entity))
+
+	ATTRIB(NexuizCampaignList, buttonNext, entity, NULL)
+	ATTRIB(NexuizCampaignList, buttonPrev, entity, NULL)
+	ATTRIB(NexuizCampaignList, labelTitle, entity, NULL)
+	ATTRIB(NexuizCampaignList, campaignTitle, string, string_null)
 ENDCLASS(NexuizCampaignList)
 entity makeNexuizCampaignList();
 void CampaignList_LoadMap(entity btn, entity me);
+void MultiCampaign_Next(entity btn, entity me);
+void MultiCampaign_Prev(entity btn, entity me);
 #endif
 
 #ifdef IMPLEMENTATION
@@ -110,7 +119,9 @@
 void configureNexuizCampaignListNexuizCampaignList(entity me)
 {
 	me.configureNexuizListBox(me);
+	me.campaignGlob = search_begin("maps/campaign*.txt", TRUE, TRUE);
 	me.loadCvars(me);
+	me.campaignGo(me, 0); // takes care of enabling/disabling buttons too
 }
 
 void loadCvarsNexuizCampaignList(entity me)
@@ -122,6 +133,7 @@
 		strunzone(me.cvarName);
 	campaign_name = strzone(cvar_string("g_campaign_name"));
 	me.cvarName = strzone(strcat("g_campaign", campaign_name, "_index"));
+	registercvar(me.cvarName, "", 0); // saved by server QC anyway
 	CampaignFile_Load(0, CAMPAIGN_MAX_ENTRIES);
 	me.campaignIndex = bound(0, cvar(me.cvarName), campaign_entries);
 	cvar_set(me.cvarName, ftos(me.campaignIndex));
@@ -130,15 +142,76 @@
 	me.nItems = min(me.campaignIndex + 2, campaign_entries);
 	me.selectedItem = min(me.campaignIndex, me.nItems - 1);
 	me.scrollPos = me.nItems * me.itemHeight - 1;
+	if(me.campaignTitle)
+		strunzone(me.campaignTitle);
+	if(campaign_name == "")
+		me.campaignTitle = strzone("Nexuiz Multiplayer Training Campaign");
+	else
+		me.campaignTitle = strzone(strreplace("_", " ", campaign_name));
+	if(me.labelTitle)
+		me.labelTitle.setText(me.labelTitle, me.campaignTitle);
 }
 
 void saveCvarsNexuizCampaignList(entity me)
 {
 	// write campaign cvars
-	cvar_set("g_campaign_name", campaign_name);
+	// no reason to do this!
+	// cvar_set("g_campaign_name", campaign_name);
 	// cvar_set(me.cvarName, ftos(me.campaignIndex)); // NOTE: only server QC does that!
 }
 
+void campaignGoNexuizCampaignList(entity me, float step)
+{
+	float canNext, canPrev;
+	string s;
+	float i, j, n;
+
+	canNext = canPrev = 0;
+
+	if(me.campaignGlob >= 0)
+	{
+		n = search_getsize(me.campaignGlob);
+		if(n > 0)
+		{
+			j = -1;
+			s = strcat("maps/campaign", campaign_name, ".txt");
+			for(i = 0; i < n; ++i)
+			{
+				if(search_getfilename(me.campaignGlob, i) == s)
+					j = i;
+			}
+			if(j < 0)
+			{
+				if(step >= 0)
+					j = 0;
+				else
+					j = n - 1;
+			}
+			else
+				j = mod(j + step, n);
+			s = search_getfilename(me.campaignGlob, j);
+			print(s, "\n");
+			s = substring(s, 13, strlen(s) - 17);
+			cvar_set("g_campaign_name", s);
+			me.loadCvars(me);
+		}
+	}
+
+	if(me.buttonNext)
+		me.buttonNext.disabled = !canNext;
+	if(me.buttonPrev)
+		me.buttonPrev.disabled = !canPrev;
+}
+
+void MultiCampaign_Next(entity btn, entity me)
+{
+	me.campaignGo(me, +1);
+}
+void MultiCampaign_Prev(entity btn, entity me)
+{
+	me.campaignGo(me, -1);
+}
+
 void drawNexuizCampaignList(entity me)
 {
 	if(cvar(me.cvarName) != me.campaignIndex || cvar_string("g_campaign_name") != campaign_name)

Modified: trunk/data/qcsrc/menu/nexuiz/dialog_singleplayer.c
===================================================================
--- trunk/data/qcsrc/menu/nexuiz/dialog_singleplayer.c	2008-10-30 15:33:42 UTC (rev 4945)
+++ trunk/data/qcsrc/menu/nexuiz/dialog_singleplayer.c	2008-10-31 08:31:43 UTC (rev 4946)
@@ -51,7 +51,7 @@
 
 void fillNexuizSingleplayerDialog(entity me)
 {
-	entity e;
+	entity e, btnPrev, btnNext, lblTitle;
 
 	me.TR(me);
 		me.TDempty(me, (me.columns - 2) / 2);
@@ -61,7 +61,19 @@
 	me.TR(me);
 	me.TR(me);
 	me.TR(me);
-		me.TD(me, me.rows - 5, me.columns, me.campaignBox = makeNexuizCampaignList());
+		me.TD(me, 1, 1, btnPrev = makeNexuizButton("<<", '0 0 0'));
+		me.TD(me, 1, me.columns - 2, lblTitle = makeNexuizTextLabel(0.5, "???"));
+		me.TD(me, 1, 1, btnNext = makeNexuizButton(">>", '0 0 0'));
+	me.TR(me);
+		me.TD(me, me.rows - 6, me.columns, me.campaignBox = makeNexuizCampaignList());
+			btnPrev.onClick = MultiCampaign_Prev;
+			btnPrev.onClickEntity = me.campaignBox;
+			btnNext.onClick = MultiCampaign_Next;
+			btnNext.onClickEntity = me.campaignBox;
+			me.campaignBox.buttonNext = btnNext;
+			me.campaignBox.buttonPrev = btnPrev;
+			me.campaignBox.labelTitle = lblTitle;
+			me.campaignBox.campaignGo(me.campaignBox, 0);
 
 	me.gotoRC(me, me.rows - 1, 0);
 		me.TD(me, 1, me.columns, e = makeNexuizButton("Start!", '0 0 0'));




More information about the nexuiz-commits mailing list