diff --git a/www/html/Admin/admin.js b/www/html/Admin/admin.js index ec38c39..61c3dbd 100644 --- a/www/html/Admin/admin.js +++ b/www/html/Admin/admin.js @@ -2903,6 +2903,63 @@ }); } + function normalizeJumpSurvivePlatformTileUrlInput(v) { + var s = String(v || '').trim().slice(0, 500); + if (!s) return ''; + if (!/^https?:\/\//i.test(s) && s.charAt(0) !== '/') s = '/' + s.replace(/^\/+/, ''); + return s; + } + + function updateJumpSurvivePlatformTilePreview(slot) { + var img = el('jump-survive-platform-tile-prev-' + slot); + var inp = el('jump-survive-platform-tile-url-' + slot); + if (!img) return; + var v = inp && inp.value ? normalizeJumpSurvivePlatformTileUrlInput(inp.value) : ''; + if (!v) { + img.removeAttribute('src'); + img.alt = ''; + return; + } + img.alt = 'Jump platform tile ' + slot + ' preview'; + img.src = v; + } + + function readJumpSurvivePlatformTilesFromForm() { + var out = []; + for (var s = 1; s <= 3; s++) { + var inpU = el('jump-survive-platform-tile-url-' + s); + var url = inpU ? normalizeJumpSurvivePlatformTileUrlInput(inpU.value) : ''; + var inpW = el('jump-survive-platform-tile-w-' + s); + var inpH = el('jump-survive-platform-tile-h-' + s); + var w = inpW ? parseInt(String(inpW.value), 10) : 0; + var h = inpH ? parseInt(String(inpH.value), 10) : 0; + if (!Number.isFinite(w) || w < 0) w = 0; + if (!Number.isFinite(h) || h < 0) h = 0; + out.push({ url: url, w: w, h: h }); + } + return out; + } + + function bindJumpSurvivePlatformTileInputs() { + for (var s = 1; s <= 3; s++) { + (function (slot) { + var inp = el('jump-survive-platform-tile-url-' + slot); + var btn = el('btn-jump-survive-platform-tile-clear-' + slot); + if (inp) { + inp.addEventListener('change', function () { updateJumpSurvivePlatformTilePreview(slot); }); + inp.addEventListener('blur', function () { updateJumpSurvivePlatformTilePreview(slot); }); + } + if (btn) { + btn.addEventListener('click', function () { + var i = el('jump-survive-platform-tile-url-' + slot); + if (i) i.value = ''; + updateJumpSurvivePlatformTilePreview(slot); + }); + } + })(s); + } + } + function loadJumpSurviveTimingPanel() { gameTimingFetch('GET') .then(function (data) { @@ -2916,6 +2973,22 @@ var jss = Number(data.jumpSurviveMissionTimeSec); inpT.value = String(Number.isFinite(jss) && jss > 0 ? Math.floor(jss) : 0); } + var tiles = Array.isArray(data.jumpSurvivePlatformTiles) ? data.jumpSurvivePlatformTiles : []; + var legacy = typeof data.jumpSurvivePlatformTileUrl === 'string' ? data.jumpSurvivePlatformTileUrl : ''; + for (var s = 1; s <= 3; s++) { + var o = tiles[s - 1] && typeof tiles[s - 1] === 'object' ? tiles[s - 1] : {}; + var url = typeof o.url === 'string' ? o.url : ''; + if (s === 1 && !url && legacy) url = legacy; + var inpU = el('jump-survive-platform-tile-url-' + s); + if (inpU) inpU.value = url; + var w = Number(o.w); + var h = Number(o.h); + var inpW = el('jump-survive-platform-tile-w-' + s); + var inpH = el('jump-survive-platform-tile-h-' + s); + if (inpW) inpW.value = String(Number.isFinite(w) && w > 0 ? Math.floor(w) : 0); + if (inpH) inpH.value = String(Number.isFinite(h) && h > 0 ? Math.floor(h) : 0); + updateJumpSurvivePlatformTilePreview(s); + } setMsg('jump-survive-timing-msg', '', ''); }) .catch(function (e) { @@ -3577,10 +3650,13 @@ var limJump = el('jump-survive-mission-sec') ? parseInt(String(el('jump-survive-mission-sec').value), 10) : 0; if (Number.isNaN(limJump) || limJump < 0) limJump = 0; limJump = limJump <= 0 ? 0 : Math.max(10, Math.min(7200, limJump)); + var platTiles = readJumpSurvivePlatformTilesFromForm(); gameTimingFetch('GET') .then(function (data) { data.jumpSurviveJumpHeightMult = jumpSurvMult; data.jumpSurviveMissionTimeSec = limJump; + delete data.jumpSurvivePlatformTileUrl; + data.jumpSurvivePlatformTiles = platTiles; return gameTimingFetch('PUT', data); }) .then(function () { @@ -3791,6 +3867,7 @@ if (btnJumpSurviveSave) { btnJumpSurviveSave.addEventListener('click', saveJumpSurviveTimingPanel); } + bindJumpSurvivePlatformTileInputs(); var btnSpaceShooterSave = el('btn-space-shooter-save'); if (btnSpaceShooterSave) { btnSpaceShooterSave.addEventListener('click', saveSpaceShooterTimingPanel); diff --git a/www/html/Admin/index.html b/www/html/Admin/index.html index e4bcf9b..94ef0be 100644 --- a/www/html/Admin/index.html +++ b/www/html/Admin/index.html @@ -516,7 +516,7 @@