float menuNotTheFirstFrame;
float menuMouseMode;
-void SUB_Null() { };
+void SUB_Null() { }
-void() m_init =
+void m_sync()
+{
+ updateCompression();
+ updateConwidths();
+
+ loadAllCvars(main);
+}
+
+void m_init()
{
cvar_set("_menu_alpha", "0");
prvm_language = strzone(cvar_string("prvm_language"));
check_unacceptable_compiler_bugs();
#ifdef WATERMARK
- print(sprintf(_("^4MQC Build information: %s\n"), WATERMARK()));
+ print(sprintf(_("^4MQC Build information: ^1%s\n"), WATERMARK()));
#endif
// list all game dirs (TEST)
}
}
-void() m_init_delayed =
+void m_init_delayed()
{
float fh, glob, n, i;
string s;
if(fh < 0)
if(cvar_defstring("menu_skin") != "")
{
- draw_currentSkin = strcat("gfx/menu/", cvar_defstring("menu_skin"));
+ cvar_set("menu_skin", cvar_defstring("menu_skin"));
+ draw_currentSkin = strcat("gfx/menu/", cvar_string("menu_skin"));
fh = fopen(language_filename(strcat(draw_currentSkin, "/skinvalues.txt")), FILE_READ);
}
if(fh < 0)
draw_currentSkin = "gfx/menu/default";
fh = fopen(language_filename(strcat(draw_currentSkin, "/skinvalues.txt")), FILE_READ);
}
+ if(fh < 0)
+ {
+ error("cannot load any menu skin\n");
+ }
draw_currentSkin = strzone(draw_currentSkin);
while((s = fgets(fh)))
{
menuShiftState = 0;
menuMousePos = '0.5 0.5 0';
+ m_sync();
+
if(Menu_Active)
m_display(); // delayed menu display
-};
+}
-void(float key, float ascii) m_keyup =
+void m_keyup (float key, float ascii)
{
if(!menuInitialized)
return;
if(key == K_ALT) menuShiftState -= (menuShiftState & S_ALT);
if(key == K_CTRL) menuShiftState -= (menuShiftState & S_CTRL);
if(key == K_SHIFT) menuShiftState -= (menuShiftState & S_SHIFT);
-};
+}
-void(float key, float ascii) m_keydown =
+void m_keydown(float key, float ascii)
{
if(!menuInitialized)
return;
if(key == K_ALT) menuShiftState |= S_ALT;
if(key == K_CTRL) menuShiftState |= S_CTRL;
if(key == K_SHIFT) menuShiftState |= S_SHIFT;
-};
+}
float SCALEMODE_CROP = 0;
float SCALEMODE_LETTERBOX = 1;
draw_Picture(org, img, isz, '1 1 1', a);
}
-void(string img, float a, string algn, float force1) drawBackground =
+void drawBackground(string img, float a, string algn, float force1)
{
if(main.mainNexposee.ModalController_state == 0)
return;
float menuTooltipAlpha;
string menuTooltipText;
float menuTooltipState; // 0: static, 1: fading in, 2: fading out
-float m_testmousetooltipbox()
+float m_testmousetooltipbox(vector pos)
{
- if(menuMousePos_x >= menuTooltipOrigin_x && menuMousePos_x < menuTooltipOrigin_x + menuTooltipSize_x)
- if(menuMousePos_y >= menuTooltipOrigin_y && menuMousePos_y < menuTooltipOrigin_y + menuTooltipSize_y)
+ if(pos_x >= menuTooltipOrigin_x && pos_x < menuTooltipOrigin_x + menuTooltipSize_x)
+ if(pos_y >= menuTooltipOrigin_y && pos_y < menuTooltipOrigin_y + menuTooltipSize_y)
return FALSE;
return TRUE;
}
vector avoidplus, avoidminus;
vector v;
- avoidplus_x = (SKINAVOID_TOOLTIP_x + SKINSIZE_CURSOR_x - SKINOFFSET_CURSOR_x) / conwidth;
- avoidplus_y = (SKINAVOID_TOOLTIP_y + SKINSIZE_CURSOR_y - SKINOFFSET_CURSOR_y) / conheight;
+ avoidplus_x = (SKINAVOID_TOOLTIP_x + SKINSIZE_CURSOR_x - SKINOFFSET_CURSOR_x * SKINSIZE_CURSOR_x) / conwidth;
+ avoidplus_y = (SKINAVOID_TOOLTIP_y + SKINSIZE_CURSOR_y - SKINOFFSET_CURSOR_y * SKINSIZE_CURSOR_y) / conheight;
avoidplus_z = 0;
- avoidminus_x = (SKINAVOID_TOOLTIP_x + SKINOFFSET_CURSOR_x) / conwidth + menuTooltipSize_x;
- avoidminus_y = (SKINAVOID_TOOLTIP_y + SKINOFFSET_CURSOR_y) / conheight + menuTooltipSize_y;
+ avoidminus_x = (SKINAVOID_TOOLTIP_x + SKINOFFSET_CURSOR_x * SKINSIZE_CURSOR_x) / conwidth + menuTooltipSize_x;
+ avoidminus_y = (SKINAVOID_TOOLTIP_y + SKINOFFSET_CURSOR_y * SKINSIZE_CURSOR_y) / conheight + menuTooltipSize_y;
avoidminus_z = 0;
// bottom right
}
return menuTooltipItem.tooltip;
}
-void m_tooltip()
+void m_tooltip(vector pos)
{
float f, i, w;
entity it;
else
{
f = bound(0, frametime * 2, 1);
- menuTooltipAveragedMousePos = menuTooltipAveragedMousePos * (1 - f) + menuMousePos * f;
- f = vlen(menuMousePos - menuTooltipAveragedMousePos);
+ menuTooltipAveragedMousePos = menuTooltipAveragedMousePos * (1 - f) + pos * f;
+ f = vlen(pos - menuTooltipAveragedMousePos);
if(f < 0.01)
- it = m_findtooltipitem(main, menuMousePos);
+ it = m_findtooltipitem(main, pos);
else
it = world;
}
menuTooltipOrigin_x = -1; // unallocated
+ if (menuTooltipText)
+ strunzone(menuTooltipText);
menuTooltipText = strzone(gettooltip());
+
i = 0;
w = 0;
getWrappedLine_remaining = menuTooltipText;
menuTooltipState = 1;
if(menuTooltipItem)
- if(!m_testmousetooltipbox())
+ if(!m_testmousetooltipbox(pos))
menuTooltipState = 2; // fade out if mouse touches it
switch(menuTooltipState)
break;
}
- if(menuTooltipItem)
+ if(menuTooltipItem == world)
+ {
+ if (menuTooltipText)
+ {
+ strunzone(menuTooltipText);
+ menuTooltipText = string_null;
+ }
+ return;
+ }
+ else
{
if(menu_tooltips != menu_tooltips_old)
{
menu_tooltips_old = menu_tooltips;
}
else if(menuTooltipOrigin_x < 0) // unallocated?
- m_allocatetooltipbox(menuMousePos);
+ m_allocatetooltipbox(pos);
if(menuTooltipOrigin_x >= 0)
{
}
}
-void() m_draw =
+void m_draw()
{
float t;
float realFrametime;
if(Menu_Active)
if(!cvar("menu_video_played"))
{
- localcmd("set menu_video_played 1; cd loop $menu_cdtrack; play sound/announcer/default/welcome.ogg\n");
+ localcmd("cd loop $menu_cdtrack; play sound/announcer/default/welcome.ogg\n");
menuLogoAlpha = -0.8; // no idea why, but when I start this at zero, it jumps instead of fading FIXME
}
+ // ALWAYS set this cvar; if we start but menu is not active, this means we want no background music!
+ localcmd("set menu_video_played 1\n");
}
t = gettime();
}
main.draw(main);
- m_tooltip();
+ m_tooltip(menuMousePos);
draw_alpha = max(draw_alpha, SKINALPHA_CURSOR_INTRO * bound(0, menuLogoAlpha, 1));
postMenuDraw();
frametime = 0;
-};
+}
-void() m_display =
+void m_display()
{
Menu_Active = true;
setkeydest(KEY_MENU);
main.focusEnter(main);
main.showNotify(main);
-};
+}
-void() m_hide =
+void m_hide()
{
Menu_Active = false;
setkeydest(KEY_GAME);
main.focusLeave(main);
main.hideNotify(main);
-};
+}
-void() m_toggle =
+void m_toggle(float mode)
{
if(Menu_Active)
+ {
+ if (mode == 1)
+ return;
m_hide();
+ }
else
+ {
+ if (mode == 0)
+ return;
m_display();
-};
+ }
+}
-void() m_shutdown =
+void m_shutdown()
{
entity e;
if(e.destroy)
e.destroy(e);
}
-};
+}
void m_focus_item_chain(entity outermost, entity innermost)
{
}
}
-void(string itemname) m_goto =
+void m_goto(string itemname)
{
entity e;
if(!menuInitialized)
}
}
-void() m_goto_skin_selector =
+void m_goto_skin_selector()
{
if(!menuInitialized)
return;
m_goto("skinselector");
}
-void() m_goto_language_selector =
+void m_goto_language_selector()
{
if(!menuInitialized)
return;
m_goto("languageselector");
}
-void() m_goto_video_settings =
+void m_goto_video_settings()
{
if(!menuInitialized)
return;