r3155 - trunk/data/qcsrc/menu-div0test/nexuiz

DONOTREPLY at icculus.org DONOTREPLY at icculus.org
Wed Jan 16 15:25:09 EST 2008


Author: div0
Date: 2008-01-16 15:25:09 -0500 (Wed, 16 Jan 2008)
New Revision: 3155

Added:
   trunk/data/qcsrc/menu-div0test/nexuiz/campaign.c
Log:
oops


Added: trunk/data/qcsrc/menu-div0test/nexuiz/campaign.c
===================================================================
--- trunk/data/qcsrc/menu-div0test/nexuiz/campaign.c	                        (rev 0)
+++ trunk/data/qcsrc/menu-div0test/nexuiz/campaign.c	2008-01-16 20:25:09 UTC (rev 3155)
@@ -0,0 +1,252 @@
+#ifdef INTERFACE
+CLASS(NexuizCampaignList) EXTENDS(NexuizListBox)
+	METHOD(NexuizCampaignList, configureNexuizCampaignList, void(entity))
+	ATTRIB(NexuizCampaignList, rowsPerItem, float, 10)
+	METHOD(NexuizCampaignList, draw, void(entity))
+	METHOD(NexuizCampaignList, drawListBoxItem, void(entity, float, vector, float))
+	METHOD(NexuizCampaignList, clickListBoxItem, void(entity, float, vector))
+	METHOD(NexuizCampaignList, resizeNotify, void(entity, vector, vector, vector, vector))
+	METHOD(NexuizCampaignList, setSelected, void(entity, float))
+
+	ATTRIB(NexuizCampaignList, realFontSize, vector, '0 0 0')
+	ATTRIB(NexuizCampaignList, columnPreviewOrigin, float, 0)
+	ATTRIB(NexuizCampaignList, columnPreviewSize, float, 0)
+	ATTRIB(NexuizCampaignList, columnNameOrigin, float, 0)
+	ATTRIB(NexuizCampaignList, columnNameSize, float, 0)
+	ATTRIB(NexuizCampaignList, columnCheckMarkOrigin, float, 0)
+	ATTRIB(NexuizCampaignList, columnCheckMarkSize, float, 0)
+	ATTRIB(NexuizCampaignList, checkMarkOrigin, vector, '0 0 0')
+	ATTRIB(NexuizCampaignList, checkMarkSize, vector, '0 0 0')
+	ATTRIB(NexuizCampaignList, realUpperMargin1, float, 0)
+	ATTRIB(NexuizCampaignList, realUpperMargin2, float, 0)
+
+	ATTRIB(NexuizCampaignList, lastClickedMap, float, -1)
+	ATTRIB(NexuizCampaignList, lastClickedTime, float, 0)
+
+	ATTRIB(NexuizCampaignList, origin, vector, '0 0 0')
+	ATTRIB(NexuizCampaignList, itemAbsSize, vector, '0 0 0')
+	ATTRIB(NexuizCampaignList, emptyLineHeight, float, 0.5)
+
+	ATTRIB(NexuizCampaignList, campaignIndex, float, 0)
+	ATTRIB(NexuizCampaignList, cvarName, string, string_null)
+	METHOD(NexuizCampaignList, loadCvars, void(entity))
+	METHOD(NexuizCampaignList, saveCvars, void(entity))
+ENDCLASS(NexuizCampaignList)
+entity makeNexuizCampaignList();
+void CampaignList_LoadMap(entity btn, entity me);
+#endif
+
+#ifdef IMPLEMENTATION
+string campaign_longdesc_wrapped[CAMPAIGN_MAX_ENTRIES];
+
+void rewrapCampaign(float w, float l0, float emptyheight)
+{
+	float i, j;
+	float n, take, cantake, l;
+	string r, s;
+	for(i = 0; i < campaign_entries; ++i)
+	{
+		l = l0;
+		if(campaign_longdesc_wrapped[i])
+			strunzone(campaign_longdesc_wrapped[i]);
+		n = tokenizebyseparator(campaign_longdesc[i], "\n");
+		r = "";
+		for(j = 0; j < n; ++j)
+		{
+			s = argv(j);
+			if(s == "")
+			{
+				l -= emptyheight;
+				r = strcat(r, "\n");
+				continue;
+			}
+			for(;;)
+			{
+				cantake = draw_TextLengthUpToWidth(s, w, 0);
+				if(cantake > 0 && cantake < strlen(s))
+				{
+					take = cantake - 1;
+					while(take > 0 && substring(s, take, 1) != " ")
+						--take;
+					if(take == 0)
+					{
+						if(--l < 0) goto toolong;
+						r = strcat(r, substring(s, 0, cantake), "\n");
+						s = substring(s, cantake, strlen(s) - cantake);
+					}
+					else
+					{
+						if(--l < 0) goto toolong;
+						r = strcat(r, substring(s, 0, take), "\n");
+						s = substring(s, take + 1, strlen(s) - take);
+					}
+				}
+				else
+				{
+					if(--l < 0) goto toolong;
+					r = strcat(r, s, "\n");
+					break;
+				}
+			}
+		}
+		goto nottoolong;
+:toolong
+		while(substring(r, strlen(r) - 1, 1) == "\n")
+			r = substring(r, 0, strlen(r) - 1);
+		r = strcat(r, "...\n");
+:nottoolong
+		campaign_longdesc_wrapped[i] = strzone(substring(r, 0, strlen(r) - 1));
+	}
+}
+
+entity makeNexuizCampaignList()
+{
+	entity me;
+	me = spawnNexuizCampaignList();
+	me.configureNexuizCampaignList(me);
+	return me;
+}
+void configureNexuizCampaignListNexuizCampaignList(entity me)
+{
+	me.configureNexuizListBox(me);
+	me.loadCvars(me);
+}
+
+void loadCvarsNexuizCampaignList(entity me)
+{
+	// read campaign cvars
+	if(campaign_name)
+		strunzone(campaign_name);
+	if(me.cvarName)
+		strunzone(me.cvarName);
+	campaign_name = strzone(cvar_string("g_campaign_name"));
+	me.cvarName = strzone(strcat("g_campaign", campaign_name, "_index"));
+	CampaignFile_Load(0, CAMPAIGN_MAX_ENTRIES);
+	me.campaignIndex = bound(0, cvar(me.cvarName), campaign_entries);
+	cvar_set(me.cvarName, ftos(me.campaignIndex));
+	if(me.columnNameSize)
+		rewrapCampaign(me.columnNameSize / me.realFontSize_x, me.rowsPerItem - 3, me.emptyLineHeight);
+	me.nItems = min(me.campaignIndex + 2, campaign_entries);
+	me.selectedItem = min(me.campaignIndex, me.nItems - 1);
+	me.scrollPos = me.nItems * me.itemHeight - 1;
+}
+
+void saveCvarsNexuizCampaignList(entity me)
+{
+	// write campaign cvars
+	cvar_set("g_campaign_name", campaign_name);
+	// cvar_set(me.cvarName, ftos(me.campaignIndex)); // NOTE: only server QC does that!
+}
+
+void drawNexuizCampaignList(entity me)
+{
+	if(cvar(me.cvarName) != me.campaignIndex || cvar_string("g_campaign_name") != campaign_name)
+		me.loadCvars(me);
+	drawListBox(me);
+}
+
+void resizeNotifyNexuizCampaignList(entity me, vector relOrigin, vector relSize, vector absOrigin, vector absSize)
+{
+	me.origin = absOrigin;
+	me.itemAbsSize = '0 0 0';
+	resizeNotifyNexuizListBox(me, relOrigin, relSize, absOrigin, absSize);
+
+	me.realFontSize_y = me.fontSize / (me.itemAbsSize_y = (absSize_y * me.itemHeight));
+	me.realFontSize_x = me.fontSize / (me.itemAbsSize_x = (absSize_x * (1 - me.controlWidth)));
+	me.realUpperMargin1 = 0.5 * me.realFontSize_y;
+	me.realUpperMargin2 = me.realUpperMargin1 + 2 * me.realFontSize_y;
+
+	me.checkMarkSize = (eX * (me.itemAbsSize_y / me.itemAbsSize_x) + eY) * 0.5;
+
+	me.columnPreviewOrigin = 0;
+	me.columnPreviewSize = me.itemAbsSize_y / me.itemAbsSize_x * 4 / 3;
+	me.columnCheckMarkSize = me.checkMarkSize_x;
+	me.columnNameSize = 1 - me.columnPreviewSize - me.columnCheckMarkSize - 4 * me.realFontSize_x;
+	me.columnNameOrigin = me.columnPreviewOrigin + me.columnPreviewSize + me.realFontSize_x;
+	me.columnCheckMarkOrigin = me.columnNameOrigin + me.columnNameSize + me.realFontSize_x * 2;
+
+	me.checkMarkOrigin = eY + eX * (me.columnCheckMarkOrigin + me.columnCheckMarkSize) - me.checkMarkSize;
+
+	rewrapCampaign(me.columnNameSize / me.realFontSize_x, me.rowsPerItem - 3, me.emptyLineHeight);
+}
+void clickListBoxItemNexuizCampaignList(entity me, float i, vector where)
+{
+	if(i == me.lastClickedMap)
+		if(time < me.lastClickedTime + 0.3)
+		{
+			// DOUBLE CLICK!
+			// start game
+			CampaignList_LoadMap(me, me);
+			return;
+		}
+	me.lastClickedMap = i;
+	me.lastClickedTime = time;
+}
+void drawListBoxItemNexuizCampaignList(entity me, float i, vector absSize, float isSelected)
+{
+	string s;
+	float p;
+	vector theColor;
+	float theAlpha;
+	float done;
+	float j, n;
+	vector o;
+
+	if(i < me.campaignIndex)
+	{
+		theAlpha = 1;
+		theColor = '1 1 1';
+	}
+	else if(i == me.campaignIndex)
+	{
+		theAlpha = 1;
+		theColor = '1 1 0';
+	}
+	else
+	{
+		theAlpha = 0.2;
+		theColor = '1 1 1';
+	}
+
+	if(isSelected)
+		draw_Fill('0 0 0', '1 1 0', '0 0 1', 0.5);
+
+	s = ftos(p);
+	draw_Picture(me.columnPreviewOrigin * eX, strcat("/maps/", campaign_mapname[i]), me.columnPreviewSize * eX + eY, '1 1 1', theAlpha);
+	if(i < me.campaignIndex)
+		draw_Picture(me.checkMarkOrigin, "checkmark", me.checkMarkSize, '1 1 1', 1);
+	if(i <= me.campaignIndex)
+		s = campaign_shortdesc[i]; // fteqcc sucks
+	else
+		s = "???";
+	s = draw_TextShortenToWidth(strcat("Level ", ftos(i + 1), ": ", s), me.columnNameSize / me.realFontSize_x, 0);
+	draw_Text(me.realUpperMargin1 * eY + (me.columnNameOrigin + 0.00 * (me.columnNameSize - draw_TextWidth(s, 0) * me.realFontSize_x)) * eX, s, me.realFontSize, theColor, theAlpha, 0);
+
+	if(i <= me.campaignIndex)
+	{
+		s = campaign_longdesc_wrapped[i];
+		n = tokenizebyseparator(s, "\n");
+		o = me.realUpperMargin2 * eY + me.columnNameOrigin * eX;
+		for(j = 0; j < n; ++j)
+			if(argv(j) != "")
+			{
+				draw_Text(o, argv(j), me.realFontSize, theColor, theAlpha * 0.7, 0);
+				o_y += me.realFontSize_y;
+			}
+			else
+				o_y += me.realFontSize_y * me.emptyLineHeight;
+	}
+}
+void CampaignList_LoadMap(entity btn, entity me)
+{
+	if(me.selectedItem >= me.nItems || me.selectedItem < 0)
+		return;
+	CampaignSetup(me.selectedItem);
+}
+
+void setSelectedNexuizCampaignList(entity me, float i)
+{
+	// prevent too late items from being played
+	setSelectedListBox(me, min(i, me.campaignIndex));
+}
+#endif




More information about the nexuiz-commits mailing list