From f9b51fc7ce9d05d87546e9e91d3aff59e30fd0d8 Mon Sep 17 00:00:00 2001 From: giteaadmin Date: Sun, 3 May 2026 04:49:32 +0000 Subject: [PATCH] Game: stack tower height-follow applies to BG strip only, not world camera Move stackTowerCameraFollow offset from getStackCameraCentersPx into drawStackTowerScrollBgFullCanvas (S += height boost). Clarify editor copy. Co-authored-by: Cursor --- www/html/Game/public/editor.html | 10 +++++----- www/html/Game/public/js/play.js | 32 ++++++++++++++++---------------- www/html/Game/public/play.html | 2 +- 3 files changed, 22 insertions(+), 22 deletions(-) diff --git a/www/html/Game/public/editor.html b/www/html/Game/public/editor.html index e9208db..efca2f8 100644 --- a/www/html/Game/public/editor.html +++ b/www/html/Game/public/editor.html @@ -264,13 +264,13 @@ - +
v —
diff --git a/www/html/Game/public/js/play.js b/www/html/Game/public/js/play.js index c035d26..322f175 100644 --- a/www/html/Game/public/js/play.js +++ b/www/html/Game/public/js/play.js @@ -387,7 +387,7 @@ const drawHIntro = Math.round(intro.naturalHeight * scaleI); const scaleL = cwR / loop.naturalWidth; const drawHLoop = Math.max(1, Math.round(loop.naturalHeight * scaleL)); - const S = stackTowerScrollBgPx; + const S = stackTowerScrollBgPx + getStackTowerBgScrollHeightBoostPx(); const vp0 = S; const vp1 = S + chR; const yLimit = vp1 + drawHLoop * 2; @@ -6553,10 +6553,24 @@ return { enabled: raw.enabled !== false, pxPerLayer, maxPx }; } + /** เลื่อนเฉพาะแถบ BG (stackTowerScrollBg) — ไม่เลื่อนกล้องโลก */ + function getStackTowerBgScrollHeightBoostPx() { + if (!isStackTowerMissionUiMapPlay() || !stackMini) return 0; + const cfg = getStackTowerCameraFollowPlayConfig(); + if (!cfg.enabled || cfg.pxPerLayer <= 0) return 0; + const n = stackMini.layers ? stackMini.layers.length : 0; + let layerCount = n; + if (stackFall) { + const dur = Math.max(1, stackFall.dur || 400); + const u = Math.min(1, Math.max(0, (performance.now() - stackFall.t0) / dur)); + layerCount = n + u * 0.9; + } + return Math.min(cfg.maxPx, layerCount * cfg.pxPerLayer); + } + function getStackCameraCentersPx() { const w = mapData.width || 20, h = mapData.height || 15; const ts = tileSize; - const mapHpx = h * ts; const land = getStackAreaBoundsPlay(mapData.stackLandArea, w, h); const rel = getStackAreaBoundsPlay(mapData.stackReleaseArea, w, h); let cx = (w / 2) * ts; @@ -6571,20 +6585,6 @@ cx = rel.cx * ts; cy = rel.cy * ts; } - if (isStackTowerMissionUiMapPlay() && stackMini) { - const cfg = getStackTowerCameraFollowPlayConfig(); - if (cfg.enabled && cfg.pxPerLayer > 0) { - const n = stackMini.layers ? stackMini.layers.length : 0; - let layerCount = n; - if (stackFall) { - const dur = Math.max(1, stackFall.dur || 400); - const u = Math.min(1, Math.max(0, (performance.now() - stackFall.t0) / dur)); - layerCount = n + u * 0.9; - } - const shift = Math.min(cfg.maxPx, layerCount * cfg.pxPerLayer); - cy = Math.max(ts * 1.5, Math.min(mapHpx - ts * 2, cy - shift)); - } - } return { px: cx, py: cy }; } diff --git a/www/html/Game/public/play.html b/www/html/Game/public/play.html index 87989a2..e299770 100644 --- a/www/html/Game/public/play.html +++ b/www/html/Game/public/play.html @@ -2009,7 +2009,7 @@ - +
v —