summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorFlorian Diebold <flodiebold@gmail.com>2014-08-15 14:09:52 +0200
committerFlorian Diebold <flodiebold@gmail.com>2014-08-15 14:09:52 +0200
commit787e3d9eb90aec3d04c1d48076254ab260d0978b (patch)
tree067369c23190f3f01671dbffb27b5ce81f953c24
parent324a815a5ffc7ac85b993c07d9862ee75051d1a3 (diff)
downloadcrawl-ref-787e3d9eb90aec3d04c1d48076254ab260d0978b.tar.gz
crawl-ref-787e3d9eb90aec3d04c1d48076254ab260d0978b.zip
Webtiles: Handle tiles that overlap the tile to the left (#8877).
-rw-r--r--crawl-ref/source/webserver/game_data/static/cell_renderer.js11
-rw-r--r--crawl-ref/source/webserver/game_data/static/display.js6
-rw-r--r--crawl-ref/source/webserver/game_data/static/dungeon_renderer.js11
3 files changed, 25 insertions, 3 deletions
diff --git a/crawl-ref/source/webserver/game_data/static/cell_renderer.js b/crawl-ref/source/webserver/game_data/static/cell_renderer.js
index 8f8798d13b..f55214676b 100644
--- a/crawl-ref/source/webserver/game_data/static/cell_renderer.js
+++ b/crawl-ref/source/webserver/game_data/static/cell_renderer.js
@@ -140,7 +140,9 @@ function ($, view_data, main, tileinfo_player, icons, dngn, enums,
return;
}
+ // track whether this cell overlaps to the top or left
this.current_sy = 0;
+ this.current_left_overlap = 0;
cell.fg = enums.prepare_fg_flags(cell.fg || 0);
cell.bg = enums.prepare_bg_flags(cell.bg || 0);
@@ -339,6 +341,7 @@ function ($, view_data, main, tileinfo_player, icons, dngn, enums,
}
cell.sy = this.current_sy;
+ cell.left_overlap = this.current_left_overlap;
},
// adapted from DungeonRegion::draw_minibars in tilereg_dgn.cc
@@ -958,11 +961,17 @@ function ($, view_data, main, tileinfo_player, icons, dngn, enums,
if (sy >= ey) return;
+ var total_x_offset = ((ofsx || 0) + info.ox + size_ox);
+
+ if (total_x_offset < this.current_left_overlap)
+ this.current_left_overlap = total_x_offset;
+
if (sy < this.current_sy)
this.current_sy = sy;
var w = info.ex - info.sx;
var h = info.ey - info.sy;
+
this.ctx.imageSmoothingEnabled = options.get("tile_filter_scaling");
this.ctx.webkitImageSmoothingEnabled =
options.get("tile_filter_scaling");
@@ -971,7 +980,7 @@ function ($, view_data, main, tileinfo_player, icons, dngn, enums,
this.ctx.drawImage(img,
info.sx, info.sy + sy - pos_sy_adjust,
w, h + ey - pos_ey_adjust,
- x + ((ofsx || 0) + info.ox + size_ox) * this.x_scale,
+ x + total_x_offset * this.x_scale,
y + sy * this.y_scale,
w * this.x_scale,
(h + ey - pos_ey_adjust) * this.y_scale)
diff --git a/crawl-ref/source/webserver/game_data/static/display.js b/crawl-ref/source/webserver/game_data/static/display.js
index 04537381b3..1cea516c49 100644
--- a/crawl-ref/source/webserver/game_data/static/display.js
+++ b/crawl-ref/source/webserver/game_data/static/display.js
@@ -92,11 +92,15 @@ function ($, comm, map_knowledge, view_data, monster_list, minimap,
if (data.cells)
map_knowledge.merge(data.cells);
- // Mark cells above high cells as dirty
+ // Mark cells overlapped by dirty cells as dirty
$.each(map_knowledge.dirty().slice(), function (i, loc) {
var cell = map_knowledge.get(loc.x, loc.y);
+ // high cell
if (cell.t && cell.t.sy && cell.t.sy < 0)
map_knowledge.touch(loc.x, loc.y - 1);
+ // left overlap
+ if (cell.t && cell.t.left_overlap && cell.t.left_overlap < 0)
+ map_knowledge.touch(loc.x - 1, loc.y);
});
display();
diff --git a/crawl-ref/source/webserver/game_data/static/dungeon_renderer.js b/crawl-ref/source/webserver/game_data/static/dungeon_renderer.js
index 8f236969b8..2165a64e60 100644
--- a/crawl-ref/source/webserver/game_data/static/dungeon_renderer.js
+++ b/crawl-ref/source/webserver/game_data/static/dungeon_renderer.js
@@ -225,7 +225,6 @@ function ($, cr, map_knowledge, options, dngn) {
this.render_cell(cx, cy, x, y, map_cell, cell);
- // Need to redraw cell below if it overlapped
// Redraw the cell below if it overlapped
if (this.in_view(cx, cy + 1))
{
@@ -233,6 +232,16 @@ function ($, cr, map_knowledge, options, dngn) {
if (cell_below.t && cell_below.t.sy && (cell_below.t.sy < 0))
this.render_loc(cx, cy + 1);
}
+ // Redraw the cell to the right if it overlapped
+ if (this.in_view(cx + 1, cy))
+ {
+ var cell_right = map_knowledge.get(cx + 1, cy);
+ if (cell_right.t && cell_right.t.left_overlap
+ && (cell_right.t.left_overlap < 0))
+ {
+ this.render_loc(cx + 1, cy);
+ }
+ }
}
},