2 CLASS(NexuizPlayerModelSelector) EXTENDS(NexuizImage)
3 METHOD(NexuizPlayerModelSelector, configureNexuizPlayerModelSelector, void(entity))
4 METHOD(NexuizPlayerModelSelector, loadCvars, void(entity))
5 METHOD(NexuizPlayerModelSelector, saveCvars, void(entity))
6 METHOD(NexuizPlayerModelSelector, draw, void(entity))
7 METHOD(NexuizPlayerModelSelector, resizeNotify, void(entity, vector, vector, vector, vector))
8 ATTRIB(NexuizPlayerModelSelector, currentModel, string, string_null)
9 ATTRIB(NexuizPlayerModelSelector, currentSkin, float, 0)
10 ATTRIB(NexuizPlayerModelSelector, currentModelName, string, string_null)
11 ATTRIB(NexuizPlayerModelSelector, currentModelTitle, string, string_null)
12 ATTRIB(NexuizPlayerModelSelector, currentModelTxtName, string, string_null)
13 ATTRIB(NexuizPlayerModelSelector, currentModelDescription, string, string_null)
14 ATTRIB(NexuizPlayerModelSelector, cvarName, string, "_cl_playermodel")
15 METHOD(NexuizPlayerModelSelector, go, void(entity, float))
16 ATTRIB(NexuizPlayerModelSelector, origin, vector, '0 0 0')
17 ATTRIB(NexuizPlayerModelSelector, size, vector, '0 0 0')
18 ATTRIB(NexuizPlayerModelSelector, realFontSize, vector, '0 0 0')
19 ATTRIB(NexuizPlayerModelSelector, fontSize, float, SKINFONTSIZE_NORMAL)
20 ATTRIB(NexuizPlayerModelSelector, titleFontSize, float, SKINFONTSIZE_TITLE)
21 ENDCLASS(NexuizPlayerModelSelector)
22 entity makeNexuizPlayerModelSelector();
23 void PlayerModelSelector_Next_Click(entity btn, entity me);
24 void PlayerModelSelector_Prev_Click(entity btn, entity me);
28 entity makeNexuizPlayerModelSelector()
31 me = spawnNexuizPlayerModelSelector();
32 me.configureNexuizPlayerModelSelector(me);
36 void configureNexuizPlayerModelSelectorNexuizPlayerModelSelector(entity me)
38 me.configureNexuizImage(me, string_null, 263.0/360.0);
42 void loadCvarsNexuizPlayerModelSelector(entity me)
49 strunzone(me.currentModel);
50 if(me.currentModelTitle)
51 strunzone(me.currentModelTitle);
52 if(me.currentModelName)
53 strunzone(me.currentModelName);
54 if(me.currentModelTxtName)
55 strunzone(me.currentModelTxtName);
56 if(me.currentModelDescription)
57 strunzone(me.currentModelDescription);
58 me.currentSkin = cvar("_cl_playerskin");
59 me.currentModel = strzone(cvar_string("_cl_playermodel"));
60 me.currentModelName = string_null;
61 me.currentModelDescription = string_null;
62 me.currentModelTitle = string_null;
63 me.currentModelTxtName = string_null;
66 glob = search_begin("models/player/*.txt", TRUE, TRUE);
69 for(i = 0; i < search_getsize(glob); ++i)
71 fn = search_getfilename(glob, i);
72 fh = fopen(fn, FILE_READ);
77 if(stof(fgets(fh)) == me.currentSkin)
78 if(fgets(fh) == me.currentModel)
80 me.currentModelName = strzone(strcat("/", nm));
81 me.currentModelTxtName = strzone(fn);
82 me.currentModelTitle = strzone(t);
83 me.currentModelDescription = "";
84 while((l = fgets(fh)))
86 if(me.currentModelDescription != "")
87 me.currentModelDescription = strcat(me.currentModelDescription, "\n");
88 me.currentModelDescription = strcat(me.currentModelDescription, l);
90 me.currentModelDescription = strzone(me.currentModelDescription);
99 void goNexuizPlayerModelSelector(entity me, float d)
104 glob = search_begin("models/player/*.txt", TRUE, TRUE);
107 for(i = 0; i < search_getsize(glob); ++i)
108 if(search_getfilename(glob, i) == me.currentModelTxtName)
110 // now i is search_getsize(glob) if not found, and the right index if found.
111 if(i == search_getsize(glob))
114 i = search_getsize(glob) - 1;
120 i = mod(i + d + search_getsize(glob), search_getsize(glob));
124 strunzone(me.currentModel);
125 if(me.currentModelTitle)
126 strunzone(me.currentModelTitle);
127 if(me.currentModelName)
128 strunzone(me.currentModelName);
129 if(me.currentModelTxtName)
130 strunzone(me.currentModelTxtName);
131 if(me.currentModelDescription)
132 strunzone(me.currentModelDescription);
135 me.currentModelTxtName = strzone(search_getfilename(glob, i));
136 fh = fopen(me.currentModelTxtName, FILE_READ);
140 me.currentModelTitle = strzone(fgets(fh));
141 me.currentModelName = strzone(strcat("/", fgets(fh)));
142 me.currentSkin = stof(fgets(fh));
143 me.currentModel = strzone(fgets(fh));
144 me.currentModelDescription = "";
145 while((l = fgets(fh)))
147 if(me.currentModelDescription != "")
148 me.currentModelDescription = strcat(me.currentModelDescription, "\n");
149 me.currentModelDescription = strcat(me.currentModelDescription, l);
151 me.currentModelDescription = strzone(me.currentModelDescription);
155 void PlayerModelSelector_Next_Click(entity btn, entity me)
161 void PlayerModelSelector_Prev_Click(entity btn, entity me)
167 void saveCvarsNexuizPlayerModelSelector(entity me)
169 // TODO rather set the _cl ones and apply later?
170 localcmd(strcat("playermodel ", me.currentModel, "\nplayerskin ", ftos(me.currentSkin), "\n"));
173 void drawNexuizPlayerModelSelector(entity me)
178 me.src = me.currentModelName;
180 me.src = string_null;
182 // draw text on the image, handle \n in the description
183 draw_CenterText('0.5 0 0', me.currentModelTitle, me.realFontSize * (me.titleFontSize / me.fontSize), SKINCOLOR_MODELTITLE, SKINALPHA_MODELTITLE, FALSE);
185 o = '0.5 1 0' - eY * me.realFontSize_y * ((n = tokenizebyseparator(me.currentModelDescription, "\n")) + 0.5);
186 for(i = 0; i < n; ++i)
188 draw_CenterText(o, argv(i), me.realFontSize, '1 1 1', 1, FALSE);
189 o += eY * me.realFontSize_y;
193 void resizeNotifyNexuizPlayerModelSelector(entity me, vector relOrigin, vector relSize, vector absOrigin, vector absSize)
195 resizeNotifyImage(me, relOrigin, relSize, absOrigin, absSize);
196 me.origin = absOrigin;
198 me.realFontSize_y = me.fontSize / absSize_y;
199 me.realFontSize_x = me.fontSize / absSize_x;