loadPresets 加载预设元素
loadPresets
类型: MethodDeclaration
定义位置: ui.ts
描述
加载预设元素
返回值
类型: void
源代码
位置: 第 100 行
private loadPresets(): void {
const uiFiles = Object.values(Data.ui) as Array<UIFile>
const presets = this.presets as HashMap<UIElementData | ReferenceElementData>
// 加载元素对象目录
const load = (nodes: Array<UIElementData>, ui: UIFile) => {
for (const node of nodes) {
node.ui = ui
presets[node.presetId] = node
Data.compileEvents(node, `${ui.path}\n@ ${node.name}.${node.presetId}`)
Data.filterScripts(node.scripts)
if (node.children.length !== 0) {
load(node.children, ui)
}
}
}
// 加载所有元素的预设对象
for (const ui of uiFiles) {
load(ui.nodes, ui)
}
// 替换引用元素
const replace = (nodes: Array<UIElementData | ReferenceElementData>) => {
let i = nodes.length
while (--i >= 0) {
const node = nodes[i]
// 替换引用元素
if (node.class === 'reference') {
const prefab = presets[node.prefabId]
console.log(node,prefab)
if (node.hidden ||!node.enabled|| !prefab || prefab.class === 'reference' || prefab.hidden) {
nodes.splice(i, 1)
continue
}
const copy: UIElementData = Object.create(prefab)
copy.referenceId = node.presetId
copy.events = Object.setPrototypeOf(node.events, prefab.events)
copy.scripts = node.scripts
Data.mergeScripts(node.scripts, prefab.scripts)
// 替换引用元素的位置
if (node.synchronous) {
copy.transform = {...prefab.transform}
copy.transform.x = node.transform.x
copy.transform.y = node.transform.y
copy.transform.x2 = node.transform.x2
copy.transform.y2 = node.transform.y2
} else {
copy.transform = {...node.transform}
}
presets[node.presetId] = nodes[i] = copy
} else if (node.children.length !== 0) {
replace(node.children)
}
}
}
// 替换所有引用元素为预制件
for (const ui of uiFiles) {
replace(ui.nodes)
}
}
文档生成时间:2025/7/7 12:07:07