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