diff --git a/app.js b/app.js index b43dcaf..4d40503 100644 --- a/app.js +++ b/app.js @@ -32,6 +32,7 @@ document.addEventListener('DOMContentLoaded', function () { const afSelect = document.querySelector('select[name="Anisotropic"]'); const afGroup = afSelect.closest('.form-group'); const rendererSelect = document.getElementById('renderer-select'); + const hdTextures = document.getElementById('check-hd-textures'); // --- Sound Toggle --- function updateSoundEmojiState() { @@ -207,6 +208,12 @@ document.addEventListener('DOMContentLoaded', function () { } } + if (hdTextures) { + iniContent += "[extensions]\n"; + value = hdTextures.checked ? 'YES' : 'NO'; + iniContent += `${hdTextures.name}=${value}\n`; + } + const workerCode = ` self.onmessage = async (e) => { if (e.data.action === 'save') { @@ -458,6 +465,10 @@ document.addEventListener('DOMContentLoaded', function () { checkInitialCacheStatus(); }); + hdTextures.addEventListener('change', () => { + checkInitialCacheStatus(); + }); + rendererSelect.addEventListener('change', () => { showOrHideGraphicsOptions(); }); @@ -478,10 +489,10 @@ document.addEventListener('DOMContentLoaded', function () { function checkInitialCacheStatus() { if (navigator.serviceWorker.controller) { - const selectedLanguage = languageSelect.value; navigator.serviceWorker.controller.postMessage({ action: 'check_cache_status', - language: selectedLanguage + language: languageSelect.value, + hdTextures: hdTextures.checked }); } } diff --git a/index.html b/index.html index 53656a9..a271002 100644 --- a/index.html +++ b/index.html @@ -409,6 +409,39 @@ +
+

+ Extensions + ? + + Expands the game with new content and modifications created by the community. + + +

+
+
+ +
+
+ + +
+
+
+
+

Offline Play

diff --git a/sw.js b/sw.js index e75f384..51f28d3 100644 --- a/sw.js +++ b/sw.js @@ -31,6 +31,24 @@ const gameFiles = [ "/LEGO/Scripts/Race/JETRACER.SI", "/LEGO/data/WORLD.WDB" ]; +const textureFiles = [ + "/LEGO/textures/beach.gif.bmp", "/LEGO/textures/doctor.gif.bmp", "/LEGO/textures/infochst.gif.bmp", + "/LEGO/textures/o.gif.bmp", "/LEGO/textures/relrel01.gif.bmp", "/LEGO/textures/rockx.gif.bmp", + "/LEGO/textures/water2x.gif.bmp", "/LEGO/textures/bowtie.gif.bmp", "/LEGO/textures/e.gif.bmp", + "/LEGO/textures/jfrnt.gif.bmp", "/LEGO/textures/papachst.gif.bmp", "/LEGO/textures/road1way.gif.bmp", + "/LEGO/textures/sandredx.gif.bmp", "/LEGO/textures/w_curve.gif.bmp", "/LEGO/textures/brela_01.gif.bmp", + "/LEGO/textures/flowers.gif.bmp", "/LEGO/textures/l6.gif.bmp", "/LEGO/textures/pebblesx.gif.bmp", + "/LEGO/textures/road3wa2.gif.bmp", "/LEGO/textures/se_curve.gif.bmp", "/LEGO/textures/wnbars.gif.bmp", + "/LEGO/textures/bth1chst.gif.bmp", "/LEGO/textures/fruit.gif.bmp", "/LEGO/textures/l.gif.bmp", + "/LEGO/textures/pizcurve.gif.bmp", "/LEGO/textures/road3wa3.gif.bmp", "/LEGO/textures/shftchst.gif.bmp", + "/LEGO/textures/bth2chst.gif.bmp", "/LEGO/textures/gasroad.gif.bmp", "/LEGO/textures/mamachst.gif.bmp", + "/LEGO/textures/polbar01.gif.bmp", "/LEGO/textures/road3way.gif.bmp", "/LEGO/textures/tightcrv.gif.bmp", + "/LEGO/textures/cheker01.gif.bmp", "/LEGO/textures/g.gif.bmp", "/LEGO/textures/mech.gif.bmp", + "/LEGO/textures/polkadot.gif.bmp", "/LEGO/textures/road4way.gif.bmp", "/LEGO/textures/unkchst.gif.bmp", + "/LEGO/textures/construct.gif.bmp", "/LEGO/textures/grassx.gif.bmp", "/LEGO/textures/nwcurve.gif.bmp", + "/LEGO/textures/redskul.gif.bmp", "/LEGO/textures/roadstr8.gif.bmp", "/LEGO/textures/vest.gif.bmp" +]; + const STATIC_CACHE_NAME = 'static-assets-v1'; const rangeRequestsPlugin = new RangeRequestsPlugin(); @@ -82,12 +100,16 @@ async function uninstallLanguagePack(language, client) { } } -async function checkCacheStatus(language, client) { +async function checkCacheStatus(language, hdTextures, client) { const cacheName = getLanguageCacheName(language); const cache = await caches.open(cacheName); const requests = await cache.keys(); const cachedUrls = requests.map(req => new URL(req.url).pathname); - const missingFiles = gameFiles.filter(file => !cachedUrls.includes(file)); + let requiredFiles = gameFiles; + if (hdTextures) { + requiredFiles = requiredFiles.concat(textureFiles); + } + const missingFiles = requiredFiles.filter(file => !cachedUrls.includes(file)); client.postMessage({ action: 'cache_status', @@ -140,7 +162,7 @@ self.addEventListener('message', (event) => { uninstallLanguagePack(event.data.language, event.source); break; case 'check_cache_status': - checkCacheStatus(event.data.language, event.source); + checkCacheStatus(event.data.language, event.data.hdTextures, event.source); break; } }