r3015 - in trunk/data/qcsrc/menu-div0test: . nexuiz
DONOTREPLY at icculus.org
DONOTREPLY at icculus.org
Mon Dec 10 05:46:15 EST 2007
Author: div0
Date: 2007-12-10 05:46:15 -0500 (Mon, 10 Dec 2007)
New Revision: 3015
Added:
trunk/data/qcsrc/menu-div0test/nexuiz/playermodel.c
Modified:
trunk/data/qcsrc/menu-div0test/classes.c
trunk/data/qcsrc/menu-div0test/draw.qc
trunk/data/qcsrc/menu-div0test/draw.qh
trunk/data/qcsrc/menu-div0test/nexuiz/dialog_multiplayer_playersetup.c
Log:
add player model selector; add function draw_CenterText
Modified: trunk/data/qcsrc/menu-div0test/classes.c
===================================================================
--- trunk/data/qcsrc/menu-div0test/classes.c 2007-12-09 23:48:41 UTC (rev 3014)
+++ trunk/data/qcsrc/menu-div0test/classes.c 2007-12-10 10:46:15 UTC (rev 3015)
@@ -50,3 +50,4 @@
#include "nexuiz/maplist.c"
#include "nexuiz/image.c"
#include "nexuiz/crosshairbutton.c"
+#include "nexuiz/playermodel.c"
Modified: trunk/data/qcsrc/menu-div0test/draw.qc
===================================================================
--- trunk/data/qcsrc/menu-div0test/draw.qc 2007-12-09 23:48:41 UTC (rev 3014)
+++ trunk/data/qcsrc/menu-div0test/draw.qc 2007-12-10 10:46:15 UTC (rev 3015)
@@ -227,6 +227,10 @@
else
drawstring(boxToGlobal(theOrigin, draw_shift, draw_scale), theText, boxToGlobalSize(theSize, draw_scale), theColor, theAlpha * draw_alpha, 0);
}
+void draw_CenterText(vector theOrigin, string theText, vector theSize, vector theColor, float theAlpha, float ICanHasKallerz)
+{
+ draw_Text(theOrigin - eX * theSize_x * 0.5 * draw_TextWidth(theText, ICanHasKallerz), theText, theSize, theColor, theAlpha, ICanHasKallerz);
+}
float draw_TextWidth(string theText, float ICanHasKallerz)
{
Modified: trunk/data/qcsrc/menu-div0test/draw.qh
===================================================================
--- trunk/data/qcsrc/menu-div0test/draw.qh 2007-12-09 23:48:41 UTC (rev 3014)
+++ trunk/data/qcsrc/menu-div0test/draw.qh 2007-12-10 10:46:15 UTC (rev 3015)
@@ -13,6 +13,7 @@
void draw_Picture(vector origin, string pic, vector size, vector color, float alpha);
void draw_Fill(vector theOrigin, vector theSize, vector theColor, float theAlpha);
void draw_Text(vector origin, string text, vector size, vector color, float alpha, float allowColorCodes);
+void draw_CenterText(vector origin, string text, vector size, vector color, float alpha, float allowColorCodes);
float draw_TextWidth(string text, float allowColorCodes);
string draw_TextShortenToWidth(string text, float maxWidth, float allowColorCodes);
float draw_TextLengthUpToWidth(string text, float maxWidth, float allowColorCodes);
Modified: trunk/data/qcsrc/menu-div0test/nexuiz/dialog_multiplayer_playersetup.c
===================================================================
--- trunk/data/qcsrc/menu-div0test/nexuiz/dialog_multiplayer_playersetup.c 2007-12-09 23:48:41 UTC (rev 3014)
+++ trunk/data/qcsrc/menu-div0test/nexuiz/dialog_multiplayer_playersetup.c 2007-12-10 10:46:15 UTC (rev 3015)
@@ -19,7 +19,7 @@
}
void fillNexuizPlayerSettingsTab(entity me)
{
- entity e;
+ entity e, pms;
float i, n;
me.TR(me);
@@ -34,6 +34,15 @@
me.TD(me, 1, 1, e = makeNexuizTextLabel(0, "Pants Color:"));
for(i = 0; i < n; ++i)
me.TDNoMargin(me, 1, 2 / n, e = makeNexuizColorButton(2, 1, i), '1 0 0');
+ me.TR(me);
+ pms = makeNexuizPlayerModelSelector();
+ me.TD(me, 1, 0.5, e = makeNexuizButton("<<", '0 0 0'));
+ e.onClick = PlayerModelSelector_Prev_Click;
+ e.onClickEntity = pms;
+ me.TD(me, me.rows - me.currentRow - 1, 2.5, pms);
+ me.TD(me, 1, 0.5, e = makeNexuizButton(">>", '0 0 0'));
+ e.onClick = PlayerModelSelector_Next_Click;
+ e.onClickEntity = pms;
me.gotoXY(me, 0, 3.5); me.setFirstColumn(me, me.currentColumn);
me.TD(me, 1, 1, e = makeNexuizTextLabel(0, "Field of View:"));
Added: trunk/data/qcsrc/menu-div0test/nexuiz/playermodel.c
===================================================================
--- trunk/data/qcsrc/menu-div0test/nexuiz/playermodel.c (rev 0)
+++ trunk/data/qcsrc/menu-div0test/nexuiz/playermodel.c 2007-12-10 10:46:15 UTC (rev 3015)
@@ -0,0 +1,201 @@
+#ifdef INTERFACE
+CLASS(NexuizPlayerModelSelector) EXTENDS(NexuizImage)
+ METHOD(NexuizPlayerModelSelector, configureNexuizPlayerModelSelector, void(entity))
+ METHOD(NexuizPlayerModelSelector, loadCvars, void(entity))
+ METHOD(NexuizPlayerModelSelector, saveCvars, void(entity))
+ METHOD(NexuizPlayerModelSelector, draw, void(entity))
+ METHOD(NexuizPlayerModelSelector, resizeNotify, void(entity, vector, vector, vector, vector))
+ ATTRIB(NexuizPlayerModelSelector, currentModel, string, string_null)
+ ATTRIB(NexuizPlayerModelSelector, currentSkin, float, 0)
+ ATTRIB(NexuizPlayerModelSelector, currentModelName, string, string_null)
+ ATTRIB(NexuizPlayerModelSelector, currentModelTitle, string, string_null)
+ ATTRIB(NexuizPlayerModelSelector, currentModelTxtName, string, string_null)
+ ATTRIB(NexuizPlayerModelSelector, currentModelDescription, string, string_null)
+ ATTRIB(NexuizPlayerModelSelector, cvarName, string, "_cl_playermodel")
+ METHOD(NexuizPlayerModelSelector, go, void(entity, float))
+ ATTRIB(NexuizPlayerModelSelector, origin, vector, '0 0 0')
+ ATTRIB(NexuizPlayerModelSelector, size, vector, '0 0 0')
+ ATTRIB(NexuizPlayerModelSelector, realFontSize, vector, '0 0 0')
+ ATTRIB(NexuizPlayerModelSelector, fontSize, float, SKINFONTSIZE_NORMAL)
+ ATTRIB(NexuizPlayerModelSelector, titleFontSize, float, SKINFONTSIZE_TITLE)
+ENDCLASS(NexuizPlayerModelSelector)
+entity makeNexuizPlayerModelSelector();
+void PlayerModelSelector_Next_Click(entity btn, entity me);
+void PlayerModelSelector_Prev_Click(entity btn, entity me);
+#endif
+
+#ifdef IMPLEMENTATION
+entity makeNexuizPlayerModelSelector()
+{
+ entity me;
+ me = spawnNexuizPlayerModelSelector();
+ me.configureNexuizPlayerModelSelector(me);
+ return me;
+}
+
+void configureNexuizPlayerModelSelectorNexuizPlayerModelSelector(entity me)
+{
+ me.configureNexuizImage(me, string_null, 263.0/360.0);
+ me.loadCvars(me);
+}
+
+void loadCvarsNexuizPlayerModelSelector(entity me)
+{
+ float glob, i, fh;
+ string fn;
+ string nm, t, l;
+
+ if(me.currentModel)
+ strunzone(me.currentModel);
+ if(me.currentModelTitle)
+ strunzone(me.currentModelTitle);
+ if(me.currentModelName)
+ strunzone(me.currentModelName);
+ if(me.currentModelTxtName)
+ strunzone(me.currentModelTxtName);
+ if(me.currentModelDescription)
+ strunzone(me.currentModelDescription);
+ me.currentSkin = cvar("_cl_playerskin");
+ me.currentModel = strzone(cvar_string("_cl_playermodel"));
+ me.currentModelName = string_null;
+ me.currentModelDescription = string_null;
+ me.currentModelTitle = string_null;
+ me.currentModelTxtName = string_null;
+
+ // lookup model name
+ glob = search_begin("models/player/*.txt", TRUE, TRUE);
+ if(glob < 0)
+ return;
+ for(i = 0; i < search_getsize(glob); ++i)
+ {
+ fn = search_getfilename(glob, i);
+ fh = fopen(fn, FILE_READ);
+ if(fh < 0)
+ continue;
+ t = fgets(fh);
+ nm = fgets(fh);
+ if(stof(fgets(fh)) == me.currentSkin)
+ if(fgets(fh) == me.currentModel)
+ {
+ me.currentModelName = strzone(strcat("/", nm));
+ me.currentModelTxtName = strzone(fn);
+ me.currentModelTitle = strzone(t);
+ me.currentModelDescription = "";
+ while((l = fgets(fh)))
+ {
+ if(me.currentModelDescription != "")
+ me.currentModelDescription = strcat(me.currentModelDescription, "\n");
+ me.currentModelDescription = strcat(me.currentModelDescription, l);
+ }
+ me.currentModelDescription = strzone(me.currentModelDescription);
+ fclose(fh);
+ break;
+ }
+ fclose(fh);
+ }
+ search_end(glob);
+}
+
+void goNexuizPlayerModelSelector(entity me, float d)
+{
+ float glob, i, fh;
+ string l;
+
+ glob = search_begin("models/player/*.txt", TRUE, TRUE);
+ if(glob < 0)
+ return;
+ for(i = 0; i < search_getsize(glob); ++i)
+ if(search_getfilename(glob, i) == me.currentModelTxtName)
+ break;
+ // now i is search_getsize(glob) if not found, and the right index if found.
+ if(i == search_getsize(glob))
+ {
+ if(d < 0)
+ i = search_getsize(glob) - 1;
+ else
+ i = 0;
+ }
+ else
+ {
+ i = mod(i + d + search_getsize(glob), search_getsize(glob));
+ }
+
+ if(me.currentModel)
+ strunzone(me.currentModel);
+ if(me.currentModelTitle)
+ strunzone(me.currentModelTitle);
+ if(me.currentModelName)
+ strunzone(me.currentModelName);
+ if(me.currentModelTxtName)
+ strunzone(me.currentModelTxtName);
+ if(me.currentModelDescription)
+ strunzone(me.currentModelDescription);
+
+ // select model #i!
+ me.currentModelTxtName = strzone(search_getfilename(glob, i));
+ fh = fopen(me.currentModelTxtName, FILE_READ);
+ search_end(glob);
+ if(fh < 0)
+ return;
+ me.currentModelTitle = strzone(fgets(fh));
+ me.currentModelName = strzone(strcat("/", fgets(fh)));
+ me.currentSkin = stof(fgets(fh));
+ me.currentModel = strzone(fgets(fh));
+ me.currentModelDescription = "";
+ while((l = fgets(fh)))
+ {
+ if(me.currentModelDescription != "")
+ me.currentModelDescription = strcat(me.currentModelDescription, "\n");
+ me.currentModelDescription = strcat(me.currentModelDescription, l);
+ }
+ me.currentModelDescription = strzone(me.currentModelDescription);
+ fclose(fh);
+}
+
+void PlayerModelSelector_Next_Click(entity btn, entity me)
+{
+ me.go(me, +1);
+ me.saveCvars(me);
+}
+
+void PlayerModelSelector_Prev_Click(entity btn, entity me)
+{
+ me.go(me, -1);
+ me.saveCvars(me);
+}
+
+void saveCvarsNexuizPlayerModelSelector(entity me)
+{
+ // TODO rather set the _cl ones and apply later?
+ localcmd(strcat("playermodel ", me.currentModel, "\nplayerskin ", ftos(me.currentSkin), "\n"));
+}
+
+void drawNexuizPlayerModelSelector(entity me)
+{
+ float i, n;
+ vector o;
+
+ me.src = me.currentModelName;
+ drawImage(me);
+ me.src = string_null;
+
+ // draw text on the image, handle \n in the description
+ draw_CenterText('0.5 0 0', me.currentModelTitle, me.realFontSize * (me.titleFontSize / me.fontSize), '1 1 1', 1, FALSE);
+
+ o = '0.5 1 0' - eY * me.realFontSize_y * ((n = tokenizebyseparator(me.currentModelDescription, "\n")) + 0.5);
+ for(i = 0; i < n; ++i)
+ {
+ draw_CenterText(o, argv(i), me.realFontSize, '1 1 1', 1, FALSE);
+ o += eY * me.realFontSize_y;
+ }
+}
+
+void resizeNotifyNexuizPlayerModelSelector(entity me, vector relOrigin, vector relSize, vector absOrigin, vector absSize)
+{
+ resizeNotifyImage(me, relOrigin, relSize, absOrigin, absSize);
+ me.origin = absOrigin;
+ me.size = absSize;
+ me.realFontSize_y = me.fontSize / absSize_y;
+ me.realFontSize_x = me.fontSize / absSize_x;
+}
+#endif
More information about the nexuiz-commits
mailing list