#include "oo/classes.qc"
#include "xonotic/util.qh"
+#include "../common/items/all.qh"
#include "../common/weapons/all.qh"
#include "../common/mapinfo.qh"
+#include "../common/mutators/base.qh"
///////////////////////////////////////////////
// Menu Source File
cvar_set("_menu_prvm_language", prvm_language);
#ifdef WATERMARK
- dprintf("^4MQC Build information: ^1%s\n", WATERMARK);
+ LOG_TRACEF("^4MQC Build information: ^1%s\n", WATERMARK);
#endif
// list all game dirs (TEST)
s = getgamedirinfo(i, GETGAMEDIRINFO_NAME);
if (!s)
break;
- dprint(s, ": ", getgamedirinfo(i, GETGAMEDIRINFO_DESCRIPTION));
+ LOG_TRACE(s, ": ", getgamedirinfo(i, GETGAMEDIRINFO_DESCRIPTION));
}
}
// needs to be done so early because of the constants they create
- CALL_ACCUMULATED_FUNCTION(RegisterWeapons);
- CALL_ACCUMULATED_FUNCTION(RegisterGametypes);
+ static_init();
RegisterSLCategories();
draw_setMousePointer(SKINGFX_CURSOR, SKINSIZE_CURSOR, SKINOFFSET_CURSOR);
- loadTooltips();
anim = NEW(AnimHost);
main = NEW(MainWindow); main.configureMainWindow(main);
- unloadTooltips();
main.resizeNotify(main, '0 0 0', eX * conwidth + eY * conheight, '0 0 0', eX * conwidth + eY * conheight);
main.focused = 1;
if(mouseButtonsPressed < 0)
{
mouseButtonsPressed = 0;
- dprint("Warning: released an already released button\n");
+ LOG_TRACE("Warning: released an already released button\n");
}
}
if(key == K_ALT) menuShiftState -= (menuShiftState & S_ALT);
if(mouseButtonsPressed > 10)
{
mouseButtonsPressed = 10;
- dprint("Warning: pressed an already pressed button\n");
+ LOG_TRACE("Warning: pressed an already pressed button\n");
}
}
if(key == K_ALT) menuShiftState |= S_ALT;
vector menuTooltipSize;
float menuTooltipAlpha;
string menuTooltipText;
-float menuTooltipState; // 0: static, 1: fading in, 2: fading out
+float menuTooltipState; // 0: static, 1: fading in, 2: fading out, 3: forced fading out
float m_testmousetooltipbox(vector pos)
{
if(pos.x >= menuTooltipOrigin.x && pos.x < menuTooltipOrigin.x + menuTooltipSize.x)
entity it;
entity best;
- best = world;
+ best = NULL;
it = root;
while(it.instanceOfContainer)
best = it;
else if(menu_tooltips == 2 && (it.cvarName || it.onClickCommand))
best = it;
- it = world;
+ it = NULL;
}
else if(it.instanceOfModalController)
it = it.focusedChild;
}
return menuTooltipItem.tooltip;
}
+string prev_tooltip;
void m_tooltip(vector pos)
{
float f, i, w;
if (!menu_tooltips)
{
// don't return immediately, fade out the active tooltip first
- if (menuTooltipItem == world)
+ if (menuTooltipItem == NULL)
return;
- it = world;
+ it = NULL;
menu_tooltips_old = menu_tooltips;
}
else
menuTooltipAveragedMousePos = menuTooltipAveragedMousePos * (1 - f) + pos * f;
f = vlen(pos - menuTooltipAveragedMousePos);
if(f < 0.01)
+ {
it = m_findtooltipitem(main, pos);
+
+ if(it.instanceOfListBox && it.isScrolling(it))
+ it = world;
+
+ if(it && prev_tooltip != it.tooltip)
+ {
+ // fade out if tooltip of a certain item has changed
+ menuTooltipState = 3;
+ if(prev_tooltip)
+ strunzone(prev_tooltip);
+ prev_tooltip = strzone(it.tooltip);
+ }
+ else if(menuTooltipItem && !m_testmousetooltipbox(pos))
+ menuTooltipState = 3; // fade out if mouse touches it
+
+ }
else
- it = world;
+ it = NULL;
}
fontsize = '1 0 0' * (SKINFONTSIZE_TOOLTIP / conwidth) + '0 1 0' * (SKINFONTSIZE_TOOLTIP / conheight);
- // float menuTooltipState; // 0: static, 1: fading in, 2: fading out
+ // float menuTooltipState; // 0: static, 1: fading in, 2: fading out, 3: forced fading out
if(it != menuTooltipItem)
{
switch(menuTooltipState)
else if(menuTooltipState == 2) // re-fade in?
menuTooltipState = 1;
- if(menuTooltipItem)
- if(!m_testmousetooltipbox(pos))
- menuTooltipState = 2; // fade out if mouse touches it
-
switch(menuTooltipState)
{
- case 1:
+ case 1: // fade in
menuTooltipAlpha = bound(0, menuTooltipAlpha + 5 * frametime, 1);
if(menuTooltipAlpha == 1)
menuTooltipState = 0;
break;
- case 2:
+ case 2: // fade out
+ case 3: // forced fade out
menuTooltipAlpha = bound(0, menuTooltipAlpha - 2 * frametime, 1);
if(menuTooltipAlpha == 0)
{
menuTooltipState = 0;
- menuTooltipItem = world;
+ menuTooltipItem = NULL;
}
break;
}
- if(menuTooltipItem == world)
+ if(menuTooltipItem == NULL)
{
if (menuTooltipText)
{
if(menu_tooltips != menu_tooltips_old)
{
if (menu_tooltips != 0 && menu_tooltips_old != 0)
- menuTooltipItem = world; // reload tooltip next frame
+ menuTooltipItem = NULL; // reload tooltip next frame
menu_tooltips_old = menu_tooltips;
}
else if(menuTooltipOrigin.x < 0) // unallocated?