1 void forAllDescendants(entity root, void(entity, entity) funcPre, void(entity, entity) funcPost, entity pass)
3 depthfirst(root, parent, firstChild, nextSibling, funcPre, funcPost, pass);
7 void SUB_Null_ee(entity e1, entity e2)
10 void saveCvarsOf(entity ignore, entity e)
15 void loadCvarsOf(entity ignore, entity e)
20 void saveAllCvars(entity root)
22 forAllDescendants(root, saveCvarsOf, SUB_Null_ee, NULL);
24 void loadAllCvars(entity root)
26 forAllDescendants(root, loadCvarsOf, SUB_Null_ee, NULL);
29 .string cvarNames_Multi;
30 .void(entity me) saveCvars_Multi;
31 void saveCvarsMulti(entity me)
36 me.saveCvars_Multi(me);
37 s = cvar_string(me.cvarName);
39 n = tokenize_sane(me.cvarNames_Multi);
40 for(i = 0; i < n; ++i)
44 void makeMulti(entity e, string otherCvars)
46 e.cvarNames_Multi = otherCvars;
47 e.saveCvars_Multi = e.saveCvars;
48 e.saveCvars = saveCvarsMulti;
51 .void(entity) draw_setDependent;
52 .string cvar_setDependent;
53 .float cvarMin_setDependent;
54 .float cvarMax_setDependent;
55 .string cvar2_setDependent;
56 .float cvar2Min_setDependent;
57 .float cvar2Max_setDependent;
58 .string cvar3_setDependent;
59 .float cvar3Min_setDependent;
60 .float cvar3Max_setDependent;
61 .float op_setDependent;
62 .string cvarString_setDependent;
63 .string cvarValue_setDependent;
64 void setDependent_Check(entity e)
68 if(e.cvarString_setDependent)
70 s = cvar_string(e.cvarString_setDependent);
71 e.disabled = (cvar_string(e.cvarString_setDependent) == e.cvarValue_setDependent);
75 if(e.cvar_setDependent)
77 f = cvar(e.cvar_setDependent);
78 if(e.cvarMin_setDependent <= e.cvarMax_setDependent)
79 e.disabled = ((f < e.cvarMin_setDependent) || (f > e.cvarMax_setDependent));
81 e.disabled = ((f >= e.cvarMax_setDependent) && (f <= e.cvarMin_setDependent));
83 if(e.cvar2_setDependent)
85 f = cvar(e.cvar2_setDependent);
86 if(e.cvar2Min_setDependent <= e.cvar2Max_setDependent)
87 e.disabled = (e.disabled + ((f < e.cvar2Min_setDependent) || (f > e.cvar2Max_setDependent)) > e.op_setDependent);
89 e.disabled = (e.disabled + ((f >= e.cvar2Max_setDependent) && (f <= e.cvar2Min_setDependent)) > e.op_setDependent);
91 if(e.cvar3_setDependent)
93 f = cvar(e.cvar3_setDependent);
94 if(e.cvar3Min_setDependent <= e.cvar3Max_setDependent)
95 e.disabled = (e.disabled + ((f < e.cvar3Min_setDependent) || (f > e.cvar3Max_setDependent)) > e.op_setDependent);
97 e.disabled = (e.disabled + ((f >= e.cvar3Max_setDependent) && (f <= e.cvar3Min_setDependent)) > e.op_setDependent);
101 void setDependent_Draw(entity e)
103 setDependent_Check(e);
104 e.draw_setDependent(e);
106 void setDependent(entity e, string theCvarName, float theCvarMin, float theCvarMax)
108 e.draw_setDependent = e.draw;
109 e.cvar_setDependent = theCvarName;
110 e.cvarMin_setDependent = theCvarMin;
111 e.cvarMax_setDependent = theCvarMax;
112 e.cvar2_setDependent = string_null;
113 e.cvar3_setDependent = string_null;
114 e.draw = setDependent_Draw;
115 setDependent_Check(e);
117 void setDependentStringNotEqual(entity e, string theCvarName, string theCvarValue)
119 e.draw_setDependent = e.draw;
120 e.cvarString_setDependent = theCvarName;
121 e.cvarValue_setDependent = theCvarValue;
122 e.cvar_setDependent = string_null;
123 e.cvar2_setDependent = string_null;
124 e.cvar3_setDependent = string_null;
125 e.draw = setDependent_Draw;
126 setDependent_Check(e);
128 void setDependentAND(entity e, string theCvarName, float theCvarMin, float theCvarMax, string theCvar2Name, float theCvar2Min, float theCvar2Max)
130 e.draw_setDependent = e.draw;
131 e.cvar_setDependent = theCvarName;
132 e.cvarMin_setDependent = theCvarMin;
133 e.cvarMax_setDependent = theCvarMax;
134 e.cvar2_setDependent = theCvar2Name;
135 e.cvar2Min_setDependent = theCvar2Min;
136 e.cvar2Max_setDependent = theCvar2Max;
137 e.cvar3_setDependent = string_null;
138 e.op_setDependent = 0;
139 e.draw = setDependent_Draw;
140 setDependent_Check(e);
142 void setDependentOR(entity e, string theCvarName, float theCvarMin, float theCvarMax, string theCvar2Name, float theCvar2Min, float theCvar2Max)
144 e.draw_setDependent = e.draw;
145 e.cvar_setDependent = theCvarName;
146 e.cvarMin_setDependent = theCvarMin;
147 e.cvarMax_setDependent = theCvarMax;
148 e.cvar2_setDependent = theCvar2Name;
149 e.cvar2Min_setDependent = theCvar2Min;
150 e.cvar2Max_setDependent = theCvar2Max;
151 e.cvar3_setDependent = string_null;
152 e.op_setDependent = 1;
153 e.draw = setDependent_Draw;
154 setDependent_Check(e);
156 void setDependentAND3(entity e, string theCvarName, float theCvarMin, float theCvarMax, string theCvar2Name, float theCvar2Min, float theCvar2Max, string theCvar3Name, float theCvar3Min, float theCvar3Max)
158 e.draw_setDependent = e.draw;
159 e.cvar_setDependent = theCvarName;
160 e.cvarMin_setDependent = theCvarMin;
161 e.cvarMax_setDependent = theCvarMax;
162 e.cvar2_setDependent = theCvar2Name;
163 e.cvar2Min_setDependent = theCvar2Min;
164 e.cvar2Max_setDependent = theCvar2Max;
165 e.cvar3_setDependent = theCvar3Name;
166 e.cvar3Min_setDependent = theCvar3Min;
167 e.cvar3Max_setDependent = theCvar3Max;
168 e.op_setDependent = 0;
169 e.draw = setDependent_Draw;
170 setDependent_Check(e);
173 // EXTRESPONSE SYSTEM ////////////////////////////////////////////////////////
175 float _Nex_ExtResponseSystem_RequestsSent;
176 float _Nex_ExtResponseSystem_VersionHandled;
177 string _Nex_ExtResponseSystem_UpdateTo;
178 float _Nex_ExtResponseSystem_RetryTime;
179 float _Nex_ExtResponseSystem_RetryTime_LastDelay;
181 void() Item_Nex_ExtResponseSystem_SendQuery =
183 dprint("Sending extended response requests...\n");
184 localcmd(strcat("packet update.alientrap.org:27950 \"getExtResponse checkUpdates nexuiz ", cvar_string("g_nexuizversion"), "\"\n"));
185 _Nex_ExtResponseSystem_RequestsSent = TRUE;
186 _Nex_ExtResponseSystem_RetryTime_LastDelay = _Nex_ExtResponseSystem_RetryTime_LastDelay * 2 + 1;
187 _Nex_ExtResponseSystem_RetryTime = time + _Nex_ExtResponseSystem_RetryTime_LastDelay;
190 void(float argc) Item_Nex_ExtResponseSystem_Parse =
192 dprint("Received extended response packet from ", argv(0), "\n");
193 if(!_Nex_ExtResponseSystem_RequestsSent)
195 dprint(" But I haven't sent a request yet! Ignoring.\n");
198 if(argv(1) == "noUpdateAvailable")
200 if(_Nex_ExtResponseSystem_VersionHandled)
202 dprint(" duplicated update notice, ignored\n");
205 _Nex_ExtResponseSystem_VersionHandled = 1;
207 else if(argv(1) == "updateAvailable")
209 if(_Nex_ExtResponseSystem_VersionHandled)
211 dprint(" duplicated update notice, ignored\n");
214 _Nex_ExtResponseSystem_VersionHandled = 1;
215 _Nex_ExtResponseSystem_UpdateTo = strzone(argv(2)); // note: only one packet can be handled, so this can't be a leak
218 dprint(" UNKNOWN RESPONSE TYPE: ", argv(1), "\n");
221 void() Item_Nex_ExtResponseSystem_CheckForResponse =
225 while(strlen((s = getextresponse())))
227 argc = tokenize_sane(s);
228 Item_Nex_ExtResponseSystem_Parse(argc);
232 // END OF EXTRESPONSE SYSTEM /////////////////////////////////////////////////
239 MapInfo_Cache_Create();
241 if(!MapInfo_FilterGametype(MAPINFO_TYPE_ALL, 0, 0, 0, 1))
245 sz = eX * 0.025 + eY * 0.025 * (draw_scale_x / draw_scale_y);
246 draw_CenterText('0.5 0.5 0' - 1.25 * sz_y * eY, "Autogenerating mapinfo for newly added maps...", sz, '1 1 1', 1, 0);
248 boxA = '0.05 0.5 0' + 0.25 * sz_y * eY;
249 boxB = '0.95 0.5 0' + 1.25 * sz_y * eY;
250 draw_Fill(boxA, boxB - boxA, '1 1 1', 1);
254 draw_Fill(boxA, boxB - boxA, '0.1 0.1 0.1', 1);
256 boxB_x = boxA_x * (1 - MapInfo_progress) + boxB_x * MapInfo_progress;
257 draw_Fill(boxA, boxB - boxA, '0 0 1', 1);
264 string campaign_name_previous;
265 float campaign_won_previous;
271 vector fs, sz, line, mid;
272 Item_Nex_ExtResponseSystem_CheckForResponse();
273 if(!_Nex_ExtResponseSystem_VersionHandled)
274 if(time > _Nex_ExtResponseSystem_RetryTime)
275 Item_Nex_ExtResponseSystem_SendQuery();
277 if(_Nex_ExtResponseSystem_UpdateTo != "")
279 fs = ((1/draw_scale_x) * eX + (1/draw_scale_y) * eY) * 12;
281 sz_x = draw_TextWidth(" http://www.nexuiz.com/ ", 0) * fs_x;
284 draw_alpha = sin(time * 0.112 - 0.3) * 0.7;
285 mid = eX * (0.5 + 0.5 * (1 - sz_x) * cos(time * 0.071))
286 + eY * (0.5 + 0.5 * (1 - sz_y) * sin(time * 0.071));
288 draw_Fill(mid - 0.5 * sz, sz, '1 1 0', 1);
289 draw_CenterText(mid - 1 * line, strcat("Update to ", _Nex_ExtResponseSystem_UpdateTo, " now!"), fs, '1 0 0', 1, 0);
290 draw_CenterText(mid - 0 * line, "http://www.nexuiz.com/", fs, '0 0 1', 1, 0);
292 if not(campaign_name_previous)
293 campaign_name_previous = strzone(strcat(campaign_name, "x")); // force unequal
294 if(campaign_name == campaign_name_previous)
296 if(cvar(strcat("g_campaign", campaign_name, "_won")))
298 if(!campaign_won_previous)
301 DialogOpenButton_Click_withCoords(NULL, main.winnerDialog, '0 0 0', eX * conwidth + eY * conheight);
303 campaign_won_previous = 1;
306 campaign_won_previous = 0;
310 strunzone(campaign_name_previous);
311 campaign_name_previous = strzone(campaign_name);
312 campaign_won_previous = cvar(strcat("g_campaign", campaign_name, "_won"));
316 string getWrappedLine_remaining;
317 string getWrappedLine(float w)
323 s = getWrappedLine_remaining;
325 cantake = draw_TextLengthUpToWidth(s, w, 0);
326 if(cantake > 0 && cantake < strlen(s))
329 while(take > 0 && substring(s, take, 1) != " ")
333 getWrappedLine_remaining = substring(s, cantake, strlen(s) - cantake);
334 if(getWrappedLine_remaining == "")
335 getWrappedLine_remaining = string_null;
336 return substring(s, 0, cantake);
340 getWrappedLine_remaining = substring(s, take + 1, strlen(s) - take);
341 if(getWrappedLine_remaining == "")
342 getWrappedLine_remaining = string_null;
343 return substring(s, 0, take);
348 getWrappedLine_remaining = string_null;