This commit is contained in:
Evan
2026-08-31 14:05:47 +08:00
parent 74b983c74e
commit 6a3e797a9a
22965 changed files with 120 additions and 198 deletions

View File

@@ -16,6 +16,7 @@
var loadedLevelDbShards = new Set();
var levelDbShardPromises = new Map();
var levelPackPromises = new Map();
var bundlePackPromises = new Map();
var loadedLevelIds = new Set();
var levelPrefabsBundlePromise = null;
@@ -585,9 +586,24 @@
} catch (e3) { /* ignore */ }
}
function markLevelsSharingBundle(bundleName) {
var levels = levelsManifest && levelsManifest.levels;
var id;
if (!levels || !bundleName) return;
for (id in levels) {
if (!Object.prototype.hasOwnProperty.call(levels, id)) continue;
if (levels[id] && levels[id].bundle === bundleName) {
loadedLevelIds.add(String(id));
}
}
}
function ensureLevelPackLoaded(levelId, onProgress) {
levelId = String(levelId);
if (loadedLevelIds.has(levelId)) return Promise.resolve();
if (loadedLevelIds.has(levelId)) {
if (onProgress) onProgress(1);
return Promise.resolve();
}
if (levelPackPromises.has(levelId)) {
var pending = levelPackPromises.get(levelId);
if (onProgress) pending.then(function () { onProgress(1); }).catch(function () {});
@@ -596,14 +612,19 @@
var promise = ensureAssetsCoreLoaded().then(function () {
return ensureLevelsManifestLoaded();
}).then(function () {
if (loadedLevelIds.has(levelId)) return;
if (!levelsManifest || !levelsManifest.levels || !levelsManifest.levels[levelId]) {
return Promise.reject(new Error('关卡包未在 manifest 中: Level' + levelId));
}
if (!streamingBase) return Promise.reject(new Error('streamingBase 未初始化'));
var entry = levelsManifest.levels[levelId];
var url = joinUrl(streamingBase, 'aa/WebGL/' + entry.bundle);
var bundleName = entry.bundle;
if (bundlePackPromises.has(bundleName)) {
return bundlePackPromises.get(bundleName);
}
var url = joinUrl(streamingBase, 'aa/WebGL/' + bundleName);
dispatchLevelsBundleProgress(0);
return fetchBinaryWithProgress(
var download = fetchBinaryWithProgress(
url,
function (frac) {
dispatchLevelsBundleProgress(frac);
@@ -620,12 +641,17 @@
throw new Error('关卡包解压不完整: Level' + levelId);
}
}
loadedLevelIds.add(levelId);
markLevelsSharingBundle(bundleName);
return invalidateLevelPrefabsBundle();
}).then(function () {
dispatchLevelsBundleProgress(1);
if (onProgress) onProgress(1);
}).catch(function (e) {
bundlePackPromises.delete(bundleName);
throw e;
});
bundlePackPromises.set(bundleName, download);
return download;
}).catch(function (e) {
levelPackPromises.delete(levelId);
throw e;
@@ -1383,16 +1409,14 @@
throw new Error('catalog.json missing scenes_all/assets_all bundles: ' + names.join(', '));
}
if (!levels) {
/* levels_all 已废弃,改用 levels-manifest.json 按关分包 */
/* levels_all 已废弃,改用 levels-manifest.json 每 15 关一包 */
}
return { scenes: scenes, assets: assets, levels: levels, all: names };
}
function loadLevelsManifest(base) {
var manifestUrl = joinUrl(base, 'aa/levels-manifest.json');
return fetchLevelsDatabaseJson(manifestUrl).then(function (json) {
return json;
}).catch(function (e) {
return fetchLevelsDatabaseJson(manifestUrl).catch(function (e) {
console.warn('[mstest5] levels-manifest.json 读取失败', e);
return null;
});
@@ -1585,10 +1609,18 @@
}
var base = resolveStreamingBase(config);
var catalogUrl = joinUrl(base, 'aa/catalog.json');
return origFetch(catalogUrl, { cache: 'no-cache' }).then(function (res) {
return res.ok;
var catalogBr = catalogUrl.replace(/\.json(\?.*)?$/i, '.json.br$1');
return origFetch(catalogBr, { cache: 'no-cache' }).then(function (res) {
if (res.ok) return true;
return origFetch(catalogUrl, { cache: 'no-cache' }).then(function (plain) {
return plain.ok;
});
}).catch(function () {
return false;
return origFetch(catalogUrl, { cache: 'no-cache' }).then(function (res) {
return res.ok;
}).catch(function () {
return false;
});
});
}

Some files were not shown because too many files have changed in this diff Show More