summaryrefslogtreecommitdiffstats
path: root/crawl-ref/source/direct.cc
diff options
context:
space:
mode:
authordshaligram <dshaligram@c06c8d41-db1a-0410-9941-cceddc491573>2007-06-04 06:53:25 +0000
committerdshaligram <dshaligram@c06c8d41-db1a-0410-9941-cceddc491573>2007-06-04 06:53:25 +0000
commita75a924ca5f67336d9e065ab307d976c4cd8fabc (patch)
tree052710fb2cac216521e398e8774426092426bf41 /crawl-ref/source/direct.cc
parentb53b7421dc0bda8dc3a4713cad64a6275132261c (diff)
downloadcrawl-ref-a75a924ca5f67336d9e065ab307d976c4cd8fabc.tar.gz
crawl-ref-a75a924ca5f67336d9e065ab307d976c4cd8fabc.zip
[1699948] Allow changing the viewport size if you're using a larger terminal
than 80x24. Also allow moving the PC around the viewport without scrolling the viewport if the viewport is large enough. This is not tested on DOS and Windows yet. git-svn-id: https://crawl-ref.svn.sourceforge.net/svnroot/crawl-ref/trunk@1524 c06c8d41-db1a-0410-9941-cceddc491573
Diffstat (limited to 'crawl-ref/source/direct.cc')
-rw-r--r--crawl-ref/source/direct.cc55
1 files changed, 29 insertions, 26 deletions
diff --git a/crawl-ref/source/direct.cc b/crawl-ref/source/direct.cc
index 59429c4349..5bf61db694 100644
--- a/crawl-ref/source/direct.cc
+++ b/crawl-ref/source/direct.cc
@@ -85,8 +85,8 @@ static char find_square_wrapper( int tx, int ty,
bool wrap = false,
int los = LOS_ANY);
-static char find_square( unsigned char xps, unsigned char yps,
- FixedVector<char, 2> &mfp, char direction,
+static char find_square( int xps, int yps,
+ FixedVector<char, 2> &mfp, int direction,
bool (*targ)(int, int, int),
int mode = TARG_ANY,
bool wrap = false,
@@ -827,8 +827,9 @@ static void describe_oos_square(int x, int y)
bool in_vlos(int x, int y)
{
- return in_los_bounds(x, y)
- && (env.show[x - LOS_SX][y] || (x == VIEW_CX && y == VIEW_CY));
+ return in_los_bounds(x, y)
+ && (env.show(view2show(coord_def(x, y)))
+ || coord_def(x, y) == grid2view(you.pos()));
}
bool in_vlos(const coord_def &pos)
@@ -838,13 +839,7 @@ bool in_vlos(const coord_def &pos)
bool in_los(int x, int y)
{
- const int tx = x + VIEW_CX - you.x_pos,
- ty = y + VIEW_CY - you.y_pos;
-
- if (!in_los_bounds(tx, ty))
- return (false);
-
- return (x == you.x_pos && y == you.y_pos) || env.show[tx - LOS_SX][ty];
+ return (in_vlos(grid2view(coord_def(x, y))));
}
static bool find_monster( int x, int y, int mode )
@@ -929,12 +924,12 @@ static int next_los(int dir, int los, bool wrap)
bool in_viewport_bounds(int x, int y)
{
- return (x >= VIEW_SX && x <= VIEW_EX && y >= VIEW_SY && y <= VIEW_EY);
+ return crawl_view.in_view_viewport(coord_def(x, y));
}
bool in_los_bounds(int x, int y)
{
- return !(x > LOS_EX || x < LOS_SX || y > LOS_EY || y < LOS_SY);
+ return crawl_view.in_view_los(coord_def(x, y));
}
//---------------------------------------------------------------
@@ -951,8 +946,8 @@ bool in_los_bounds(int x, int y)
// monsters will be targeted.
//
//---------------------------------------------------------------
-static char find_square( unsigned char xps, unsigned char yps,
- FixedVector<char, 2> &mfp, char direction,
+static char find_square( int xps, int yps,
+ FixedVector<char, 2> &mfp, int direction,
bool (*find_targ)( int x, int y, int mode ),
int mode, bool wrap, int los )
{
@@ -961,8 +956,8 @@ static char find_square( unsigned char xps, unsigned char yps,
int temp_xps = xps;
int temp_yps = yps;
- char x_change = 0;
- char y_change = 0;
+ int x_change = 0;
+ int y_change = 0;
bool onlyVis = false, onlyHidden = false;
@@ -977,8 +972,8 @@ static char find_square( unsigned char xps, unsigned char yps,
{
// We've been told to flip between visible/hidden, so we
// need to find what we're currently on.
- const bool vis = (env.show[xps - 8][yps]
- || (xps == VIEW_CX && yps == VIEW_CY));
+ const bool vis = (env.show(view2show(coord_def(xps, yps)))
+ || view2grid(coord_def(xps, yps)) == you.pos());
if (wrap && (vis != (los == LOS_FLIPVH)) == (direction == 1))
{
@@ -1001,9 +996,17 @@ static char find_square( unsigned char xps, unsigned char yps,
onlyVis = (los & LOS_VISIBLE);
onlyHidden = (los & LOS_HIDDEN);
- const int minx = VIEW_SX, maxx = VIEW_EX,
- miny = VIEW_SY - VIEW_Y_DIFF, maxy = VIEW_EY + VIEW_Y_DIFF,
- ctrx = VIEW_CX, ctry = VIEW_CY;
+ int radius = 0;
+ if (crawl_view.viewsz.x > crawl_view.viewsz.y)
+ radius = crawl_view.viewsz.x - LOS_RADIUS - 1;
+ else
+ radius = crawl_view.viewsz.y - LOS_RADIUS - 1;
+
+ const coord_def vyou = grid2view(you.pos());
+
+ const int minx = vyou.x - radius, maxx = vyou.x + radius,
+ miny = vyou.y - radius, maxy = vyou.y + radius,
+ ctrx = vyou.x, ctry = vyou.y;
while (temp_xps >= minx - 1 && temp_xps <= maxx
&& temp_yps <= maxy && temp_yps >= miny - 1)
@@ -1135,17 +1138,17 @@ static char find_square( unsigned char xps, unsigned char yps,
//if (!in_los_bounds(temp_xps, temp_yps))
// continue;
- if (temp_xps < minx - 1 || temp_xps > maxx
- || temp_yps < VIEW_SY || temp_yps > VIEW_EY)
+ if (!crawl_view.in_grid_viewport(coord_def(targ_x, targ_y)))
continue;
- if (targ_x < 1 || targ_x >= GXM || targ_y < 1 || targ_y >= GYM)
+ if (!in_bounds(targ_x, targ_y))
continue;
if ((onlyVis || onlyHidden) && onlyVis != in_los(targ_x, targ_y))
continue;
- if (find_targ(targ_x, targ_y, mode)) {
+ if (find_targ(targ_x, targ_y, mode))
+ {
mfp[0] = temp_xps;
mfp[1] = temp_yps;
return (1);