summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorennewalker <ennewalker@c06c8d41-db1a-0410-9941-cceddc491573>2009-01-11 19:59:41 +0000
committerennewalker <ennewalker@c06c8d41-db1a-0410-9941-cceddc491573>2009-01-11 19:59:41 +0000
commit260284a5ad0dbc2448bb3f5dd80ea0efb9daef42 (patch)
tree038af501831e73c626e2e879a092ee5cd8b6c8c2
parent6ff6324e1225d17c1911efda0853ae032546cb91 (diff)
downloadcrawl-ref-260284a5ad0dbc2448bb3f5dd80ea0efb9daef42.tar.gz
crawl-ref-260284a5ad0dbc2448bb3f5dd80ea0efb9daef42.zip
[2467406] Improving tiles screen layout.
git-svn-id: https://crawl-ref.svn.sourceforge.net/svnroot/crawl-ref/trunk@8414 c06c8d41-db1a-0410-9941-cceddc491573
-rw-r--r--crawl-ref/source/acr.cc4
-rw-r--r--crawl-ref/source/output.cc8
-rw-r--r--crawl-ref/source/tilesdl.cc146
-rw-r--r--crawl-ref/source/tilesdl.h4
4 files changed, 102 insertions, 60 deletions
diff --git a/crawl-ref/source/acr.cc b/crawl-ref/source/acr.cc
index 759985b68a..53510a2422 100644
--- a/crawl-ref/source/acr.cc
+++ b/crawl-ref/source/acr.cc
@@ -4015,6 +4015,10 @@ static bool _initialise(void)
init_monster_symbols();
#endif
+#ifdef USE_TILE
+ tiles.resize();
+#endif
+
draw_border();
new_level();
update_turn_count();
diff --git a/crawl-ref/source/output.cc b/crawl-ref/source/output.cc
index 325b5654bd..bdbb7651c2 100644
--- a/crawl-ref/source/output.cc
+++ b/crawl-ref/source/output.cc
@@ -46,9 +46,7 @@ REVISION("$Rev$");
#include "skills2.h"
#include "stuff.h"
#include "transfor.h"
-#ifdef USE_TILE
#include "tiles.h"
-#endif
#include "travel.h"
#include "view.h"
@@ -867,12 +865,14 @@ void print_stats(void)
{
cgotoxy(1,8 + yhack, GOTO_STAT);
textcolor(Options.status_caption_colour);
- cprintf("Exp Pool: ");
- textcolor(HUD_VALUE_COLOUR);
#if DEBUG_DIAGNOSTICS
+ cprintf("XP: ");
+ textcolor(HUD_VALUE_COLOUR);
cprintf("%d/%d (%d) ",
you.skill_cost_level, you.exp_available, you.experience);
#else
+ cprintf("Exp Pool: ");
+ textcolor(HUD_VALUE_COLOUR);
cprintf("%-6d", you.exp_available);
#endif
you.redraw_experience = false;
diff --git a/crawl-ref/source/tilesdl.cc b/crawl-ref/source/tilesdl.cc
index c1db3c8064..84eb19ff61 100644
--- a/crawl-ref/source/tilesdl.cc
+++ b/crawl-ref/source/tilesdl.cc
@@ -144,7 +144,7 @@ void TilesFramework::shutdown()
delete m_region_stat;
delete m_region_msg;
delete m_region_map;
- delete m_region_self_inv;
+ delete m_region_inv;
delete m_region_crt;
delete m_region_menu;
@@ -152,7 +152,7 @@ void TilesFramework::shutdown()
m_region_stat = NULL;
m_region_msg = NULL;
m_region_map = NULL;
- m_region_self_inv = NULL;
+ m_region_inv = NULL;
m_region_crt = NULL;
m_region_menu = NULL;
@@ -170,6 +170,31 @@ void TilesFramework::shutdown()
_shutdown_console();
}
+void TilesFramework::calculate_default_options()
+{
+ // Find which set of _screen_sizes to use.
+ int auto_size = 0;
+ int num_screen_sizes = sizeof(_screen_sizes) / sizeof(_screen_sizes[0]);
+ do
+ {
+ if (m_windowsz.x >= _screen_sizes[auto_size][0]
+ && m_windowsz.y >= _screen_sizes[auto_size][1])
+ {
+ break;
+ }
+ } while (++auto_size < num_screen_sizes - 1);
+
+ // Auto pick map and font sizes if option is zero.
+#define AUTO(x,y) (x = (x) ? (x) : _screen_sizes[auto_size][(y)])
+ AUTO(Options.tile_map_pixels, 2);
+ AUTO(Options.tile_font_crt_size, 3);
+ AUTO(Options.tile_font_stat_size, 4);
+ AUTO(Options.tile_font_msg_size, 5);
+ AUTO(Options.tile_font_tip_size, 6);
+ AUTO(Options.tile_font_lbl_size, 7);
+#undef AUTO
+}
+
bool TilesFramework::initialise()
{
#ifdef WIN32TILES
@@ -258,27 +283,7 @@ bool TilesFramework::initialise()
if (!m_image.load_textures())
return false;
- // Find which set of _screen_sizes to use.
- int auto_size = 0;
- int num_screen_sizes = sizeof(_screen_sizes) / sizeof(_screen_sizes[0]);
- do
- {
- if (m_windowsz.x >= _screen_sizes[auto_size][0]
- && m_windowsz.y >= _screen_sizes[auto_size][1])
- {
- break;
- }
- } while (++auto_size < num_screen_sizes - 1);
-
- // Auto pick map and font sizes if option is zero.
-#define AUTO(x,y) (x = (x) ? (x) : _screen_sizes[auto_size][(y)])
- AUTO(Options.tile_map_pixels, 2);
- AUTO(Options.tile_font_crt_size, 3);
- AUTO(Options.tile_font_stat_size, 4);
- AUTO(Options.tile_font_msg_size, 5);
- AUTO(Options.tile_font_tip_size, 6);
- AUTO(Options.tile_font_lbl_size, 7);
-#undef AUTO
+ calculate_default_options();
int crt_font = load_font(Options.tile_font_crt_file.c_str(),
Options.tile_font_crt_size, true, true);
@@ -300,7 +305,7 @@ bool TilesFramework::initialise()
m_region_tile = new DungeonRegion(&m_image, m_fonts[lbl_font].font,
TILE_X, TILE_Y);
m_region_map = new MapRegion(Options.tile_map_pixels);
- m_region_self_inv = new InventoryRegion(&m_image, m_fonts[lbl_font].font,
+ m_region_inv = new InventoryRegion(&m_image, m_fonts[lbl_font].font,
TILE_X, TILE_Y);
m_region_msg = new MessageRegion(m_fonts[msg_font].font);
@@ -310,7 +315,7 @@ bool TilesFramework::initialise()
m_layers[LAYER_NORMAL].m_regions.push_back(m_region_tile);
m_layers[LAYER_NORMAL].m_regions.push_back(m_region_map);
- m_layers[LAYER_NORMAL].m_regions.push_back(m_region_self_inv);
+ m_layers[LAYER_NORMAL].m_regions.push_back(m_region_inv);
m_layers[LAYER_NORMAL].m_regions.push_back(m_region_msg);
m_layers[LAYER_NORMAL].m_regions.push_back(m_region_stat);
@@ -427,6 +432,7 @@ void TilesFramework::load_dungeon(const coord_def &cen)
void TilesFramework::resize()
{
+ calculate_default_options();
do_layout();
glMatrixMode(GL_PROJECTION);
@@ -828,17 +834,18 @@ int TilesFramework::getch_ck()
return key;
}
+static const int map_margin = 2;
+static const int map_stat_buffer = 4;
+static const int crt_width = 80;
+static const int crt_height = 30;
+static const int margin = 4;
+
void TilesFramework::do_layout()
{
// View size in pixels is (m_viewsc * crawl_view.viewsz)
m_viewsc.x = 32;
m_viewsc.y = 32;
- const int map_stat_buffer = 4;
- const int crt_width = 80;
- const int crt_height = 30;
- const int map_margin = 2;
-
crawl_view.viewsz.x = Options.view_max_width;
crawl_view.viewsz.y = Options.view_max_height;
crawl_view.msgsz.x = crt_width;
@@ -853,7 +860,6 @@ void TilesFramework::do_layout()
m_region_map->resize(GXM, GYM);
// Place regions for normal layer
- const int margin = 4;
m_region_tile->place(0, 0, margin);
m_region_msg->place(0, m_region_tile->ey - margin, margin);
@@ -942,7 +948,13 @@ void TilesFramework::do_layout()
while (m_region_stat->ex > m_windowsz.x
&& crawl_view.viewsz.x > VIEW_MIN_WIDTH);
- int hud_width = std::min(50, (int)m_region_stat->mx);
+ // Determine the maximum width.
+ m_region_stat->resize_to_fit(m_windowsz.x - m_region_stat->sx,
+ m_region_stat->wy);
+
+ // Grow HUD horizontally if there's room.
+ const int max_hud_width = 50;
+ int hud_width = std::min(m_region_stat->mx, max_hud_width);
m_region_stat->resize(hud_width, m_region_stat->my);
crawl_view.hudsz.x = m_region_stat->mx;
crawl_view.hudsz.y = m_region_stat->my;
@@ -957,35 +969,59 @@ void TilesFramework::do_layout()
m_region_map->resize(GXM, GYM);
}
+ // If show_gold_turns isn't turned on, try turning it on if there's room.
+ if (!Options.show_gold_turns)
+ {
+ if (layout_statcol(message_overlay, true))
+ Options.show_gold_turns = true;
+ else
+ layout_statcol(message_overlay, false);
+ }
+ else
+ {
+ layout_statcol(message_overlay, true);
+ }
+
+ // Place regions for crt layer
+ m_region_crt->place(0, 0, margin);
+ m_region_crt->resize_to_fit(m_windowsz.x, m_windowsz.y);
+ m_region_menu->place(0, 0, margin);
+ m_region_menu->resize_to_fit(m_windowsz.x, m_windowsz.y);
+
+ crawl_view.init_view();
+}
+
+bool TilesFramework::layout_statcol(bool message_overlay, bool show_gold_turns)
+{
+ // Assumes that the region_stat has already been placed.
+ int hud_height = 12 + (show_gold_turns ? 1 : 0);
+ m_region_stat->resize(m_region_stat->mx, hud_height);
+ crawl_view.hudsz.y = hud_height;
+ m_region_map->place(m_region_stat->sx, m_region_stat->ey, map_margin);
+
int inv_col = std::max(m_region_tile->ex, m_region_msg->ex);
if (message_overlay)
- inv_col = stat_col;
+ inv_col = m_region_stat->sx;
- m_region_self_inv->place(inv_col, m_region_map->ey, 0);
- m_region_self_inv->resize_to_fit(m_windowsz.x -
- m_region_self_inv->sx,
+ m_region_inv->place(inv_col, m_region_map->ey, 0);
+ m_region_inv->resize_to_fit(m_windowsz.x -
+ m_region_inv->sx,
m_windowsz.y -
- m_region_self_inv->sy);
- m_region_self_inv->resize(std::min(13, (int)m_region_self_inv->mx),
- std::min(6, (int)m_region_self_inv->my));
+ m_region_inv->sy);
+ m_region_inv->resize(std::min(13, (int)m_region_inv->mx),
+ std::min(6, (int)m_region_inv->my));
- int self_inv_y = m_windowsz.y - m_region_self_inv->wy - margin;
- m_region_self_inv->place(inv_col, self_inv_y, 0);
+ int self_inv_y = m_windowsz.y - m_region_inv->wy - margin;
+ m_region_inv->place(inv_col, self_inv_y, 0);
// recenter map above inventory
- int map_cen_x = m_region_self_inv->sx + (m_region_self_inv->wx) / 2;
- map_cen_x = std::min(map_cen_x, (int)(m_windowsz.x - m_region_map->wx));
- m_region_map->place(map_cen_x - m_region_map->wy / 2, m_region_map->sy,
+ int map_cen_x = (m_region_inv->sx + m_region_inv->ex) / 2;
+ map_cen_x = std::min(map_cen_x, (int)(m_windowsz.x - m_region_map->wx/2));
+ m_region_map->place(map_cen_x - m_region_map->wx/2, m_region_map->sy,
map_margin);
-
- // Place regions for crt layer
- m_region_crt->place(0, 0, margin);
- m_region_crt->resize_to_fit(m_windowsz.x, m_windowsz.y);
- m_region_menu->place(0, 0, margin);
- m_region_menu->resize_to_fit(m_windowsz.x, m_windowsz.y);
-
- crawl_view.init_view();
+ int num_items = m_region_inv->mx * (m_region_inv->my - 1);
+ return (num_items >= ENDOFPACK);
}
void TilesFramework::clrscr()
@@ -1231,8 +1267,8 @@ void TilesFramework::update_inventory()
// item.base_type <-> char conversion table
const static char *obj_syms = ")([/%#?=!#+\\0}x";
- const int mx = m_region_self_inv->mx;
- const int my = m_region_self_inv->my;
+ const int mx = m_region_inv->mx;
+ const int my = m_region_inv->my;
int max_pack_row = (ENDOFPACK-1) / mx + 1;
int max_pack_items = max_pack_row * mx;
@@ -1368,7 +1404,7 @@ void TilesFramework::update_inventory()
inv.push_back(desc);
}
- m_region_self_inv->update(inv.size(), &inv[0]);
+ m_region_inv->update(inv.size(), &inv[0]);
}
void TilesFramework::place_cursor(cursor_type type, const coord_def &gc)
diff --git a/crawl-ref/source/tilesdl.h b/crawl-ref/source/tilesdl.h
index d9d3380b84..5a1f49419d 100644
--- a/crawl-ref/source/tilesdl.h
+++ b/crawl-ref/source/tilesdl.h
@@ -92,6 +92,7 @@ public:
void load_dungeon(const coord_def &gc);
int getch_ck();
void resize();
+ void calculate_default_options();
void clrscr();
void message_out(int which_line, int colour, const char *s, int firstcol, bool newline);
@@ -161,7 +162,7 @@ protected:
StatRegion *m_region_stat;
MessageRegion *m_region_msg;
MapRegion *m_region_map;
- InventoryRegion *m_region_self_inv;
+ InventoryRegion *m_region_inv;
// Full-screen CRT layer
CRTRegion *m_region_crt;
@@ -178,6 +179,7 @@ protected:
int m_tip_font;
void do_layout();
+ bool layout_statcol(bool message_overlay, bool show_gold_turns);
ImageManager m_image;