From: Severin Meyer Date: Wed, 21 Jan 2015 19:06:41 +0000 (+0100) Subject: Improve the distribution of icons in the HUD weapons panel X-Git-Tag: xonotic-v0.8.1~149^2~2 X-Git-Url: https://git.rm.cloudns.org/?a=commitdiff_plain;h=c4fb6d591478d37e1957d0beec6137887ef05569;p=xonotic%2Fxonotic-data.pk3dir.git Improve the distribution of icons in the HUD weapons panel --- diff --git a/qcsrc/client/hud.qc b/qcsrc/client/hud.qc index 9e6861ebd..d6e88e77b 100644 --- a/qcsrc/client/hud.qc +++ b/qcsrc/client/hud.qc @@ -415,7 +415,7 @@ void HUD_Weapons(void) float i, f, a; float screen_ar, center_x = 0, center_y; float weapon_count, weapon_id; - float row, column, rows = 0, columns; + float row, column, rows = 0, columns = 0; float aspect = autocvar_hud_panel_weapons_aspect; float panel_weapon_accuracy; @@ -433,7 +433,7 @@ void HUD_Weapons(void) float fadetime = max(0, autocvar_hud_panel_weapons_complainbubble_fadetime); vector weapon_pos, weapon_size = '0 0 0'; - local noref vector old_panel_size; // fteqcc sucks + local noref vector max_panel_size; // fteqcc sucks vector color; // check to see if we want to continue @@ -519,38 +519,41 @@ void HUD_Weapons(void) return; } - old_panel_size = panel_size; - if(panel_bg_padding) - old_panel_size -= '2 2 0' * panel_bg_padding; + max_panel_size = panel_size - '2 2 0' * panel_bg_padding; - // first find values for the standard table (with all the weapons) - rows = old_panel_size_y/old_panel_size_x; - rows = bound(1, floor((sqrt(4 * aspect * rows * WEP_COUNT + rows * rows) + rows + 0.5) / 2), WEP_COUNT); - columns = ceil(WEP_COUNT/rows); - weapon_size_x = old_panel_size_x / columns; - weapon_size_y = old_panel_size_y / rows; - - // change table values to include only the owned weapons - float columns_save = columns; - if(weapon_count <= rows) + // calculate distribution and size of table cells + if(max_panel_size_x > max_panel_size_y) { - rows = weapon_count; - columns = 1; + while(weapon_count > columns * rows) + { + ++rows; + columns = ceil(max_panel_size_x / (max_panel_size_y / rows * aspect)); + } + + weapon_size_x = max_panel_size_x / columns; + weapon_size_y = max_panel_size_y / rows; + columns = ceil(weapon_count / rows); } else - columns = ceil(weapon_count / rows); + { + while(weapon_count > columns * rows) + { + ++columns; + rows = ceil(max_panel_size_y / (max_panel_size_x / columns / aspect)); + } - // enlarge weapon_size to match desired aspect ratio in order to capitalize on panel space - if(columns < columns_save) - weapon_size_x = min(old_panel_size_x / columns, aspect * weapon_size_y); + weapon_size_x = max_panel_size_x / columns; + weapon_size_y = max_panel_size_y / rows; + rows = ceil(weapon_count / columns); + } // reduce size of the panel panel_size_x = columns * weapon_size_x; panel_size_y = rows * weapon_size_y; - panel_pos_x += (old_panel_size_x - panel_size_x) / 2; - panel_pos_y += (old_panel_size_y - panel_size_y) / 2; - if(panel_bg_padding) - panel_size += '2 2 0' * panel_bg_padding; + panel_pos_x += (max_panel_size_x - panel_size_x) / 2; + panel_pos_y += (max_panel_size_y - panel_size_y) / 2; + + panel_size += '2 2 0' * panel_bg_padding; } else weapon_count = WEP_COUNT;