2 CLASS(VoretPlayerModelSelector) EXTENDS(VoretImage)
\r
3 METHOD(VoretPlayerModelSelector, configureVoretPlayerModelSelector, void(entity))
\r
4 METHOD(VoretPlayerModelSelector, loadCvars, void(entity))
\r
5 METHOD(VoretPlayerModelSelector, saveCvars, void(entity))
\r
6 METHOD(VoretPlayerModelSelector, draw, void(entity))
\r
7 METHOD(VoretPlayerModelSelector, resizeNotify, void(entity, vector, vector, vector, vector))
\r
8 ATTRIB(VoretPlayerModelSelector, currentModel, string, string_null)
\r
9 ATTRIB(VoretPlayerModelSelector, currentSkin, float, 0)
\r
10 ATTRIB(VoretPlayerModelSelector, currentModelName, string, string_null)
\r
11 ATTRIB(VoretPlayerModelSelector, currentModelTitle, string, string_null)
\r
12 ATTRIB(VoretPlayerModelSelector, currentModelTxtName, string, string_null)
\r
13 ATTRIB(VoretPlayerModelSelector, currentModelDescription, string, string_null)
\r
14 METHOD(VoretPlayerModelSelector, go, void(entity, float))
\r
15 ATTRIB(VoretPlayerModelSelector, origin, vector, '0 0 0')
\r
16 ATTRIB(VoretPlayerModelSelector, size, vector, '0 0 0')
\r
17 ATTRIB(VoretPlayerModelSelector, realFontSize, vector, '0 0 0')
\r
18 ATTRIB(VoretPlayerModelSelector, fontSize, float, SKINFONTSIZE_NORMAL)
\r
19 ATTRIB(VoretPlayerModelSelector, titleFontSize, float, SKINFONTSIZE_TITLE)
\r
20 ENDCLASS(VoretPlayerModelSelector)
\r
21 entity makeVoretPlayerModelSelector();
\r
22 void PlayerModelSelector_Next_Click(entity btn, entity me);
\r
23 void PlayerModelSelector_Prev_Click(entity btn, entity me);
\r
26 #ifdef IMPLEMENTATION
\r
27 entity makeVoretPlayerModelSelector()
\r
30 me = spawnVoretPlayerModelSelector();
\r
31 me.configureVoretPlayerModelSelector(me);
\r
35 void configureVoretPlayerModelSelectorVoretPlayerModelSelector(entity me)
\r
37 me.configureVoretImage(me, string_null, 263.0/360.0);
\r
41 void loadCvarsVoretPlayerModelSelector(entity me)
\r
48 strunzone(me.currentModel);
\r
49 if(me.currentModelTitle)
\r
50 strunzone(me.currentModelTitle);
\r
51 if(me.currentModelName)
\r
52 strunzone(me.currentModelName);
\r
53 if(me.currentModelTxtName)
\r
54 strunzone(me.currentModelTxtName);
\r
55 if(me.currentModelDescription)
\r
56 strunzone(me.currentModelDescription);
\r
57 me.currentSkin = cvar("_cl_playerskin");
\r
58 me.currentModel = strzone(cvar_string("_cl_playermodel"));
\r
59 me.currentModelName = string_null;
\r
60 me.currentModelDescription = string_null;
\r
61 me.currentModelTitle = string_null;
\r
62 me.currentModelTxtName = string_null;
\r
64 // lookup model name
\r
65 glob = search_begin("models/player/*.txt", TRUE, TRUE);
\r
68 for(i = 0; i < search_getsize(glob); ++i)
\r
70 fn = search_getfilename(glob, i);
\r
71 fh = fopen(fn, FILE_READ);
\r
76 if(stof(fgets(fh)) == me.currentSkin)
\r
77 if(fgets(fh) == me.currentModel)
\r
79 me.currentModelName = strzone(strcat("/", nm));
\r
80 me.currentModelTxtName = strzone(fn);
\r
81 me.currentModelTitle = strzone(t);
\r
82 me.currentModelDescription = "";
\r
83 fgets(fh); // Skip species
\r
84 while((l = fgets(fh)))
\r
86 if(me.currentModelDescription != "")
\r
87 me.currentModelDescription = strcat(me.currentModelDescription, "\n");
\r
88 me.currentModelDescription = strcat(me.currentModelDescription, l);
\r
90 me.currentModelDescription = strzone(me.currentModelDescription);
\r
99 void goVoretPlayerModelSelector(entity me, float d)
\r
104 glob = search_begin("models/player/*.txt", TRUE, TRUE);
\r
107 for(i = 0; i < search_getsize(glob); ++i)
\r
108 if(search_getfilename(glob, i) == me.currentModelTxtName)
\r
110 // now i is search_getsize(glob) if not found, and the right index if found.
\r
111 if(i == search_getsize(glob))
\r
114 i = search_getsize(glob) - 1;
\r
120 i = mod(i + d + search_getsize(glob), search_getsize(glob));
\r
123 if(me.currentModel)
\r
124 strunzone(me.currentModel);
\r
125 if(me.currentModelTitle)
\r
126 strunzone(me.currentModelTitle);
\r
127 if(me.currentModelName)
\r
128 strunzone(me.currentModelName);
\r
129 if(me.currentModelTxtName)
\r
130 strunzone(me.currentModelTxtName);
\r
131 if(me.currentModelDescription)
\r
132 strunzone(me.currentModelDescription);
\r
134 // select model #i!
\r
135 me.currentModelTxtName = strzone(search_getfilename(glob, i));
\r
136 fh = fopen(me.currentModelTxtName, FILE_READ);
\r
140 me.currentModelTitle = strzone(fgets(fh));
\r
141 me.currentModelName = strzone(strcat("/", fgets(fh)));
\r
142 me.currentSkin = stof(fgets(fh));
\r
143 me.currentModel = strzone(fgets(fh));
\r
144 me.currentModelDescription = "";
\r
145 fgets(fh); // Skip species
\r
146 while((l = fgets(fh)))
\r
148 if(me.currentModelDescription != "")
\r
149 me.currentModelDescription = strcat(me.currentModelDescription, "\n");
\r
150 me.currentModelDescription = strcat(me.currentModelDescription, l);
\r
152 me.currentModelDescription = strzone(me.currentModelDescription);
\r
156 void PlayerModelSelector_Next_Click(entity btn, entity me)
\r
162 void PlayerModelSelector_Prev_Click(entity btn, entity me)
\r
168 void saveCvarsVoretPlayerModelSelector(entity me)
\r
170 // TODO rather set the _cl ones and apply later?
\r
171 localcmd(strcat("playermodel ", me.currentModel, "\nplayerskin ", ftos(me.currentSkin), "\n"));
\r
174 void drawVoretPlayerModelSelector(entity me)
\r
179 me.src = me.currentModelName;
\r
181 me.src = string_null;
\r
183 // draw text on the image, handle \n in the description
\r
184 draw_CenterText('0.5 0 0', me.currentModelTitle, me.realFontSize * (me.titleFontSize / me.fontSize), SKINCOLOR_MODELTITLE, SKINALPHA_MODELTITLE, FALSE);
\r
186 o = '0.5 1 0' - eY * me.realFontSize_y * ((n = tokenizebyseparator(me.currentModelDescription, "\n")) + 0.5);
\r
187 for(i = 0; i < n; ++i)
\r
189 draw_CenterText(o, argv(i), me.realFontSize, '1 1 1', 1, FALSE);
\r
190 o += eY * me.realFontSize_y;
\r
194 void resizeNotifyVoretPlayerModelSelector(entity me, vector relOrigin, vector relSize, vector absOrigin, vector absSize)
\r
196 resizeNotifyImage(me, relOrigin, relSize, absOrigin, absSize);
\r
197 me.realFontSize_y = me.fontSize / absSize_y;
\r
198 me.realFontSize_x = me.fontSize / absSize_x;
\r