float i, f, a;
float screen_ar, center_x = 0, center_y;
float weapon_count, weapon_id;
- float row, column, rows = 0, columns = 0;
+ float row, column, rows = 0, columns;
float aspect = autocvar_hud_panel_weapons_aspect;
float panel_weapon_accuracy;
float fadetime = max(0, autocvar_hud_panel_weapons_complainbubble_fadetime);
vector weapon_pos, weapon_size = '0 0 0';
- local noref vector max_panel_size; // fteqcc sucks
+ local noref vector old_panel_size; // fteqcc sucks
vector color;
// check to see if we want to continue
return;
}
- max_panel_size = panel_size - '2 2 0' * panel_bg_padding;
+ old_panel_size = panel_size;
+ if(panel_bg_padding)
+ old_panel_size -= '2 2 0' * panel_bg_padding;
- // calculate distribution and size of table cells
- if(max_panel_size_x > max_panel_size_y)
- {
- while(weapon_count > columns * rows)
- {
- ++rows;
- columns = ceil(max_panel_size_x / (max_panel_size_y / rows * aspect));
- }
+ // 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;
- weapon_size_x = max_panel_size_x / columns;
- weapon_size_y = max_panel_size_y / rows;
- columns = ceil(weapon_count / rows);
+ // change table values to include only the owned weapons
+ float columns_save = columns;
+ if(weapon_count <= rows)
+ {
+ rows = weapon_count;
+ columns = 1;
}
else
- {
- while(weapon_count > columns * rows)
- {
- ++columns;
- rows = ceil(max_panel_size_y / (max_panel_size_x / columns / aspect));
- }
+ columns = ceil(weapon_count / rows);
- weapon_size_x = max_panel_size_x / columns;
- weapon_size_y = max_panel_size_y / rows;
- rows = ceil(weapon_count / columns);
- }
+ // 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);
// reduce size of the panel
panel_size_x = columns * weapon_size_x;
panel_size_y = rows * weapon_size_y;
- 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;
+ 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;
}
else
weapon_count = WEP_COUNT;