diff options
author | Florian Diebold <flodiebold@gmail.com> | 2014-08-15 14:09:52 +0200 |
---|---|---|
committer | Florian Diebold <flodiebold@gmail.com> | 2014-08-15 14:09:52 +0200 |
commit | 787e3d9eb90aec3d04c1d48076254ab260d0978b (patch) | |
tree | 067369c23190f3f01671dbffb27b5ce81f953c24 | |
parent | 324a815a5ffc7ac85b993c07d9862ee75051d1a3 (diff) | |
download | crawl-ref-787e3d9eb90aec3d04c1d48076254ab260d0978b.tar.gz crawl-ref-787e3d9eb90aec3d04c1d48076254ab260d0978b.zip |
Webtiles: Handle tiles that overlap the tile to the left (#8877).
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); + } + } } }, |