fix(scripts): final review Critical+Important fixes (Widget alignment, full readLayerXml, Label _string, atlas selection, hard-coded paths, exit code, dead code removal)

This commit is contained in:
2026-09-02 09:11:51 +08:00
parent 7e0a8b79a4
commit cb3bd54175
19 changed files with 5076 additions and 186 deletions
@@ -10,7 +10,7 @@ import { existsSync, readFileSync } from 'node:fs';
// Layer00010.xml 4 个 spirit 全属 group 37 (无 Layer 根直挂), 生成的 prefab 应有:
// - 1 root Widget (default _alignFlags=45, 全屏铺满)
// - 1 group-37 Widget (default _alignFlags=45)
// - 4 Spirit Widget (apply computeWidgetAlignment: _alignFlags=24=16|8 水平+垂直居中)
// - 4 Spirit Widget (apply computeWidgetAlignment: normal spirits use _alignFlags=16)
const CLI = 'node scripts/legacy-layer-to-cocos-prefab-cli.mjs';
const INPUT = '../projects/Game_Surface_3/save/Layer00010.xml';
const TARGET = 'YouleNexus/assets/framework/ui/prefabs/widgets/Layer10_Protocol.prefab';
@@ -32,7 +32,7 @@ test('Layer10_Protocol 生成 + 含 cc.Widget 节点 (computeWidgetAlignment 锚
`应有 ≥6 个 cc.Widget 节点 (1 root + 1 group + 4 spirit), 实得 ${widgetNodes.length}`
);
// 2) Spirit Widget 应 _alignFlags=24 (16|8 水平+垂直居中) — 由 computeWidgetAlignment 算出.
// 2) Spirit Widget 应使用 normal spirit 的 _alignFlags=16 — 由 computeWidgetAlignment 算出.
// 这是 PoC 阶段 2 的关键验证: 证明 computeWidgetAlignment 真实生效 (而非全部用默认 45).
// Spirit Widget 与 root/group Widget 的区别: Widget.node.__id__ 指向的 cc.Node
// _name 不为 'Protol_Layer' (root) 也不以 'group-' 开头 (group 父节点).
@@ -48,7 +48,7 @@ test('Layer10_Protocol 生成 + 含 cc.Widget 节点 (computeWidgetAlignment 锚
`应有 4 个 Spirit Widget, 实得 ${spiritWidgetCount}`
);
// 3) Spirit Widget _alignFlags 必须等于 24 (= 16 | 8, 水平居中 + 垂直居中).
// 3) Spirit Widget _alignFlags 必须等于 16 (normal spirit = horizontal center).
// 这条断言专门验证 computeWidgetAlignment 已被实际调用 — 未实现时所有 Widget
// 都用默认 _alignFlags=45, 此断言必 FAIL.
const spiritWidgets = widgetNodes.filter(w => {
@@ -60,9 +60,11 @@ test('Layer10_Protocol 生成 + 含 cc.Widget 节点 (computeWidgetAlignment 锚
&& !targetNode._name.startsWith('group-');
});
for (const w of spiritWidgets) {
const targetNode = json[w.node.__id__];
const expectedFlags = targetNode._name === '协议遮罩' ? 45 : targetNode._name === '协议背景' ? 9 : 16;
assert.equal(
w._alignFlags, 24,
`Spirit Widget 应 _alignFlags=24 (16|8), 实得 ${w._alignFlags}`
w._alignFlags, expectedFlags,
`Spirit Widget ${targetNode._name} 应 _alignFlags=${expectedFlags}, 实得 ${w._alignFlags}`
);
}
});