diff --git a/assets/index.html b/assets/index.html index 1da997d..fc5e3af 100644 --- a/assets/index.html +++ b/assets/index.html @@ -164,7 +164,7 @@ heightMap[t.x + ',' + t.y] = t.h; } - var shadows = []; + var renderList = []; for (var i = 0; i < tiles.length; i++) { var t = tiles[i]; @@ -172,9 +172,6 @@ var water = isWater(h); - var hLeftNeighbor = heightMap[(wx - TILE) + ',' + wy] || 0; - var hFrontNeighbor = heightMap[wx + ',' + (wy + TILE)] || 0; - for (var level = 1; level <= h; level++) { var hRight; if (level > (heightMap[(wx + TILE) + ',' + wy] || 0)) { @@ -189,7 +186,12 @@ hBack = level; } - drawTile(wx, wy, level, true, hRight, hBack, false); + renderList.push({ + type: 'tile', + wx: wx, wy: wy, level: level, + hRight: hRight, hBack: hBack, + depth: wx + wy + level * 0.001 + }); } if (h > 0) { @@ -207,14 +209,15 @@ var topA = project(wx + TILE - GAP/2 - (TILE - GAP) * tt, wy + TILE - GAP/2, h * HEIGHT_UNIT); var topB = project(wx + TILE - GAP/2 - (TILE - GAP) * tt, wy + GAP/2, h * HEIGHT_UNIT); - shadows.push({ + renderList.push({ + type: 'shadow', points: [ { x: top2[0], y: top2[1] }, { x: topA[0], y: topA[1] }, { x: topB[0], y: topB[1] }, { x: top3[0], y: top3[1] } ], - depth: (wx + wy) + 1 + depth: wx + wy + 0.0005 }); } @@ -226,31 +229,36 @@ var topA = project(wx + GAP/2, wy + TILE - GAP/2 - (TILE - GAP) * tt, h * HEIGHT_UNIT); var topB = project(wx + GAP/2, wy + GAP/2 - (TILE - GAP) * tt, h * HEIGHT_UNIT); - shadows.push({ + renderList.push({ + type: 'shadow', points: [ { x: top1[0], y: top1[1] }, { x: topA[0], y: topA[1] }, { x: topB[0], y: topB[1] }, { x: top4[0], y: top4[1] } ], - depth: (wx + wy) + 1 + depth: wx + wy + 0.0005 }); } } } - shadows.sort(function(a, b) { return a.depth - b.depth; }); + renderList.sort(function(a, b) { return a.depth - b.depth; }); - for (var i = 0; i < shadows.length; i++) { - var s = shadows[i]; - ctx.fillStyle = 'rgba(0, 0, 0, 0.4)'; - ctx.beginPath(); - ctx.moveTo(s.points[0].x, s.points[0].y); - ctx.lineTo(s.points[1].x, s.points[1].y); - ctx.lineTo(s.points[2].x, s.points[2].y); - ctx.lineTo(s.points[3].x, s.points[3].y); - ctx.closePath(); - ctx.fill(); + for (var i = 0; i < renderList.length; i++) { + var item = renderList[i]; + if (item.type === 'tile') { + drawTile(item.wx, item.wy, item.level, true, item.hRight, item.hBack, false); + } else { + ctx.fillStyle = 'rgba(0, 0, 0, 0.4)'; + ctx.beginPath(); + ctx.moveTo(item.points[0].x, item.points[0].y); + ctx.lineTo(item.points[1].x, item.points[1].y); + ctx.lineTo(item.points[2].x, item.points[2].y); + ctx.lineTo(item.points[3].x, item.points[3].y); + ctx.closePath(); + ctx.fill(); + } } }