From ad61b069d8182ddf3d472e68c7b02d9c65c2e2bb Mon Sep 17 00:00:00 2001 From: Richard Zink Date: Tue, 6 Oct 2026 17:37:08 +0200 Subject: [PATCH] Check correct neighbors for shadows --- assets/index.html | 32 ++++++++++++++++---------------- 1 file changed, 16 insertions(+), 16 deletions(-) diff --git a/assets/index.html b/assets/index.html index 81c9e39..d2b3af0 100644 --- a/assets/index.html +++ b/assets/index.html @@ -170,6 +170,9 @@ 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)) { @@ -187,20 +190,17 @@ drawTile(wx, wy, level, true, hRight, hBack, false); } - for (var level = 1; level <= h; level++) { - var hRightNeighbor = heightMap[(wx + TILE) + ',' + wy] || 0; - var hLeftNeighbor = heightMap[wx + ',' + (wy - TILE)] || 0; - - var shadowFront = hRightNeighbor - level; - var shadowLeft = hLeftNeighbor - level; + if (h > 0) { + var shadowFront = hFrontNeighbor - h; + var shadowLeft = hLeftNeighbor - h; if (shadowFront > 0) { - var shadowW = Math.min(shadowFront * 2, TILE - GAP); + var shadowW = Math.min(shadowFront * 2, TILE); var tt = shadowW / TILE; - var top1 = project(wx + GAP/2, wy + TILE - GAP/2, level * HEIGHT_UNIT); - var top2 = project(wx + TILE - GAP/2, wy + TILE - GAP/2, level * HEIGHT_UNIT); - var topA = project(wx + GAP/2 + (TILE - GAP) * tt, wy + TILE - GAP/2, level * HEIGHT_UNIT); - var topB = project(wx + TILE - GAP/2 - (TILE - GAP) * tt, wy + TILE - GAP/2, level * HEIGHT_UNIT); + var top1 = project(wx + GAP/2, wy + TILE - GAP/2, h * HEIGHT_UNIT); + var top2 = project(wx + TILE - GAP/2, wy + TILE - GAP/2, h * HEIGHT_UNIT); + var topA = project(wx + GAP/2 + (TILE - GAP) * tt, wy + TILE - GAP/2, h * HEIGHT_UNIT); + var topB = project(wx + TILE - GAP/2 - (TILE - GAP) * tt, wy + TILE - GAP/2, h * HEIGHT_UNIT); ctx.fillStyle = 'rgba(0, 0, 0, 0.4)'; ctx.beginPath(); @@ -213,12 +213,12 @@ } if (shadowLeft > 0) { - var shadowW = Math.min(shadowLeft * 2, TILE - GAP); + var shadowW = Math.min(shadowLeft * 2, TILE); var tt = shadowW / TILE; - var top4 = project(wx + GAP/2, wy + GAP/2, level * HEIGHT_UNIT); - var top1 = project(wx + GAP/2, wy + TILE - GAP/2, level * HEIGHT_UNIT); - var topA = project(wx + GAP/2, wy + GAP/2 + (TILE - GAP) * tt, level * HEIGHT_UNIT); - var topB = project(wx + GAP/2, wy + TILE - GAP/2 - (TILE - GAP) * tt, level * HEIGHT_UNIT); + var top4 = project(wx + GAP/2, wy + GAP/2, h * HEIGHT_UNIT); + var top1 = project(wx + GAP/2, wy + TILE - GAP/2, h * HEIGHT_UNIT); + var topA = project(wx + GAP/2, wy + GAP/2 + (TILE - GAP) * tt, h * HEIGHT_UNIT); + var topB = project(wx + GAP/2, wy + TILE - GAP/2 - (TILE - GAP) * tt, h * HEIGHT_UNIT); ctx.fillStyle = 'rgba(0, 0, 0, 0.4)'; ctx.beginPath();