Files
youle_cocos/cocoscreator_projects/scripts/verify-version-xml-preview.mjs
joywayer 35216f75e7 feat: integrate room framework and isolated subgame bundles
Complete room UI and protocol integration, move game definitions and resources behind bundle entries, publish authoritative version XML, and document single-game builds. Include all current resource changes and experiment artifacts.
2026-09-09 03:13:18 +08:00

30 lines
2.1 KiB
JavaScript

/** Run with Cocos MCP in Game View; no business packets are sent. */
export async function verifyVersionXmlPreview(){
const cc=await System.import('cc'),modules=Array.from(System.entries()).map(([,m])=>m);
const exported=name=>{const result=modules.find(m=>m[name])?.[name];if(!result)throw Error('Missing '+name);return result;};
const assert=(value,message)=>{if(!value)throw Error(message);};
const startup=cc.director.getScene().getComponentInChildren('PlatformStartup');
const selected=startup.getComponent('SubgameAssets');
assert(selected.versionManifest.gameid===startup.config.identity.gameid,'live game identity');
assert(selected.versionManifest.versionCode===startup.config.identity.version,'live numeric version');
let label;function find(n){for(const c of n.components)if(c instanceof cc.Label&&n.name==='版本显示')label=c.string;n.children.forEach(find);}find(cc.director.getScene());
assert(label==='v'+selected.versionManifest.version,'live display version');
const outcomes=[];
for(const key of ['erqiwang','Game_Surface_3']){
const node=new cc.Node('VersionContractTest');
try{const component=node.addComponent(exported('SubgameAssets'));component.gameKey=key;
const identity=await component.loadBuildIdentity();assert(identity.gameid===component.versionManifest.gameid,'selected XML identity');
outcomes.push({key,gameid:identity.gameid,versionCode:identity.version,version:component.displayVersion});
}finally{node.destroy();}
}
const Feedback=exported('FeedbackPanels');
const feedback=new Feedback(cc.director.getScene().getChildByName('Canvas'),{tips:startup.tipsPrefab,loading:startup.waitPrefab,reconnect:startup.reconnectPrefab,kick:startup.kickPrefab});
feedback.loadingNode.destroy();
await new Promise(resolve=>setTimeout(resolve,100));
feedback.dispose();
const invalid=Object.create(Feedback.prototype);invalid.loadingNode=new cc.Node('InvalidLiveLoading');
let rejected=false;try{invalid.renderLoading(false);}catch{rejected=true;}finally{invalid.loadingNode.destroy();}
assert(rejected,'invalid live panel must still reject');
return {label,games:outcomes,disposedScenePanel:true,invalidLivePanelRejected:true};
}