myTarget = myPos;
for (i = 0; i < HUD_PANEL_NUM; ++i) {
- if(i == highlightedPanel || !panel_enabled)
+ if(hud_panel[i] == highlightedPanel || !panel_enabled)
continue;
panel = hud_panel[i];
void HUD_Panel_SetPos(vector pos)
{
- panel = hud_panel[highlightedPanel];
+ panel = highlightedPanel;
HUD_Panel_UpdatePosSize()
vector mySize;
mySize = panel_size;
string s;
s = strcat(ftos(pos_x/vid_conwidth), " ", ftos(pos_y/vid_conheight));
- cvar_set(strcat("hud_panel_", hud_panel[highlightedPanel].panel_name, "_pos"), s);
+ cvar_set(strcat("hud_panel_", highlightedPanel.panel_name, "_pos"), s);
}
// check if resize will result in panel being moved into another panel. If so, return snapped vector, otherwise return the given vector
ratio = mySize_x/mySize_y;
for (i = 0; i < HUD_PANEL_NUM; ++i) {
- if(i == highlightedPanel || !panel_enabled)
+ if(hud_panel[i] == highlightedPanel || !panel_enabled)
continue;
panel = hud_panel[i];
void HUD_Panel_SetPosSize(vector mySize)
{
- panel = hud_panel[highlightedPanel];
+ panel = highlightedPanel;
HUD_Panel_UpdatePosSize()
vector resizeorigin;
resizeorigin = panel_click_resizeorigin;
mySize_x = max(0.025 * vid_conwidth, mySize_x);
mySize_y = max(0.025 * vid_conheight, mySize_y);
- if(highlightedPanel == HUD_PANEL_CHAT) // some panels have their own restrictions, like the chat panel (which actually only moves the engine chat print around). Looks bad if it's too small.
+ if(highlightedPanel == HUD_PANEL(CHAT)) // some panels have their own restrictions, like the chat panel (which actually only moves the engine chat print around). Looks bad if it's too small.
{
mySize_x = max(17 * autocvar_con_chatsize, mySize_x);
mySize_y = max(2 * autocvar_con_chatsize + 2 * panel_bg_padding, mySize_y);
//if(cvar("hud_configure_checkcollisions_debug"))
//drawfill(myPos, mySize, '0 1 0', .3, DRAWFLAG_NORMAL);
- entity e = hud_panel[highlightedPanel];
string s;
s = strcat(ftos(mySize_x/vid_conwidth), " ", ftos(mySize_y/vid_conheight));
- cvar_set(strcat("hud_panel_", e.panel_name, "_size"), s);
+ cvar_set(strcat("hud_panel_", highlightedPanel.panel_name, "_size"), s);
s = strcat(ftos(myPos_x/vid_conwidth), " ", ftos(myPos_y/vid_conheight));
- cvar_set(strcat("hud_panel_", e.panel_name, "_pos"), s);
+ cvar_set(strcat("hud_panel_", highlightedPanel.panel_name, "_pos"), s);
}
float pressed_key_time;
vector highlightedPanel_initial_pos, highlightedPanel_initial_size;
void HUD_Panel_Arrow_Action(float nPrimary)
{
- if (highlightedPanel == -1)
+ if(!highlightedPanel)
return;
hud_configure_checkcollisions = (!(hudShiftState & S_CTRL) && autocvar_hud_configure_checkcollisions);
step = (step / 64) * (1 + 2 * (time - pressed_key_time));
}
- panel = hud_panel[highlightedPanel];
+ panel = highlightedPanel;
HUD_Panel_UpdatePosSize()
highlightedPanel_initial_pos = panel_pos;
HUD_Panel_SetPos(pos);
}
- panel = hud_panel[highlightedPanel];
+ panel = highlightedPanel;
HUD_Panel_UpdatePosSize()
if (highlightedPanel_initial_pos != panel_pos || highlightedPanel_initial_size != panel_size)
vector prevMouseClickedPos; // pos during previous left mouse click, to check for doubleclicks
void HUD_Panel_EnableMenu();
-float tab_panels[HUD_PANEL_MAX];
-float tab_panel, tab_backward;
+entity tab_panels[HUD_PANEL_MAX];
+entity tab_panel;
vector tab_panel_pos;
+float tab_backward;
void HUD_Panel_FirstInDrawQ(float id);
void reset_tab_panels()
{
int i;
for(i = 0; i < HUD_PANEL_NUM; ++i)
- tab_panels[i] = -1;
+ tab_panels[i] = world;
}
float HUD_Panel_InputEvent(float bInputType, float nPrimary, float nSecondary)
{
{
if (bInputType == 1) //ctrl has been released
{
- if (tab_panel != -1)
+ if (tab_panel)
{
//switch to selected panel
highlightedPanel = tab_panel;
highlightedAction = 0;
- HUD_Panel_FirstInDrawQ(highlightedPanel);
+ HUD_Panel_FirstInDrawQ(highlightedPanel.panel_id);
}
- tab_panel = -1;
+ tab_panel = world;
reset_tab_panels();
}
}
//(it should only after every other panel of the hud)
//It's a minor bug anyway, we can live with it
- float starting_panel;
- float old_tab_panel = tab_panel;
- if (tab_panel == -1) //first press of TAB
+ entity starting_panel;
+ entity old_tab_panel = tab_panel;
+ if (!tab_panel) //first press of TAB
{
- if (highlightedPanel != -1)
if (highlightedPanel)
{
- panel = hud_panel[highlightedPanel];
+ panel = highlightedPanel;
HUD_Panel_UpdatePosSize()
}
else
panel_pos = '0 0 0';
- starting_panel = highlightedPanel; //can be -1, it means no starting panel
+ starting_panel = highlightedPanel;
tab_panel_pos = panel_pos; //to compute level
}
else
level = floor(tab_panel_pos_y / level_height) * level_height; //starting level
candidate_pos_x = (!tab_backward) ? vid_conwidth : 0;
start_pos_x = tab_panel_pos_x;
- tab_panel = -1;
+ tab_panel = world;
k=0;
while(++k)
{
for(i = 0; i < HUD_PANEL_NUM; ++i)
{
- if (i == tab_panels[i] || i == starting_panel)
- continue;
panel = hud_panel[i];
+ if (panel == tab_panels[i] || panel == starting_panel)
+ continue;
HUD_Panel_UpdatePosSize()
if (panel_pos_y >= level && (panel_pos_y - level) < level_height)
if ( ( !tab_backward && panel_pos_x >= start_pos_x && (panel_pos_x < candidate_pos_x || (panel_pos_x == candidate_pos_x && panel_pos_y <= candidate_pos_y)) )
|| ( tab_backward && panel_pos_x <= start_pos_x && (panel_pos_x > candidate_pos_x || (panel_pos_x == candidate_pos_x && panel_pos_y >= candidate_pos_y)) ) )
{
- tab_panel = i;
+ tab_panel = panel;
tab_panel_pos = candidate_pos = panel_pos;
}
}
- if (tab_panel != -1)
+ if (tab_panel)
break;
if (k == LEVELS_NUM) //tab_panel not found
{
reset_tab_panels();
- if (old_tab_panel == -2) //this prevents an infinite loop (should not happen normally)
+ if (!old_tab_panel)
{
- tab_panel = -1;
+ tab_panel = world;
return true;
}
starting_panel = old_tab_panel;
- old_tab_panel = -2;
+ old_tab_panel = world;
goto find_tab_panel; //u must find tab_panel!
}
if (!tab_backward)
}
}
- tab_panels[tab_panel] = tab_panel;
+ tab_panels[tab_panel.panel_id] = tab_panel;
}
else if(nPrimary == K_SPACE && hudShiftState & S_CTRL) // enable/disable highlighted panel or dock
{
if (bInputType == 1 || mouseClicked)
return true;
- if (highlightedPanel != -1)
- {
- entity e = hud_panel[highlightedPanel];
- cvar_set(strcat("hud_panel_", e.panel_name), ftos(!(panel_enabled)));
- }
+ if (highlightedPanel)
+ cvar_set(strcat("hud_panel_", highlightedPanel.panel_name), ftos(!(panel_enabled)));
else
cvar_set(strcat("hud_dock"), (autocvar_hud_dock == "") ? "dock" : "");
}
if (bInputType == 1 || mouseClicked)
return true;
- if (highlightedPanel != -1)
+ if (highlightedPanel)
{
- panel = hud_panel[highlightedPanel];
+ panel = highlightedPanel;
HUD_Panel_UpdatePosSize()
panel_size_copied = panel_size;
- highlightedPanel_copied = highlightedPanel;
}
}
else if(nPrimary == 'v' && hudShiftState & S_CTRL) // past copied size on the highlighted panel
if (bInputType == 1 || mouseClicked)
return true;
- if (highlightedPanel_copied == -1 || highlightedPanel == -1)
+ if (panel_size_copied == '0 0 0' || !highlightedPanel)
return true;
- panel = hud_panel[highlightedPanel];
+ panel = highlightedPanel;
HUD_Panel_UpdatePosSize()
// reduce size if it'd go beyond screen boundaries
highlightedPanel_backup = highlightedPanel;
s = strcat(ftos(tmp_size_x/vid_conwidth), " ", ftos(tmp_size_y/vid_conheight));
- entity e = hud_panel[highlightedPanel];
- cvar_set(strcat("hud_panel_", e.panel_name, "_size"), s);
+ cvar_set(strcat("hud_panel_", highlightedPanel.panel_name, "_size"), s);
}
else if(nPrimary == 'z' && hudShiftState & S_CTRL) // undo last action
{
if (bInputType == 1 || mouseClicked)
return true;
//restore previous values
- if (highlightedPanel_backup != -1)
+ if (highlightedPanel_backup)
{
- entity e = hud_panel[highlightedPanel_backup];
s = strcat(ftos(panel_pos_backup_x/vid_conwidth), " ", ftos(panel_pos_backup_y/vid_conheight));
- cvar_set(strcat("hud_panel_", e.panel_name, "_pos"), s);
+ cvar_set(strcat("hud_panel_", highlightedPanel_backup.panel_name, "_pos"), s);
s = strcat(ftos(panel_size_backup_x/vid_conwidth), " ", ftos(panel_size_backup_y/vid_conheight));
- cvar_set(strcat("hud_panel_", e.panel_name, "_size"), s);
- highlightedPanel_backup = -1;
+ cvar_set(strcat("hud_panel_", highlightedPanel_backup.panel_name, "_size"), s);
+ highlightedPanel_backup = world;
}
}
else if(nPrimary == K_UPARROW || nPrimary == K_DOWNARROW || nPrimary == K_LEFTARROW || nPrimary == K_RIGHTARROW)
{
if (bInputType == 1)
return true;
- if (highlightedPanel != -1)
+ if (highlightedPanel)
HUD_Panel_EnableMenu();
}
else if(hit_con_bind)
// move
if(allow_move && mousepos_x > panel_pos_x && mousepos_y > panel_pos_y && mousepos_x < panel_pos_x + panel_size_x && mousepos_y < panel_pos_y + panel_size_y)
{
- highlightedPanel = i;
+ highlightedPanel = hud_panel[i];
HUD_Panel_FirstInDrawQ(i);
highlightedAction = 1;
panel_click_distance = mousepos - panel_pos;
// resize from topleft border
else if(mousepos_x >= panel_pos_x - border && mousepos_y >= panel_pos_y - border && mousepos_x <= panel_pos_x + 0.5 * panel_size_x && mousepos_y <= panel_pos_y + 0.5 * panel_size_y)
{
- highlightedPanel = i;
+ highlightedPanel = hud_panel[i];
HUD_Panel_FirstInDrawQ(i);
highlightedAction = 2;
resizeCorner = 1;
// resize from topright border
else if(mousepos_x >= panel_pos_x + 0.5 * panel_size_x && mousepos_y >= panel_pos_y - border && mousepos_x <= panel_pos_x + panel_size_x + border && mousepos_y <= panel_pos_y + 0.5 * panel_size_y)
{
- highlightedPanel = i;
+ highlightedPanel = hud_panel[i];
HUD_Panel_FirstInDrawQ(i);
highlightedAction = 2;
resizeCorner = 2;
// resize from bottomleft border
else if(mousepos_x >= panel_pos_x - border && mousepos_y >= panel_pos_y + 0.5 * panel_size_y && mousepos_x <= panel_pos_x + 0.5 * panel_size_x && mousepos_y <= panel_pos_y + panel_size_y + border)
{
- highlightedPanel = i;
+ highlightedPanel = hud_panel[i];
HUD_Panel_FirstInDrawQ(i);
highlightedAction = 2;
resizeCorner = 3;
// resize from bottomright border
else if(mousepos_x >= panel_pos_x + 0.5 * panel_size_x && mousepos_y >= panel_pos_y + 0.5 * panel_size_y && mousepos_x <= panel_pos_x + panel_size_x + border && mousepos_y <= panel_pos_y + panel_size_y + border)
{
- highlightedPanel = i;
+ highlightedPanel = hud_panel[i];
HUD_Panel_FirstInDrawQ(i);
highlightedAction = 2;
resizeCorner = 4;
return;
}
}
- highlightedPanel = -1;
+ highlightedPanel = world;
highlightedAction = 0;
}
{
menu_enabled = 2;
menu_enabled_time = time;
- localcmd("menu_showhudoptions ", hud_panel[highlightedPanel].panel_name, "\n");
+ localcmd("menu_showhudoptions ", highlightedPanel.panel_name, "\n");
}
float mouse_over_panel;
void HUD_Panel_Mouse()
{
if(prevMouseClicked == 0)
{
- if (tab_panel != -1)
+ if (tab_panel)
{
//stop ctrl-tab selection
- tab_panel = -1;
+ tab_panel = world;
reset_tab_panels();
}
HUD_Panel_Highlight(mouseClicked & S_MOUSE1); // sets highlightedPanel, highlightedAction, panel_click_distance, panel_click_resizeorigin
// and calls HUD_Panel_UpdatePosSize() for the highlighted panel
- if (highlightedPanel != -1)
+ if (highlightedPanel)
{
highlightedPanel_initial_pos = panel_pos;
highlightedPanel_initial_size = panel_size;
}
// doubleclick check
- if ((mouseClicked & S_MOUSE1) && time - prevMouseClickedTime < 0.4 && highlightedPanel != -1 && prevMouseClickedPos == mousepos)
+ if ((mouseClicked & S_MOUSE1) && time - prevMouseClickedTime < 0.4 && highlightedPanel && prevMouseClickedPos == mousepos)
{
mouseClicked = 0; // to prevent spam, I guess.
HUD_Panel_EnableMenu();
}
else
{
- panel = hud_panel[highlightedPanel];
+ panel = highlightedPanel;
HUD_Panel_UpdatePosSize()
}
- if (highlightedPanel != -1)
+ if (highlightedPanel)
{
drawfill(panel_pos - '1 1 0' * panel_bg_border, panel_size + '2 2 0' * panel_bg_border, '1 1 1', .1, DRAWFLAG_NORMAL);
if (highlightedPanel_initial_pos != panel_pos || highlightedPanel_initial_size != panel_size)
mouse_over_panel = 0;
else
mouse_over_panel = HUD_Panel_Check_Mouse_Pos(TRUE);
- if (mouse_over_panel && tab_panel == -1)
+ if (mouse_over_panel && !tab_panel)
drawfill(panel_pos - '1 1 0' * panel_bg_border, panel_size + '2 2 0' * panel_bg_border, '1 1 1', .1, DRAWFLAG_NORMAL);
}
// draw cursor after performing move/resize to have the panel pos/size updated before mouse_over_panel