Niagara float and smaller fixes

This commit is contained in:
barsdeveloper
2024-11-27 00:03:56 +01:00
parent 007eec971b
commit a02877b9b9
14 changed files with 99 additions and 26 deletions

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

9
dist/ueblueprint.js vendored
View File

@@ -4404,6 +4404,7 @@ function nodeTitle(entity) {
case "Matrix::MatrixMultiply": return "Multiply (Matrix * Matrix)"
case "Matrix::MatrixVectorMultiply": return "Multiply (Matrix * Vector4)"
case "Numeric::Abs": return "Abs"
case "Numeric::ArcCosine": return "ArcCosine"
case "Numeric::Add": return "+"
case "Numeric::DistancePos": return "Distance"
case "Numeric::Mul": return String.fromCharCode(0x2a2f)
@@ -4416,7 +4417,7 @@ function nodeTitle(entity) {
// case "Integer::BitOr": return "Bitwise OR"
// case "Integer::BitOr": return "Bitwise OR"
}
return Utility.formatStringName(entity.OpName.toString()).replaceAll("::", " ")
return Utility.formatStringName(entity.OpName.toString().replaceAll("::", " "))
}
if (entity.FunctionDisplayName) {
return Utility.formatStringName(entity.FunctionDisplayName.toString())
@@ -5654,6 +5655,7 @@ class PinEntity extends IEntity {
"string": StringEntity,
[Configuration.paths.linearColor]: LinearColorEntity,
[Configuration.paths.niagaraBool]: BooleanEntity,
[Configuration.paths.niagaraFloat]: NumberEntity,
[Configuration.paths.niagaraPosition]: VectorEntity,
[Configuration.paths.rotator]: RotatorEntity,
[Configuration.paths.vector]: VectorEntity,
@@ -6168,7 +6170,7 @@ class UnknownPinEntity extends PinEntity {
static createGrammar() {
return Parsernostrum.seq(
// Lookbehind
Parsernostrum.reg(new RegExp(`(${Grammar.Regex.Symbol.source}\\s*)\\(\\s*`), 1),
Parsernostrum.reg(new RegExp(`(${Grammar.Regex.Symbol.source}\\s*)?\\(\\s*`), 1),
Grammar.createAttributeGrammar(this).sepBy(Grammar.commaSeparation),
Parsernostrum.reg(/\s*(?:,\s*)?\)/)
).map(([lookbehind, attributes, _2]) => {
@@ -6339,7 +6341,7 @@ class ObjectEntity extends IEntity {
Grammar.symbolQuoted.map(v => [v, true]),
Grammar.symbol.map(v => [v, false]),
),
Parsernostrum.reg(new RegExp(String.raw`\s*\(\s*(\d+)\s*\)\s*\=\s*`), 1).map(Number)
Parsernostrum.reg(new RegExp(String.raw`\s*\(\s*(\d+)\s*\)\s*\=\s*`), 1).map(Number) // Number in parentheses then equal
).chain(
/** @param {[[keyof ObjectEntity.attributes, Boolean], Number]} param */
([[symbol, quoted], index]) =>
@@ -12858,6 +12860,7 @@ const inputPinTemplates = {
"string": StringPinTemplate,
[Configuration.paths.linearColor]: LinearColorPinTemplate,
[Configuration.paths.niagaraBool]: BoolPinTemplate,
[Configuration.paths.niagaraFloat]: RealPinTemplate,
[Configuration.paths.NiagaraInt32]: IntPinTemplate,
[Configuration.paths.niagaraPosition]: VectorPinTemplate,
[Configuration.paths.rotator]: RotatorPinTemplate,

File diff suppressed because one or more lines are too long

View File

@@ -433,6 +433,7 @@ export default function nodeTitle(entity) {
case "Matrix::MatrixMultiply": return "Multiply (Matrix * Matrix)"
case "Matrix::MatrixVectorMultiply": return "Multiply (Matrix * Vector4)"
case "Numeric::Abs": return "Abs"
case "Numeric::ArcCosine": return "ArcCosine"
case "Numeric::Add": return "+"
case "Numeric::DistancePos": return "Distance"
case "Numeric::Mul": return String.fromCharCode(0x2a2f)
@@ -445,7 +446,7 @@ export default function nodeTitle(entity) {
// case "Integer::BitOr": return "Bitwise OR"
// case "Integer::BitOr": return "Bitwise OR"
}
return Utility.formatStringName(entity.OpName.toString()).replaceAll("::", " ")
return Utility.formatStringName(entity.OpName.toString().replaceAll("::", " "))
}
if (entity.FunctionDisplayName) {
return Utility.formatStringName(entity.FunctionDisplayName.toString())

View File

@@ -28,6 +28,7 @@ const inputPinTemplates = {
"string": StringPinTemplate,
[Configuration.paths.linearColor]: LinearColorPinTemplate,
[Configuration.paths.niagaraBool]: BoolPinTemplate,
[Configuration.paths.niagaraFloat]: RealPinTemplate,
[Configuration.paths.NiagaraInt32]: IntPinTemplate,
[Configuration.paths.niagaraPosition]: VectorPinTemplate,
[Configuration.paths.rotator]: RotatorPinTemplate,

View File

@@ -157,7 +157,7 @@ export default class ObjectEntity extends IEntity {
Grammar.symbolQuoted.map(v => [v, true]),
Grammar.symbol.map(v => [v, false]),
),
P.reg(new RegExp(String.raw`\s*\(\s*(\d+)\s*\)\s*\=\s*`), 1).map(Number)
P.reg(new RegExp(String.raw`\s*\(\s*(\d+)\s*\)\s*\=\s*`), 1).map(Number) // Number in parentheses then equal
).chain(
/** @param {[[keyof ObjectEntity.attributes, Boolean], Number]} param */
([[symbol, quoted], index]) =>

View File

@@ -50,6 +50,7 @@ export default class PinEntity extends IEntity {
"string": StringEntity,
[Configuration.paths.linearColor]: LinearColorEntity,
[Configuration.paths.niagaraBool]: BooleanEntity,
[Configuration.paths.niagaraFloat]: NumberEntity,
[Configuration.paths.niagaraPosition]: VectorEntity,
[Configuration.paths.rotator]: RotatorEntity,
[Configuration.paths.vector]: VectorEntity,

View File

@@ -16,7 +16,7 @@ export default class UnknownPinEntity extends PinEntity {
static createGrammar() {
return P.seq(
// Lookbehind
P.reg(new RegExp(`(${Grammar.Regex.Symbol.source}\\s*)\\(\\s*`), 1),
P.reg(new RegExp(`(${Grammar.Regex.Symbol.source}\\s*)?\\(\\s*`), 1),
Grammar.createAttributeGrammar(this).sepBy(Grammar.commaSeparation),
P.reg(/\s*(?:,\s*)?\)/)
).map(([lookbehind, attributes, _2]) => {

View File

@@ -25,7 +25,7 @@
},
"homepage": "https://github.com/barsdeveloper/ueblueprint#readme",
"devDependencies": {
"@playwright/test": "1.46",
"@playwright/test": "1.49",
"@rollup/plugin-commonjs": "^25",
"@rollup/plugin-node-resolve": "^15",
"@rollup/plugin-terser": "^0",

View File

@@ -1,3 +1,4 @@
import http from "http"
import httpServer from "http-server"
@@ -54,6 +55,21 @@ export default class BlueprintFixture {
}
}
async checkServerReady(url) {
return new Promise((resolve, reject) => {
const request = http.get(url, res => {
if (res.statusCode === 200) {
resolve()
} else {
reject(new Error(`Server not ready, status code: ${res.statusCode}`))
}
})
request.on("error", error => reject(error))
request.end()
})
}
createServer() {
return new Promise((resolve, reject) => {
const webserver = httpServer.createServer({
@@ -69,12 +85,22 @@ export default class BlueprintFixture {
resolve(null)
}
})
webserver.listen(this.#port, "127.0.0.1", () => resolve(webserver))
webserver.listen(this.#port, "127.0.0.1", async () => {
console.log(`Server started on http://127.0.0.1:${this.#port}`)
const url = `http://127.0.0.1:${this.#port}/empty.html`
try {
await this.checkServerReady(url)
BlueprintFixture.server = webserver
resolve(webserver)
} catch (error) {
console.error("Server failed readiness check:", error)
reject(error)
}
})
process.addListener("SIGTERM", () => {
console.log("SIGTERM signal received: closing HTTP server")
webserver.close()
})
BlueprintFixture.server = webserver
})
}
@@ -86,6 +112,8 @@ export default class BlueprintFixture {
if (e.message.includes("ERR_CONNECTION_REFUSED")) {
await this.createServer()
await this.page.goto(url)
} else {
throw e
}
}
this.#blueprintLocator = this.page.locator("ueb-blueprint")

View File

@@ -42,6 +42,8 @@ export const test = /**
}
)
test.setTimeout(3000)
export const expect = base.expect
export * from "@playwright/test"
@@ -192,8 +194,8 @@ export function testNode(testData) {
async ({ blueprintPage }) => {
const variadic = blueprintPage.node.getByText("Add pin")
await expect(variadic).toBeVisible()
await variadic.hover()
await variadic.click()
await variadic.hover({ timeout: 1000 })
await variadic.click({ timeout: 1000 })
expect(await blueprintPage.node.locator("ueb-pin").all()).toHaveLength(testData.pins + 1)
await variadic.blur()
}

View File

@@ -5,21 +5,25 @@ testNode({
name: "Niagara Add",
title: "+",
value: String.raw`
Begin Object Class=/Script/NiagaraEditor.NiagaraNodeOp Name="NiagaraNodeOp_0" ExportPath="/Script/NiagaraEditor.NiagaraNodeOp'/Engine/Transient.NewNiagaraScript:NiagaraScriptSource_0.NiagaraGraph_0.NiagaraNodeOp_0'"
Begin Object Class=/Script/NiagaraEditor.NiagaraNodeOp Name="NiagaraNodeOp_4" ExportPath="/Script/NiagaraEditor.NiagaraNodeOp'/Engine/Transient.NewNiagaraScript:NiagaraScriptSource_0.NiagaraGraph_0.NiagaraNodeOp_4'"
OpName="Numeric::Add"
ChangeId=264B3D2C683F4201966C715DBA00A590
NodePosX=800
NodePosY=272
NodeGuid=E62FD339348E42159E41F661B803F129
CustomProperties Pin (PinId=553D489D7489472EA81C9C009029186B,PinName="A",PinToolTip="A",PinType.PinCategory="Type",PinType.PinSubCategory="",PinType.PinSubCategoryObject="/Script/CoreUObject.ScriptStruct'/Script/Niagara.NiagaraNumeric'",PinType.PinSubCategoryMemberReference=(),PinType.PinValueType=(),PinType.ContainerType=None,PinType.bIsReference=False,PinType.bIsConst=False,PinType.bIsWeakPointer=False,PinType.bIsUObjectWrapper=False,PinType.bSerializeAsSinglePrecisionFloat=False,DefaultValue="0.0",AutogeneratedDefaultValue="0.0",PersistentGuid=00000000000000000000000000000000,bHidden=False,bNotConnectable=False,bDefaultValueIsReadOnly=False,bDefaultValueIsIgnored=False,bAdvancedView=False,bOrphanedPin=False,)
CustomProperties Pin (PinId=9905D9F666734D179C8DA03CAE65FCD2,PinName="B",PinToolTip="B",PinType.PinCategory="Type",PinType.PinSubCategory="",PinType.PinSubCategoryObject="/Script/CoreUObject.ScriptStruct'/Script/Niagara.NiagaraNumeric'",PinType.PinSubCategoryMemberReference=(),PinType.PinValueType=(),PinType.ContainerType=None,PinType.bIsReference=False,PinType.bIsConst=False,PinType.bIsWeakPointer=False,PinType.bIsUObjectWrapper=False,PinType.bSerializeAsSinglePrecisionFloat=False,DefaultValue="0.0",AutogeneratedDefaultValue="0.0",LinkedTo=(NiagaraNodeFunctionCall_179 73E46ACCCD224AE6958C0DB9D300767E,),PersistentGuid=00000000000000000000000000000000,bHidden=False,bNotConnectable=False,bDefaultValueIsReadOnly=False,bDefaultValueIsIgnored=False,bAdvancedView=False,bOrphanedPin=False,)
CustomProperties Pin (PinId=B1DDBB31FCF24C5FBD99B7205274CF48,PinName="Result",PinToolTip="Result",Direction="EGPD_Output",PinType.PinCategory="Type",PinType.PinSubCategory="",PinType.PinSubCategoryObject="/Script/CoreUObject.ScriptStruct'/Script/Niagara.NiagaraNumeric'",PinType.PinSubCategoryMemberReference=(),PinType.PinValueType=(),PinType.ContainerType=None,PinType.bIsReference=False,PinType.bIsConst=False,PinType.bIsWeakPointer=False,PinType.bIsUObjectWrapper=False,PinType.bSerializeAsSinglePrecisionFloat=False,PersistentGuid=00000000000000000000000000000000,bHidden=False,bNotConnectable=False,bDefaultValueIsReadOnly=False,bDefaultValueIsIgnored=False,bAdvancedView=False,bOrphanedPin=False,)
CustomProperties Pin (PinId=481ADC022BBF4D37BD5D5CE91D03C9C3,PinName="Add",PinType.PinCategory="Misc",PinType.PinSubCategory="DynamicAddPin",PinType.PinSubCategoryObject=None,PinType.PinSubCategoryMemberReference=(),PinType.PinValueType=(),PinType.ContainerType=None,PinType.bIsReference=False,PinType.bIsConst=False,PinType.bIsWeakPointer=False,PinType.bIsUObjectWrapper=False,PinType.bSerializeAsSinglePrecisionFloat=False,PersistentGuid=00000000000000000000000000000000,bHidden=False,bNotConnectable=False,bDefaultValueIsReadOnly=False,bDefaultValueIsIgnored=False,bAdvancedView=False,bOrphanedPin=False,)
AddedPins(0)=(PinType=(PinCategory="Type",PinSubCategoryObject="/Script/CoreUObject.ScriptStruct'/Script/Niagara.NiagaraNumeric'"),PinName="C")
AddedPins(1)=(PinType=(PinCategory="Type",PinSubCategoryObject="/Script/CoreUObject.ScriptStruct'/Script/Niagara.NiagaraNumeric'"),PinName="D")
ChangeId=109C57C3D01D410C906A7E97B05CB7A1
NodePosX=-192
NodePosY=240
NodeGuid=B30CD9FCDD494FE78513D0790EB01F7F
CustomProperties Pin (PinId=993EB0FF225E4E4B8A1F478687460560,PinName="A",PinFriendlyName=NSLOCTEXT("NiagaraOpInfo", "First Function Param", "A"),PinToolTip="A",PinType.PinCategory="Type",PinType.PinSubCategory="",PinType.PinSubCategoryObject="/Script/CoreUObject.ScriptStruct'/Script/Niagara.NiagaraNumeric'",PinType.PinSubCategoryMemberReference=(),PinType.PinValueType=(),PinType.ContainerType=None,PinType.bIsReference=False,PinType.bIsConst=False,PinType.bIsWeakPointer=False,PinType.bIsUObjectWrapper=False,PinType.bSerializeAsSinglePrecisionFloat=False,DefaultValue="0.0",AutogeneratedDefaultValue="0.0",PersistentGuid=00000000000000000000000000000000,bHidden=False,bNotConnectable=False,bDefaultValueIsReadOnly=False,bDefaultValueIsIgnored=False,bAdvancedView=False,bOrphanedPin=False,)
CustomProperties Pin (PinId=61C666A15B2A4F01A5AB41544BC2E809,PinName="B",PinFriendlyName=NSLOCTEXT("NiagaraOpInfo", "Second Function Param", "B"),PinToolTip="B",PinType.PinCategory="Type",PinType.PinSubCategory="",PinType.PinSubCategoryObject="/Script/CoreUObject.ScriptStruct'/Script/Niagara.NiagaraNumeric'",PinType.PinSubCategoryMemberReference=(),PinType.PinValueType=(),PinType.ContainerType=None,PinType.bIsReference=False,PinType.bIsConst=False,PinType.bIsWeakPointer=False,PinType.bIsUObjectWrapper=False,PinType.bSerializeAsSinglePrecisionFloat=False,DefaultValue="0.0",AutogeneratedDefaultValue="0.0",PersistentGuid=00000000000000000000000000000000,bHidden=False,bNotConnectable=False,bDefaultValueIsReadOnly=False,bDefaultValueIsIgnored=False,bAdvancedView=False,bOrphanedPin=False,)
CustomProperties Pin (PinId=BA0C345A92B34C11B9F7123296B25BFE,PinName="Result",PinToolTip="Result",Direction="EGPD_Output",PinType.PinCategory="Type",PinType.PinSubCategory="",PinType.PinSubCategoryObject="/Script/CoreUObject.ScriptStruct'/Script/Niagara.NiagaraNumeric'",PinType.PinSubCategoryMemberReference=(),PinType.PinValueType=(),PinType.ContainerType=None,PinType.bIsReference=False,PinType.bIsConst=False,PinType.bIsWeakPointer=False,PinType.bIsUObjectWrapper=False,PinType.bSerializeAsSinglePrecisionFloat=False,PersistentGuid=00000000000000000000000000000000,bHidden=False,bNotConnectable=False,bDefaultValueIsReadOnly=False,bDefaultValueIsIgnored=False,bAdvancedView=False,bOrphanedPin=False,)
CustomProperties Pin (PinId=8575BFA806564A0896BEA12731E082F6,PinName="C",PinType.PinCategory="Type",PinType.PinSubCategory="",PinType.PinSubCategoryObject="/Script/CoreUObject.ScriptStruct'/Script/Niagara.NiagaraNumeric'",PinType.PinSubCategoryMemberReference=(),PinType.PinValueType=(),PinType.ContainerType=None,PinType.bIsReference=False,PinType.bIsConst=False,PinType.bIsWeakPointer=False,PinType.bIsUObjectWrapper=False,PinType.bSerializeAsSinglePrecisionFloat=False,PersistentGuid=00000000000000000000000000000000,bHidden=False,bNotConnectable=False,bDefaultValueIsReadOnly=False,bDefaultValueIsIgnored=False,bAdvancedView=False,bOrphanedPin=False,)
CustomProperties Pin (PinId=2DB5F7C4828143A099F45818E8B92915,PinName="D",PinType.PinCategory="Type",PinType.PinSubCategory="",PinType.PinSubCategoryObject="/Script/CoreUObject.ScriptStruct'/Script/Niagara.NiagaraNumeric'",PinType.PinSubCategoryMemberReference=(),PinType.PinValueType=(),PinType.ContainerType=None,PinType.bIsReference=False,PinType.bIsConst=False,PinType.bIsWeakPointer=False,PinType.bIsUObjectWrapper=False,PinType.bSerializeAsSinglePrecisionFloat=False,PersistentGuid=00000000000000000000000000000000,bHidden=False,bNotConnectable=False,bDefaultValueIsReadOnly=False,bDefaultValueIsIgnored=False,bAdvancedView=False,bOrphanedPin=False,)
CustomProperties Pin (PinId=AA4E894467914D928AA625F429086B1F,PinName="Add",PinType.PinCategory="Misc",PinType.PinSubCategory="DynamicAddPin",PinType.PinSubCategoryObject=None,PinType.PinSubCategoryMemberReference=(),PinType.PinValueType=(),PinType.ContainerType=None,PinType.bIsReference=False,PinType.bIsConst=False,PinType.bIsWeakPointer=False,PinType.bIsUObjectWrapper=False,PinType.bSerializeAsSinglePrecisionFloat=False,PersistentGuid=00000000000000000000000000000000,bHidden=False,bNotConnectable=False,bDefaultValueIsReadOnly=False,bDefaultValueIsIgnored=False,bAdvancedView=False,bOrphanedPin=False,)
End Object
`,
size: [9.5, 6],
size: [9.5, 10],
icon: null,
pins: 4,
pins: 6,
delegate: false,
development: false,
additionalTest: async (node, pins) => {

View File

@@ -0,0 +1,33 @@
import { css } from "lit"
import { expect, testNode } from "./fixtures/test.js"
testNode({
name: "Niagara ArcCosine",
title: "ArcCosine",
value: String.raw`
Begin Object Class=/Script/NiagaraEditor.NiagaraNodeOp Name="NiagaraNodeOp_0" ExportPath="/Script/NiagaraEditor.NiagaraNodeOp'/Engine/Transient.NewNiagaraScript:NiagaraScriptSource_0.NiagaraGraph_0.NiagaraNodeOp_0'"
OpName="Numeric::ArcCosine"
ChangeId=9FDAB11E05194F05975DBA0752A4E397
NodePosX=-512
NodePosY=208
NodeGuid=94DC004A5F26482498EF5089FC398E6A
CustomProperties Pin (PinId=D5013974C3A3451689FF7914177841D1,PinName="A",PinFriendlyName=NSLOCTEXT("NiagaraOpInfo", "First Function Param", "A"),PinToolTip="A",PinType.PinCategory="Type",PinType.PinSubCategory="",PinType.PinSubCategoryObject="/Script/CoreUObject.ScriptStruct'/Script/Niagara.NiagaraNumeric'",PinType.PinSubCategoryMemberReference=(),PinType.PinValueType=(),PinType.ContainerType=None,PinType.bIsReference=False,PinType.bIsConst=False,PinType.bIsWeakPointer=False,PinType.bIsUObjectWrapper=False,PinType.bSerializeAsSinglePrecisionFloat=False,DefaultValue="1.0",AutogeneratedDefaultValue="1.0",PersistentGuid=00000000000000000000000000000000,bHidden=False,bNotConnectable=False,bDefaultValueIsReadOnly=False,bDefaultValueIsIgnored=False,bAdvancedView=False,bOrphanedPin=False,)
CustomProperties Pin (PinId=7D223B636DFF42DCBE2F9F1E93176BF5,PinName="Period",PinFriendlyName=NSLOCTEXT("NiagaraOpInfo", "Period Name", "Period"),PinToolTip="Value in which a complete rotation has occurred.",PinType.PinCategory="Type",PinType.PinSubCategory="",PinType.PinSubCategoryObject="/Script/CoreUObject.ScriptStruct'/Script/Niagara.NiagaraFloat'",PinType.PinSubCategoryMemberReference=(),PinType.PinValueType=(),PinType.ContainerType=None,PinType.bIsReference=False,PinType.bIsConst=False,PinType.bIsWeakPointer=False,PinType.bIsUObjectWrapper=False,PinType.bSerializeAsSinglePrecisionFloat=False,DefaultValue="5.000000",AutogeneratedDefaultValue="1.0",PersistentGuid=00000000000000000000000000000000,bHidden=False,bNotConnectable=False,bDefaultValueIsReadOnly=False,bDefaultValueIsIgnored=False,bAdvancedView=False,bOrphanedPin=False,)
CustomProperties Pin (PinId=180D0157D43F407B90DD3580C988779C,PinName="Result",PinToolTip="Result",Direction="EGPD_Output",PinType.PinCategory="Type",PinType.PinSubCategory="",PinType.PinSubCategoryObject="/Script/CoreUObject.ScriptStruct'/Script/Niagara.NiagaraNumeric'",PinType.PinSubCategoryMemberReference=(),PinType.PinValueType=(),PinType.ContainerType=None,PinType.bIsReference=False,PinType.bIsConst=False,PinType.bIsWeakPointer=False,PinType.bIsUObjectWrapper=False,PinType.bSerializeAsSinglePrecisionFloat=False,PersistentGuid=00000000000000000000000000000000,bHidden=False,bNotConnectable=False,bDefaultValueIsReadOnly=False,bDefaultValueIsIgnored=False,bAdvancedView=False,bOrphanedPin=False,)
End Object
`,
size: [12, 6],
icon: null,
pins: 3,
delegate: false,
development: false,
additionalTest: async (node, pins, blueprintPage) => {
expect(await node.evaluate(node => node.classList.contains("ueb-node-style-glass"))).toBeFalsy()
expect(await node.evaluate(node => node.classList.contains("ueb-node-style-default"))).toBeTruthy()
await expect(pins[1].locator("ueb-input")).toHaveText("5.0")
await pins[1].locator("ueb-input").fill("8")
await blueprintPage.blur()
await expect(pins[1].locator("ueb-input")).toHaveText("8.0")
expect(await pins[1].evaluate(p => p.entity.pinColor().cssText)).toBe(css`160, 250, 68`.cssText)
},
})