X-Git-Url: http://de.git.xonotic.org/?a=blobdiff_plain;f=qcsrc%2Fmenu%2Fxonotic%2Futil.qc;h=c9cd001ba9f9fcd4ec2fdc79727b31e8c6684e7b;hb=3cfa3eaf6856fe76f7fd8c945fbfab2e9e28014c;hp=330b2bb726a0e89ccc19822ee8c8af0182b82e0e;hpb=f2c50fe4e6218a0a1bb0ca078ee122c5ba6a238d;p=xonotic%2Fxonotic-data.pk3dir.git diff --git a/qcsrc/menu/xonotic/util.qc b/qcsrc/menu/xonotic/util.qc index 330b2bb72..c9cd001ba 100644 --- a/qcsrc/menu/xonotic/util.qc +++ b/qcsrc/menu/xonotic/util.qc @@ -1,8 +1,18 @@ -#include "../../common/urllib.qh" +#include "util.qh" +#include "dialog.qh" + +#include "../item.qh" + +#include "../menu.qh" +#include +#include +#include +#include +#include float GL_CheckExtension(string ext) { - return (strstrofs(strcat(" ", cvar_string("gl_info_extensions"), " "), strcat(" ", ext, " "), 0) >= 0); + return strhasword(cvar_string("gl_info_extensions"), ext); } float GL_Have_TextureCompression() @@ -10,39 +20,7 @@ float GL_Have_TextureCompression() return (GL_CheckExtension("GL_EXT_texture_compression_s3tc") && GL_CheckExtension("GL_ARB_texture_compression")); } -void loadTooltips() -{ - tooltipdb = db_load(language_filename("tooltips.db")); -} -void unloadTooltips() -{ - if(tooltipdb >= 0) - db_close(tooltipdb); - tooltipdb = -1; -} -string getZonedTooltipForIdentifier(string s) -{ - string t; - if(s == "") - return string_null; - if(tooltipdb >= 0) - { - t = db_get(tooltipdb, s); - if(t == "-") - return string_null; - if(t != "") - return strzone(t); - } - if(prvm_language == "en") - { - t = cvar_description(s); - if(t != "" && t != "custom cvar") - return strzone(t); - } - dprint("WARNING: no tooltip set for ", s, "\n"); - return string_null; -} - +.entity parent, firstChild, nextSibling; void forAllDescendants(entity root, void(entity, entity) funcPre, void(entity, entity) funcPost, entity pass) { depthfirst(root, parent, firstChild, nextSibling, funcPre, funcPost, pass); @@ -52,11 +30,15 @@ void forAllDescendants(entity root, void(entity, entity) funcPre, void(entity, e void SUB_Null_ee(entity e1, entity e2) { } + +.void(entity) saveCvars; void saveCvarsOf(entity ignore, entity e) { if(e.saveCvars) e.saveCvars(e); } + +.void(entity) loadCvars; void loadCvarsOf(entity ignore, entity e) { if(e.loadCvars) @@ -82,7 +64,7 @@ string getCvarsMulti(entity me) void saveCvarsMulti(entity me) { float n, i; - string s; + string s, cvarname; me.saveCvars_Multi(me); s = cvar_string(me.cvarName); @@ -90,12 +72,19 @@ void saveCvarsMulti(entity me) n = tokenize_console(me.cvarNames_Multi); for(i = 0; i < n; ++i) { + // cvars prefixed with ! get saved with the inverted value if(substring(argv(i), 0, 1) == "!") - cvar_set(substring(argv(i), 1, strlen(argv(i))), ((s == "0") ? "1" : "0")); + { + cvarname = substring(argv(i), 1, strlen(argv(i))); + cvar_set(cvarname, ((s == "0") ? "1" : "0")); + } else - cvar_set(argv(i), s); + { + cvarname = argv(i); + cvar_set(cvarname, s); + } - CheckSendCvars(me, argv(i)); + CheckSendCvars(me, cvarname); } } void makeMulti(entity e, string otherCvars) @@ -135,6 +124,7 @@ void makeCallback(entity e, entity cbent, void(entity, entity) cbfunc) .string cvarString_setDependent; .string cvarValue_setDependent; .float(entity) func_setDependent; +.bool disabled; void setDependent_Check(entity e) { float f; @@ -181,6 +171,7 @@ void setDependent_Draw(entity e) setDependent_Check(e); e.draw_setDependent(e); } +.void(entity) draw; void setDependent(entity e, string theCvarName, float theCvarMin, float theCvarMax) { e.draw_setDependent = e.draw; @@ -260,6 +251,31 @@ void setDependentWeird(entity e, float(entity) func) setDependent_Check(e); } +void setZonedTooltip(entity e, string theTooltip, string theCvar) +{ + if(theTooltip == "") // no tooltip, use cvar description then + { + if(theCvar != "" && prvm_language == "en") + { + string t = cvar_description(theCvar); + if(t != "" && t != "custom cvar") + theTooltip = t; + } + } + else if(theTooltip == "-") // no cvar description as tooltip + { + theTooltip = string_null; + } + + strfree(e.tooltip); + e.tooltip = (theTooltip != "") ? strzone(theTooltip) : string_null; +} + +void clearTooltip(entity e) +{ + setZonedTooltip(e, string_null, string_null); +} + // URI SYSTEM //////////////////////////////////////////////////////// float _Nex_ExtResponseSystem_Queried; @@ -268,6 +284,7 @@ string _Nex_ExtResponseSystem_UpdateToURL; string _Nex_ExtResponseSystem_Packs; float _Nex_ExtResponseSystem_PacksStep; +/** engine callback */ void URI_Get_Callback(float id, float status, string data) { if(url_URI_Get_Callback(id, status, data)) @@ -289,7 +306,7 @@ void URI_Get_Callback(float id, float status, string data) } else { - printf("Received HTTP request data for an invalid id %d.\n", id); + LOG_INFOF("Received HTTP request data for an invalid id %d.", id); } } @@ -304,22 +321,22 @@ void UpdateNotification_URI_Get_Callback(float id, float status, string data) if(_Nex_ExtResponseSystem_UpdateTo) { - dprint("error: UpdateNotification_URI_Get_Callback has been called before\n"); + LOG_TRACE("error: UpdateNotification_URI_Get_Callback has been called before"); return; } if(status != 0) { - dprintf("error receiving update notification: status is %d\n", status); + LOG_TRACEF("error receiving update notification: status is %d", status); return; } if(substring(data, 0, 1) == "<") { - dprint("error: received HTML instead of an update notification\n"); + LOG_TRACE("error: received HTML instead of an update notification"); return; } if(strstrofs(data, "\r", 0) != -1) { - dprint("error: received carriage returns from update notification server\n"); + LOG_TRACE("error: received carriage returns from update notification server"); return; } @@ -397,7 +414,7 @@ void UpdateNotification_URI_Get_Callback(float id, float status, string data) { // update needed _Nex_ExtResponseSystem_UpdateTo = strzone(un_version); - if(un_download) { printf(_("Update can be downloaded at:\n%s\n"), un_download); } + if(un_download) { LOG_INFOF(_("Update can be downloaded at:\n%s"), un_download); } if(un_url) { _Nex_ExtResponseSystem_UpdateToURL = strzone(un_url); } DisableServerBackwardsCompatibility(); } @@ -412,6 +429,12 @@ void UpdateNotification_URI_Get_Callback(float id, float status, string data) } } + if(un_bannedservers != "") + { + _Nex_ExtResponseSystem_BannedServers = strzone(un_bannedservers); + _Nex_ExtResponseSystem_BannedServersNeedsRefresh = 1; + } + if(un_emergency_pk3s != "") { _Nex_ExtResponseSystem_Packs = strzone(un_emergency_pk3s); @@ -483,16 +506,21 @@ void updateCheck() } +bool show_propermenu = false; + float preMenuInit() { vector sz; vector boxA, boxB; + if(random() < 0.1) + show_propermenu = true; + updateCheck(); MapInfo_Cache_Create(); MapInfo_Enumerate(); - if(!MapInfo_FilterGametype(MAPINFO_TYPE_ALL, 0, 0, 0, 1)) + if(!_MapInfo_FilterGametype(MAPINFO_TYPE_ALL, 0, 0, 0, 1)) { draw_reset_cropped(); @@ -529,6 +557,8 @@ void postMenuDraw() draw_CenterText('0.5 0.1 0', sprintf(_("^1%s TEST BUILD"), autocvar_menu_watermark), globalToBoxSize('32 32 0', draw_scale), '1 1 1', 0.05, 1); } } +void DialogOpenButton_Click_withCoords(entity button, entity tab, vector theOrigin, vector theSize); +.entity winnerDialog; void preMenuDraw() { vector fs, sz = '0 0 0', line, mid; @@ -541,7 +571,10 @@ void preMenuDraw() fs = ((1/draw_scale.x) * eX + (1/draw_scale.y) * eY) * 12; line = eY * fs.y; string l1, l2; - l1 = sprintf(_("Update to %s now!"), _Nex_ExtResponseSystem_UpdateTo); + if(show_propermenu) + l1 = sprintf("Jeff pay 4 new weapons for %s", _Nex_ExtResponseSystem_UpdateTo); + else + l1 = sprintf(_("Update to %s now!"), _Nex_ExtResponseSystem_UpdateTo); l2 = "http://www.xonotic.org/"; if(_Nex_ExtResponseSystem_UpdateToURL) l2 = _Nex_ExtResponseSystem_UpdateToURL; @@ -578,8 +611,7 @@ void preMenuDraw() } else { - strunzone(campaign_name_previous); - campaign_name_previous = strzone(campaign_name); + strcpy(campaign_name_previous, campaign_name); campaign_won_previous = cvar(strcat("g_campaign", campaign_name, "_won")); } } @@ -626,7 +658,7 @@ float updateCompression() cvar_set("gl_texturecompression", "1"); cvar_set("r_texture_dds_load", "1"); if(!can_dds) - print(_("^1ERROR: Texture compression is required but not supported.\n^1Expect visual problems.\n")); + LOG_INFO(_("^1ERROR: Texture compression is required but not supported.\n^1Expect visual problems.")); return 0; } else @@ -648,73 +680,99 @@ float updateCompression() // note: include only those that should be in the menu! #define GAMETYPES \ - GAMETYPE(MAPINFO_TYPE_ASSAULT) \ + GAMETYPE(MAPINFO_TYPE_DEATHMATCH) \ + GAMETYPE(MAPINFO_TYPE_TEAM_DEATHMATCH) \ GAMETYPE(MAPINFO_TYPE_CTF) \ GAMETYPE(MAPINFO_TYPE_CA) \ - GAMETYPE(MAPINFO_TYPE_DEATHMATCH) \ - GAMETYPE(MAPINFO_TYPE_DOMINATION) \ GAMETYPE(MAPINFO_TYPE_FREEZETAG) \ GAMETYPE(MAPINFO_TYPE_KEEPAWAY) \ GAMETYPE(MAPINFO_TYPE_KEYHUNT) \ GAMETYPE(MAPINFO_TYPE_LMS) \ + GAMETYPE(MAPINFO_TYPE_DOMINATION) \ GAMETYPE(MAPINFO_TYPE_NEXBALL) \ GAMETYPE(MAPINFO_TYPE_ONSLAUGHT) \ - if (cvar("developer")) GAMETYPE(MAPINFO_TYPE_RACE) \ + GAMETYPE(MAPINFO_TYPE_ASSAULT) \ + /* GAMETYPE(MAPINFO_TYPE_INVASION) */ \ + /**/ + +// hidden gametypes come last so indexing always works correctly +#define HIDDEN_GAMETYPES \ + GAMETYPE(MAPINFO_TYPE_RACE) \ GAMETYPE(MAPINFO_TYPE_CTS) \ - GAMETYPE(MAPINFO_TYPE_TEAM_DEATHMATCH) \ - //GAMETYPE(MAPINFO_TYPE_INVASION) \ - /* nothing */ + /**/ -int GameType_GetID(int cnt) +Gametype GameType_GetID(int cnt) { int i = 0; - - #define GAMETYPE(id) { if (i++ == cnt) return id; } + #define GAMETYPE(it) { if (i++ == cnt) return it; } GAMETYPES + HIDDEN_GAMETYPES #undef GAMETYPE - - unused_float = i; - - return 0; + return NULL; } int GameType_GetCount() { int i = 0; - #define GAMETYPE(id) ++i; GAMETYPES #undef GAMETYPE + #define GAMETYPE(it) if (cvar("developer")) ++i; + HIDDEN_GAMETYPES + #undef GAMETYPE + return i; +} +int GameType_GetTotalCount() +{ + int i = 0; + #define GAMETYPE(id) ++i; + GAMETYPES + HIDDEN_GAMETYPES + #undef GAMETYPE return i; } string GameType_GetName(int cnt) { - int i = GameType_GetID(cnt); - - if(i) - return MapInfo_Type_ToText(i); - - return ""; + Gametype i = GameType_GetID(cnt); + return i ? MapInfo_Type_ToText(i) : ""; } string GameType_GetIcon(int cnt) { - int i = GameType_GetID(cnt); + Gametype i = GameType_GetID(cnt); + return i ? strcat("gametype_", MapInfo_Type_ToString(i)) : ""; +} - if(i) - return strcat("gametype_", MapInfo_Type_ToString(i)); +.void(entity) TR; +.void(entity, float, float, entity) TD; +.void(entity, float) TDempty; +.void(entity, float, float) gotoRC; +entity makeXonoticTextLabel(float theAlign, string theText); +entity makeXonoticTextSlider(string); +.void(entity, string, string) addValue; +.void(entity) configureXonoticTextSliderValues; +entity makeXonoticColorpickerString(string theCvar, string theDefaultCvar); +entity makeXonoticCheckBoxString(string, string, string, string); +entity makeXonoticCheckBox(float, string, string); +.bool sendCvars; - return ""; +void dialog_hudpanel_main_checkbox(entity me, string panelname) +{ + entity e; + + me.TR(me); + me.TDempty(me, 1.5); + me.TD(me, 1, 2.5, e = makeXonoticCheckBox(0, strzone(strcat("hud_panel_", panelname)), _("Enable"))); } -void dialog_hudpanel_common_notoggle(entity me, string panelname) +void dialog_hudpanel_main_settings(entity me, string panelname) { float i; entity e; - me.TR(me); + me.gotoRC(me, me.currentRow + 1.5, 0); me.TD(me, 1, 1.4, e = makeXonoticTextLabel(0, _("Background:"))); me.TD(me, 1, 2.6, e = makeXonoticTextSlider(strzone(strcat("hud_panel_", panelname, "_bg")))); e.addValue(e, _("Default"), ""); @@ -768,11 +826,20 @@ void dialog_hudpanel_common_notoggle(entity me, string panelname) e.configureXonoticTextSliderValues(e); } +float getFadedAlpha(float currentAlpha, float startAlpha, float targetAlpha) +{ + if(startAlpha < targetAlpha) + currentAlpha = min(currentAlpha + frametime * 0.5, targetAlpha); + else + currentAlpha = max(currentAlpha - frametime * 0.5, targetAlpha); + return currentAlpha; +} + void CheckSendCvars(entity me, string cvarnamestring) { if(me.sendCvars) { - printf("Sending cvar: %s -> %s\n", cvarnamestring, cvar_string(cvarnamestring)); + LOG_INFOF("Sending cvar: %s -> %s", cvarnamestring, cvar_string(cvarnamestring)); if(gamestatus & (GAME_CONNECTED | GAME_ISSERVER)) { cmd(sprintf("\nsendcvar %s\n", cvarnamestring));