Files
ueblueprint/js/entity/objects/NiagaraClipboardContent.js
2024-12-18 18:44:20 +02:00

46 lines
1.9 KiB
JavaScript
Executable File

import Configuration from "../../Configuration.js"
import ObjectEntity from "../ObjectEntity.js"
import ObjectReferenceEntity from "../ObjectReferenceEntity.js"
import StringEntity from "../StringEntity.js"
export default class NiagaraClipboardContent extends ObjectEntity {
/**
* @param {BlueprintEntity} blueprint
* @param {ObjectEntity[]} nodes
*/
constructor(blueprint, nodes) {
const typePath = Configuration.paths.niagaraClipboardContent
const name = blueprint.takeFreeName("NiagaraClipboardContent")
const exportPath = `/Engine/Transient.${name}`
/** @type {Set<Number>} */
const variableIndexes = new Set()
let exported = ""
for (const node of nodes) {
if (node.exported) {
node.getPinEntities()
.map(pin => blueprint.variableIndex(pin.PinName.toString()))
.filter(v => v != null)
.forEach(i => variableIndexes.add(i))
exported += node.serialize()
}
}
const scriptVariables = blueprint.ScriptVariables.valueOf().filter((v, i) => variableIndexes.has(i))
const variableObjects = scriptVariables.concat(scriptVariables).map((v, i) => {
const name = Configuration.subObjectAttributeNameFromReference(
v.ScriptVariable,
i >= scriptVariables.length // First take all the small objects then all name only
)
return [name, blueprint[name]]
})
super({
Class: new ObjectReferenceEntity(typePath),
Name: new StringEntity(name),
...Object.fromEntries(variableObjects),
ExportPath: new ObjectReferenceEntity(typePath, exportPath),
ScriptVariables: new (NiagaraClipboardContent.attributes.ScriptVariables)(scriptVariables),
ExportedNodes: new StringEntity(btoa(exported))
})
}
}