76 lines
3.0 KiB
JavaScript
76 lines
3.0 KiB
JavaScript
import { build } from 'esbuild'
|
|
|
|
const bundled = await build({
|
|
bundle: true,
|
|
entryPoints: ['src/views/stage/renderLayer.ts'],
|
|
format: 'esm',
|
|
platform: 'node',
|
|
write: false,
|
|
})
|
|
const { resolveRenderTarget } = await import(
|
|
`data:text/javascript;base64,${Buffer.from(bundled.outputFiles[0].text).toString('base64')}`
|
|
)
|
|
|
|
const spines = [{
|
|
id: 7,
|
|
enabled: true,
|
|
visible: true,
|
|
status: 'ready',
|
|
slots: [
|
|
{ name: 'slot_back', order: 0 },
|
|
{ name: 'slot_body', order: 1 },
|
|
{ name: 'slot_hand', order: 2 },
|
|
],
|
|
}]
|
|
const base = {
|
|
renderLayerMode: 'slot',
|
|
renderLayerSpineId: 7,
|
|
renderLayerSlotName: 'slot_hand',
|
|
renderLayerSlotPosition: 'above',
|
|
renderLayerFollowAttachment: true,
|
|
}
|
|
|
|
function expect(actual, expected, label) {
|
|
if (JSON.stringify(actual) !== JSON.stringify(expected)) {
|
|
throw new Error(`${label}: expected ${JSON.stringify(expected)}, got ${JSON.stringify(actual)}`)
|
|
}
|
|
}
|
|
|
|
expect(resolveRenderTarget(spines, { ...base, renderLayerMode: 'top' }), null, '最上层不应挂槽位')
|
|
expect(
|
|
resolveRenderTarget(spines, base),
|
|
{ spineId: 7, slotName: 'slot_hand', targetSlotName: 'slot_hand', followAttachment: true },
|
|
'图片之上应挂到目标插槽',
|
|
)
|
|
expect(
|
|
resolveRenderTarget(spines, { ...base, renderLayerSlotPosition: 'below' }),
|
|
{ spineId: 7, slotName: 'slot_body', targetSlotName: 'slot_hand', followAttachment: false },
|
|
'图片之下应挂到 drawOrder 前一个插槽',
|
|
)
|
|
expect(
|
|
resolveRenderTarget(spines, { ...base, renderLayerSlotPosition: 'below' }, ['slot_back', 'slot_hand', 'slot_body']),
|
|
{ spineId: 7, slotName: 'slot_back', targetSlotName: 'slot_hand', followAttachment: false },
|
|
'动画 drawOrder 变化时应按当前顺序取前一个插槽',
|
|
)
|
|
expect(
|
|
resolveRenderTarget(spines, { ...base, renderLayerSlotPosition: 'below' }, ['slot_hand', 'slot_body', 'slot_back']),
|
|
null,
|
|
'当前 drawOrder 中目标位于最底层时无法放在其下方',
|
|
)
|
|
expect(
|
|
resolveRenderTarget(spines, { ...base, renderLayerSlotName: 'slot_body', renderLayerSlotPosition: 'below' }, ['slot_hand', 'slot_body', 'slot_back']),
|
|
{ spineId: 7, slotName: 'slot_hand', targetSlotName: 'slot_body', followAttachment: false },
|
|
'当前 drawOrder 中应取紧邻的前一个插槽',
|
|
)
|
|
expect(
|
|
resolveRenderTarget(spines, { ...base, renderLayerSlotName: 'slot_back', renderLayerSlotPosition: 'below' }),
|
|
null,
|
|
'第一个插槽下方没有可用层级',
|
|
)
|
|
expect(resolveRenderTarget(spines, { ...base, renderLayerSlotName: 'missing' }), null, '插槽不存在时应回退')
|
|
expect(resolveRenderTarget([{ ...spines[0], enabled: false }], base), null, 'Spine 停用时应回退')
|
|
expect(resolveRenderTarget([{ ...spines[0], visible: false }], base), null, 'Spine 隐藏时应回退且不影响粒子可见性')
|
|
expect(resolveRenderTarget([{ ...spines[0], status: 'loading' }], base), null, 'Spine 未就绪时应回退')
|
|
|
|
console.log('渲染层级解析校验通过:最上层 / 插槽之上 / 插槽之下 / 动画 drawOrder / 隐藏与失效回退')
|