同步主站 Cocos 当前工程:关卡资源、运行脚本与打包工具。

Co-authored-by: Cursor <cursoragent@cursor.com>
This commit is contained in:
2026-09-12 14:40:34 +08:00
parent ae75fce80b
commit fac515a669
5609 changed files with 27744634 additions and 5653 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);
@@ -613,16 +634,24 @@
1,
).then(function (buf) {
mergeZipIntoFiles(unzip(buf));
var ok = (entry.files || []).every(function (rel) { return files.has(rel); });
if (!ok) {
throw new Error('关卡包解压不完整: Level' + levelId);
var filesList = entry.files;
if (filesList && filesList.length) {
var ok = filesList.every(function (rel) { return files.has(rel); });
if (!ok) {
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;
@@ -994,14 +1023,19 @@
var scene = cc.director.getScene();
if (!scene) return;
var find = cc.find;
['UICamera', 'BgCamera', 'Main Camera'].forEach(function (name) {
['UICamera', 'BgCamera'].forEach(function (name) {
var node = find(name, scene);
if (!node) return;
var cam = node.getComponent(cc.Camera);
if (cam) cam.orthoHeight = halfH;
});
var preserve = !!global.__tfrhPreserveMapView;
var mainNode = find('Main Camera', scene);
if (mainNode) mainNode.setPosition(0, 0, mainNode.position.z);
if (mainNode && !preserve) {
var mainCam = mainNode.getComponent(cc.Camera);
if (mainCam) mainCam.orthoHeight = halfH;
mainNode.setPosition(0, 0, mainNode.position.z);
}
}
function installEmbeddedStageLayout(canvas) {
@@ -1375,20 +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 origFetch(manifestUrl, { cache: 'no-cache' }).then(function (res) {
if (!res.ok) {
console.warn('[mstest5] 缺少 levels-manifest.json将无法按关下载');
return null;
}
return res.json();
}).catch(function (e) {
return fetchLevelsDatabaseJson(manifestUrl).catch(function (e) {
console.warn('[mstest5] levels-manifest.json 读取失败', e);
return null;
});
@@ -1449,10 +1477,7 @@
function loadBundleManifest(config) {
var base = resolveStreamingBase(config);
var catalogUrl = joinUrl(base, 'aa/catalog.json');
return origFetch(catalogUrl).then(function (res) {
if (!res.ok) throw new Error('HTTP ' + res.status + ' for ' + catalogUrl);
return res.json();
}).then(function (catalog) {
return fetchLevelsDatabaseJson(catalogUrl).then(function (catalog) {
var bundles = parseCatalogBundles(catalog);
var manifest = {
scenesUrl: joinUrl(base, 'aa/WebGL/' + bundles.scenes),
@@ -1584,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;
});
});
}