// 1/4 height: bottom part
void draw_BorderPicture(vector theOrigin, string pic, vector theSize, vector theColor, float theAlpha, vector theBorderSize)
{
+ if (theBorderSize_x <= 0 && theBorderSize_y <= 0) // no border
+ {
+ // draw only the central part
+ drawsubpic(theOrigin, theSize, pic, '0.25 0.25 0', '0.5 0.5 0', theColor, theAlpha, 0);
+ return;
+ }
+
vector dX, dY;
vector width, height;
vector bW, bH;
drawpic_aspect(pos, strcat("gfx/hud/", cvar_string("hud_skin"), "/", pic), sz, color, alpha, drawflag);
}
+// TODO: aspect!
void drawpic_skin_expanding(vector pos, string pic, vector sz, vector rgb, float alpha, float flag, float fadelerp) {
drawpic_expanding(pos, strcat("gfx/hud/", cvar_string("hud_skin"), "/", pic), sz, rgb, alpha, flag, fadelerp);
}
fclose(fh);
}
-vector HUD_Panel_GetMinSize(float id)
-{
- vector mySize;
- // note: please only set mySize_y on aspect ratio forced panels
- switch(id) {
- case 0:
- mySize_x = 1/10; // at least 1/10 * height
- mySize_y = 1/26; // at least 1/26 * width
- break;
- case 1:
- if(cvar("hud_inventory_onlycurrent"))
- mySize_y = 2/5; // 2/5 width
- else
- mySize_x = 0.7; // at least 0.7 * height
- break;
- case 3:
- if(cvar("hud_healtharmor") == 2)
- {
- mySize_x = 4.35; // 4.35 * height, trial and error...
- mySize_y = 0.01; // "unlimited" ;)
- }
- break;
- case 4:
- mySize_x = 1.1; // 4/5 * height, trial and error...
- mySize_y = 1/3; // 1/3 * width, trial and error...
- break;
- case 5:
- mySize_y = 1/4.1; // 1/4.1 * width, trial and error...
- break;
- case 7:
- mySize_y = 1/4; // 1/4 * width
- break;
- case 8:
- mySize_y = 1/4; // 1/4 * width
- break;
- case 9:
- mySize_y = 1/4; // 1/4 * width
- break;
- case 10:
- mySize_y = 1/2; // 1/2 * width
- break;
- case 11:
- mySize_y = 0.5898; // 0.5898 * width, reason: bg has weird dimensions...
- break;
- case 13:
- mySize_y = 0.2; // 0.25 * width, trial and error...
- break;
- }
- return mySize;
-}
-
// return active status of panel
float HUD_Panel_CheckActive(float id)
{
if(bg != "0")
{
float border;
- border = max(0.0000001, HUD_Panel_GetBorder(id)); // draw_BorderPicture does not like border = 0
+ border = HUD_Panel_GetBorder(id);
vector color;
color = HUD_Panel_GetColor(id);
vector mySize;
mySize = HUD_Panel_GetSize(id);
- if(cvar("hud_configure_checkcollisions"))
+ if(hud_configure_checkcollisions)
pos = HUD_Panel_CheckMove(id, pos, mySize);
pos_x = bound(0, pos_x, vid_conwidth - mySize_x);
if(cvar("hud_configure_grid"))
{
- pos_x = floor((pos_x/vid_conwidth)/bound(0.005, cvar("hud_configure_grid_x"), 0.2) + 0.5) * cvar("hud_configure_grid_x") * vid_conwidth;
- pos_y = floor((pos_y/vid_conheight)/bound(0.005, cvar("hud_configure_grid_y"), 0.2) + 0.5) * cvar("hud_configure_grid_y") * vid_conheight;
+ pos_x = floor((pos_x/vid_conwidth)/bound(0.005, cvar("hud_configure_grid_x"), 0.2) + 0.5) * bound(0.005, cvar("hud_configure_grid_x"), 0.2) * vid_conwidth;
+ pos_y = floor((pos_y/vid_conheight)/bound(0.005, cvar("hud_configure_grid_y"), 0.2) + 0.5) * bound(0.005, cvar("hud_configure_grid_y"), 0.2) * vid_conheight;
}
string s;
}
// check if resize will result in panel being moved into another panel. If so, return snapped vector, otherwise return the given vector
-vector HUD_Panel_CheckResize(float id, vector mySize, vector resizeorigin, float ratio) {
+vector HUD_Panel_CheckResize(float id, vector mySize, vector resizeorigin) {
float i;
float targBorder;
vector targPos;
vector targSize;
vector targEndPos;
+
vector dist;
+ float ratio;
+ ratio = mySize_x/mySize_y;
for (i = 0; i < HUD_PANEL_NUM; ++i) {
if(i == id || !HUD_Panel_CheckActive(i))
targEndPos = targPos + targSize;
// resizeorigin is WITHIN target panel, just abort any collision testing against that particular panel to produce expected behaviour!
- if(resizeorigin_x > targPos_x && resizeorigin_x < targPos_x + targSize_x && resizeorigin_y > targPos_y && resizeorigin_y < targPos_y + targSize_y)
+ if(resizeorigin_x > targPos_x && resizeorigin_x < targEndPos_x && resizeorigin_y > targPos_y && resizeorigin_y < targEndPos_y)
continue;
if (resizeCorner == 1)
return mySize;
}
-void HUD_Panel_SetPosSize(float id)
+void HUD_Panel_SetPosSize(float id, vector mySize)
{
vector resizeorigin;
resizeorigin = panel_click_resizeorigin;
- vector mySize, myPos;
-
- if(resizeCorner == 1) {
- mySize_x = resizeorigin_x - (mousepos_x - panel_click_distance_x);
- mySize_y = resizeorigin_y - (mousepos_y - panel_click_distance_y);
- } else if(resizeCorner == 2) {
- mySize_x = mousepos_x + panel_click_distance_x - resizeorigin_x;
- mySize_y = panel_click_distance_y + resizeorigin_y - mousepos_y;
- } else if(resizeCorner == 3) {
- mySize_x = resizeorigin_x + panel_click_distance_x - mousepos_x;
- mySize_y = mousepos_y + panel_click_distance_y - resizeorigin_y;
- } else { // resizeCorner == 4
- mySize_x = mousepos_x - (resizeorigin_x - panel_click_distance_x);
- mySize_y = mousepos_y - (resizeorigin_y - panel_click_distance_y);
- }
+ vector myPos;
// minimum panel size cap
mySize_x = max(0.025 * vid_conwidth, mySize_x);
mySize_y = max(2 * cvar("con_chatsize") + 2 * HUD_Panel_GetPadding(id), mySize_y);
}
- // cap against panel's own limits
- vector minSize;
- minSize = HUD_Panel_GetMinSize(id); // mySize_x at least minSize_x * mySize_y, and vice versa
- float fixedRatio;
- if(!minSize_x && minSize_y) // forced aspect ratio
- {
- minSize_x = 1/minSize_y;
- fixedRatio = minSize_x;
- mySize_x = max(minSize_x * mySize_y, mySize_x);
- mySize_y = max(minSize_y * mySize_x, mySize_y);
- }
- else if(minSize_x && !minSize_y) // hybrid aspect ratio, currently supported only in one dimension
- {
- if (mySize_x/mySize_y < minSize_x) // resizing in x direction allows free aspect ratio
- {
- fixedRatio = minSize_x;
- minSize_y = 1/minSize_x;
- mySize_y = max(minSize_y * mySize_x, mySize_y);
- mySize_x = max(minSize_x * mySize_y, mySize_x);
- }
- else
- fixedRatio = -minSize_x; //negative so that it will be used ONLY after checkResize
- }
-
// collision testing|
// -----------------+
// before checkresize, otherwise panel can be snapped partially inside another panel or panel aspect ratio can be broken
if(cvar("hud_configure_grid"))
{
- mySize_x = floor((mySize_x/vid_conwidth)/bound(0.005, cvar("hud_configure_grid_x"), 0.2) + 0.5) * cvar("hud_configure_grid_x") * vid_conwidth;
- mySize_y = floor((mySize_y/vid_conheight)/bound(0.005, cvar("hud_configure_grid_y"), 0.2) + 0.5) * cvar("hud_configure_grid_y") * vid_conheight;
- }
-
- if (fixedRatio > 0)
- {
- // keep aspect ratio _MAXIMIZING_ the size
- if (mySize_x / mySize_y > fixedRatio)
- mySize_y = mySize_x / fixedRatio;
- else
- mySize_x = mySize_y * fixedRatio;
+ mySize_x = floor((mySize_x/vid_conwidth)/bound(0.005, cvar("hud_configure_grid_x"), 0.2) + 0.5) * bound(0.005, cvar("hud_configure_grid_x"), 0.2) * vid_conwidth;
+ mySize_y = floor((mySize_y/vid_conheight)/bound(0.005, cvar("hud_configure_grid_y"), 0.2) + 0.5) * bound(0.005, cvar("hud_configure_grid_y"), 0.2) * vid_conheight;
}
- if(cvar("hud_configure_checkcollisions"))
- {
- if (fixedRatio > 0)
- {
- mySize = HUD_Panel_CheckResize(id, mySize, resizeorigin, fixedRatio);
-
- // Make sure once more that we DON'T cross the screen edges
- // left/top screen edges
- if(myPos_x < 0)
- mySize_x = mySize_x + myPos_x;
- if(myPos_y < 0)
- mySize_y = mySize_y + myPos_y;
-
- // bottom/right screen edges
- if(myPos_x + mySize_x > vid_conwidth)
- mySize_x = vid_conwidth - myPos_x;
- if(myPos_y + mySize_y > vid_conheight)
- mySize_y = vid_conheight - myPos_y;
-
- // restore again aspect ratio, _minimizing_ the size
- if (mySize_x / mySize_y < fixedRatio)
- mySize_y = mySize_x / fixedRatio;
- else
- mySize_x = mySize_y * fixedRatio;
- }
- else
- {
- mySize = HUD_Panel_CheckResize(id, mySize, resizeorigin, mySize_x / mySize_y);
- if (fixedRatio < 0)
- {
- fixedRatio = -fixedRatio;
- // restore again aspect ratio, _minimizing_ the size
- if (mySize_x / mySize_y < fixedRatio)
- mySize_y = mySize_x / fixedRatio;
- }
- }
- }
+ if(hud_configure_checkcollisions)
+ mySize = HUD_Panel_CheckResize(id, mySize, resizeorigin);
// minimum panel size cap, do this once more so we NEVER EVER EVER have a panel smaller than this, JUST IN CASE above code still makes the panel eg negative (impossible to resize back without changing cvars manually then)
mySize_x = max(0.025 * vid_conwidth, mySize_x);
}
if(cvar("hud_configure_checkcollisions_debug"))
- if(cvar("hud_configure_checkcollisions"))
drawfill(myPos, mySize, '0 1 0', .3, DRAWFLAG_NORMAL);
string s;
cvar_set(strcat("hud_", HUD_Panel_GetName(id), "_pos"), s);
}
+float pressed_key_time;
+void HUD_Panel_Arrow_Action(float nPrimary)
+{
+ if (highlightedPanel_prev == -1)
+ return;
+
+ hud_configure_checkcollisions = (!(hudShiftState & S_CTRL) && cvar("hud_configure_checkcollisions"));
+
+ float step;
+ if (nPrimary == K_UPARROW || nPrimary == K_DOWNARROW)
+ step = vid_conheight;
+ else
+ step = vid_conwidth;
+ if (hudShiftState & S_SHIFT)
+ step = (step / 256); // more precision
+ else
+ step = (step / 64) * (1 + 2 * (time - pressed_key_time));
+
+ highlightedPanel = highlightedPanel_prev;
+
+ if (hudShiftState & S_ALT) // resize
+ {
+ highlightedAction = 1;
+ if(nPrimary == K_UPARROW)
+ resizeCorner = 1;
+ else if(nPrimary == K_RIGHTARROW)
+ resizeCorner = 2;
+ else if(nPrimary == K_LEFTARROW)
+ resizeCorner = 3;
+ else // if(nPrimary == K_DOWNARROW)
+ resizeCorner = 4;
+
+ // ctrl+arrow reduces the size, instead of increasing it
+ // Note that ctrl disables collisions check too, but it's fine
+ // since we don't collide with anything reducing the size
+ if (hudShiftState & S_CTRL) {
+ step = -step;
+ resizeCorner = 5 - resizeCorner;
+ }
+
+ vector mySize;
+ mySize = HUD_Panel_GetSize(highlightedPanel);
+ panel_click_resizeorigin = HUD_Panel_GetPos(highlightedPanel);
+ if(resizeCorner == 1) {
+ panel_click_resizeorigin += mySize;
+ mySize_y += step;
+ } else if(resizeCorner == 2) {
+ panel_click_resizeorigin_y += mySize_y;
+ mySize_x += step;
+ } else if(resizeCorner == 3) {
+ panel_click_resizeorigin_x += mySize_x;
+ mySize_x += step;
+ } else { // resizeCorner == 4
+ mySize_y += step;
+ }
+ HUD_Panel_SetPosSize(highlightedPanel, mySize);
+ }
+ else // move
+ {
+ highlightedAction = 2;
+ vector pos;
+ pos = HUD_Panel_GetPos(highlightedPanel);
+ if(nPrimary == K_UPARROW)
+ pos_y -= step;
+ else if(nPrimary == K_DOWNARROW)
+ pos_y += step;
+ else if(nPrimary == K_LEFTARROW)
+ pos_x -= step;
+ else // if(nPrimary == K_RIGHTARROW)
+ pos_x += step;
+
+ HUD_Panel_SetPos(highlightedPanel, pos);
+ }
+}
+
float mouseClicked;
float prevMouseClicked; // previous state
float prevMouseClickedTime; // time during previous mouse click, to check for doubleclicks
hit_con_bind = 1;
}
+ if(bInputType == 0) {
+ if(nPrimary == K_ALT) hudShiftState |= S_ALT;
+ if(nPrimary == K_CTRL) hudShiftState |= S_CTRL;
+ if(nPrimary == K_SHIFT) hudShiftState |= S_SHIFT;
+ }
+ else if(bInputType == 1) {
+ if(nPrimary == K_ALT) hudShiftState -= (hudShiftState & S_ALT);
+ if(nPrimary == K_CTRL) hudShiftState -= (hudShiftState & S_CTRL);
+ if(nPrimary == K_SHIFT) hudShiftState -= (hudShiftState & S_SHIFT);
+ }
+
if(nPrimary == K_MOUSE1)
{
if(bInputType == 0) { // key pressed
}
else if(nPrimary == K_ESCAPE)
{
+ if (bInputType == 1)
+ return true;
disable_menu_alphacheck = 1;
menu_enabled = 1;
menu_enabled_time = time;
localcmd("menu_showhudexit\n");
}
+ else if(nPrimary == K_UPARROW || nPrimary == K_DOWNARROW || nPrimary == K_LEFTARROW || nPrimary == K_RIGHTARROW)
+ {
+ if (bInputType == 1)
+ {
+ pressed_key_time = 0;
+ return true;
+ }
+ else if (pressed_key_time == 0)
+ pressed_key_time = time;
+ HUD_Panel_Arrow_Action(nPrimary); //move or resize panel
+ }
else if(hit_con_bind)
return false;
return true; // Suppress ALL other input
}
+void HUD_Panel_Highlight()
+{
+ float i, border;
+ vector panelPos;
+ vector panelSize;
+
+ for(i = 0; i < HUD_PANEL_NUM; ++i)
+ {
+ panelPos = HUD_Panel_GetPos(i);
+ panelSize = HUD_Panel_GetSize(i);
+ border = HUD_Panel_GetBorder(i);
+
+ // move
+ if(mousepos_x >= panelPos_x && mousepos_y >= panelPos_y && mousepos_x <= panelPos_x + panelSize_x && mousepos_y <= panelPos_y + panelSize_y)
+ {
+ highlightedPanel = i;
+ highlightedAction = 1;
+ panel_click_distance = mousepos - panelPos;
+ return;
+ }
+ // resize from topleft border
+ else if(mousepos_x >= panelPos_x - border && mousepos_y >= panelPos_y - border && mousepos_x <= panelPos_x + 0.5 * panelSize_x && mousepos_y <= panelPos_y + 0.5 * panelSize_y)
+ {
+ highlightedPanel = i;
+ highlightedAction = 2;
+ resizeCorner = 1;
+ panel_click_distance = mousepos - panelPos;
+ panel_click_resizeorigin = panelPos + panelSize;
+ return;
+ }
+ // resize from topright border
+ else if(mousepos_x >= panelPos_x + 0.5 * panelSize_x && mousepos_y >= panelPos_y - border && mousepos_x <= panelPos_x + panelSize_x + border && mousepos_y <= panelPos_y + 0.5 * panelSize_y)
+ {
+ highlightedPanel = i;
+ highlightedAction = 2;
+ resizeCorner = 2;
+ panel_click_distance_x = panelSize_x - mousepos_x + panelPos_x;
+ panel_click_distance_y = mousepos_y - panelPos_y;
+ panel_click_resizeorigin = panelPos + eY * panelSize_y;
+ return;
+ }
+ // resize from bottomleft border
+ else if(mousepos_x >= panelPos_x - border && mousepos_y >= panelPos_y + 0.5 * panelSize_y && mousepos_x <= panelPos_x + 0.5 * panelSize_x && mousepos_y <= panelPos_y + panelSize_y + border)
+ {
+ highlightedPanel = i;
+ highlightedAction = 2;
+ resizeCorner = 3;
+ panel_click_distance_x = mousepos_x - panelPos_x;
+ panel_click_distance_y = panelSize_y - mousepos_y + panelPos_y;
+ panel_click_resizeorigin = panelPos + eX * panelSize_x;
+ return;
+ }
+ // resize from bottomright border
+ else if(mousepos_x >= panelPos_x + 0.5 * panelSize_x && mousepos_y >= panelPos_y + 0.5 * panelSize_y && mousepos_x <= panelPos_x + panelSize_x + border && mousepos_y <= panelPos_y + panelSize_y + border)
+ {
+ highlightedPanel = i;
+ highlightedAction = 2;
+ resizeCorner = 4;
+ panel_click_distance = panelSize - mousepos + panelPos;
+ panel_click_resizeorigin = panelPos;
+ return;
+ }
+ }
+}
+
void HUD_Panel_Mouse()
{
// TODO: needs better check... is there any float that contains the current state of the menu? _menu_alpha isn't apparently updated the frame the menu gets enabled
print("Menu alpha: ", cvar_string("_menu_alpha"), "\n");
*/
- if(mouseClicked == 0 && disable_menu_alphacheck != 2) { // don't reset these variables in disable_menu_alphacheck mode 2!
+ if(mouseClicked == 0 && disable_menu_alphacheck != 2 && highlightedPanel >= 0) { // don't reset these variables in disable_menu_alphacheck mode 2!
+ highlightedPanel_prev = highlightedPanel;
highlightedPanel = -1;
highlightedAction = 0;
}
if(mouseClicked)
{
- float i, border;
- vector panelPos;
- vector panelSize;
-
- for(i = 0; i < HUD_PANEL_NUM; ++i)
- {
- panelPos = HUD_Panel_GetPos(i);
- panelSize = HUD_Panel_GetSize(i);
- border = HUD_Panel_GetBorder(i);
- if(prevMouseClicked == 0) {
- // move
- if(mousepos_x >= panelPos_x && mousepos_y >= panelPos_y && mousepos_x <= panelPos_x + panelSize_x && mousepos_y <= panelPos_y + panelSize_y)
- {
- highlightedPanel = i;
- highlightedAction = 1;
- }
- // resize from topleft border
- else if(mousepos_x >= panelPos_x - border && mousepos_y >= panelPos_y - border && mousepos_x <= panelPos_x + 0.5 * panelSize_x && mousepos_y <= panelPos_y + 0.5 * panelSize_y)
- {
- highlightedPanel = i;
- highlightedAction = 2;
- resizeCorner = 1;
- }
- // resize from topright border
- else if(mousepos_x >= panelPos_x + 0.5 * panelSize_x && mousepos_y >= panelPos_y - border && mousepos_x <= panelPos_x + panelSize_x + border && mousepos_y <= panelPos_y + 0.5 * panelSize_y)
- {
- highlightedPanel = i;
- highlightedAction = 2;
- resizeCorner = 2;
- }
- // resize from bottomleft border
- else if(mousepos_x >= panelPos_x - border && mousepos_y >= panelPos_y + 0.5 * panelSize_y && mousepos_x <= panelPos_x + 0.5 * panelSize_x && mousepos_y <= panelPos_y + panelSize_y + border)
- {
- highlightedPanel = i;
- highlightedAction = 2;
- resizeCorner = 3;
- }
- // resize from bottomright border
- else if(mousepos_x >= panelPos_x + 0.5 * panelSize_x && mousepos_y >= panelPos_y + 0.5 * panelSize_y && mousepos_x <= panelPos_x + panelSize_x + border && mousepos_y <= panelPos_y + panelSize_y + border)
- {
- highlightedPanel = i;
- highlightedAction = 2;
- resizeCorner = 4;
- }
- }
-
- if(highlightedPanel == i)
- {
- if(prevMouseClicked == 0)
- {
- if(highlightedAction == 1)
- panel_click_distance = mousepos - panelPos;
- else if(highlightedAction == 2)
- {
- if(resizeCorner == 1) {
- panel_click_distance = mousepos - panelPos;
- panel_click_resizeorigin = panelPos + panelSize;
- } else if(resizeCorner == 2) {
- panel_click_distance_x = panelSize_x - mousepos_x + panelPos_x;
- panel_click_distance_y = mousepos_y - panelPos_y;
- panel_click_resizeorigin = panelPos + eY * panelSize_y;
- } else if(resizeCorner == 3) {
- panel_click_distance_x = mousepos_x - panelPos_x;
- panel_click_distance_y = panelSize_y - mousepos_y + panelPos_y;
- panel_click_resizeorigin = panelPos + eX * panelSize_x;
- } else if(resizeCorner == 4) {
- panel_click_distance = panelSize - mousepos + panelPos;
- panel_click_resizeorigin = panelPos;
- }
- }
- }
+ if(prevMouseClicked == 0)
+ HUD_Panel_Highlight(); // sets highlightedPanel, highlightedAction, panel_click_distance, panel_click_resizeorigin
- if(cvar("hud_configure_checkcollisions_debug"))
- drawfill(panelPos, panelSize, '1 0 0', .3, DRAWFLAG_NORMAL);
+ hud_configure_checkcollisions = (!(hudShiftState & S_CTRL) && cvar("hud_configure_checkcollisions"));
- if(highlightedAction == 1)
- HUD_Panel_SetPos(i, mousepos - panel_click_distance);
- else if(highlightedAction == 2)
- HUD_Panel_SetPosSize(i);
+ if(highlightedAction == 1)
+ HUD_Panel_SetPos(highlightedPanel, mousepos - panel_click_distance);
+ else if(highlightedAction == 2)
+ {
+ vector mySize;
+ if(resizeCorner == 1) {
+ mySize_x = panel_click_resizeorigin_x - (mousepos_x - panel_click_distance_x);
+ mySize_y = panel_click_resizeorigin_y - (mousepos_y - panel_click_distance_y);
+ } else if(resizeCorner == 2) {
+ mySize_x = mousepos_x + panel_click_distance_x - panel_click_resizeorigin_x;
+ mySize_y = panel_click_distance_y + panel_click_resizeorigin_y - mousepos_y;
+ } else if(resizeCorner == 3) {
+ mySize_x = panel_click_resizeorigin_x + panel_click_distance_x - mousepos_x;
+ mySize_y = mousepos_y + panel_click_distance_y - panel_click_resizeorigin_y;
+ } else { // resizeCorner == 4
+ mySize_x = mousepos_x - (panel_click_resizeorigin_x - panel_click_distance_x);
+ mySize_y = mousepos_y - (panel_click_resizeorigin_y - panel_click_distance_y);
}
+ HUD_Panel_SetPosSize(highlightedPanel, mySize);
}
// doubleclick check
// Timer (#5)
//
+string seconds_tostring(float sec)
+{
+ float minutes;
+ minutes = floor(sec / 60);
+
+ sec -= minutes * 60;
+
+ string s;
+ s = ftos(100 + sec);
+
+ return strcat(ftos(minutes), ":", substring(s, 1, 3));
+}
+
void HUD_Timer(void)
{
float id = HUD_PANEL_TIMER;
mySize -= '2 2 0' * padding;
}
- float timelimit, elapsedTime, minutes, seconds, timeleft, minutesLeft, secondsLeft;
+ string timer;
+ float timelimit, elapsedTime, timeleft, minutesLeft;
timelimit = getstatf(STAT_TIMELIMIT);
timeleft = max(0, timelimit * 60 + getstatf(STAT_GAMESTARTTIME) - time);
timeleft = ceil(timeleft);
+
minutesLeft = floor(timeleft / 60);
- secondsLeft = timeleft - minutesLeft*60;
vector timer_color;
if(minutesLeft >= 5 || warmup_stage || timelimit == 0) //don't use red or yellow in warmup or when there is no timelimit
if (cvar("hud_timer_increment") || timelimit == 0 || warmup_stage) {
if (time < getstatf(STAT_GAMESTARTTIME)) {
//while restart is still active, show 00:00
- minutes = seconds = 0;
+ timer = seconds_tostring(0);
} else {
elapsedTime = floor(time - getstatf(STAT_GAMESTARTTIME)); //127
- minutes = floor(elapsedTime / 60);
- seconds = elapsedTime - minutes*60;
+ timer = seconds_tostring(elapsedTime);
}
} else {
- minutes = minutesLeft;
- seconds = secondsLeft;
+ timer = seconds_tostring(timeleft);
}
- if(minutes > 999)
- seconds = 99;
- minutes = min(minutes, 999);
- if(minutesLeft >= 1 || cvar("hud_timer_increment") || timelimit == 0 || warmup_stage) {
- HUD_DrawXNum(pos + eX * mySize_x - eX * 5.1 * mySize_y, minutes, 3, 0, mySize_y, timer_color, 0, 0, HUD_Panel_GetFgAlpha(id), DRAWFLAG_NORMAL);
- drawpic_skin(pos + eX * mySize_x - eX * 2.57 * mySize_y, "num_colon", '1 1 0' * mySize_y, timer_color, HUD_Panel_GetFgAlpha(id), DRAWFLAG_NORMAL);
- }
- HUD_DrawXNum(pos + eX * mySize_x - eX * 2 * mySize_y, seconds, -2, 0, mySize_y, timer_color, 0, 0, HUD_Panel_GetFgAlpha(id), DRAWFLAG_NORMAL);
+ drawstring_aspect(pos, timer, mySize, mySize_y, timer_color, HUD_Panel_GetFgAlpha(HUD_PANEL_TIMER), DRAWFLAG_NORMAL);
}
// Radar (#6)
void HUD_Mod_CTF(vector pos, vector mySize)
{
vector redflag_pos, blueflag_pos;
+ vector flag_size;
float f; // every function should have that
float redflag, blueflag; // current status
break;
}
- if (myteam == COLOR_TEAM1) { // always draw own flag on left
- redflag_pos = pos;
- blueflag_pos = pos + eX * mySize_y;
+ if(mySize_x > mySize_y) {
+ if (myteam == COLOR_TEAM1) { // always draw own flag on left
+ redflag_pos = pos;
+ blueflag_pos = pos + eX * 0.5 * mySize_x;
+ } else {
+ blueflag_pos = pos;
+ redflag_pos = pos + eX * 0.5 * mySize_x;
+ }
+ flag_size = eX * 0.5 * mySize_x + eY * mySize_y;
} else {
- blueflag_pos = pos;
- redflag_pos = pos + eX * mySize_y;
+ if (myteam == COLOR_TEAM1) { // always draw own flag on left
+ redflag_pos = pos;
+ blueflag_pos = pos + eY * 0.5 * mySize_y;
+ } else {
+ blueflag_pos = pos;
+ redflag_pos = pos + eY * 0.5 * mySize_y;
+ }
+ flag_size = eY * 0.5 * mySize_y + eX * mySize_x;
}
f = bound(0, redflag_statuschange_elapsedtime*2, 1);
if(red_icon_prevstatus && f < 1)
- drawpic_skin_expanding(redflag_pos, red_icon_prevstatus, '1 1 0' * mySize_y, '1 1 1', HUD_Panel_GetFgAlpha(HUD_PANEL_MODICONS) * red_alpha_prevstatus, DRAWFLAG_NORMAL, f);
+ drawpic_skin_expanding(redflag_pos, red_icon_prevstatus, flag_size, '1 1 1', HUD_Panel_GetFgAlpha(HUD_PANEL_MODICONS) * red_alpha_prevstatus, DRAWFLAG_NORMAL, f);
if(red_icon)
- drawpic_skin(redflag_pos, red_icon, '1 1 0' * mySize_y, '1 1 1', HUD_Panel_GetFgAlpha(HUD_PANEL_MODICONS) * red_alpha * f, DRAWFLAG_NORMAL);
+ drawpic_skin(redflag_pos, red_icon, flag_size, '1 1 1', HUD_Panel_GetFgAlpha(HUD_PANEL_MODICONS) * red_alpha * f, DRAWFLAG_NORMAL);
f = bound(0, blueflag_statuschange_elapsedtime*2, 1);
if(blue_icon_prevstatus && f < 1)
- drawpic_skin_expanding(blueflag_pos, blue_icon_prevstatus, '1 1 0' * mySize_y, '1 1 1', HUD_Panel_GetFgAlpha(HUD_PANEL_MODICONS) * blue_alpha_prevstatus, DRAWFLAG_NORMAL, f);
+ drawpic_skin_expanding(blueflag_pos, blue_icon_prevstatus, flag_size, '1 1 1', HUD_Panel_GetFgAlpha(HUD_PANEL_MODICONS) * blue_alpha_prevstatus, DRAWFLAG_NORMAL, f);
if(blue_icon)
- drawpic_skin(blueflag_pos, blue_icon, '1 1 0' * mySize_y, '1 1 1', HUD_Panel_GetFgAlpha(HUD_PANEL_MODICONS) * blue_alpha * f, DRAWFLAG_NORMAL);
+ drawpic_skin(blueflag_pos, blue_icon, flag_size, '1 1 1', HUD_Panel_GetFgAlpha(HUD_PANEL_MODICONS) * blue_alpha * f, DRAWFLAG_NORMAL);
}
// Keyhunt HUD modicon section
float a, aa;
vector p, pa, kh_size, kh_asize;
- p_x = pos_x;
- p_y = pos_y + 0.25 * mySize_y;
-
kh_keys = getstati(STAT_KH_KEYS);
- kh_size_x = mySize_x * 0.25;
- kh_size_y = 0.75 * mySize_y;
+ p_x = pos_x;
+ if(mySize_x > mySize_y)
+ {
+ p_y = pos_y + 0.25 * mySize_y;
+ pa = p - eY * 0.25 * mySize_y;
- pa = p - eY * 0.25 * mySize_y;
+ kh_size_x = mySize_x * 0.25;
+ kh_size_y = 0.75 * mySize_y;
+ kh_asize_x = mySize_x * 0.25;
+ kh_asize_y = mySize_y * 0.25;
+ }
+ else
+ {
+ p_y = pos_y + 0.125 * mySize_y;
+ pa = p - eY * 0.125 * mySize_y;
- kh_asize_x = mySize_x * 0.25;
- kh_asize_y = mySize_y * 0.25;
+ kh_size_x = mySize_x * 0.5;
+ kh_size_y = 0.375 * mySize_y;
+ kh_asize_x = mySize_x * 0.5;
+ kh_asize_y = mySize_y * 0.125;
+ }
float i, key;
break;
}
}
- p_x += 0.25 * mySize_x;
- pa_x += 0.25 * mySize_x;
+ if(mySize_x > mySize_y)
+ {
+ p_x += 0.25 * mySize_x;
+ pa_x += 0.25 * mySize_x;
+ }
+ else
+ {
+ if(i == 1)
+ {
+ p_y = pos_y + 0.625 * mySize_y;
+ pa_y = pos_y + 0.5 * mySize_y;
+ p_x = pos_x;
+ pa_x = pos_x;
+ }
+ else
+ {
+ p_x += 0.5 * mySize_x;
+ pa_x += 0.5 * mySize_x;
+ }
+ }
}
}
p = 2 - p;
//Draw the filling
- HUD_Panel_DrawProgressBar(pos, 0, eX * p * mySize_x + eY * mySize_y, HUD_Panel_GetProgressBarColor("nexball"), cvar("hud_progressbar_alpha") * HUD_Panel_GetFgAlpha(HUD_PANEL_MODICONS), DRAWFLAG_NORMAL);
+ vector barsize;
+ float vertical;
+ if(mySize_x > mySize_y)
+ {
+ barsize = eX * p * mySize_x + eY * mySize_y;
+ vertical = 0;
+ }
+ else
+ {
+ barsize = eX * mySize_x + eY * p * mySize_y;
+ vertical = 1;
+ }
+ HUD_Panel_DrawProgressBar(pos, vertical, barsize, HUD_Panel_GetProgressBarColor("nexball"), cvar("hud_progressbar_alpha") * HUD_Panel_GetFgAlpha(HUD_PANEL_MODICONS), DRAWFLAG_NORMAL);
}
- pos_x += 0.5 * mySize_x - 0.5 * mySize_y; //horizontal margin to the picture
-
if (stat_items & IT_KEY1)
- drawpic_skin(pos, "nexball_carrying", '1 1 0' * mySize_y, '1 1 1', HUD_Panel_GetFgAlpha(HUD_PANEL_MODICONS), DRAWFLAG_NORMAL);
+ drawpic_skin(pos, "nexball_carrying", eX * mySize_x + eY * mySize_y, '1 1 1', HUD_Panel_GetFgAlpha(HUD_PANEL_MODICONS), DRAWFLAG_NORMAL);
}
// Race/CTS HUD mod icons
f = time - crecordtime_change_time;
if (f > 1) {
- drawstring(pos, "Personal best ", '1 1 0' * 0.15 * mySize_y, '1 1 1', HUD_Panel_GetFgAlpha(HUD_PANEL_MODICONS), DRAWFLAG_NORMAL);
+ drawstring_aspect(pos, "Personal best ", eX * 0.5 * mySize_x + eY * 0.25 * mySize_y, 0.15 * mySize_y, '1 1 1', HUD_Panel_GetFgAlpha(HUD_PANEL_MODICONS), DRAWFLAG_NORMAL);
drawstring(pos + eY * 0.2 * mySize_y, TIME_ENCODED_TOSTRING(t), '1 1 0' * 0.2 * mySize_y, '1 1 1', HUD_Panel_GetFgAlpha(HUD_PANEL_MODICONS), DRAWFLAG_NORMAL);
} else {
drawstring(pos, "Personal best ", '1 1 0' * 0.15 * mySize_y, '1 1 1', HUD_Panel_GetFgAlpha(HUD_PANEL_MODICONS), DRAWFLAG_NORMAL);
mySize -= '2 2 0' * padding;
}
+ vector keysize;
+ keysize = eX * mySize_x * (1/3) + eY * mySize_y * 0.5;
float pressedkeys;
pressedkeys = getstatf(STAT_PRESSED_KEYS);
- drawpic_skin(pos, "key_bg.tga", mySize, '1 1 1', 0.1 * HUD_Panel_GetFgAlpha(id), DRAWFLAG_NORMAL);
- drawpic_skin(pos + eX * mySize_x - eX * 0.22 * mySize_x + eY * 0.195 * mySize_y, ((pressedkeys & KEY_CROUCH) ? "key_crouch_inv.tga" : "key_crouch.tga"), '1 1 0' * (1/3) * mySize_y, '1 1 1', HUD_Panel_GetFgAlpha(id), DRAWFLAG_NORMAL);
- drawpic_skin(pos + eX * 0.5 * mySize_x - eX * 0.23 * mySize_y + eY * 0.040 * mySize_y, ((pressedkeys & KEY_FORWARD) ? "key_forward_inv.tga" : "key_forward.tga"), '1 1 0' * 0.46 * mySize_y, '1 1 1', HUD_Panel_GetFgAlpha(id), DRAWFLAG_NORMAL);
- drawpic_skin(pos + eX * 0.023 * mySize_x + eY * 0.195 * mySize_y, ((pressedkeys & KEY_JUMP) ? "key_jump_inv.tga" : "key_jump.tga"), '1 1 0' * (1/3) * mySize_y, '1 1 1', HUD_Panel_GetFgAlpha(id), DRAWFLAG_NORMAL);
- drawpic_skin(pos + eX * 0.1 * mySize_x + eY * 0.486 * mySize_y, ((pressedkeys & KEY_LEFT) ? "key_left_inv.tga" : "key_left.tga"), '1 1 0' * 0.46 * mySize_y, '1 1 1', HUD_Panel_GetFgAlpha(id), DRAWFLAG_NORMAL);
- drawpic_skin(pos + eX * 0.5 * mySize_x - eX * 0.23 * mySize_y + eY * 0.486 * mySize_y, ((pressedkeys & KEY_BACKWARD) ? "key_backward_inv.tga" : "key_backward.tga"), '1 1 0' * 0.46 * mySize_y, '1 1 1', HUD_Panel_GetFgAlpha(id), DRAWFLAG_NORMAL);
- drawpic_skin(pos + eX * mySize_x - eX * 0.372 * mySize_x + eY * 0.486 * mySize_y, ((pressedkeys & KEY_RIGHT) ? "key_right_inv.tga" : "key_right.tga"), '1 1 0' * 0.46 * mySize_y, '1 1 1', HUD_Panel_GetFgAlpha(id), DRAWFLAG_NORMAL);
+ drawpic_skin(pos, ((pressedkeys & KEY_CROUCH) ? "key_crouch_inv.tga" : "key_crouch.tga"), keysize, '1 1 1', HUD_Panel_GetFgAlpha(id), DRAWFLAG_NORMAL);
+ drawpic_skin(pos + eX * mySize_x * (1/3), ((pressedkeys & KEY_FORWARD) ? "key_forward_inv.tga" : "key_forward.tga"), keysize, '1 1 1', HUD_Panel_GetFgAlpha(id), DRAWFLAG_NORMAL);
+ drawpic_skin(pos + eX * mySize_x * (2/3), ((pressedkeys & KEY_JUMP) ? "key_jump_inv.tga" : "key_jump.tga"), keysize, '1 1 1', HUD_Panel_GetFgAlpha(id), DRAWFLAG_NORMAL);
+ drawpic_skin(pos + eY * 0.5 * mySize_y, ((pressedkeys & KEY_LEFT) ? "key_left_inv.tga" : "key_left.tga"), keysize, '1 1 1', HUD_Panel_GetFgAlpha(id), DRAWFLAG_NORMAL);
+ drawpic_skin(pos + eY * 0.5 * mySize_y + eX * mySize_x * (1/3), ((pressedkeys & KEY_BACKWARD) ? "key_backward_inv.tga" : "key_backward.tga"), keysize, '1 1 1', HUD_Panel_GetFgAlpha(id), DRAWFLAG_NORMAL);
+ drawpic_skin(pos + eY * 0.5 * mySize_y + eX * mySize_x * (2/3), ((pressedkeys & KEY_RIGHT) ? "key_right_inv.tga" : "key_right.tga"), keysize, '1 1 1', HUD_Panel_GetFgAlpha(id), DRAWFLAG_NORMAL);
}
// Handle chat as a panel (#12)
vector color;
color = HUD_Get_Num_Color (prevfps, 100);
- drawstring(pos, strcat("FPS: ", ftos_decimals(prevfps, cvar("hud_engineinfo_framecounter_decimals"))), '1 1 0' * mySize_y, color, HUD_Panel_GetFgAlpha(id), DRAWFLAG_NORMAL);
+ drawstring_aspect(pos, strcat("FPS: ", ftos_decimals(prevfps, cvar("hud_engineinfo_framecounter_decimals"))), mySize, mySize_y, color, HUD_Panel_GetFgAlpha(id), DRAWFLAG_NORMAL);
}
/*
==================
{
float i;
// x-axis
- for(i = 0; i < 1/bound(0.005, bound(0.005, cvar("hud_configure_grid_x"), 0.2), 0.2); ++i)
+ for(i = 0; i < 1/bound(0.005, cvar("hud_configure_grid_x"), 0.2); ++i)
{
- drawfill(eX * i * vid_conwidth * bound(0.005, bound(0.005, cvar("hud_configure_grid_x"), 0.2), 0.2), eX + eY * vid_conheight, '0.5 0.5 0.5', cvar("hud_configure_grid_alpha"), DRAWFLAG_NORMAL);
+ drawfill(eX * i * vid_conwidth * bound(0.005, cvar("hud_configure_grid_x"), 0.2), eX + eY * vid_conheight, '0.5 0.5 0.5', cvar("hud_configure_grid_alpha"), DRAWFLAG_NORMAL);
}
// y-axis
- for(i = 0; i < 1/bound(0.005, bound(0.005, cvar("hud_configure_grid_y"), 0.2), 0.2); ++i)
+ for(i = 0; i < 1/bound(0.005, cvar("hud_configure_grid_y"), 0.2); ++i)
{
- drawfill(eY * i * vid_conheight * bound(0.005, bound(0.005, cvar("hud_configure_grid_y"), 0.2), 0.2), eY + eX * vid_conwidth, '0.5 0.5 0.5', cvar("hud_configure_grid_alpha"), DRAWFLAG_NORMAL);
+ drawfill(eY * i * vid_conheight * bound(0.005, cvar("hud_configure_grid_y"), 0.2), eY + eX * vid_conwidth, '0.5 0.5 0.5', cvar("hud_configure_grid_alpha"), DRAWFLAG_NORMAL);
}
}
if(cvar_string("hud_dock") != "")
- drawpic_skin('0 0 0', cvar_string("hud_dock"), eX * vid_conwidth + eY * vid_conheight, HUD_Panel_Dock_GetColor(), cvar("hud_dock_alpha") * menu_fade_alpha, DRAWFLAG_NORMAL);
+ drawpic('0 0 0', strcat("gfx/hud/", cvar_string("hud_skin"), "/", cvar_string("hud_dock")), eX * vid_conwidth + eY * vid_conheight, HUD_Panel_Dock_GetColor(), cvar("hud_dock_alpha") * menu_fade_alpha, DRAWFLAG_NORMAL); // no aspect ratio forcing on dock...
if(HUD_Panel_CheckActive(HUD_PANEL_RADAR) || hud_configure)
if(cvar_string("hud_radar") != "0" && (cvar("hud_radar") == 2 || teamplay))