diff --git a/.github/workflows/playwright.yml b/.github/workflows/playwright.yml new file mode 100644 index 0000000..90b6b70 --- /dev/null +++ b/.github/workflows/playwright.yml @@ -0,0 +1,27 @@ +name: Playwright Tests +on: + push: + branches: [ main, master ] + pull_request: + branches: [ main, master ] +jobs: + test: + timeout-minutes: 60 + runs-on: ubuntu-latest + steps: + - uses: actions/checkout@v3 + - uses: actions/setup-node@v3 + with: + node-version: 18 + - name: Install dependencies + run: npm ci + - name: Install Playwright Browsers + run: npx playwright install --with-deps + - name: Run Playwright tests + run: npx playwright test + - uses: actions/upload-artifact@v3 + if: always() + with: + name: playwright-report + path: playwright-report/ + retention-days: 30 diff --git a/.gitignore b/.gitignore index 5d7a0d8..dd813fc 100644 --- a/.gitignore +++ b/.gitignore @@ -4,3 +4,7 @@ localhost* *.git cypress/screenshots cypress/videos +/test-results/ +/playwright-report/ +/blob-report/ +/playwright/.cache/ diff --git a/.vscode/launch.json b/.vscode/launch.json index 57af7e9..0b69d9d 100644 --- a/.vscode/launch.json +++ b/.vscode/launch.json @@ -4,6 +4,13 @@ // For more information, visit: https://go.microsoft.com/fwlink/?linkid=830387 "version": "0.2.0", "configurations": [ + { + "name": "Launch index.html", + "type": "firefox", + "request": "launch", + "reAttach": true, + "file": "${workspaceFolder}/index.html" + }, { "name": "Launch localhost", "type": "firefox", @@ -25,4 +32,4 @@ "addonPath": "${workspaceFolder}" } ] -} +} \ No newline at end of file diff --git a/.vscode/settings.json b/.vscode/settings.json index e221475..54b421b 100644 --- a/.vscode/settings.json +++ b/.vscode/settings.json @@ -7,4 +7,5 @@ ], "typescript.tsserver.experimental.enableProjectDiagnostics": true, "js/ts.implicitProjectConfig.target": "ES2022", + "typescript.format.semicolons": "remove", } diff --git a/CONTRIBUTING.md b/CONTRIBUTING.md index 3b06437..3bc2e4a 100644 --- a/CONTRIBUTING.md +++ b/CONTRIBUTING.md @@ -3,7 +3,7 @@ Getting started with the development of this application is very easy because it Before starting, the gentle reader might want to make sure to be familiar with the [Lit](https://lit.dev/) library and its element [lifecycle](https://lit.dev/docs/components/lifecycle/). This library is used extensively throught the application to keep the HTML elements in sync with the data and avoid updating the DOM too often. The original author is aware that there are way more popular alternatives out there like React, Vue and Svelte, but the design of Lit fits very well into the original design of this application: vanilla JavaScript and object-oriented. This allowed the introduction of Lit with a relatively small amount of changes to the existing code, yes because the decision to use Lit was made at a later point in time. One important detail is that it does not make use of the shadow DOM (part of the Web Components), the real reason is that the development started without using Lit but it is still nice to be able to have a global CSS style (which wouldn't be possibile with a shadow root) so that restyling the library is just a matter of adding another CSS file and rewrite a few properties. -The only other external library that is used here is the awesome [Parsimmon](https://github.com/jneen/parsimmon): a very small but capable text parsing library used to deserialize the text produced by the UE Blueprint Editor. +The only other external library that is used here is [Parsernostrum](https://github.com/barsdeveloper/parsernostrum): a very small but capable text parsing library used to deserialize the text produced by the UE Blueprint Editor. ## Setup @@ -50,7 +50,7 @@ There are a few concepts that must be assimilated in order to understand the des An Entity is just a data holder object that does not really do anything by itself, it has a purely information storage related purpose. The top class at the hierarchy of entities is `IEntity`. This one is a bit more complicated in the sense that it does the initialization of the entity in its constructor according to the information contained in the object provided as an argument or from the attributes static field. This ended up being a somewhat wacky runtime type system. Each subclass can specify its attributes static member variable of type object where each entry is either a value (the default value the attribute will have), a function (called to generate such default value) or an object and in that case it will be of type `AttributeInformation` (please note that in case one wants to assign as default value a specific object, the solution is either to wrap it into a `AttributeInformation` object or to return it from a function). ### Grammar and Serializer -In the `serialization/` folder the gentle reader will find all the classes responsible for transforming entities from and to text that the UE Blueprint Enditor can understand. One important class here is `Grammar` that contains similar formal grammar rules that use the [Parsimmon library](https://github.com/jneen/parsimmon) to create entities from Blueprint text. `Serializer` is at the top of the serializer classes hierarchy and it uses a factory design pattern to register serializers for the various entities types (check `js/serialization/initializeSerializerFactory.js`). It does both read and write of entities: to read it will use the Grammar after creating a language using a function from Parsimmon, to write it will use methods from the class itself. +In the `serialization/` folder the gentle reader will find all the classes responsible for transforming entities from and to text that the UE Blueprint Enditor can understand. One important class here is `Grammar` that contains similar formal grammar rules that use the [Parsernostrum library](https://github.com/barsdeveloper/parsernostrum) to create entities from Blueprint text. `Serializer` is at the top of the serializer classes hierarchy and it uses a factory design pattern to register serializers for the various entities types (check `js/serialization/initializeSerializerFactory.js`). It does both read and write of entities: to read it will use the Grammar after creating a language using a function from Parsernostrum, to write it will use methods from the class itself. Grammar is usually the first place to look when pasting valid Blueprint code does fail. Most likely newer version of Unreal Engine did add some new data type that was not implemented yet (or this library never managed to handle it in the first place). In that case the approach should be trying to fix the existing grammar and entities to accept it, then implement the new entities and attributes. diff --git a/cypress.config.js b/cypress.config.js deleted file mode 100644 index a5d5617..0000000 --- a/cypress.config.js +++ /dev/null @@ -1,15 +0,0 @@ -const { defineConfig } = require("cypress") - -module.exports = defineConfig({ - e2e: { - setupNodeEvents(on, config) { - // implement node event listeners here - }, - experimentalRunAllSpecs: true, - scrollBehavior: false, - testIsolation: false, - video: false, - viewportHeight: 1000, - viewportWidth: 1000, - }, -}) diff --git a/cypress/e2e/entities.cy.js b/cypress/e2e/entities.cy.js deleted file mode 100644 index 2ca9ba2..0000000 --- a/cypress/e2e/entities.cy.js +++ /dev/null @@ -1,333 +0,0 @@ -/// - -import Entity1 from "../fixtures/Entity1.js" -import Entity2 from "../fixtures/Entity2.js" -import entity2Value from "../fixtures/serializedEntity2.js" -import Entity3 from "../fixtures/Entity3.js" -import entity3Value from "../fixtures/serializedEntity3.js" -import Entity4 from "../fixtures/Entity4.js" -import entity4Value from "../fixtures/serializedEntity4.js" -import Entity5 from "../fixtures/Entity5.js" -import entity5Value1 from "../fixtures/serializedEntity5-1.js" -import EntityF from "../fixtures/EntityF.js" -import Grammar from "../../js/serialization/Grammar.js" -import initializeSerializerFactory from "../../js/serialization/initializeSerializerFactory.js" -import ObjectSerializer from "../../js/serialization/ObjectSerializer.js" -import Serializer from "../../js/serialization/Serializer.js" -import SerializerFactory from "../../js/serialization/SerializerFactory.js" -import UnknownKeysEntity from "../../js/entity/UnknownKeysEntity.js" - -describe("Entity initialization", () => { - before(() => { - expect(Entity2).to.be.a("function") - expect(Entity3).to.be.a("function") - }) - - context("Entity2", () => { - const entity = new Entity2() - before(() => { - initializeSerializerFactory() - SerializerFactory.registerSerializer( - Entity2, - new Serializer( - Entity2, - (entity, v) => `{\n${v}\n}`, - "\n", - false, - ": ", - k => ` ${k}` - ) - ) - SerializerFactory.registerSerializer( - Entity1, - new Serializer( - Entity1, - (entity, v) => `Entity1(${v})`, - ", ", - false, - "=", - ) - ) - }) - it("has 8 keys", () => expect(Object.keys(entity).length).to.equal(8)) - it("has someNumber equal to 567", () => expect(entity) - .to.have.property("someNumber") - .which.is.a("number") - .and.is.equal(567) - ) - it("has someString equal to alpha", () => expect(entity) - .to.have.property("someString") - .which.is.a("string") - .and.is.equal("alpha") - ) - it("has someString2 equal to beta", () => expect(entity) - .to.have.property("someString2") - .which.is.a("string") - .and.is.equal("beta") - ) - it("has someBoolean true", () => expect(entity) - .to.have.property("someBoolean") - .which.is.a("boolean") - .and.is.true - ) - it("has someBoolean2 false", () => expect(entity) - .to.have.property("someBoolean2") - .which.is.a("boolean") - .and.is.false - ) - it("has someObjectString equal to gamma", () => expect(entity) - .to.have.property("someObjectString") - .which.is.a("string") - .and.is.equal("gamma") - ) - it("has someArray with numbers", () => expect(entity) - .to.have.property("someArray") - .which.is.an("array") - .and.is.deep.equal([400, 500, 600, 700, 800]) - ) - it("is equal to another empty Entity2", () => - expect(entity.equals(new Entity2())).to.be.true - ) - const other = new Entity2({ - someString2: "gamma" - }) - it("is not equal to another empty Entity2", () => - expect(entity.equals(other)).to.be.false - ) - const other1 = new Entity2({ - someNumber: 123, - someString: "a", - someString2: "b", - someBoolean: false, - someBoolean2: false, - someObjectString: new String("delta"), - someArray: [-1, -2, -3], - }) - const other2 = new Entity2({ - someNumber: 123, - someString: "a", - someString2: "b", - someBoolean: false, - someBoolean2: false, - someObjectString: "delta", - someArray: [-1, -2, -3], - }) - it("compares equal entities as equal", () => - expect(other1.equals(other2)).to.be.true - ) - it("can serialize", () => - expect(SerializerFactory.getSerializer(Entity2).write(entity)).to.equal(entity2Value) - ) - it("has correct nested property", () => - expect(Grammar.getAttribute(Entity2, ["someEntity", "a"]).type).to.equal(Number) - ) - }) - - context("Entity3", () => { - const entity = new Entity3() - const keys = [ - "alpha", - "bravo", - "charlie", - "delta", - "echo", - "foxtrot", - "golf", - "hotel", - "india", - "juliett", - "kilo", - // "lima", // Not defined by default - "mike", - "november", - "oscar", - "papa", - "quebec", - "romeo", - "sierra", - ] - before(() => { - initializeSerializerFactory() - SerializerFactory.registerSerializer( - Entity3, - new Serializer( - Entity3, - (entity, v) => `[[\n${v}\n]]`, - "\n", - false, - ": ", - k => ` ${k}` - ) - ) - SerializerFactory.registerSerializer( - Entity1, - new Serializer( - Entity1, - (entity, v) => `Entity1(${v})`, - ", ", - false, - "=", - ) - ) - }) - it(`has ${keys.length} keys`, () => expect(Object.keys(entity).length).to.equal(keys.length)) - it("has specific keys names", () => expect(Object.keys(entity)).to.be.deep.equal(keys)) - it("has alpha equal to 32", () => expect(entity) - .to.have.property("alpha") - .which.is.a("number") - .and.is.equal(32) - ) - it("has bravo equal to 78", () => expect(entity) - .to.have.property("bravo") - .which.is.a("number") - .and.is.equal(78) - ) - it("has charlie equal to beta", () => expect(entity) - .to.have.property("charlie") - .which.is.a("string") - .and.is.equal("Charlie") - ) - it("has delta null", () => expect(entity) - .to.have.property("delta") - .which.is.null - ) - it("has echo equal to echo", () => expect(entity) - .to.have.property("echo") - .which.is.a("string") - .and.is.equal("echo") - ) - it("has foxtrot false", () => expect(entity) - .to.have.property("foxtrot") - .which.is.a("boolean") - .and.is.false - ) - it("has golf empty array", () => expect(entity) - .to.have.property("golf") - .which.is.an("array") - .and.is.empty - ) - it("has hotel null", () => expect(entity) - .to.have.property("hotel") - .which.is.null - ) - it("has india empty array", () => expect(entity) - .to.have.property("india") - .which.is.an("array") - .and.is.empty - ) - it("has juliett array of strings", () => expect(entity) - .to.have.property("juliett") - .which.is.an("array") - .and.is.deep.equal(["a", "b", "c", "d", "e"]) - ) - it("has kilo array of booleans", () => expect(entity) - .to.have.property("kilo") - .which.is.an("array") - .and.is.deep.equal([true, false, false, true, true]) - ) - it("has mike equal to Foo", () => expect(entity) - .to.have.property("mike") - .which.is.a("string") - .and.is.equal("Bar") - ) - it("has november equal to 0", () => expect(entity) - .to.have.property("november") - .which.is.a("number") - .and.is.equal(0) - ) - it("has oscar a Entity1", () => expect(entity) - .to.have.property("oscar") - .which.is.instanceOf(Entity1) - .and.is.deep.equal({ a: 8, b: 9 }) - ) - it("has papa a Entity1", () => expect(entity) - .to.have.property("papa") - .which.is.instanceOf(Entity1) - .and.is.deep.equal({ a: 12, b: 13 }) - ) - it("has quebec undefined", () => expect(entity) - .to.have.property("quebec") - .which.is.undefined - ) - it("quebec can be assigned and it always filtered", () => { - const entity = new Entity3() - entity.quebec = 2 - expect(entity.quebec, "assigned 2").to.be.equal(2) - entity["quebec"] = 7 - expect(entity.quebec, "assigned 7").to.be.equal(7) - entity.quebec = 1 - expect(entity.quebec, "assigned 1").to.be.equal(1) - entity["quebec"] = 10 - expect(entity.quebec, "assigned 10").to.be.equal(10) - entity.quebec = 0 - expect(entity.quebec, "assigned 0").to.be.equal(10) - entity["quebec"] = 11 - expect(entity.quebec, "assigned 11").to.be.equal(10) - entity.quebec = -1 - expect(entity.quebec, "assigned -1").to.be.equal(10) - entity.quebec = 6 - expect(entity.quebec, "assigned 6").to.be.equal(6) - }) - it("can serialize", () => - expect(SerializerFactory.getSerializer(Entity3).write(entity)).to.equal(entity3Value) - ) - it("has correct nested property", () => { - expect(Grammar.getAttribute(Entity3, ["romeo", "b"]).type).to.equal(Number) - expect(Grammar.getAttribute(Entity3, ["sierra", "someString2"]).type).to.equal(String) - expect(Grammar.getAttribute(Entity3, ["sierra", "someObjectString"]).type).to.equal(String) - expect(Grammar.getAttribute(Entity3, ["sierra", "someObjectString"]).type).to.equal(String) - expect(Grammar.getAttribute(Entity3, ["sierra", "someEntity", "b"]).type).to.equal(Number) - }) - }) - - context("Entity4", () => { - const entity = new Entity4() - before(() => { - initializeSerializerFactory() - SerializerFactory.registerSerializer( - Entity4, - new Serializer( - Entity4, - (entity, v) => `Begin\n${v}\nEnd`, - "\n", - false, - " => ", - k => ` \${${k}}` - ) - ) - }) - it("has array of Entity1", () => - expect(Entity4.attributes.second.type).to.deep.equal([Entity1]) - ) - it("can serialize", () => - expect(SerializerFactory.getSerializer(Entity4).write(entity)).to.equal(entity4Value) - ) - }) - - context("Entity5", () => { - let entity = new Entity5() - before(() => { - initializeSerializerFactory() - SerializerFactory.registerSerializer( - Entity5, - new ObjectSerializer(Entity5) - ) - SerializerFactory.registerSerializer( - EntityF, - new Serializer(UnknownKeysEntity, (entity, string) => `${entity.lookbehind ?? ""}(${string})`) - ) - }) - it("can serialize/deserialize", () => { - expect(entity = SerializerFactory.getSerializer(Entity5).read(entity5Value1)).to.deep.equal({ - key1: "Value 1", - key2: { - lookbehind: "Foo", - arg1: 55, - arg2: "Argument 2", - }, - }) - expect(entity.key2).to.be.instanceof(EntityF) - expect(SerializerFactory.getSerializer(Entity5).write(entity)).to.equal(entity5Value1) - }) - }) -}) diff --git a/cypress/e2e/eventNodes.cy.js b/cypress/e2e/eventNodes.cy.js deleted file mode 100644 index c5cf002..0000000 --- a/cypress/e2e/eventNodes.cy.js +++ /dev/null @@ -1,93 +0,0 @@ -/// - -import generateNodeTests from "../fixtures/testUtilities.js" -import Configuration from "../../js/Configuration.js" -import SVGIcon from "../../js/SVGIcon.js" - -const tests = [ - { - name: "MoveCharacterRandomLocation", - subtitle: "Custom Event", - value: String.raw` - Begin Object Class=/Script/BlueprintGraph.K2Node_CustomEvent Name="K2Node_CustomEvent_4" - CustomFunctionName="MoveCharacterRandomLocation" - NodePosX=-368 - NodePosY=64 - NodeGuid=9C3BF2E5A27C4B45825C025A224639EA - CustomProperties Pin (PinId=B563D2CC4FC67B5F348BE18F59F694A4,PinName="OutputDelegate",Direction="EGPD_Output",PinType.PinCategory="delegate",PinType.PinSubCategory="",PinType.PinSubCategoryObject=None,PinType.PinSubCategoryMemberReference=(MemberParent=/Script/Engine.BlueprintGeneratedClass'"/Temp/Untitled_1.Untitled_C"',MemberName="MoveCharacterRandomLocation",MemberGuid=9C3BF2E5A27C4B45825C025A224639EA),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=0DE0B9A2469DB01A69BD5C8BB17D15BB,PinName="then",Direction="EGPD_Output",PinType.PinCategory="exec",PinType.PinSubCategory="",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,LinkedTo=(K2Node_Knot_8 C5BBC59C45ACF577B59616A9D79986B3,),PersistentGuid=00000000000000000000000000000000,bHidden=False,bNotConnectable=False,bDefaultValueIsReadOnly=False,bDefaultValueIsIgnored=False,bAdvancedView=False,bOrphanedPin=False,) - End Object - `, - size: [16, 5], - color: Configuration.nodeColors.red, - icon: SVGIcon.event, - pins: 2, - delegate: true, - development: false, - }, - { - name: "OnComponentBeginOverlap_Event", - subtitle: "Custom Event", - value: String.raw` - Begin Object Class=/Script/BlueprintGraph.K2Node_CustomEvent Name="K2Node_CustomEvent_0" - CustomFunctionName="OnComponentBeginOverlap_Event" - NodePosX=-96 - NodePosY=608 - NodeGuid=6BB0872D81764DAD9270E32E66A4E01C - CustomProperties Pin (PinId=DB4E85FC86FD4EC784FFC45C77BB895C,PinName="OutputDelegate",Direction="EGPD_Output",PinType.PinCategory="delegate",PinType.PinSubCategory="",PinType.PinSubCategoryObject=None,PinType.PinSubCategoryMemberReference=(MemberParent=/Script/Engine.BlueprintGeneratedClass'"/Temp/Untitled_1.Untitled_C"',MemberName="OnComponentBeginOverlap_Event",MemberGuid=6BB0872D81764DAD9270E32E66A4E01C),PinType.PinValueType=(),PinType.ContainerType=None,PinType.bIsReference=False,PinType.bIsConst=False,PinType.bIsWeakPointer=False,PinType.bIsUObjectWrapper=False,PinType.bSerializeAsSinglePrecisionFloat=False,LinkedTo=(K2Node_AssignDelegate_0 D1C3E8BFC4A54F62B5A566D72FAF5363,),PersistentGuid=00000000000000000000000000000000,bHidden=False,bNotConnectable=False,bDefaultValueIsReadOnly=False,bDefaultValueIsIgnored=False,bAdvancedView=False,bOrphanedPin=False,) - CustomProperties Pin (PinId=FE89EFE7B4AF4461B4969FF6AA4E46FC,PinName="then",Direction="EGPD_Output",PinType.PinCategory="exec",PinType.PinSubCategory="",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,) - CustomProperties Pin (PinId=0253993B7559437ABDA8A4FFE6EC2CA6,PinName="OverlappedComponent",Direction="EGPD_Output",PinType.PinCategory="object",PinType.PinSubCategory="",PinType.PinSubCategoryObject=/Script/CoreUObject.Class'"/Script/Engine.PrimitiveComponent"',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=E1538C05015F49D3A3927FFCB700ACB4,PinName="OtherActor",Direction="EGPD_Output",PinType.PinCategory="object",PinType.PinSubCategory="",PinType.PinSubCategoryObject=/Script/CoreUObject.Class'"/Script/Engine.Actor"',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=DA531C332C9041CCBBE58A42C94A0BA3,PinName="OtherComp",Direction="EGPD_Output",PinType.PinCategory="object",PinType.PinSubCategory="",PinType.PinSubCategoryObject=/Script/CoreUObject.Class'"/Script/Engine.PrimitiveComponent"',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=C957CCBA488341E787645E4C886DE2F2,PinName="OtherBodyIndex",Direction="EGPD_Output",PinType.PinCategory="int",PinType.PinSubCategory="",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,) - CustomProperties Pin (PinId=03154C6B4A784B3E82393A3A66803DEF,PinName="bFromSweep",Direction="EGPD_Output",PinType.PinCategory="bool",PinType.PinSubCategory="",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,) - CustomProperties Pin (PinId=FC68A0EBC0FC4A27BECAB79E49D860BD,PinName="SweepResult",Direction="EGPD_Output",PinType.PinCategory="struct",PinType.PinSubCategory="",PinType.PinSubCategoryObject=/Script/CoreUObject.ScriptStruct'"/Script/Engine.HitResult"',PinType.PinSubCategoryMemberReference=(),PinType.PinValueType=(),PinType.ContainerType=None,PinType.bIsReference=True,PinType.bIsConst=True,PinType.bIsWeakPointer=False,PinType.bIsUObjectWrapper=False,PinType.bSerializeAsSinglePrecisionFloat=False,PersistentGuid=00000000000000000000000000000000,bHidden=False,bNotConnectable=False,bDefaultValueIsReadOnly=False,bDefaultValueIsIgnored=False,bAdvancedView=False,bOrphanedPin=False,) - CustomProperties UserDefinedPin (PinName="OverlappedComponent",PinType=(PinCategory="object",PinSubCategoryObject=/Script/CoreUObject.Class'"/Script/Engine.PrimitiveComponent"'),DesiredPinDirection=EGPD_Output) - CustomProperties UserDefinedPin (PinName="OtherActor",PinType=(PinCategory="object",PinSubCategoryObject=/Script/CoreUObject.Class'"/Script/Engine.Actor"'),DesiredPinDirection=EGPD_Output) - CustomProperties UserDefinedPin (PinName="OtherComp",PinType=(PinCategory="object",PinSubCategoryObject=/Script/CoreUObject.Class'"/Script/Engine.PrimitiveComponent"'),DesiredPinDirection=EGPD_Output) - CustomProperties UserDefinedPin (PinName="OtherBodyIndex",PinType=(PinCategory="int"),DesiredPinDirection=EGPD_Output) - CustomProperties UserDefinedPin (PinName="bFromSweep",PinType=(PinCategory="bool"),DesiredPinDirection=EGPD_Output) - CustomProperties UserDefinedPin (PinName="SweepResult",PinType=(PinCategory="struct",PinSubCategoryObject=/Script/CoreUObject.ScriptStruct'"/Script/Engine.HitResult"',bIsReference=True,bIsConst=True),DesiredPinDirection=EGPD_Output) - End Object - `, - size: [16.5, 16], - color: Configuration.nodeColors.red, - icon: SVGIcon.event, - pins: 8, - pinNames: [ - "Overlapped Component", - "Other Actor", - "Other Comp", - "Other Body Index", - "From Sweep", - "Sweep Result", - ], - delegate: true, - development: false, - }, - { - name: "Call AS!%sasd Adsad DD", - value: String.raw` - Begin Object Class=/Script/BlueprintGraph.K2Node_CallDelegate Name="K2Node_CallDelegate_0" ExportPath=/Script/BlueprintGraph.K2Node_CallDelegate'"/PCG/BP_Elements/PCGAsset.PCGAsset:EventGraph.K2Node_CallDelegate_0"' - "DelegateReference"=(MemberName="AS!%sasdAdsadDD",MemberGuid=FB6F7CD342716A4FA22AA6AD6E6B7ED9,bSelfContext=True) - "NodePosX"=-176 - "NodePosY"=368 - "NodeGuid"=DE76D7A748D78DF77131B0AE166442A6 - CustomProperties Pin (PinId=C329158B42D4E4DA1CAEF7A04ED77100,PinName="execute",PinType.PinCategory="exec",PinType.PinSubCategory="",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,) - CustomProperties Pin (PinId=8D92F70C46C94C389AAC3E87191AB46A,PinName="then",Direction="EGPD_Output",PinType.PinCategory="exec",PinType.PinSubCategory="",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,) - CustomProperties Pin (PinId=88182FCB4DE7B6D80AD1B79906069691,PinName="self",PinFriendlyName=NSLOCTEXT("K2Node", "BaseMCDelegateSelfPinName", "Target"),PinType.PinCategory="object",PinType.PinSubCategory="",PinType.PinSubCategoryObject=/Script/Engine.BlueprintGeneratedClass'"/PCG/BP_Elements/PCGAsset.PCGAsset_C"',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: [13, 6], - color: Configuration.nodeColors.blue, - icon: SVGIcon.node, - pins: 3, - pinNames: [ - "Target", - ], - delegate: false, - development: false, - }, -] - -generateNodeTests(tests) diff --git a/cypress/e2e/flowControlNodes.cy.js b/cypress/e2e/flowControlNodes.cy.js deleted file mode 100644 index f34041f..0000000 --- a/cypress/e2e/flowControlNodes.cy.js +++ /dev/null @@ -1,542 +0,0 @@ -/// - -import generateNodeTests from "../fixtures/testUtilities.js" -import Configuration from "../../js/Configuration.js" -import SVGIcon from "../../js/SVGIcon.js" - -const tests = [ - { - name: "Branch", - value: String.raw` - Begin Object Class=/Script/BlueprintGraph.K2Node_IfThenElse Name="K2Node_IfThenElse_3" - NodePosX=-864 - NodePosY=-112 - NodeGuid=394F6A9DE87E4DAF8815B0BC582F67F4 - CustomProperties Pin (PinId=370DE2594FC6D3DF81672491D09FA4F2,PinName="execute",PinType.PinCategory="exec",PinType.PinSubCategory="",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,LinkedTo=(K2Node_ComponentBoundEvent_2 CA668D354E07DD5D3FDF828A8DCB31E2,),PersistentGuid=00000000000000000000000000000000,bHidden=False,bNotConnectable=False,bDefaultValueIsReadOnly=False,bDefaultValueIsIgnored=False,bAdvancedView=False,bOrphanedPin=False,) - CustomProperties Pin (PinId=CC13602F47301B384984DD90F31BBF44,PinName="Condition",PinType.PinCategory="bool",PinType.PinSubCategory="",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,DefaultValue="true",AutogeneratedDefaultValue="true",LinkedTo=(K2Node_VariableGet_6 67589E5F4FC4B9ADA6B13EA1FE75D4BD,),PersistentGuid=00000000000000000000000000000000,bHidden=False,bNotConnectable=False,bDefaultValueIsReadOnly=False,bDefaultValueIsIgnored=False,bAdvancedView=False,bOrphanedPin=False,) - CustomProperties Pin (PinId=5144C992425351C9738579B61BF10CFB,PinName="then",PinFriendlyName=NSLOCTEXT("K2Node", "true", "true"),Direction="EGPD_Output",PinType.PinCategory="exec",PinType.PinSubCategory="",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,) - CustomProperties Pin (PinId=79F953C54BDCD44353369F803937AC7C,PinName="else",PinFriendlyName=NSLOCTEXT("K2Node", "false", "false"),Direction="EGPD_Output",PinType.PinCategory="exec",PinType.PinSubCategory="",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,LinkedTo=(K2Node_IfThenElse_22 2937CFDB4A1C853A34A3B9A67E534029,),PersistentGuid=00000000000000000000000000000000,bHidden=False,bNotConnectable=False,bDefaultValueIsReadOnly=False,bDefaultValueIsIgnored=False,bAdvancedView=False,bOrphanedPin=False,) - End Object - `, - size: [12.5, 6], - color: Configuration.nodeColors.gray, - icon: SVGIcon.branchNode, - pins: 4, - pinNames: ["Condition", "True", "False"], - delegate: false, - development: false, - }, - { - name: "For Each Loop", - value: String.raw` - Begin Object Class=/Script/BlueprintGraph.K2Node_MacroInstance Name="K2Node_MacroInstance_1" - MacroGraphReference=(MacroGraph=/Script/Engine.EdGraph'"/Engine/EditorBlueprintResources/StandardMacros.StandardMacros:ForEachLoop"',GraphBlueprint=/Script/Engine.Blueprint'"/Engine/EditorBlueprintResources/StandardMacros.StandardMacros"',GraphGuid=99DBFD5540A796041F72A5A9DA655026) - NodePosX=-1216 - NodePosY=96 - NodeGuid=DC35C020857E45708D1A7ED3695C0275 - CustomProperties Pin (PinId=98E5694575854D738E59826A4192E63A,PinName="Exec",PinType.PinCategory="exec",PinType.PinSubCategory="",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,) - CustomProperties Pin (PinId=4586F50C416540779AEF16C701119F59,PinName="Array",PinType.PinCategory="wildcard",PinType.PinSubCategory="",PinType.PinSubCategoryObject=None,PinType.PinSubCategoryMemberReference=(),PinType.PinValueType=(),PinType.ContainerType=Array,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=612E0159522948FE9702A36B283523D1,PinName="LoopBody",Direction="EGPD_Output",PinType.PinCategory="exec",PinType.PinSubCategory="",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,) - CustomProperties Pin (PinId=2E365C79D539495FB537CABA9D37F15F,PinName="Array Element",Direction="EGPD_Output",PinType.PinCategory="wildcard",PinType.PinSubCategory="",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,) - CustomProperties Pin (PinId=5797F5E5CBCA47E1B9A39DA8A3893D3D,PinName="Array Index",Direction="EGPD_Output",PinType.PinCategory="int",PinType.PinSubCategory="",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,) - CustomProperties Pin (PinId=6B0EBB7A7BD547E6A3C22BC7F782E742,PinName="Completed",Direction="EGPD_Output",PinType.PinCategory="exec",PinType.PinSubCategory="",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: [12, 10], - color: Configuration.nodeColors.gray, - icon: SVGIcon.forEachLoop, - pins: 6, - pinNames: ["Exec", "Array", "Loop Body", "Array Element", "Array Index", "Completed"], - delegate: false, - development: false, - }, - { - name: "For Each Loop with Break", - value: String.raw` - Begin Object Class=/Script/BlueprintGraph.K2Node_MacroInstance Name="K2Node_MacroInstance_2" - MacroGraphReference=(MacroGraph=/Script/Engine.EdGraph'"/Engine/EditorBlueprintResources/StandardMacros.StandardMacros:ForEachLoopWithBreak"',GraphBlueprint=/Script/Engine.Blueprint'"/Engine/EditorBlueprintResources/StandardMacros.StandardMacros"',GraphGuid=F07560274C5742E391E84B8F394CFB36) - NodePosX=-1136 - NodePosY=-272 - NodeGuid=008F14B9BBA5487F8AE49CD1C8630069 - CustomProperties Pin (PinId=4456C17B27D54BE786BF4FF61C25DE9D,PinName="Exec",PinType.PinCategory="exec",PinType.PinSubCategory="",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,) - CustomProperties Pin (PinId=B6A7B986B2DC4BC0ADB9961E2741EA9D,PinName="Array",PinType.PinCategory="wildcard",PinType.PinSubCategory="",PinType.PinSubCategoryObject=None,PinType.PinSubCategoryMemberReference=(),PinType.PinValueType=(),PinType.ContainerType=Array,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=FB6676D0482D418E9E02F303438FC999,PinName="Break",PinType.PinCategory="exec",PinType.PinSubCategory="",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,) - CustomProperties Pin (PinId=DF7D57F4846F49D19DBBA1EF1555B8E3,PinName="LoopBody",Direction="EGPD_Output",PinType.PinCategory="exec",PinType.PinSubCategory="",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,) - CustomProperties Pin (PinId=8938553CAE344B4B9FE849C020278383,PinName="Array Element",Direction="EGPD_Output",PinType.PinCategory="wildcard",PinType.PinSubCategory="",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,) - CustomProperties Pin (PinId=3870EB0F61D842F789DA17E4DC1D66FC,PinName="Array Index",Direction="EGPD_Output",PinType.PinCategory="int",PinType.PinSubCategory="",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,) - CustomProperties Pin (PinId=ABDAB2F741CF47A4A2E49D0F37A22901,PinName="Completed",Direction="EGPD_Output",PinType.PinCategory="exec",PinType.PinSubCategory="",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: [13, 10], - color: Configuration.nodeColors.gray, - icon: SVGIcon.forEachLoop, - pins: 7, - pinNames: ["Exec", "Array", "Break", "Loop Body", "Array Element", "Array Index", "Completed"], - delegate: false, - development: false, - }, - { - name: "Reverse For Each Loop", - value: String.raw` - Begin Object Class=/Script/BlueprintGraph.K2Node_MacroInstance Name="K2Node_MacroInstance_3" - MacroGraphReference=(MacroGraph=/Script/Engine.EdGraph'"/Engine/EditorBlueprintResources/StandardMacros.StandardMacros:ReverseForEachLoop"',GraphBlueprint=/Script/Engine.Blueprint'"/Engine/EditorBlueprintResources/StandardMacros.StandardMacros"',GraphGuid=6DB5FE084A27CDF3569C7980D75D7E14) - ResolvedWildcardType=(PinCategory="wildcard") - NodePosX=-560 - NodePosY=-256 - NodeGuid=695A57C9EA744959BD630B5A6843125C - CustomProperties Pin (PinId=82F4FB580F714AA8BC05E24CBEA36A39,PinName="Exec",PinType.PinCategory="exec",PinType.PinSubCategory="",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,) - CustomProperties Pin (PinId=2FDD4BF2642849E0BD7B5912F90B4193,PinName="Array",PinType.PinCategory="wildcard",PinType.PinSubCategory="",PinType.PinSubCategoryObject=None,PinType.PinSubCategoryMemberReference=(),PinType.PinValueType=(),PinType.ContainerType=Array,PinType.bIsReference=False,PinType.bIsConst=False,PinType.bIsWeakPointer=False,PinType.bIsUObjectWrapper=False,PinType.bSerializeAsSinglePrecisionFloat=False,LinkedTo=(K2Node_MacroInstance_2 8938553CAE344B4B9FE849C020278383,),PersistentGuid=00000000000000000000000000000000,bHidden=False,bNotConnectable=False,bDefaultValueIsReadOnly=False,bDefaultValueIsIgnored=False,bAdvancedView=False,bOrphanedPin=False,) - CustomProperties Pin (PinId=68B4210D1454406988CE323FE8C1E694,PinName="LoopBody",Direction="EGPD_Output",PinType.PinCategory="exec",PinType.PinSubCategory="",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,) - CustomProperties Pin (PinId=687A39ADBA1C40B58DB4D4A98C68BB30,PinName="ArrayIndex",Direction="EGPD_Output",PinType.PinCategory="int",PinType.PinSubCategory="",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,) - CustomProperties Pin (PinId=5E11F11E5F9B4E0DA2924E7DB49F01F7,PinName="ArrayElement",Direction="EGPD_Output",PinType.PinCategory="wildcard",PinType.PinSubCategory="",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,) - CustomProperties Pin (PinId=BD41530556AD4731B63C13B1183CD844,PinName="Completed",Direction="EGPD_Output",PinType.PinCategory="exec",PinType.PinSubCategory="",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: [12, 10], - color: Configuration.nodeColors.gray, - icon: SVGIcon.macro, - pins: 6, - pinNames: ["Exec", "Array", "Loop Body", "Array Index", "Array Element", "Completed"], - delegate: false, - development: false, - }, - { - name: "For Each EAudioComponentPlayState", - value: String.raw` - Begin Object Class=/Script/BlueprintGraph.K2Node_ForEachElementInEnum Name="K2Node_ForEachElementInEnum_0" - Enum=/Script/CoreUObject.Enum'"/Script/Engine.EAudioComponentPlayState"' - NodePosX=-992 - NodePosY=320 - AdvancedPinDisplay=Shown - NodeGuid=706F82B7815D4137AE662D70A97A62C3 - CustomProperties Pin (PinId=6F89188317294812A79E72CFB15C3DDF,PinName="execute",PinType.PinCategory="exec",PinType.PinSubCategory="",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,) - CustomProperties Pin (PinId=B9078293CD49417AAD1145A636C63C2E,PinName="SkipHidden",PinToolTip="Skip Hidden\nBoolean\n\nControls whether or not the loop will skip over hidden enumeration values.",PinType.PinCategory="bool",PinType.PinSubCategory="",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,DefaultValue="true",AutogeneratedDefaultValue="true",PersistentGuid=00000000000000000000000000000000,bHidden=False,bNotConnectable=False,bDefaultValueIsReadOnly=False,bDefaultValueIsIgnored=False,bAdvancedView=True,bOrphanedPin=False,) - CustomProperties Pin (PinId=5545D12AE949466C98B743E1C736812C,PinName="LoopBody",Direction="EGPD_Output",PinType.PinCategory="exec",PinType.PinSubCategory="",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,) - CustomProperties Pin (PinId=1D66C9B98B8E4C6FBFD39B33C10380EA,PinName="EnumValue",Direction="EGPD_Output",PinType.PinCategory="byte",PinType.PinSubCategory="",PinType.PinSubCategoryObject=/Script/CoreUObject.Enum'"/Script/Engine.EAudioComponentPlayState"',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=D255092C0E544047BB60DD4A8F5333D9,PinName="then",PinFriendlyName=NSLOCTEXT("K2Node", "Completed", "Completed"),Direction="EGPD_Output",PinType.PinCategory="exec",PinType.PinSubCategory="",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: [17.5, 9], - color: Configuration.nodeColors.blue, - icon: SVGIcon.loop, - pins: 5, - pinNames: ["Skip Hidden", "Loop Body", "Enum Value", "Completed"], - delegate: false, - development: false, - }, - { - name: "While Loop", - value: String.raw` - Begin Object Class=/Script/BlueprintGraph.K2Node_MacroInstance Name="K2Node_MacroInstance_4" - MacroGraphReference=(MacroGraph=/Script/Engine.EdGraph'"/Engine/EditorBlueprintResources/StandardMacros.StandardMacros:WhileLoop"',GraphBlueprint=/Script/Engine.Blueprint'"/Engine/EditorBlueprintResources/StandardMacros.StandardMacros"',GraphGuid=FA93B260444755CD702C21A123E9A987) - NodePosX=-560 - NodePosY=304 - NodeGuid=3F7D9F61E00A4E5CA14FD89320152E4C - CustomProperties Pin (PinId=07FE7CEDC21341B7B4E0D40D5CF1E57B,PinName="execute",PinType.PinCategory="exec",PinType.PinSubCategory="",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,) - CustomProperties Pin (PinId=836339BCD71F4D9FA0894B3447A5E8E1,PinName="Condition",PinType.PinCategory="bool",PinType.PinSubCategory="",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,) - CustomProperties Pin (PinId=6A7A1020DE2B4B33B9E82F975D24F144,PinName="LoopBody",Direction="EGPD_Output",PinType.PinCategory="exec",PinType.PinSubCategory="",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,) - CustomProperties Pin (PinId=B5207FF901074E8CB5152721DB154529,PinName="Completed",Direction="EGPD_Output",PinType.PinCategory="exec",PinType.PinSubCategory="",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: [14.5, 6], - color: Configuration.nodeColors.gray, - icon: SVGIcon.loop, - pins: 4, - pinNames: ["Condition", "Loop Body", "Completed"], - delegate: false, - development: false, - }, - { - name: "Is Valid", - value: String.raw` - Begin Object Class=/Script/BlueprintGraph.K2Node_MacroInstance Name="K2Node_MacroInstance_0" - MacroGraphReference=(MacroGraph=/Script/Engine.EdGraph'"/Engine/EditorBlueprintResources/StandardMacros.StandardMacros:IsValid"',GraphBlueprint=/Script/Engine.Blueprint'"/Engine/EditorBlueprintResources/StandardMacros.StandardMacros"',GraphGuid=64422BCD430703FF5CAEA8B79A32AA65) - NodePosX=-656 - NodePosY=304 - NodeGuid=4CE17DC3398743D3A0DF641B28BA82FE - CustomProperties Pin (PinId=8E6B4EA9EF3D418A9017555312A36415,PinName="exec",PinType.PinCategory="exec",PinType.PinSubCategory="",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,) - CustomProperties Pin (PinId=18F0CDCFCDFC49FC92EABDFD77FB2649,PinName="InputObject",PinType.PinCategory="object",PinType.PinSubCategory="",PinType.PinSubCategoryObject=/Script/CoreUObject.Class'"/Script/CoreUObject.Object"',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=B4E31AA12E8D448C8A19F523C10F8527,PinName="Is Valid",Direction="EGPD_Output",PinType.PinCategory="exec",PinType.PinSubCategory="",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,) - CustomProperties Pin (PinId=49E3CCDD6EBB46AE9B6FDFBC951E092C,PinName="Is Not Valid",Direction="EGPD_Output",PinType.PinCategory="exec",PinType.PinSubCategory="",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: [18, 9], - color: Configuration.nodeColors.gray, - icon: SVGIcon.questionMark, - pins: 4, - pinNames: ["Exec", "Input Object", "Is Valid", "Is Not Valid"], - delegate: false, - development: false, - }, - { - name: "Multi Gate", - value: String.raw` - Begin Object Class=/Script/BlueprintGraph.K2Node_MultiGate Name="K2Node_MultiGate_2" - NodePosX=-96 - NodePosY=-160 - NodeGuid=8D5767632F6C462B928E7F9A47E84AF3 - CustomProperties Pin (PinId=61334592A1B647A7888EDF804247FF70,PinName="execute",PinType.PinCategory="exec",PinType.PinSubCategory="",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,) - CustomProperties Pin (PinId=39200141C5D0415B825C28E3EC01A3F1,PinName="Out 0",Direction="EGPD_Output",PinType.PinCategory="exec",PinType.PinSubCategory="",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,) - CustomProperties Pin (PinId=EF36C23B68A44578B518B963E636D33C,PinName="Out 1",Direction="EGPD_Output",PinType.PinCategory="exec",PinType.PinSubCategory="",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,) - CustomProperties Pin (PinId=92FADDC1B07C45AC8BEF2FE42E13A638,PinName="Reset",PinType.PinCategory="exec",PinType.PinSubCategory="",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,) - CustomProperties Pin (PinId=363311761BC8401B8B26AD4B2D255749,PinName="IsRandom",PinType.PinCategory="bool",PinType.PinSubCategory="",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,) - CustomProperties Pin (PinId=6F24605AD128461BB5652884D40E61E3,PinName="Loop",PinType.PinCategory="bool",PinType.PinSubCategory="",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,) - CustomProperties Pin (PinId=E547C9E4961A43AD944E6877C2FF44D6,PinName="StartIndex",PinType.PinCategory="int",PinType.PinSubCategory="",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,DefaultValue="-1",AutogeneratedDefaultValue="-1",PersistentGuid=00000000000000000000000000000000,bHidden=False,bNotConnectable=False,bDefaultValueIsReadOnly=False,bDefaultValueIsIgnored=False,bAdvancedView=False,bOrphanedPin=False,) - End Object - `, - size: [13.5, 12.5], - color: Configuration.nodeColors.gray, - icon: SVGIcon.sequence, - pins: 7, - pinNames: ["Reset", "Is Random", "Loop", "Start Index", "Out 0", "Out 1"], - delegate: false, - development: false, - variadic: true, - }, - { - name: "Do Once", - value: String.raw` - Begin Object Class=/Script/BlueprintGraph.K2Node_MacroInstance Name="K2Node_MacroInstance_1" - MacroGraphReference=(MacroGraph=/Script/Engine.EdGraph'"/Engine/EditorBlueprintResources/StandardMacros.StandardMacros:DoOnce"',GraphBlueprint=/Script/Engine.Blueprint'"/Engine/EditorBlueprintResources/StandardMacros.StandardMacros"',GraphGuid=1281F54248A2ECB5B8B2C5B24AE6FDF4) - NodePosX=-416 - NodePosY=-112 - NodeGuid=A1831A1B85EF4E568E766FE3A3BCC5CD - CustomProperties Pin (PinId=5C24D82D7B084DFB841D17E5DF1CD8CF,PinName="execute",PinType.PinCategory="exec",PinType.PinSubCategory="",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,) - CustomProperties Pin (PinId=27242FC0B565448396C6A2DCD6BEDBD1,PinName="Reset",PinType.PinCategory="exec",PinType.PinSubCategory="",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,) - CustomProperties Pin (PinId=A8C0EB54974741248EA0B7B97FAC44DE,PinName="Start Closed",PinType.PinCategory="bool",PinType.PinSubCategory="",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,DefaultValue="true",PersistentGuid=00000000000000000000000000000000,bHidden=False,bNotConnectable=False,bDefaultValueIsReadOnly=False,bDefaultValueIsIgnored=False,bAdvancedView=False,bOrphanedPin=False,) - CustomProperties Pin (PinId=3DE1FC03BFCD4ACF9AC7B99B89CEF465,PinName="Completed",Direction="EGPD_Output",PinType.PinCategory="exec",PinType.PinSubCategory="",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,LinkedTo=(K2Node_MultiGate_2 92FADDC1B07C45AC8BEF2FE42E13A638,),PersistentGuid=00000000000000000000000000000000,bHidden=False,bNotConnectable=False,bDefaultValueIsReadOnly=False,bDefaultValueIsIgnored=False,bAdvancedView=False,bOrphanedPin=False,) - End Object - `, - size: [15, 8], - color: Configuration.nodeColors.gray, - icon: SVGIcon.doOnce, - pins: 4, - pinNames: ["Reset", "Start Closed", "Completed"], - delegate: false, - development: false, - }, - { - name: "Switch on EConstantQFFTSizeEnum", - value: String.raw` - Begin Object Class=/Script/BlueprintGraph.K2Node_SwitchEnum Name="K2Node_SwitchEnum_0" - Enum=/Script/CoreUObject.Enum'"/Script/AudioSynesthesia.EConstantQFFTSizeEnum"' - EnumEntries(0)="Min" - EnumEntries(1)="XXSmall" - EnumEntries(2)="XSmall" - EnumEntries(3)="Small" - EnumEntries(4)="Medium" - EnumEntries(5)="Large" - EnumEntries(6)="XLarge" - EnumEntries(7)="XXLarge" - EnumEntries(8)="Max" - NodePosX=16 - NodePosY=704 - AdvancedPinDisplay=Hidden - NodeGuid=9DCDC46C72FF47CE91F86A8045F0033E - CustomProperties Pin (PinId=1593030F27084BFD85F54D30CD32C5B8,PinName="execute",PinType.PinCategory="exec",PinType.PinSubCategory="",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,) - CustomProperties Pin (PinId=17161A0F216A4F2FB64374200F51E83D,PinName="Selection",PinType.PinCategory="byte",PinType.PinSubCategory="",PinType.PinSubCategoryObject=/Script/CoreUObject.Enum'"/Script/AudioSynesthesia.EConstantQFFTSizeEnum"',PinType.PinSubCategoryMemberReference=(),PinType.PinValueType=(),PinType.ContainerType=None,PinType.bIsReference=False,PinType.bIsConst=False,PinType.bIsWeakPointer=False,PinType.bIsUObjectWrapper=False,PinType.bSerializeAsSinglePrecisionFloat=False,DefaultValue="Min",PersistentGuid=00000000000000000000000000000000,bHidden=False,bNotConnectable=False,bDefaultValueIsReadOnly=False,bDefaultValueIsIgnored=False,bAdvancedView=False,bOrphanedPin=False,) - CustomProperties Pin (PinId=B14C4298DE3249649D40116D72461E25,PinName="NotEqual_ByteByte",PinType.PinCategory="object",PinType.PinSubCategory="",PinType.PinSubCategoryObject=/Script/CoreUObject.Class'"/Script/Engine.KismetMathLibrary"',PinType.PinSubCategoryMemberReference=(),PinType.PinValueType=(),PinType.ContainerType=None,PinType.bIsReference=False,PinType.bIsConst=False,PinType.bIsWeakPointer=False,PinType.bIsUObjectWrapper=False,PinType.bSerializeAsSinglePrecisionFloat=False,DefaultObject="/Script/Engine.Default__KismetMathLibrary",PersistentGuid=00000000000000000000000000000000,bHidden=True,bNotConnectable=True,bDefaultValueIsReadOnly=True,bDefaultValueIsIgnored=False,bAdvancedView=False,bOrphanedPin=False,) - CustomProperties Pin (PinId=3B40821CA7C749BFAA558A8CF4402B55,PinName="Min",PinFriendlyName=NSLOCTEXT("UObjectDisplayNames", "EConstantQFFTSizeEnum.Min", "Min"),Direction="EGPD_Output",PinType.PinCategory="exec",PinType.PinSubCategory="",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,) - CustomProperties Pin (PinId=B95FFACBCBD040B2AAB48011BC143625,PinName="XXSmall",PinFriendlyName=NSLOCTEXT("UObjectDisplayNames", "EConstantQFFTSizeEnum.XXSmall", "XXSmall"),Direction="EGPD_Output",PinType.PinCategory="exec",PinType.PinSubCategory="",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,) - CustomProperties Pin (PinId=340171B1D59F422E96B45F9B1E11892A,PinName="XSmall",PinFriendlyName=NSLOCTEXT("UObjectDisplayNames", "EConstantQFFTSizeEnum.XSmall", "XSmall"),Direction="EGPD_Output",PinType.PinCategory="exec",PinType.PinSubCategory="",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,) - CustomProperties Pin (PinId=BD0B6BF19D6C4BA487498C4A768FF500,PinName="Small",PinFriendlyName=NSLOCTEXT("UObjectDisplayNames", "EConstantQFFTSizeEnum.Small", "Small"),Direction="EGPD_Output",PinType.PinCategory="exec",PinType.PinSubCategory="",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=True,bOrphanedPin=False,) - CustomProperties Pin (PinId=58E2F332700044E88E8A591FFBE5DEDB,PinName="Medium",PinFriendlyName=NSLOCTEXT("UObjectDisplayNames", "EConstantQFFTSizeEnum.Medium", "Medium"),Direction="EGPD_Output",PinType.PinCategory="exec",PinType.PinSubCategory="",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=True,bOrphanedPin=False,) - CustomProperties Pin (PinId=94B36AB248454AE2884C39DDBBBE55E2,PinName="Large",PinFriendlyName=NSLOCTEXT("UObjectDisplayNames", "EConstantQFFTSizeEnum.Large", "Large"),Direction="EGPD_Output",PinType.PinCategory="exec",PinType.PinSubCategory="",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=True,bOrphanedPin=False,) - CustomProperties Pin (PinId=9F6110F3DE5D42B69DAEDD2BA1F83908,PinName="XLarge",PinFriendlyName=NSLOCTEXT("UObjectDisplayNames", "EConstantQFFTSizeEnum.XLarge", "XLarge"),Direction="EGPD_Output",PinType.PinCategory="exec",PinType.PinSubCategory="",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=True,bOrphanedPin=False,) - CustomProperties Pin (PinId=42A13039E2144897A11DC3A5B96CA8C4,PinName="XXLarge",PinFriendlyName=NSLOCTEXT("UObjectDisplayNames", "EConstantQFFTSizeEnum.XXLarge", "XXLarge"),Direction="EGPD_Output",PinType.PinCategory="exec",PinType.PinSubCategory="",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=True,bOrphanedPin=False,) - CustomProperties Pin (PinId=A064703325A4454EA72392A6C725CCC4,PinName="Max",PinFriendlyName=NSLOCTEXT("UObjectDisplayNames", "EConstantQFFTSizeEnum.Max", "Max"),Direction="EGPD_Output",PinType.PinCategory="exec",PinType.PinSubCategory="",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=True,bOrphanedPin=False,) - End Object - `, - size: [21, 9], - color: Configuration.nodeColors.lime, - icon: SVGIcon.switch, - pins: 11, - pinNames: ["Selection", "Min", "XXSmall", "XSmall", "Small", "Medium", "Large", "XLarge", "XXLarge", "Max"], - delegate: false, - development: false, - }, - { - name: "Flip Flop", - value: String.raw` - Begin Object Class=/Script/BlueprintGraph.K2Node_MacroInstance Name="K2Node_MacroInstance_5" - MacroGraphReference=(MacroGraph=/Script/Engine.EdGraph'"/Engine/EditorBlueprintResources/StandardMacros.StandardMacros:FlipFlop"',GraphBlueprint=/Script/Engine.Blueprint'"/Engine/EditorBlueprintResources/StandardMacros.StandardMacros"',GraphGuid=BFFFAAE4434E166F549665AD1AA89B60) - NodePosX=-48 - NodePosY=48 - NodeGuid=267CBD7BDA9243E0916C518E03EA7F8E - CustomProperties Pin (PinId=CF77C07A39514336BF1F33B71FA6F31A,PinType.PinCategory="exec",PinType.PinSubCategory="",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,) - CustomProperties Pin (PinId=ABD456E3A9E541FCA849DBC7460338A0,PinName="A",Direction="EGPD_Output",PinType.PinCategory="exec",PinType.PinSubCategory="",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,) - CustomProperties Pin (PinId=1E4BC9A55AA247CA8B9B2BA0F4159D07,PinName="B",Direction="EGPD_Output",PinType.PinCategory="exec",PinType.PinSubCategory="",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,) - CustomProperties Pin (PinId=0A09A61366D142C8A0564EC3C173DB79,PinName="IsA",Direction="EGPD_Output",PinType.PinCategory="bool",PinType.PinSubCategory="",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: [7.5, 8], - color: Configuration.nodeColors.gray, - icon: SVGIcon.flipflop, - pins: 4, - pinNames: ["A", "B", "Is A"], - delegate: false, - development: false, - }, - { - name: "Switch on Int", - value: String.raw` - Begin Object Class=/Script/BlueprintGraph.K2Node_SwitchInteger Name="K2Node_SwitchInteger_0" ExportPath=/Script/BlueprintGraph.K2Node_SwitchInteger'"/Temp/Untitled_1.Untitled_1:PersistentLevel.Untitled.EventGraph.K2Node_SwitchInteger_0"' - NodePosX=-976 - NodePosY=-208 - NodeGuid=7D1D44AEC61748948595579E4933DE01 - CustomProperties Pin (PinId=B7119DBD876E4E398D5463E9E8D25EFE,PinName="Default",Direction="EGPD_Output",PinType.PinCategory="exec",PinType.PinSubCategory="",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,) - CustomProperties Pin (PinId=7EB587CEB10C4EBEBFCF3F6611CF9C01,PinName="execute",PinType.PinCategory="exec",PinType.PinSubCategory="",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,) - CustomProperties Pin (PinId=7D90CED7751B46F7ADD3F9D15676441A,PinName="Selection",PinType.PinCategory="int",PinType.PinSubCategory="",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,DefaultValue="0",AutogeneratedDefaultValue="0",PersistentGuid=00000000000000000000000000000000,bHidden=False,bNotConnectable=False,bDefaultValueIsReadOnly=False,bDefaultValueIsIgnored=False,bAdvancedView=False,bOrphanedPin=False,) - CustomProperties Pin (PinId=02817A0069B94F3A873C263E46A63B3E,PinName="NotEqual_IntInt",PinType.PinCategory="object",PinType.PinSubCategory="",PinType.PinSubCategoryObject=/Script/CoreUObject.Class'"/Script/Engine.KismetMathLibrary"',PinType.PinSubCategoryMemberReference=(),PinType.PinValueType=(),PinType.ContainerType=None,PinType.bIsReference=False,PinType.bIsConst=False,PinType.bIsWeakPointer=False,PinType.bIsUObjectWrapper=False,PinType.bSerializeAsSinglePrecisionFloat=False,DefaultObject="/Script/Engine.Default__KismetMathLibrary",PersistentGuid=00000000000000000000000000000000,bHidden=True,bNotConnectable=True,bDefaultValueIsReadOnly=True,bDefaultValueIsIgnored=False,bAdvancedView=False,bOrphanedPin=False,) - CustomProperties Pin (PinId=1C4A112E24004AC3A1960F3BF59E812B,PinName="0",Direction="EGPD_Output",PinType.PinCategory="exec",PinType.PinSubCategory="",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,) - CustomProperties Pin (PinId=9E6A8E01BC714310841B8574240BA501,PinName="1",Direction="EGPD_Output",PinType.PinCategory="exec",PinType.PinSubCategory="",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,) - CustomProperties Pin (PinId=978FFD75663A489895DC53A8B326CB5F,PinName="2",Direction="EGPD_Output",PinType.PinCategory="exec",PinType.PinSubCategory="",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,) - CustomProperties Pin (PinId=349E7E6CDB62428EA386712CAC7EF798,PinName="3",Direction="EGPD_Output",PinType.PinCategory="exec",PinType.PinSubCategory="",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,) - CustomProperties Pin (PinId=DEF18A0DAEF34E1FAC4FA0A5778C1A88,PinName="4",Direction="EGPD_Output",PinType.PinCategory="exec",PinType.PinSubCategory="",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,) - CustomProperties Pin (PinId=9A642941C48546DDB9A882F3E394508C,PinName="5",Direction="EGPD_Output",PinType.PinCategory="exec",PinType.PinSubCategory="",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,) - CustomProperties Pin (PinId=DC199B5D33804EAD80796CD80EFD7433,PinName="6",Direction="EGPD_Output",PinType.PinCategory="exec",PinType.PinSubCategory="",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,) - CustomProperties Pin (PinId=AB4824D6FBFD40658A3C9140FE151DF3,PinName="7",Direction="EGPD_Output",PinType.PinCategory="exec",PinType.PinSubCategory="",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,) - CustomProperties Pin (PinId=4FECE418AD1F407C9C2F9F0C13DCDB0D,PinName="8",Direction="EGPD_Output",PinType.PinCategory="exec",PinType.PinSubCategory="",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,) - CustomProperties Pin (PinId=CF45C88AC0BD478991162D3382B5023D,PinName="9",Direction="EGPD_Output",PinType.PinCategory="exec",PinType.PinSubCategory="",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,) - CustomProperties Pin (PinId=05C0A6F6CC7D45BDAA4BD32A0D57C4A1,PinName="10",Direction="EGPD_Output",PinType.PinCategory="exec",PinType.PinSubCategory="",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,) - CustomProperties Pin (PinId=04ED677A3E3142C7BB5BC3E85E7623EA,PinName="11",Direction="EGPD_Output",PinType.PinCategory="exec",PinType.PinSubCategory="",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,) - CustomProperties Pin (PinId=160F5EFF0F354543A639C2C59B7487E3,PinName="12",Direction="EGPD_Output",PinType.PinCategory="exec",PinType.PinSubCategory="",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,) - CustomProperties Pin (PinId=BC1F119C3E33404787B7562401576DDA,PinName="13",Direction="EGPD_Output",PinType.PinCategory="exec",PinType.PinSubCategory="",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,) - CustomProperties Pin (PinId=64A00EF9C0584A7FA3F9EE804DECCD26,PinName="14",Direction="EGPD_Output",PinType.PinCategory="exec",PinType.PinSubCategory="",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,) - CustomProperties Pin (PinId=AFEB73E3A747474EB2034D7D59FC02D7,PinName="15",Direction="EGPD_Output",PinType.PinCategory="exec",PinType.PinSubCategory="",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,) - CustomProperties Pin (PinId=E860933499D24ADF8FF9A1ECA2E4E94F,PinName="16",Direction="EGPD_Output",PinType.PinCategory="exec",PinType.PinSubCategory="",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,) - CustomProperties Pin (PinId=7A918DA2394740A28C1250C1A7A061C9,PinName="17",Direction="EGPD_Output",PinType.PinCategory="exec",PinType.PinSubCategory="",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: [13, 42], - color: Configuration.nodeColors.lime, - icon: SVGIcon.switch, - pins: 21, - pinNames: [ - "Selection", - "0", - "1", - "2", - "3", - "4", - "5", - "6", - "7", - "8", - "9", - "10", - "11", - "12", - "13", - "14", - "15", - "16", - "17", - "Default" - ], - delegate: false, - development: false, - variadic: true, - }, - { - name: "Switch on String", - value: String.raw` - Begin Object Class=/Script/BlueprintGraph.K2Node_SwitchString Name="K2Node_SwitchString_0" - PinNames(0)="Case_0" - PinNames(1)="Case_1" - PinNames(2)="Case_2" - NodePosX=-2240 - NodePosY=-384 - NodeGuid=7375BC78BF274EFFA76D29F8C2ED121E - CustomProperties Pin (PinId=99643F5A360E4D88AAFCD821E256574F,PinName="Default",Direction="EGPD_Output",PinType.PinCategory="exec",PinType.PinSubCategory="",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,) - CustomProperties Pin (PinId=ACA3449DD6494C67BD30E4FAEFF01C2F,PinName="execute",PinType.PinCategory="exec",PinType.PinSubCategory="",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,) - CustomProperties Pin (PinId=A210E336701C487F8CB425FA599DC5DE,PinName="Selection",PinType.PinCategory="string",PinType.PinSubCategory="",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,) - CustomProperties Pin (PinId=15F56FC350CD47D7A54E4E077818C933,PinName="NotEqual_StriStri",PinType.PinCategory="object",PinType.PinSubCategory="",PinType.PinSubCategoryObject=/Script/CoreUObject.Class'"/Script/Engine.KismetStringLibrary"',PinType.PinSubCategoryMemberReference=(),PinType.PinValueType=(),PinType.ContainerType=None,PinType.bIsReference=False,PinType.bIsConst=False,PinType.bIsWeakPointer=False,PinType.bIsUObjectWrapper=False,PinType.bSerializeAsSinglePrecisionFloat=False,DefaultObject="/Script/Engine.Default__KismetStringLibrary",PersistentGuid=00000000000000000000000000000000,bHidden=True,bNotConnectable=True,bDefaultValueIsReadOnly=True,bDefaultValueIsIgnored=False,bAdvancedView=False,bOrphanedPin=False,) - CustomProperties Pin (PinId=D8C63349C83E4236A207A7DA51002328,PinName="Case_0",Direction="EGPD_Output",PinType.PinCategory="exec",PinType.PinSubCategory="",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,) - CustomProperties Pin (PinId=5DFD70BF7F0C476FA5159979821FF45F,PinName="Case_1",Direction="EGPD_Output",PinType.PinCategory="exec",PinType.PinSubCategory="",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,) - CustomProperties Pin (PinId=C902D54233354133B40C1CC8696C339F,PinName="Case_2",Direction="EGPD_Output",PinType.PinCategory="exec",PinType.PinSubCategory="",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: [13, 12], - color: Configuration.nodeColors.lime, - icon: SVGIcon.switch, - pins: 6, - pinNames: ["Selection", "Case 0", "Case 1", "Case 2", "Default"], - delegate: false, - development: false, - variadic: true, - }, - { - name: "Switch on Gameplay Tag", - value: String.raw` - Begin Object Class=/Script/GameplayTagsEditor.GameplayTagsK2Node_SwitchGameplayTag Name="GameplayTagsK2Node_SwitchGameplayTag_0" - PinTags(14)=() - PinNames(0)="Case_0" - PinNames(1)="Case_1" - PinNames(2)="Case_2" - PinNames(3)="Case_3" - PinNames(4)="Case_4" - PinNames(5)="Case_5" - PinNames(6)="Case_6" - PinNames(7)="Case_7" - PinNames(8)="Case_8" - PinNames(9)="Case_9" - PinNames(10)="Case_10" - PinNames(11)="Case_11" - PinNames(12)="Case_12" - PinNames(13)="Case_13" - PinNames(14)="Case_14" - NodePosX=-512 - NodeGuid=ED658BB7B62F438C9C4C8241FE7333E0 - CustomProperties Pin (PinId=6272078D163F42A0972D3D5DE4267F93,PinName="Default",Direction="EGPD_Output",PinType.PinCategory="exec",PinType.PinSubCategory="",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,) - CustomProperties Pin (PinId=3C1FB3CA71024EC183146491615C75D6,PinName="execute",PinType.PinCategory="exec",PinType.PinSubCategory="",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,) - CustomProperties Pin (PinId=6A936EB599F144DEB209E7062D494522,PinName="Selection",PinType.PinCategory="struct",PinType.PinSubCategory="",PinType.PinSubCategoryObject=/Script/CoreUObject.ScriptStruct'"/Script/GameplayTags.GameplayTag"',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=5DCD6681C7D94F0FBD7FC06ECD41B733,PinName="NotEqual_TagTag",PinType.PinCategory="object",PinType.PinSubCategory="",PinType.PinSubCategoryObject=/Script/CoreUObject.Class'"/Script/GameplayTags.BlueprintGameplayTagLibrary"',PinType.PinSubCategoryMemberReference=(),PinType.PinValueType=(),PinType.ContainerType=None,PinType.bIsReference=False,PinType.bIsConst=False,PinType.bIsWeakPointer=False,PinType.bIsUObjectWrapper=False,PinType.bSerializeAsSinglePrecisionFloat=False,DefaultObject="/Script/GameplayTags.Default__BlueprintGameplayTagLibrary",PersistentGuid=00000000000000000000000000000000,bHidden=True,bNotConnectable=True,bDefaultValueIsReadOnly=True,bDefaultValueIsIgnored=False,bAdvancedView=False,bOrphanedPin=False,) - CustomProperties Pin (PinId=761B2B809F974008BDC8F9D5AAC1DA2A,PinName="Case_0",Direction="EGPD_Output",PinType.PinCategory="exec",PinType.PinSubCategory="",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,) - CustomProperties Pin (PinId=B5E8DC43F8504407B038C8FC2A1E98FA,PinName="Case_1",Direction="EGPD_Output",PinType.PinCategory="exec",PinType.PinSubCategory="",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,) - CustomProperties Pin (PinId=AD14BC4F66DC488584D4EE9CBF2EB80F,PinName="Case_2",Direction="EGPD_Output",PinType.PinCategory="exec",PinType.PinSubCategory="",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,) - CustomProperties Pin (PinId=1612FF4C75E2470D96B7496492ECB40D,PinName="Case_3",Direction="EGPD_Output",PinType.PinCategory="exec",PinType.PinSubCategory="",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,) - CustomProperties Pin (PinId=71DB09F379DA4F6AAC316170276217EA,PinName="Case_4",Direction="EGPD_Output",PinType.PinCategory="exec",PinType.PinSubCategory="",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,) - CustomProperties Pin (PinId=7FB99DAC1E1A45DEA7543A0CCE7ED8CC,PinName="Case_5",Direction="EGPD_Output",PinType.PinCategory="exec",PinType.PinSubCategory="",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,) - CustomProperties Pin (PinId=923B58C73D384BACAC49664AD1CE9F16,PinName="Case_6",Direction="EGPD_Output",PinType.PinCategory="exec",PinType.PinSubCategory="",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,) - CustomProperties Pin (PinId=B80CF21281234D3E9F8CF90C6EECD6F5,PinName="Case_7",Direction="EGPD_Output",PinType.PinCategory="exec",PinType.PinSubCategory="",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,) - CustomProperties Pin (PinId=110CC7DBBB3B4840B00335AD1C3FB531,PinName="Case_8",Direction="EGPD_Output",PinType.PinCategory="exec",PinType.PinSubCategory="",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,) - CustomProperties Pin (PinId=E5166419AD504A99A59651413DB1EBAE,PinName="Case_9",Direction="EGPD_Output",PinType.PinCategory="exec",PinType.PinSubCategory="",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,) - CustomProperties Pin (PinId=5CB0EC686EB841E08C64D261EBE2CDFE,PinName="Case_10",Direction="EGPD_Output",PinType.PinCategory="exec",PinType.PinSubCategory="",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,) - CustomProperties Pin (PinId=144D73A3F8FD4C8092F862D1863A5132,PinName="Case_11",Direction="EGPD_Output",PinType.PinCategory="exec",PinType.PinSubCategory="",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,) - CustomProperties Pin (PinId=2515EACDE70541A191CA8F45E4346A0C,PinName="Case_12",Direction="EGPD_Output",PinType.PinCategory="exec",PinType.PinSubCategory="",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,) - CustomProperties Pin (PinId=6F1F3687EA7F43DA8AC166E35B9AD3F3,PinName="Case_13",Direction="EGPD_Output",PinType.PinCategory="exec",PinType.PinSubCategory="",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,) - CustomProperties Pin (PinId=62464A0DADE0407382DA61A0593EBE12,PinName="Case_14",Direction="EGPD_Output",PinType.PinCategory="exec",PinType.PinSubCategory="",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: [15, 36], - color: Configuration.nodeColors.lime, - icon: SVGIcon.switch, - pins: 18, - pinNames: [ - "Selection", - "Case 0", - "Case 1", - "Case 2", - "Case 3", - "Case 4", - "Case 5", - "Case 6", - "Case 7", - "Case 8", - "Case 9", - "Case 10", - "Case 11", - "Case 12", - "Case 13", - "Case 14", - "Default" - ], - delegate: false, - development: false, - }, - { - name: "Switch on Name", - value: String.raw` - Begin Object Class=/Script/BlueprintGraph.K2Node_SwitchName Name="K2Node_SwitchName_0" - PinNames(0)="Case_0" - NodePosX=-1872 - NodePosY=-192 - NodeGuid=0F6D37C81EA34BDBBB5BCF1B50640C58 - CustomProperties Pin (PinId=364302AC219347A49E8686050F7BEA5A,PinName="Default",Direction="EGPD_Output",PinType.PinCategory="exec",PinType.PinSubCategory="",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,) - CustomProperties Pin (PinId=8831972A02E84D90B4F1A9E21727B68F,PinName="execute",PinType.PinCategory="exec",PinType.PinSubCategory="",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,) - CustomProperties Pin (PinId=5306210FE1664181ADA50665ACB9EFCF,PinName="Selection",PinType.PinCategory="name",PinType.PinSubCategory="",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,DefaultValue="None",AutogeneratedDefaultValue="None",PersistentGuid=00000000000000000000000000000000,bHidden=False,bNotConnectable=False,bDefaultValueIsReadOnly=False,bDefaultValueIsIgnored=False,bAdvancedView=False,bOrphanedPin=False,) - CustomProperties Pin (PinId=7449D10CD02444BFAC164F750710688E,PinName="NotEqual_NameName",PinType.PinCategory="object",PinType.PinSubCategory="",PinType.PinSubCategoryObject=/Script/CoreUObject.Class'"/Script/Engine.KismetMathLibrary"',PinType.PinSubCategoryMemberReference=(),PinType.PinValueType=(),PinType.ContainerType=None,PinType.bIsReference=False,PinType.bIsConst=False,PinType.bIsWeakPointer=False,PinType.bIsUObjectWrapper=False,PinType.bSerializeAsSinglePrecisionFloat=False,DefaultObject="/Script/Engine.Default__KismetMathLibrary",PersistentGuid=00000000000000000000000000000000,bHidden=True,bNotConnectable=True,bDefaultValueIsReadOnly=True,bDefaultValueIsIgnored=False,bAdvancedView=False,bOrphanedPin=False,) - CustomProperties Pin (PinId=FA2ED9343F4648D7A2EC9E8DB23C87BE,PinName="Case_0",Direction="EGPD_Output",PinType.PinCategory="exec",PinType.PinSubCategory="",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: [14.5, 8.5], - color: Configuration.nodeColors.lime, - icon: SVGIcon.switch, - pins: 4, - pinNames: ["Selection", "Case 0", "Default"], - delegate: false, - development: false, - variadic: true, - }, - { - name: "Switch on ENiagaraOrientationAxis", - value: String.raw` - Begin Object Class=/Script/BlueprintGraph.K2Node_SwitchEnum Name="K2Node_SwitchEnum_3" - Enum=/Script/Engine.UserDefinedEnum'"/Niagara/Enums/ENiagaraOrientationAxis.ENiagaraOrientationAxis"' - EnumEntries(0)="NewEnumerator0" - EnumEntries(1)="NewEnumerator1" - EnumEntries(2)="NewEnumerator2" - NodePosX=128 - NodePosY=272 - NodeGuid=27ECE312F8464337AAFD3E4710FD0108 - CustomProperties Pin (PinId=D9D55819354041FCA1749D111E98462F,PinName="execute",PinType.PinCategory="exec",PinType.PinSubCategory="",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,) - CustomProperties Pin (PinId=A34A643489CB4A9A8AB8EF406E66E586,PinName="Selection",PinType.PinCategory="byte",PinType.PinSubCategory="",PinType.PinSubCategoryObject=/Script/Engine.UserDefinedEnum'"/Niagara/Enums/ENiagaraOrientationAxis.ENiagaraOrientationAxis"',PinType.PinSubCategoryMemberReference=(),PinType.PinValueType=(),PinType.ContainerType=None,PinType.bIsReference=False,PinType.bIsConst=False,PinType.bIsWeakPointer=False,PinType.bIsUObjectWrapper=False,PinType.bSerializeAsSinglePrecisionFloat=False,DefaultValue="NewEnumerator0",PersistentGuid=00000000000000000000000000000000,bHidden=False,bNotConnectable=False,bDefaultValueIsReadOnly=False,bDefaultValueIsIgnored=False,bAdvancedView=False,bOrphanedPin=False,) - CustomProperties Pin (PinId=E28F973F53654172AA58FEB665826457,PinName="NotEqual_ByteByte",PinType.PinCategory="object",PinType.PinSubCategory="",PinType.PinSubCategoryObject=/Script/CoreUObject.Class'"/Script/Engine.KismetMathLibrary"',PinType.PinSubCategoryMemberReference=(),PinType.PinValueType=(),PinType.ContainerType=None,PinType.bIsReference=False,PinType.bIsConst=False,PinType.bIsWeakPointer=False,PinType.bIsUObjectWrapper=False,PinType.bSerializeAsSinglePrecisionFloat=False,DefaultObject="/Script/Engine.Default__KismetMathLibrary",PersistentGuid=00000000000000000000000000000000,bHidden=True,bNotConnectable=True,bDefaultValueIsReadOnly=True,bDefaultValueIsIgnored=False,bAdvancedView=False,bOrphanedPin=False,) - CustomProperties Pin (PinId=02E2659FDD834A9483316C112630A17C,PinName="NewEnumerator0",PinFriendlyName=NSLOCTEXT("[9C9868C74FCF3E7AFDEB778F8C9EA988]", "1CE439C14E8741B2E94E4896C5BB29BB", "X Axis"),Direction="EGPD_Output",PinType.PinCategory="exec",PinType.PinSubCategory="",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,) - CustomProperties Pin (PinId=36E317D2BD3C48A7BED78FFE25AD1451,PinName="NewEnumerator1",PinFriendlyName=NSLOCTEXT("[9C9868C74FCF3E7AFDEB778F8C9EA988]", "4807FD384418AD133AF56D9DD063A9D8", "Y Axis"),Direction="EGPD_Output",PinType.PinCategory="exec",PinType.PinSubCategory="",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,) - CustomProperties Pin (PinId=2020E66C887C446DB4B69B0CA9652A6A,PinName="NewEnumerator2",PinFriendlyName=NSLOCTEXT("[9C9868C74FCF3E7AFDEB778F8C9EA988]", "0D8EE448409B4A8CD1F47FAB0AC122CF", "Z Axis"),Direction="EGPD_Output",PinType.PinCategory="exec",PinType.PinSubCategory="",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: [20, 8], - color: Configuration.nodeColors.lime, - icon: SVGIcon.switch, - pins: 5, - pinNames: ["Selection", "X Axis", "Y Axis", "Z Axis"], - delegate: false, - development: false, - }, - { - name: "Switch on FTransformChannelEnum", - value: String.raw` - Begin Object Class=/Script/BlueprintGraph.K2Node_SwitchEnum Name="K2Node_SwitchEnum_4" - Enum=/Script/CoreUObject.Enum'"/Script/MovieSceneTools.FTransformChannelEnum"' - EnumEntries(0)="TranslateX" - EnumEntries(1)="TranslateY" - EnumEntries(2)="TranslateZ" - EnumEntries(3)="RotateX" - EnumEntries(4)="RotateY" - EnumEntries(5)="RotateZ" - EnumEntries(6)="ScaleX" - EnumEntries(7)="ScaleY" - EnumEntries(8)="ScaleZ" - NodePosX=-48 - NodePosY=448 - AdvancedPinDisplay=Shown - NodeGuid=27936712DE844DD68577CF8D703E315B - CustomProperties Pin (PinId=AF3B9C33C7E84817A720F393F7307A46,PinName="execute",PinType.PinCategory="exec",PinType.PinSubCategory="",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,) - CustomProperties Pin (PinId=045AC753EEF74356BE997C19BB00B82B,PinName="Selection",PinType.PinCategory="byte",PinType.PinSubCategory="",PinType.PinSubCategoryObject=/Script/CoreUObject.Enum'"/Script/MovieSceneTools.FTransformChannelEnum"',PinType.PinSubCategoryMemberReference=(),PinType.PinValueType=(),PinType.ContainerType=None,PinType.bIsReference=False,PinType.bIsConst=False,PinType.bIsWeakPointer=False,PinType.bIsUObjectWrapper=False,PinType.bSerializeAsSinglePrecisionFloat=False,DefaultValue="ScaleX",PersistentGuid=00000000000000000000000000000000,bHidden=False,bNotConnectable=False,bDefaultValueIsReadOnly=False,bDefaultValueIsIgnored=False,bAdvancedView=False,bOrphanedPin=False,) - CustomProperties Pin (PinId=759822D08F654AF7ACDFA6F0590404B8,PinName="NotEqual_ByteByte",PinType.PinCategory="object",PinType.PinSubCategory="",PinType.PinSubCategoryObject=/Script/CoreUObject.Class'"/Script/Engine.KismetMathLibrary"',PinType.PinSubCategoryMemberReference=(),PinType.PinValueType=(),PinType.ContainerType=None,PinType.bIsReference=False,PinType.bIsConst=False,PinType.bIsWeakPointer=False,PinType.bIsUObjectWrapper=False,PinType.bSerializeAsSinglePrecisionFloat=False,DefaultObject="/Script/Engine.Default__KismetMathLibrary",PersistentGuid=00000000000000000000000000000000,bHidden=True,bNotConnectable=True,bDefaultValueIsReadOnly=True,bDefaultValueIsIgnored=False,bAdvancedView=False,bOrphanedPin=False,) - CustomProperties Pin (PinId=D91E0E2866954BC887234AA8883DCB83,PinName="TranslateX",PinFriendlyName=NSLOCTEXT("UObjectDisplayNames", "FTransformChannelEnum.TranslateX", "Translate X"),Direction="EGPD_Output",PinType.PinCategory="exec",PinType.PinSubCategory="",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,) - CustomProperties Pin (PinId=697FB3903E294ADF821BFBD574CB2976,PinName="TranslateY",PinFriendlyName=NSLOCTEXT("UObjectDisplayNames", "FTransformChannelEnum.TranslateY", "Translate Y"),Direction="EGPD_Output",PinType.PinCategory="exec",PinType.PinSubCategory="",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,) - CustomProperties Pin (PinId=F76AB334C5E24919815C2AAAEACCD14B,PinName="TranslateZ",PinFriendlyName=NSLOCTEXT("UObjectDisplayNames", "FTransformChannelEnum.TranslateZ", "Translate Z"),Direction="EGPD_Output",PinType.PinCategory="exec",PinType.PinSubCategory="",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,) - CustomProperties Pin (PinId=1C6C49D0E8A94F2F99A1DF9AF1574D16,PinName="RotateX",PinFriendlyName=NSLOCTEXT("UObjectDisplayNames", "FTransformChannelEnum.RotateX", "Rotate X"),Direction="EGPD_Output",PinType.PinCategory="exec",PinType.PinSubCategory="",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=True,bOrphanedPin=False,) - CustomProperties Pin (PinId=0D35BB4401504A20B45D152BCA0B9BD0,PinName="RotateY",PinFriendlyName=NSLOCTEXT("UObjectDisplayNames", "FTransformChannelEnum.RotateY", "Rotate Y"),Direction="EGPD_Output",PinType.PinCategory="exec",PinType.PinSubCategory="",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=True,bOrphanedPin=False,) - CustomProperties Pin (PinId=2024CA11E8E840F1A1D7C087145476AC,PinName="RotateZ",PinFriendlyName=NSLOCTEXT("UObjectDisplayNames", "FTransformChannelEnum.RotateZ", "Rotate Z"),Direction="EGPD_Output",PinType.PinCategory="exec",PinType.PinSubCategory="",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=True,bOrphanedPin=False,) - CustomProperties Pin (PinId=E9F47D5F991E43318D29DD40089114D4,PinName="ScaleX",PinFriendlyName=NSLOCTEXT("UObjectDisplayNames", "FTransformChannelEnum.ScaleX", "Scale X"),Direction="EGPD_Output",PinType.PinCategory="exec",PinType.PinSubCategory="",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=True,bOrphanedPin=False,) - CustomProperties Pin (PinId=D41C6BF492AD4AB09AE11DFEF442E256,PinName="ScaleY",PinFriendlyName=NSLOCTEXT("UObjectDisplayNames", "FTransformChannelEnum.ScaleY", "Scale Y"),Direction="EGPD_Output",PinType.PinCategory="exec",PinType.PinSubCategory="",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=True,bOrphanedPin=False,) - CustomProperties Pin (PinId=A7460C8034394A20863B4AB8A38249D9,PinName="ScaleZ",PinFriendlyName=NSLOCTEXT("UObjectDisplayNames", "FTransformChannelEnum.ScaleZ", "Scale Z"),Direction="EGPD_Output",PinType.PinCategory="exec",PinType.PinSubCategory="",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=True,bOrphanedPin=False,) - End Object - `, - size: [22, 21], - color: Configuration.nodeColors.lime, - icon: SVGIcon.switch, - pins: 11, - pinNames: [ - "Selection", - "Translate X", - "Translate Y", - "Translate Z", - "Rotate X", - "Rotate Y", - "Rotate Z", - "Scale X", - "Scale Y", - "Scale Z", - ], - delegate: false, - development: false, - }, -] - -generateNodeTests(tests) diff --git a/cypress/e2e/inputNodes.cy.js b/cypress/e2e/inputNodes.cy.js deleted file mode 100644 index 1bad958..0000000 --- a/cypress/e2e/inputNodes.cy.js +++ /dev/null @@ -1,889 +0,0 @@ -/// - -import generateNodeTests from "../fixtures/testUtilities.js" -import Configuration from "../../js/Configuration.js" -import SVGIcon from "../../js/SVGIcon.js" - -const tests = [ - { - name: "A", - value: String.raw` - Begin Object Class=/Script/BlueprintGraph.K2Node_InputKey Name="K2Node_InputKey_21" - InputKey=A - NodePosX=-304 - NodePosY=96 - NodeGuid=6259F5F555434903AC5C3C666F979944 - CustomProperties Pin (PinId=CB98C983F3F1464DB10FB786E52E0722,PinName="Pressed",Direction="EGPD_Output",PinType.PinCategory="exec",PinType.PinSubCategory="",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,) - CustomProperties Pin (PinId=D306257F70BF42C19140148BE5998EA3,PinName="Released",Direction="EGPD_Output",PinType.PinCategory="exec",PinType.PinSubCategory="",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,) - CustomProperties Pin (PinId=2977AECB23E44F76A1F92E4DCE1EEE8C,PinName="Key",Direction="EGPD_Output",PinType.PinCategory="struct",PinType.PinSubCategory="",PinType.PinSubCategoryObject=/Script/CoreUObject.ScriptStruct'"/Script/InputCore.Key"',PinType.PinSubCategoryMemberReference=(),PinType.PinValueType=(),PinType.ContainerType=None,PinType.bIsReference=False,PinType.bIsConst=False,PinType.bIsWeakPointer=False,PinType.bIsUObjectWrapper=False,PinType.bSerializeAsSinglePrecisionFloat=False,DefaultValue="None",AutogeneratedDefaultValue="None",PersistentGuid=00000000000000000000000000000000,bHidden=False,bNotConnectable=False,bDefaultValueIsReadOnly=False,bDefaultValueIsIgnored=False,bAdvancedView=False,bOrphanedPin=False,) - End Object - `, - size: [6, 8], - color: Configuration.nodeColors.red, - icon: SVGIcon.keyboard, - pins: 3, - pinNames: ["Pressed", "Released", "Key"], - delegate: false, - development: false, - }, - { - name: "à", - value: String.raw` - Begin Object Class=/Script/BlueprintGraph.K2Node_InputKey Name="K2Node_InputKey_22" - InputKey=A_AccentGrave - NodePosX=-16 - NodePosY=208 - NodeGuid=D3DB357D428F46BBB529721239DD16DF - CustomProperties Pin (PinId=DB7FA89F149E4CE3B2A1F5F103A2C074,PinName="Pressed",Direction="EGPD_Output",PinType.PinCategory="exec",PinType.PinSubCategory="",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,) - CustomProperties Pin (PinId=75FF129EE9094AD3867206DEB7E9D907,PinName="Released",Direction="EGPD_Output",PinType.PinCategory="exec",PinType.PinSubCategory="",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,) - CustomProperties Pin (PinId=E6898EC029904C069C75CFBA94BED0D5,PinName="Key",Direction="EGPD_Output",PinType.PinCategory="struct",PinType.PinSubCategory="",PinType.PinSubCategoryObject=/Script/CoreUObject.ScriptStruct'"/Script/InputCore.Key"',PinType.PinSubCategoryMemberReference=(),PinType.PinValueType=(),PinType.ContainerType=None,PinType.bIsReference=False,PinType.bIsConst=False,PinType.bIsWeakPointer=False,PinType.bIsUObjectWrapper=False,PinType.bSerializeAsSinglePrecisionFloat=False,DefaultValue="None",AutogeneratedDefaultValue="None",PersistentGuid=00000000000000000000000000000000,bHidden=False,bNotConnectable=False,bDefaultValueIsReadOnly=False,bDefaultValueIsIgnored=False,bAdvancedView=False,bOrphanedPin=False,) - End Object - `, - size: [6, 8], - color: Configuration.nodeColors.red, - icon: SVGIcon.keyboard, - pins: 3, - pinNames: ["Pressed", "Released", "Key"], - delegate: false, - development: false, - }, - { - name: "è", - value: String.raw` - Begin Object Class=/Script/BlueprintGraph.K2Node_InputKey Name="K2Node_InputKey_23" - InputKey=E_AccentGrave - NodePosX=208 - NodePosY=160 - NodeGuid=63A85924985A4AA49975B74C27EB01D6 - CustomProperties Pin (PinId=BE32B517D2734017AF0A84D6C359CD96,PinName="Pressed",Direction="EGPD_Output",PinType.PinCategory="exec",PinType.PinSubCategory="",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,) - CustomProperties Pin (PinId=B448C54D91014BF29C40B66B20EFE35A,PinName="Released",Direction="EGPD_Output",PinType.PinCategory="exec",PinType.PinSubCategory="",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,) - CustomProperties Pin (PinId=507B66F736234E55A68C49235B936DF6,PinName="Key",Direction="EGPD_Output",PinType.PinCategory="struct",PinType.PinSubCategory="",PinType.PinSubCategoryObject=/Script/CoreUObject.ScriptStruct'"/Script/InputCore.Key"',PinType.PinSubCategoryMemberReference=(),PinType.PinValueType=(),PinType.ContainerType=None,PinType.bIsReference=False,PinType.bIsConst=False,PinType.bIsWeakPointer=False,PinType.bIsUObjectWrapper=False,PinType.bSerializeAsSinglePrecisionFloat=False,DefaultValue="None",AutogeneratedDefaultValue="None",PersistentGuid=00000000000000000000000000000000,bHidden=False,bNotConnectable=False,bDefaultValueIsReadOnly=False,bDefaultValueIsIgnored=False,bAdvancedView=False,bOrphanedPin=False,) - End Object - `, - size: [6, 8], - color: Configuration.nodeColors.red, - icon: SVGIcon.keyboard, - pins: 3, - pinNames: ["Pressed", "Released", "Key"], - delegate: false, - development: false, - }, - { - name: "`", - value: String.raw` - Begin Object Class=/Script/BlueprintGraph.K2Node_InputKey Name="K2Node_InputKey_24" - InputKey=Tilde - NodePosX=-16 - NodePosY=-176 - NodeGuid=CC2D4F6041DC494C96C08DFBD618AC3A - CustomProperties Pin (PinId=70F444059B5847989EC789B5239F6BE0,PinName="Pressed",Direction="EGPD_Output",PinType.PinCategory="exec",PinType.PinSubCategory="",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,) - CustomProperties Pin (PinId=5EC9A95245F344EF838C08813AD7B1EB,PinName="Released",Direction="EGPD_Output",PinType.PinCategory="exec",PinType.PinSubCategory="",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,) - CustomProperties Pin (PinId=0019D9A7CD8C4338BB75677A00C56CDA,PinName="Key",Direction="EGPD_Output",PinType.PinCategory="struct",PinType.PinSubCategory="",PinType.PinSubCategoryObject=/Script/CoreUObject.ScriptStruct'"/Script/InputCore.Key"',PinType.PinSubCategoryMemberReference=(),PinType.PinValueType=(),PinType.ContainerType=None,PinType.bIsReference=False,PinType.bIsConst=False,PinType.bIsWeakPointer=False,PinType.bIsUObjectWrapper=False,PinType.bSerializeAsSinglePrecisionFloat=False,DefaultValue="None",AutogeneratedDefaultValue="None",PersistentGuid=00000000000000000000000000000000,bHidden=False,bNotConnectable=False,bDefaultValueIsReadOnly=False,bDefaultValueIsIgnored=False,bAdvancedView=False,bOrphanedPin=False,) - End Object - `, - size: [6, 8], - color: Configuration.nodeColors.red, - icon: SVGIcon.keyboard, - pins: 3, - pinNames: ["Pressed", "Released", "Key"], - delegate: false, - development: false, - }, - { - name: "F1", - value: String.raw` - Begin Object Class=/Script/BlueprintGraph.K2Node_InputKey Name="K2Node_InputKey_25" - InputKey=F1 - NodePosX=-432 - NodePosY=-128 - NodeGuid=2A1E4A0B00644BFABB41E79B9EEBA51F - CustomProperties Pin (PinId=34EA0464C8C0463782205148426AFB9D,PinName="Pressed",Direction="EGPD_Output",PinType.PinCategory="exec",PinType.PinSubCategory="",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,) - CustomProperties Pin (PinId=196E5BC3CF0145EBB6501C56C58D0694,PinName="Released",Direction="EGPD_Output",PinType.PinCategory="exec",PinType.PinSubCategory="",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,) - CustomProperties Pin (PinId=70E9187FED444AC392AE4AA4FD4A8F06,PinName="Key",Direction="EGPD_Output",PinType.PinCategory="struct",PinType.PinSubCategory="",PinType.PinSubCategoryObject=/Script/CoreUObject.ScriptStruct'"/Script/InputCore.Key"',PinType.PinSubCategoryMemberReference=(),PinType.PinValueType=(),PinType.ContainerType=None,PinType.bIsReference=False,PinType.bIsConst=False,PinType.bIsWeakPointer=False,PinType.bIsUObjectWrapper=False,PinType.bSerializeAsSinglePrecisionFloat=False,DefaultValue="None",AutogeneratedDefaultValue="None",PersistentGuid=00000000000000000000000000000000,bHidden=False,bNotConnectable=False,bDefaultValueIsReadOnly=False,bDefaultValueIsIgnored=False,bAdvancedView=False,bOrphanedPin=False,) - End Object - `, - size: [6, 8], - color: Configuration.nodeColors.red, - icon: SVGIcon.keyboard, - pins: 3, - pinNames: ["Pressed", "Released", "Key"], - delegate: false, - development: false, - }, - { - name: "Debug Key §", - value: String.raw` - Begin Object Class=/Script/InputBlueprintNodes.K2Node_InputDebugKey Name="K2Node_InputDebugKey_9" - InputKey=Section - NodePosX=-448 - NodePosY=192 - NodeGuid=F77393EEC6EE474EB275F21B79D7AFFA - CustomProperties Pin (PinId=07B3CB6FEBC84F289CFE595A533AC588,PinName="Pressed",Direction="EGPD_Output",PinType.PinCategory="exec",PinType.PinSubCategory="",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,) - CustomProperties Pin (PinId=9B870DCF5BB942EC8B2879ADD3C1C8D7,PinName="Released",Direction="EGPD_Output",PinType.PinCategory="exec",PinType.PinSubCategory="",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,) - CustomProperties Pin (PinId=E303DAA129D744CB895FAAD13AD2E481,PinName="Key",Direction="EGPD_Output",PinType.PinCategory="struct",PinType.PinSubCategory="",PinType.PinSubCategoryObject=/Script/CoreUObject.ScriptStruct'"/Script/InputCore.Key"',PinType.PinSubCategoryMemberReference=(),PinType.PinValueType=(),PinType.ContainerType=None,PinType.bIsReference=False,PinType.bIsConst=False,PinType.bIsWeakPointer=False,PinType.bIsUObjectWrapper=False,PinType.bSerializeAsSinglePrecisionFloat=False,DefaultValue="None",AutogeneratedDefaultValue="None",PersistentGuid=00000000000000000000000000000000,bHidden=False,bNotConnectable=False,bDefaultValueIsReadOnly=False,bDefaultValueIsIgnored=False,bAdvancedView=False,bOrphanedPin=False,) - CustomProperties Pin (PinId=D7A0B7E8F10C42F0812EBD47E57C90A5,PinName="ActionValue",Direction="EGPD_Output",PinType.PinCategory="struct",PinType.PinSubCategory="",PinType.PinSubCategoryObject=/Script/CoreUObject.ScriptStruct'"/Script/EnhancedInput.InputActionValue"',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: [8.5, 11], - color: Configuration.nodeColors.red, - icon: SVGIcon.keyboard, - pins: 4, - pinNames: ["Pressed", "Released", "Key", "Action Value"], - delegate: false, - development: true, - }, - { - name: "Get Touchpad Button X Axis", - value: String.raw` - Begin Object Class=/Script/BlueprintGraph.K2Node_GetInputAxisKeyValue Name="K2Node_GetInputAxisKeyValue_7" - InputAxisKey=Gamepad_Special_Left_X - bIsPureFunc=True - bIsConstFunc=True - FunctionReference=(MemberName="GetInputAxisKeyValue",bSelfContext=True) - NodePosX=-224 - NodePosY=48 - NodeGuid=3385984750554D07BCADFFD48CA3EC9F - CustomProperties Pin (PinId=C04D7513E97B4FB19ECEC736842C4B9C,PinName="self",PinFriendlyName=NSLOCTEXT("K2Node", "Target", "Target"),PinType.PinCategory="object",PinType.PinSubCategory="",PinType.PinSubCategoryObject=/Script/CoreUObject.Class'"/Script/Engine.Actor"',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=True,bNotConnectable=True,bDefaultValueIsReadOnly=False,bDefaultValueIsIgnored=False,bAdvancedView=False,bOrphanedPin=False,) - CustomProperties Pin (PinId=4787139D40A543D7AA60CB927DFFA93C,PinName="InputAxisKey",PinType.PinCategory="struct",PinType.PinSubCategory="",PinType.PinSubCategoryObject=/Script/CoreUObject.ScriptStruct'"/Script/InputCore.Key"',PinType.PinSubCategoryMemberReference=(),PinType.PinValueType=(),PinType.ContainerType=None,PinType.bIsReference=False,PinType.bIsConst=True,PinType.bIsWeakPointer=False,PinType.bIsUObjectWrapper=False,PinType.bSerializeAsSinglePrecisionFloat=False,DefaultValue="Gamepad_Special_Left_X",PersistentGuid=00000000000000000000000000000000,bHidden=True,bNotConnectable=False,bDefaultValueIsReadOnly=False,bDefaultValueIsIgnored=False,bAdvancedView=False,bOrphanedPin=False,) - CustomProperties Pin (PinId=ADD1CDAF5AB542C186B3054E28A3FB85,PinName="ReturnValue",Direction="EGPD_Output",PinType.PinCategory="real",PinType.PinSubCategory="float",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,DefaultValue="0.0",AutogeneratedDefaultValue="0.0",PersistentGuid=00000000000000000000000000000000,bHidden=False,bNotConnectable=False,bDefaultValueIsReadOnly=False,bDefaultValueIsIgnored=False,bAdvancedView=False,bOrphanedPin=False,) - End Object - `, - size: [14, 4], - color: Configuration.nodeColors.green, - icon: SVGIcon.keyboard, - pins: 1, - pinNames: ["Return Value"], - delegate: false, - development: false, - }, - { - name: "Touch 1", - value: String.raw` - Begin Object Class=/Script/BlueprintGraph.K2Node_InputKey Name="K2Node_InputKey_28" - InputKey=Touch1 - NodePosX=-144 - NodePosY=-128 - NodeGuid=2AE125437F1B48B3A849925138CD51D1 - CustomProperties Pin (PinId=A6B5FC017A024EC3B258A048773DD301,PinName="Pressed",Direction="EGPD_Output",PinType.PinCategory="exec",PinType.PinSubCategory="",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,) - CustomProperties Pin (PinId=576F12E928DF4FF48D4D1E1F05C9C661,PinName="Released",Direction="EGPD_Output",PinType.PinCategory="exec",PinType.PinSubCategory="",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,) - CustomProperties Pin (PinId=7102CB8371BA4E8594ACECDAD1422A1C,PinName="Key",Direction="EGPD_Output",PinType.PinCategory="struct",PinType.PinSubCategory="",PinType.PinSubCategoryObject=/Script/CoreUObject.ScriptStruct'"/Script/InputCore.Key"',PinType.PinSubCategoryMemberReference=(),PinType.PinValueType=(),PinType.ContainerType=None,PinType.bIsReference=False,PinType.bIsConst=False,PinType.bIsWeakPointer=False,PinType.bIsUObjectWrapper=False,PinType.bSerializeAsSinglePrecisionFloat=False,DefaultValue="None",AutogeneratedDefaultValue="None",PersistentGuid=00000000000000000000000000000000,bHidden=False,bNotConnectable=False,bDefaultValueIsReadOnly=False,bDefaultValueIsIgnored=False,bAdvancedView=False,bOrphanedPin=False,) - End Object - `, - size: [7, 8], - color: Configuration.nodeColors.red, - icon: SVGIcon.touchpad, - pins: 3, - pinNames: ["Pressed", "Released", "Key"], - delegate: false, - development: false, - }, - { - name: "Debug Key Touch 10", - value: String.raw` - Begin Object Class=/Script/InputBlueprintNodes.K2Node_InputDebugKey Name="K2Node_InputDebugKey_10" - InputKey=Touch10 - NodePosX=192 - NodeGuid=85DC056DAA9A4DB78F7883B8F67DCF59 - CustomProperties Pin (PinId=267ABB8DF21844FB8F6E0CFA990C4E5E,PinName="Pressed",Direction="EGPD_Output",PinType.PinCategory="exec",PinType.PinSubCategory="",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,) - CustomProperties Pin (PinId=3FF391B8B11F4F26828B55863EFB48FD,PinName="Released",Direction="EGPD_Output",PinType.PinCategory="exec",PinType.PinSubCategory="",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,) - CustomProperties Pin (PinId=41C4C9D9831148E087E7D7D86B6CCB2D,PinName="Key",Direction="EGPD_Output",PinType.PinCategory="struct",PinType.PinSubCategory="",PinType.PinSubCategoryObject=/Script/CoreUObject.ScriptStruct'"/Script/InputCore.Key"',PinType.PinSubCategoryMemberReference=(),PinType.PinValueType=(),PinType.ContainerType=None,PinType.bIsReference=False,PinType.bIsConst=False,PinType.bIsWeakPointer=False,PinType.bIsUObjectWrapper=False,PinType.bSerializeAsSinglePrecisionFloat=False,DefaultValue="None",AutogeneratedDefaultValue="None",PersistentGuid=00000000000000000000000000000000,bHidden=False,bNotConnectable=False,bDefaultValueIsReadOnly=False,bDefaultValueIsIgnored=False,bAdvancedView=False,bOrphanedPin=False,) - CustomProperties Pin (PinId=F0EC9017F23F4F73AF3E98AE46008C75,PinName="ActionValue",Direction="EGPD_Output",PinType.PinCategory="struct",PinType.PinSubCategory="",PinType.PinSubCategoryObject=/Script/CoreUObject.ScriptStruct'"/Script/EnhancedInput.InputActionValue"',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: [11, 11], - color: Configuration.nodeColors.red, - icon: SVGIcon.touchpad, - pins: 4, - pinNames: ["Pressed", "Released", "Key", "Action Value"], - delegate: false, - development: true, - }, - { - name: "Steam Touch 1", - value: String.raw` - Begin Object Class=/Script/BlueprintGraph.K2Node_InputKey Name="K2Node_InputKey_29" - InputKey=Steam_Touch_1 - NodePosX=80 - NodePosY=-160 - NodeGuid=E85D97EACB4F4B8B9F8A160A949BB9AD - CustomProperties Pin (PinId=D7E09AE1588B4E949F7C34798AED6758,PinName="Pressed",Direction="EGPD_Output",PinType.PinCategory="exec",PinType.PinSubCategory="",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,) - CustomProperties Pin (PinId=CA4B72FE4D6F4F5DA503674A88F1872E,PinName="Released",Direction="EGPD_Output",PinType.PinCategory="exec",PinType.PinSubCategory="",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,) - CustomProperties Pin (PinId=948BDBCF71EE4E36891EB8259D1C4E44,PinName="Key",Direction="EGPD_Output",PinType.PinCategory="struct",PinType.PinSubCategory="",PinType.PinSubCategoryObject=/Script/CoreUObject.ScriptStruct'"/Script/InputCore.Key"',PinType.PinSubCategoryMemberReference=(),PinType.PinValueType=(),PinType.ContainerType=None,PinType.bIsReference=False,PinType.bIsConst=False,PinType.bIsWeakPointer=False,PinType.bIsUObjectWrapper=False,PinType.bSerializeAsSinglePrecisionFloat=False,DefaultValue="None",AutogeneratedDefaultValue="None",PersistentGuid=00000000000000000000000000000000,bHidden=False,bNotConnectable=False,bDefaultValueIsReadOnly=False,bDefaultValueIsIgnored=False,bAdvancedView=False,bOrphanedPin=False,) - End Object - `, - size: [9, 8], - color: Configuration.nodeColors.red, - icon: SVGIcon.gamepad, - pins: 3, - pinNames: ["Pressed", "Released", "Key"], - delegate: false, - development: false, - }, - { - name: "Mouse X", - value: String.raw` - Begin Object Class=/Script/BlueprintGraph.K2Node_InputAxisKeyEvent Name="K2Node_InputAxisKeyEvent_2" - AxisKey=MouseX - EventReference=(MemberParent=/Script/CoreUObject.Package'"/Script/Engine"') - CustomFunctionName="InpAxisKeyEvt_MouseX_K2Node_InputAxisKeyEvent_2" - NodePosX=16 - NodePosY=384 - NodeGuid=F7AA7D36A681494A9F28239D0FA8FB2D - CustomProperties Pin (PinId=8525745F49DB46C9BBDA7549AB9CD8B5,PinName="OutputDelegate",Direction="EGPD_Output",PinType.PinCategory="delegate",PinType.PinSubCategory="",PinType.PinSubCategoryObject=None,PinType.PinSubCategoryMemberReference=(MemberParent=/Script/Engine.BlueprintGeneratedClass'"/Temp/Untitled_1.Untitled_C"',MemberName="InpAxisKeyEvt_MouseX_K2Node_InputAxisKeyEvent_2"),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=6273D30435714B84BD2139DB4FAFE72F,PinName="then",Direction="EGPD_Output",PinType.PinCategory="exec",PinType.PinSubCategory="",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,) - CustomProperties Pin (PinId=E43D43763CD64E2CB1B030ECCEED6115,PinName="AxisValue",PinToolTip="Axis Value\nFloat (single-precision)",Direction="EGPD_Output",PinType.PinCategory="real",PinType.PinSubCategory="float",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,DefaultValue="0.0",AutogeneratedDefaultValue="0.0",PersistentGuid=00000000000000000000000000000000,bHidden=False,bNotConnectable=False,bDefaultValueIsReadOnly=False,bDefaultValueIsIgnored=False,bAdvancedView=False,bOrphanedPin=False,) - End Object - `, - size: [7, 6], - color: Configuration.nodeColors.red, - icon: SVGIcon.mouse, - pins: 3, - pinNames: ["Axis Value"], - delegate: true, - development: false, - }, - { - name: "Mouse Y", - value: String.raw` - Begin Object Class=/Script/BlueprintGraph.K2Node_InputAxisKeyEvent Name="K2Node_InputAxisKeyEvent_1" - AxisKey=MouseY - EventReference=(MemberParent=/Script/CoreUObject.Package'"/Script/Engine"') - CustomFunctionName="InpAxisKeyEvt_MouseY_K2Node_InputAxisKeyEvent_1" - NodePosX=-16 - NodePosY=144 - NodeGuid=FECB056F1DB940BAB4CA5D0BACCCC810 - CustomProperties Pin (PinId=357A92FB93554066815AF1D9FFEE8849,PinName="OutputDelegate",Direction="EGPD_Output",PinType.PinCategory="delegate",PinType.PinSubCategory="",PinType.PinSubCategoryObject=None,PinType.PinSubCategoryMemberReference=(MemberParent=/Script/Engine.BlueprintGeneratedClass'"/Temp/Untitled_1.Untitled_C"',MemberName="InpAxisKeyEvt_MouseY_K2Node_InputAxisKeyEvent_1"),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=902EB1EFB0F44F8CBFD05C00589EB93B,PinName="then",Direction="EGPD_Output",PinType.PinCategory="exec",PinType.PinSubCategory="",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,) - CustomProperties Pin (PinId=ECD6C7AC46BD47C88180B7198E2AF86B,PinName="AxisValue",PinToolTip="Axis Value\nFloat (single-precision)",Direction="EGPD_Output",PinType.PinCategory="real",PinType.PinSubCategory="float",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,DefaultValue="0.0",AutogeneratedDefaultValue="0.0",PersistentGuid=00000000000000000000000000000000,bHidden=False,bNotConnectable=False,bDefaultValueIsReadOnly=False,bDefaultValueIsIgnored=False,bAdvancedView=False,bOrphanedPin=False,) - End Object - `, - size: [7, 6], - color: Configuration.nodeColors.red, - icon: SVGIcon.mouse, - pins: 3, - pinNames: ["Axis Value"], - delegate: true, - development: false, - }, - { - name: "Mouse XY 2D-Axis", - value: String.raw` - Begin Object Class=/Script/BlueprintGraph.K2Node_InputVectorAxisEvent Name="K2Node_InputVectorAxisEvent_0" - AxisKey=Mouse2D - EventReference=(MemberParent=/Script/CoreUObject.Package'"/Script/Engine"') - CustomFunctionName="InpAxisKeyEvt_Mouse2D_K2Node_InputVectorAxisEvent_0" - NodePosX=-448 - NodePosY=48 - NodeGuid=A6723248596F42A4B997C50F78246F2C - CustomProperties Pin (PinId=56F310FF3B4243D2B0AE09D8949AF505,PinName="OutputDelegate",Direction="EGPD_Output",PinType.PinCategory="delegate",PinType.PinSubCategory="",PinType.PinSubCategoryObject=None,PinType.PinSubCategoryMemberReference=(MemberParent=/Script/Engine.BlueprintGeneratedClass'"/Temp/Untitled_1.Untitled_C"',MemberName="InpAxisKeyEvt_Mouse2D_K2Node_InputVectorAxisEvent_0"),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=9C23986C914C4B11AD7321BBBAB1D538,PinName="then",Direction="EGPD_Output",PinType.PinCategory="exec",PinType.PinSubCategory="",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,) - CustomProperties Pin (PinId=F04B32CC40954BBAB9872EAE26DE2879,PinName="AxisValue",PinToolTip="Axis Value\nVector",Direction="EGPD_Output",PinType.PinCategory="struct",PinType.PinSubCategory="",PinType.PinSubCategoryObject=/Script/CoreUObject.ScriptStruct'"/Script/CoreUObject.Vector"',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, 0",AutogeneratedDefaultValue="0, 0, 0",PersistentGuid=00000000000000000000000000000000,bHidden=False,bNotConnectable=False,bDefaultValueIsReadOnly=False,bDefaultValueIsIgnored=False,bAdvancedView=False,bOrphanedPin=False,) - End Object - `, - size: [11, 6], - color: Configuration.nodeColors.red, - icon: SVGIcon.mouse, - pins: 3, - pinNames: ["Axis Value"], - delegate: true, - development: false, - }, - { - name: "Mouse Wheel Axis", - value: String.raw` - Begin Object Class=/Script/BlueprintGraph.K2Node_InputAxisKeyEvent Name="K2Node_InputAxisKeyEvent_2" - AxisKey=MouseWheelAxis - EventReference=(MemberParent=/Script/CoreUObject.Package'"/Script/Engine"') - CustomFunctionName="InpAxisKeyEvt_MouseWheelAxis_K2Node_InputAxisKeyEvent_2" - NodePosX=240 - NodeGuid=E3FF073E85B34FC4B188CD7BD68D6B9B - CustomProperties Pin (PinId=5770618DFA054880BF33DD39844DE3F8,PinName="OutputDelegate",Direction="EGPD_Output",PinType.PinCategory="delegate",PinType.PinSubCategory="",PinType.PinSubCategoryObject=None,PinType.PinSubCategoryMemberReference=(MemberParent=/Script/Engine.BlueprintGeneratedClass'"/Temp/Untitled_1.Untitled_C"',MemberName="InpAxisKeyEvt_MouseWheelAxis_K2Node_InputAxisKeyEvent_2"),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=AEC4EBC2FF5744538B93F21321891828,PinName="then",Direction="EGPD_Output",PinType.PinCategory="exec",PinType.PinSubCategory="",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,) - CustomProperties Pin (PinId=8490344E6BD94ED49267BC0C82317109,PinName="AxisValue",PinToolTip="Axis Value\nFloat (single-precision)",Direction="EGPD_Output",PinType.PinCategory="real",PinType.PinSubCategory="float",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,DefaultValue="0.0",AutogeneratedDefaultValue="0.0",PersistentGuid=00000000000000000000000000000000,bHidden=False,bNotConnectable=False,bDefaultValueIsReadOnly=False,bDefaultValueIsIgnored=False,bAdvancedView=False,bOrphanedPin=False,) - End Object - `, - size: [10.5, 6], - color: Configuration.nodeColors.red, - icon: SVGIcon.mouse, - pins: 3, - pinNames: ["Axis Value"], - delegate: true, - development: false, - }, - { - name: "Left Mouse Button", - value: String.raw` - Begin Object Class=/Script/BlueprintGraph.K2Node_InputKey Name="K2Node_InputKey_16" - InputKey=LeftMouseButton - NodePosX=-224 - NodePosY=128 - NodeGuid=41CB459BE2E842F8981D1263CBCF48CB - CustomProperties Pin (PinId=6F2EDC0B46FE4B53B031B674417B2F68,PinName="Pressed",Direction="EGPD_Output",PinType.PinCategory="exec",PinType.PinSubCategory="",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,) - CustomProperties Pin (PinId=DE99E9C67C1B4C70B9486BE43DE94813,PinName="Released",Direction="EGPD_Output",PinType.PinCategory="exec",PinType.PinSubCategory="",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,) - CustomProperties Pin (PinId=3078091B73C9484F920A32ABEC7F70E2,PinName="Key",Direction="EGPD_Output",PinType.PinCategory="struct",PinType.PinSubCategory="",PinType.PinSubCategoryObject=/Script/CoreUObject.ScriptStruct'"/Script/InputCore.Key"',PinType.PinSubCategoryMemberReference=(),PinType.PinValueType=(),PinType.ContainerType=None,PinType.bIsReference=False,PinType.bIsConst=False,PinType.bIsWeakPointer=False,PinType.bIsUObjectWrapper=False,PinType.bSerializeAsSinglePrecisionFloat=False,DefaultValue="None",AutogeneratedDefaultValue="None",PersistentGuid=00000000000000000000000000000000,bHidden=False,bNotConnectable=False,bDefaultValueIsReadOnly=False,bDefaultValueIsIgnored=False,bAdvancedView=False,bOrphanedPin=False,) - End Object - `, - size: [11, 8], - color: Configuration.nodeColors.red, - icon: SVGIcon.mouse, - pins: 3, - pinNames: ["Pressed", "Released", "Key"], - delegate: false, - development: false, - }, - { - name: "Middle Mouse Button", - value: String.raw` - Begin Object Class=/Script/BlueprintGraph.K2Node_InputKey Name="K2Node_InputKey_17" - InputKey=MiddleMouseButton - NodePosX=144 - NodePosY=64 - NodeGuid=A9ED686DBFC54789A021351B379B76F2 - CustomProperties Pin (PinId=7C3A115375134DE0BD811E52F246F7BF,PinName="Pressed",Direction="EGPD_Output",PinType.PinCategory="exec",PinType.PinSubCategory="",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,) - CustomProperties Pin (PinId=D28DC408DD34403292368A421E3F9011,PinName="Released",Direction="EGPD_Output",PinType.PinCategory="exec",PinType.PinSubCategory="",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,) - CustomProperties Pin (PinId=7B5F9C141CC34087B646A3360513B7CA,PinName="Key",Direction="EGPD_Output",PinType.PinCategory="struct",PinType.PinSubCategory="",PinType.PinSubCategoryObject=/Script/CoreUObject.ScriptStruct'"/Script/InputCore.Key"',PinType.PinSubCategoryMemberReference=(),PinType.PinValueType=(),PinType.ContainerType=None,PinType.bIsReference=False,PinType.bIsConst=False,PinType.bIsWeakPointer=False,PinType.bIsUObjectWrapper=False,PinType.bSerializeAsSinglePrecisionFloat=False,DefaultValue="None",AutogeneratedDefaultValue="None",PersistentGuid=00000000000000000000000000000000,bHidden=False,bNotConnectable=False,bDefaultValueIsReadOnly=False,bDefaultValueIsIgnored=False,bAdvancedView=False,bOrphanedPin=False,) - End Object - `, - size: [12, 8], - color: Configuration.nodeColors.red, - icon: SVGIcon.mouse, - pins: 3, - pinNames: ["Pressed", "Released", "Key"], - delegate: false, - development: false, - }, - { - name: "Thumb Mouse Button 2", - value: String.raw` - Begin Object Class=/Script/BlueprintGraph.K2Node_InputKey Name="K2Node_InputKey_18" - InputKey=ThumbMouseButton2 - NodePosX=144 - NodePosY=288 - NodeGuid=031BA5DB71BA4F6ABC7F85DCFD34771D - CustomProperties Pin (PinId=DC46CB8B47E0429FB58797DD9FAA9F48,PinName="Pressed",Direction="EGPD_Output",PinType.PinCategory="exec",PinType.PinSubCategory="",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,) - CustomProperties Pin (PinId=66F69216F2964D4C9ADD1997A46F9A76,PinName="Released",Direction="EGPD_Output",PinType.PinCategory="exec",PinType.PinSubCategory="",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,) - CustomProperties Pin (PinId=C80119035CCB451BA90DB5CFD6F98029,PinName="Key",Direction="EGPD_Output",PinType.PinCategory="struct",PinType.PinSubCategory="",PinType.PinSubCategoryObject=/Script/CoreUObject.ScriptStruct'"/Script/InputCore.Key"',PinType.PinSubCategoryMemberReference=(),PinType.PinValueType=(),PinType.ContainerType=None,PinType.bIsReference=False,PinType.bIsConst=False,PinType.bIsWeakPointer=False,PinType.bIsUObjectWrapper=False,PinType.bSerializeAsSinglePrecisionFloat=False,DefaultValue="None",AutogeneratedDefaultValue="None",PersistentGuid=00000000000000000000000000000000,bHidden=False,bNotConnectable=False,bDefaultValueIsReadOnly=False,bDefaultValueIsIgnored=False,bAdvancedView=False,bOrphanedPin=False,) - End Object - `, - size: [12, 8], - color: Configuration.nodeColors.red, - icon: SVGIcon.mouse, - pins: 3, - pinNames: ["Pressed", "Released", "Key"], - delegate: false, - development: false, - }, - { - name: "Debug Key Thumb Mouse Button", - value: String.raw` - Begin Object Class=/Script/InputBlueprintNodes.K2Node_InputDebugKey Name="K2Node_InputDebugKey_7" - InputKey=ThumbMouseButton - NodePosX=-384 - NodePosY=288 - NodeGuid=A399E6224ADE4FCA957A949B4660E1C1 - CustomProperties Pin (PinId=A4BEA026C1B741DDB6C690AD79683F0F,PinName="Pressed",Direction="EGPD_Output",PinType.PinCategory="exec",PinType.PinSubCategory="",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,) - CustomProperties Pin (PinId=A0CEF5BCEAD14E868B4227481755F5C5,PinName="Released",Direction="EGPD_Output",PinType.PinCategory="exec",PinType.PinSubCategory="",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,) - CustomProperties Pin (PinId=E977C11019F74CD8A15C467CA0B1C005,PinName="Key",Direction="EGPD_Output",PinType.PinCategory="struct",PinType.PinSubCategory="",PinType.PinSubCategoryObject=/Script/CoreUObject.ScriptStruct'"/Script/InputCore.Key"',PinType.PinSubCategoryMemberReference=(),PinType.PinValueType=(),PinType.ContainerType=None,PinType.bIsReference=False,PinType.bIsConst=False,PinType.bIsWeakPointer=False,PinType.bIsUObjectWrapper=False,PinType.bSerializeAsSinglePrecisionFloat=False,DefaultValue="None",AutogeneratedDefaultValue="None",PersistentGuid=00000000000000000000000000000000,bHidden=False,bNotConnectable=False,bDefaultValueIsReadOnly=False,bDefaultValueIsIgnored=False,bAdvancedView=False,bOrphanedPin=False,) - CustomProperties Pin (PinId=ED934B47B72E4A94834897DCD89BABB3,PinName="ActionValue",Direction="EGPD_Output",PinType.PinCategory="struct",PinType.PinSubCategory="",PinType.PinSubCategoryObject=/Script/CoreUObject.ScriptStruct'"/Script/EnhancedInput.InputActionValue"',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: [16, 11], - color: Configuration.nodeColors.red, - icon: SVGIcon.mouse, - pins: 4, - pinNames: ["Pressed", "Released", "Key", "Action Value"], - delegate: false, - development: true, - }, - { - name: "Get Mouse Y", - value: String.raw` - Begin Object Class=/Script/BlueprintGraph.K2Node_GetInputAxisKeyValue Name="K2Node_GetInputAxisKeyValue_2" - InputAxisKey=MouseY - bIsPureFunc=True - bIsConstFunc=True - FunctionReference=(MemberName="GetInputAxisKeyValue",bSelfContext=True) - NodePosX=-336 - NodePosY=176 - NodeGuid=03F17E5E722044968C2604B5C7DB96DF - CustomProperties Pin (PinId=BAC6585AD74E46FB99497B33417089E8,PinName="self",PinFriendlyName=NSLOCTEXT("K2Node", "Target", "Target"),PinToolTip="Target\nActor Object Reference",PinType.PinCategory="object",PinType.PinSubCategory="",PinType.PinSubCategoryObject=/Script/CoreUObject.Class'"/Script/Engine.Actor"',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=True,bNotConnectable=True,bDefaultValueIsReadOnly=False,bDefaultValueIsIgnored=False,bAdvancedView=False,bOrphanedPin=False,) - CustomProperties Pin (PinId=EBD21E94C73B4648A6E42EEDAAECC25C,PinName="InputAxisKey",PinToolTip="Input Axis Key\nKey Structure",PinType.PinCategory="struct",PinType.PinSubCategory="",PinType.PinSubCategoryObject=/Script/CoreUObject.ScriptStruct'"/Script/InputCore.Key"',PinType.PinSubCategoryMemberReference=(),PinType.PinValueType=(),PinType.ContainerType=None,PinType.bIsReference=False,PinType.bIsConst=True,PinType.bIsWeakPointer=False,PinType.bIsUObjectWrapper=False,PinType.bSerializeAsSinglePrecisionFloat=False,DefaultValue="MouseY",PersistentGuid=00000000000000000000000000000000,bHidden=True,bNotConnectable=False,bDefaultValueIsReadOnly=False,bDefaultValueIsIgnored=False,bAdvancedView=False,bOrphanedPin=False,) - CustomProperties Pin (PinId=FBB13F62789849748C804E02B8E147AD,PinName="ReturnValue",PinToolTip="Return Value\nFloat (single-precision)\n\nGets the value of the input axis key if input is enabled for this actor.",Direction="EGPD_Output",PinType.PinCategory="real",PinType.PinSubCategory="float",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,DefaultValue="0.0",AutogeneratedDefaultValue="0.0",PersistentGuid=00000000000000000000000000000000,bHidden=False,bNotConnectable=False,bDefaultValueIsReadOnly=False,bDefaultValueIsIgnored=False,bAdvancedView=False,bOrphanedPin=False,) - End Object - `, - size: [8.5, 4], - color: Configuration.nodeColors.green, - icon: SVGIcon.mouse, - pins: 1, - pinNames: ["Return Value"], - delegate: false, - development: false, - }, - { - name: "Get Mouse Wheel Axis", - value: String.raw` - Begin Object Class=/Script/BlueprintGraph.K2Node_GetInputAxisKeyValue Name="K2Node_GetInputAxisKeyValue_0" - InputAxisKey=MouseWheelAxis - bIsPureFunc=True - bIsConstFunc=True - FunctionReference=(MemberName="GetInputAxisKeyValue",bSelfContext=True) - NodePosX=-384 - NodePosY=16 - NodeGuid=2B1117A5318D40A7AF0DFDA50FEF1591 - CustomProperties Pin (PinId=BFD2DE55F3DB4856ACFC0FE876450E0B,PinName="self",PinFriendlyName=NSLOCTEXT("K2Node", "Target", "Target"),PinType.PinCategory="object",PinType.PinSubCategory="",PinType.PinSubCategoryObject=/Script/CoreUObject.Class'"/Script/Engine.Actor"',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=True,bNotConnectable=True,bDefaultValueIsReadOnly=False,bDefaultValueIsIgnored=False,bAdvancedView=False,bOrphanedPin=False,) - CustomProperties Pin (PinId=5842E327DE3B4521B9B695133F2D5A8D,PinName="InputAxisKey",PinType.PinCategory="struct",PinType.PinSubCategory="",PinType.PinSubCategoryObject=/Script/CoreUObject.ScriptStruct'"/Script/InputCore.Key"',PinType.PinSubCategoryMemberReference=(),PinType.PinValueType=(),PinType.ContainerType=None,PinType.bIsReference=False,PinType.bIsConst=True,PinType.bIsWeakPointer=False,PinType.bIsUObjectWrapper=False,PinType.bSerializeAsSinglePrecisionFloat=False,DefaultValue="MouseWheelAxis",PersistentGuid=00000000000000000000000000000000,bHidden=True,bNotConnectable=False,bDefaultValueIsReadOnly=False,bDefaultValueIsIgnored=False,bAdvancedView=False,bOrphanedPin=False,) - CustomProperties Pin (PinId=D277AF2C806C4B92857827918CA55B91,PinName="ReturnValue",Direction="EGPD_Output",PinType.PinCategory="real",PinType.PinSubCategory="float",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,DefaultValue="0.0",AutogeneratedDefaultValue="0.0",PersistentGuid=00000000000000000000000000000000,bHidden=False,bNotConnectable=False,bDefaultValueIsReadOnly=False,bDefaultValueIsIgnored=False,bAdvancedView=False,bOrphanedPin=False,) - End Object - `, - size: [12, 4], - color: Configuration.nodeColors.green, - icon: SVGIcon.mouse, - pins: 1, - pinNames: ["Return Value"], - delegate: false, - development: false, - }, - { - name: "0", - value: String.raw` - Begin Object Class=/Script/BlueprintGraph.K2Node_InputKey Name="K2Node_InputKey_1" - InputKey=Zero - NodePosX=-304 - NodePosY=176 - NodeGuid=41FC4194F1E4436BB46EC8C1D83D0701 - CustomProperties Pin (PinId=D4A5428B422F4D5085CF41DEAF73523E,PinName="Pressed",Direction="EGPD_Output",PinType.PinCategory="exec",PinType.PinSubCategory="",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,) - CustomProperties Pin (PinId=B1A390663D2B404AAFF90D10273C78E1,PinName="Released",Direction="EGPD_Output",PinType.PinCategory="exec",PinType.PinSubCategory="",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,) - CustomProperties Pin (PinId=0C9FF69AFEEE488F868AB3292050FCB0,PinName="Key",Direction="EGPD_Output",PinType.PinCategory="struct",PinType.PinSubCategory="",PinType.PinSubCategoryObject=/Script/CoreUObject.ScriptStruct'"/Script/InputCore.Key"',PinType.PinSubCategoryMemberReference=(),PinType.PinValueType=(),PinType.ContainerType=None,PinType.bIsReference=False,PinType.bIsConst=False,PinType.bIsWeakPointer=False,PinType.bIsUObjectWrapper=False,PinType.bSerializeAsSinglePrecisionFloat=False,DefaultValue="None",AutogeneratedDefaultValue="None",PersistentGuid=00000000000000000000000000000000,bHidden=False,bNotConnectable=False,bDefaultValueIsReadOnly=False,bDefaultValueIsIgnored=False,bAdvancedView=False,bOrphanedPin=False,) - End Object - `, - size: [6, 8], - color: Configuration.nodeColors.red, - icon: SVGIcon.keyboard, - pins: 3, - pinNames: ["Pressed", "Released", "Key"], - delegate: false, - development: false, - }, - { - name: "1", - value: String.raw` - Begin Object Class=/Script/BlueprintGraph.K2Node_InputKey Name="K2Node_InputKey_0" - InputKey=One - NodePosX=-368 - NodePosY=48 - NodeGuid=92EF207924B8456FA773E70D4CB508B1 - CustomProperties Pin (PinId=B97DD5E035664CC89443E493174A8643,PinName="Pressed",Direction="EGPD_Output",PinType.PinCategory="exec",PinType.PinSubCategory="",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,) - CustomProperties Pin (PinId=B120EF5252EB4F029D420AD0B029AA57,PinName="Released",Direction="EGPD_Output",PinType.PinCategory="exec",PinType.PinSubCategory="",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,) - CustomProperties Pin (PinId=51B6448364CD491B95C79EEDB5947F62,PinName="Key",Direction="EGPD_Output",PinType.PinCategory="struct",PinType.PinSubCategory="",PinType.PinSubCategoryObject=/Script/CoreUObject.ScriptStruct'"/Script/InputCore.Key"',PinType.PinSubCategoryMemberReference=(),PinType.PinValueType=(),PinType.ContainerType=None,PinType.bIsReference=False,PinType.bIsConst=False,PinType.bIsWeakPointer=False,PinType.bIsUObjectWrapper=False,PinType.bSerializeAsSinglePrecisionFloat=False,DefaultValue="None",AutogeneratedDefaultValue="None",PersistentGuid=00000000000000000000000000000000,bHidden=False,bNotConnectable=False,bDefaultValueIsReadOnly=False,bDefaultValueIsIgnored=False,bAdvancedView=False,bOrphanedPin=False,) - End Object - `, - size: [6, 8], - color: Configuration.nodeColors.red, - icon: SVGIcon.keyboard, - pins: 3, - pinNames: ["Pressed", "Released", "Key"], - delegate: false, - development: false, - }, - { - name: "2", - value: String.raw` - Begin Object Class=/Script/BlueprintGraph.K2Node_InputKey Name="K2Node_InputKey_1" - InputKey=Two - NodePosX=-432 - NodePosY=240 - NodeGuid=E0E67B91FE9748C7BA46FD5A5875E1ED - CustomProperties Pin (PinId=C7064464390D411ABFE9427758A4DC81,PinName="Pressed",Direction="EGPD_Output",PinType.PinCategory="exec",PinType.PinSubCategory="",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,) - CustomProperties Pin (PinId=7CC65DFE0C134968A856304AAE6B800D,PinName="Released",Direction="EGPD_Output",PinType.PinCategory="exec",PinType.PinSubCategory="",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,) - CustomProperties Pin (PinId=D79D1BBE0C944B618E16600BAD151493,PinName="Key",Direction="EGPD_Output",PinType.PinCategory="struct",PinType.PinSubCategory="",PinType.PinSubCategoryObject=/Script/CoreUObject.ScriptStruct'"/Script/InputCore.Key"',PinType.PinSubCategoryMemberReference=(),PinType.PinValueType=(),PinType.ContainerType=None,PinType.bIsReference=False,PinType.bIsConst=False,PinType.bIsWeakPointer=False,PinType.bIsUObjectWrapper=False,PinType.bSerializeAsSinglePrecisionFloat=False,DefaultValue="None",AutogeneratedDefaultValue="None",PersistentGuid=00000000000000000000000000000000,bHidden=False,bNotConnectable=False,bDefaultValueIsReadOnly=False,bDefaultValueIsIgnored=False,bAdvancedView=False,bOrphanedPin=False,) - End Object - `, - size: [6, 8], - color: Configuration.nodeColors.red, - icon: SVGIcon.keyboard, - pins: 3, - pinNames: ["Pressed", "Released", "Key"], - delegate: false, - development: false, - }, - { - name: "3", - value: String.raw` - Begin Object Class=/Script/BlueprintGraph.K2Node_InputKey Name="K2Node_InputKey_2" - InputKey=Three - NodePosX=-288 - NodeGuid=86A598DB8EA1471C854A3233595FDD72 - CustomProperties Pin (PinId=14495EF676334DE08F813AE8B458849A,PinName="Pressed",Direction="EGPD_Output",PinType.PinCategory="exec",PinType.PinSubCategory="",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,) - CustomProperties Pin (PinId=0B11504E947F4FF184AC6371CB59D825,PinName="Released",Direction="EGPD_Output",PinType.PinCategory="exec",PinType.PinSubCategory="",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,) - CustomProperties Pin (PinId=7493F1215705457980E294950C651ED7,PinName="Key",Direction="EGPD_Output",PinType.PinCategory="struct",PinType.PinSubCategory="",PinType.PinSubCategoryObject=/Script/CoreUObject.ScriptStruct'"/Script/InputCore.Key"',PinType.PinSubCategoryMemberReference=(),PinType.PinValueType=(),PinType.ContainerType=None,PinType.bIsReference=False,PinType.bIsConst=False,PinType.bIsWeakPointer=False,PinType.bIsUObjectWrapper=False,PinType.bSerializeAsSinglePrecisionFloat=False,DefaultValue="None",AutogeneratedDefaultValue="None",PersistentGuid=00000000000000000000000000000000,bHidden=False,bNotConnectable=False,bDefaultValueIsReadOnly=False,bDefaultValueIsIgnored=False,bAdvancedView=False,bOrphanedPin=False,) - End Object - `, - size: [6, 8], - color: Configuration.nodeColors.red, - icon: SVGIcon.keyboard, - pins: 3, - pinNames: ["Pressed", "Released", "Key"], - delegate: false, - development: false, - }, - { - name: "4", - value: String.raw` - Begin Object Class=/Script/BlueprintGraph.K2Node_InputKey Name="K2Node_InputKey_4" - InputKey=Four - NodePosX=416 - NodeGuid=C0E7B79B3B85408C9FFAFE71B71FD21F - CustomProperties Pin (PinId=28E3A745210949D0864CC441BB0F529C,PinName="Pressed",Direction="EGPD_Output",PinType.PinCategory="exec",PinType.PinSubCategory="",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,) - CustomProperties Pin (PinId=F8A89129B85C44CABFC5082369EEDA65,PinName="Released",Direction="EGPD_Output",PinType.PinCategory="exec",PinType.PinSubCategory="",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,) - CustomProperties Pin (PinId=00DE1A9A2AE249E681808177A2107D5A,PinName="Key",Direction="EGPD_Output",PinType.PinCategory="struct",PinType.PinSubCategory="",PinType.PinSubCategoryObject=/Script/CoreUObject.ScriptStruct'"/Script/InputCore.Key"',PinType.PinSubCategoryMemberReference=(),PinType.PinValueType=(),PinType.ContainerType=None,PinType.bIsReference=False,PinType.bIsConst=False,PinType.bIsWeakPointer=False,PinType.bIsUObjectWrapper=False,PinType.bSerializeAsSinglePrecisionFloat=False,DefaultValue="None",AutogeneratedDefaultValue="None",PersistentGuid=00000000000000000000000000000000,bHidden=False,bNotConnectable=False,bDefaultValueIsReadOnly=False,bDefaultValueIsIgnored=False,bAdvancedView=False,bOrphanedPin=False,) - End Object - `, - size: [6, 8], - color: Configuration.nodeColors.red, - icon: SVGIcon.keyboard, - pins: 3, - pinNames: ["Pressed", "Released", "Key"], - delegate: false, - development: false, - }, - { - name: "5", - value: String.raw` - Begin Object Class=/Script/BlueprintGraph.K2Node_InputKey Name="K2Node_InputKey_3" - InputKey=Five - NodePosX=-416 - NodePosY=48 - NodeGuid=1DC9EFC5D6B34E06839050946BAD178D - CustomProperties Pin (PinId=9D70C05D5C5941CAAC239B23BC11E648,PinName="Pressed",Direction="EGPD_Output",PinType.PinCategory="exec",PinType.PinSubCategory="",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,) - CustomProperties Pin (PinId=790882DB7B64424CBB215644AED9EBBE,PinName="Released",Direction="EGPD_Output",PinType.PinCategory="exec",PinType.PinSubCategory="",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,) - CustomProperties Pin (PinId=9A76A94DEB7E40E08EBD880DFADB212F,PinName="Key",Direction="EGPD_Output",PinType.PinCategory="struct",PinType.PinSubCategory="",PinType.PinSubCategoryObject=/Script/CoreUObject.ScriptStruct'"/Script/InputCore.Key"',PinType.PinSubCategoryMemberReference=(),PinType.PinValueType=(),PinType.ContainerType=None,PinType.bIsReference=False,PinType.bIsConst=False,PinType.bIsWeakPointer=False,PinType.bIsUObjectWrapper=False,PinType.bSerializeAsSinglePrecisionFloat=False,DefaultValue="None",AutogeneratedDefaultValue="None",PersistentGuid=00000000000000000000000000000000,bHidden=False,bNotConnectable=False,bDefaultValueIsReadOnly=False,bDefaultValueIsIgnored=False,bAdvancedView=False,bOrphanedPin=False,) - End Object - `, - size: [6, 8], - color: Configuration.nodeColors.red, - icon: SVGIcon.keyboard, - pins: 3, - pinNames: ["Pressed", "Released", "Key"], - delegate: false, - development: false, - }, - { - name: "6", - value: String.raw` - Begin Object Class=/Script/BlueprintGraph.K2Node_InputKey Name="K2Node_InputKey_5" - InputKey=Six - NodePosX=-192 - NodePosY=112 - NodeGuid=82C5BBFF6AAB4078931656A56DFC214F - CustomProperties Pin (PinId=A4F9728C256C4D0FB053E545EBB0FDE3,PinName="Pressed",Direction="EGPD_Output",PinType.PinCategory="exec",PinType.PinSubCategory="",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,) - CustomProperties Pin (PinId=DF03428EF028466C948E0F2539C1AA2C,PinName="Released",Direction="EGPD_Output",PinType.PinCategory="exec",PinType.PinSubCategory="",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,) - CustomProperties Pin (PinId=509DA3B4BFD84B2FB796CEFE709E3401,PinName="Key",Direction="EGPD_Output",PinType.PinCategory="struct",PinType.PinSubCategory="",PinType.PinSubCategoryObject=/Script/CoreUObject.ScriptStruct'"/Script/InputCore.Key"',PinType.PinSubCategoryMemberReference=(),PinType.PinValueType=(),PinType.ContainerType=None,PinType.bIsReference=False,PinType.bIsConst=False,PinType.bIsWeakPointer=False,PinType.bIsUObjectWrapper=False,PinType.bSerializeAsSinglePrecisionFloat=False,DefaultValue="None",AutogeneratedDefaultValue="None",PersistentGuid=00000000000000000000000000000000,bHidden=False,bNotConnectable=False,bDefaultValueIsReadOnly=False,bDefaultValueIsIgnored=False,bAdvancedView=False,bOrphanedPin=False,) - End Object - `, - size: [6, 8], - color: Configuration.nodeColors.red, - icon: SVGIcon.keyboard, - pins: 3, - pinNames: ["Pressed", "Released", "Key"], - delegate: false, - development: false, - }, - { - name: "7", - value: String.raw` - Begin Object Class=/Script/BlueprintGraph.K2Node_InputKey Name="K2Node_InputKey_6" - InputKey=Seven - NodePosX=-352 - NodePosY=352 - NodeGuid=C32CC49616194AAC923D2C59FB938447 - CustomProperties Pin (PinId=6F69CCDA3E8042AD94D2CED0A400D23C,PinName="Pressed",Direction="EGPD_Output",PinType.PinCategory="exec",PinType.PinSubCategory="",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,) - CustomProperties Pin (PinId=A34A7F4DA2F645F288C0F57A5E24DB8E,PinName="Released",Direction="EGPD_Output",PinType.PinCategory="exec",PinType.PinSubCategory="",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,) - CustomProperties Pin (PinId=3E195C0ABA83425F813A4AB20817BBDE,PinName="Key",Direction="EGPD_Output",PinType.PinCategory="struct",PinType.PinSubCategory="",PinType.PinSubCategoryObject=/Script/CoreUObject.ScriptStruct'"/Script/InputCore.Key"',PinType.PinSubCategoryMemberReference=(),PinType.PinValueType=(),PinType.ContainerType=None,PinType.bIsReference=False,PinType.bIsConst=False,PinType.bIsWeakPointer=False,PinType.bIsUObjectWrapper=False,PinType.bSerializeAsSinglePrecisionFloat=False,DefaultValue="None",AutogeneratedDefaultValue="None",PersistentGuid=00000000000000000000000000000000,bHidden=False,bNotConnectable=False,bDefaultValueIsReadOnly=False,bDefaultValueIsIgnored=False,bAdvancedView=False,bOrphanedPin=False,) - End Object - `, - size: [6, 8], - color: Configuration.nodeColors.red, - icon: SVGIcon.keyboard, - pins: 3, - pinNames: ["Pressed", "Released", "Key"], - delegate: false, - development: false, - }, - { - name: "8", - value: String.raw` - Begin Object Class=/Script/BlueprintGraph.K2Node_InputKey Name="K2Node_InputKey_7" - InputKey=Eight - NodePosX=-384 - NodePosY=256 - NodeGuid=6AF0BCA97BBD467C84CD606C09F1BBAA - CustomProperties Pin (PinId=4020BE13AED349549BA94622B8EEF80E,PinName="Pressed",Direction="EGPD_Output",PinType.PinCategory="exec",PinType.PinSubCategory="",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,) - CustomProperties Pin (PinId=8C4F484474D1432CBD77333B04D315F8,PinName="Released",Direction="EGPD_Output",PinType.PinCategory="exec",PinType.PinSubCategory="",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,) - CustomProperties Pin (PinId=3C0D2A3E5E844466B752EDD6E2160271,PinName="Key",Direction="EGPD_Output",PinType.PinCategory="struct",PinType.PinSubCategory="",PinType.PinSubCategoryObject=/Script/CoreUObject.ScriptStruct'"/Script/InputCore.Key"',PinType.PinSubCategoryMemberReference=(),PinType.PinValueType=(),PinType.ContainerType=None,PinType.bIsReference=False,PinType.bIsConst=False,PinType.bIsWeakPointer=False,PinType.bIsUObjectWrapper=False,PinType.bSerializeAsSinglePrecisionFloat=False,DefaultValue="None",AutogeneratedDefaultValue="None",PersistentGuid=00000000000000000000000000000000,bHidden=False,bNotConnectable=False,bDefaultValueIsReadOnly=False,bDefaultValueIsIgnored=False,bAdvancedView=False,bOrphanedPin=False,) - End Object - `, - size: [6, 8], - color: Configuration.nodeColors.red, - icon: SVGIcon.keyboard, - pins: 3, - pinNames: ["Pressed", "Released", "Key"], - delegate: false, - development: false, - }, - { - name: "9", - value: String.raw` - Begin Object Class=/Script/BlueprintGraph.K2Node_InputKey Name="K2Node_InputKey_8" - InputKey=Nine - NodePosX=-160 - NodePosY=288 - NodeGuid=02A84586D4F842AB87578A8F6DECDFE1 - CustomProperties Pin (PinId=F3EC3CC1CF984B15B391F75CD1B4ECC8,PinName="Pressed",Direction="EGPD_Output",PinType.PinCategory="exec",PinType.PinSubCategory="",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,) - CustomProperties Pin (PinId=2A1785736115425489B80816B0D1AC82,PinName="Released",Direction="EGPD_Output",PinType.PinCategory="exec",PinType.PinSubCategory="",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,) - CustomProperties Pin (PinId=6C6769AC5FFF4CDF98004FEE47E9A3FC,PinName="Key",Direction="EGPD_Output",PinType.PinCategory="struct",PinType.PinSubCategory="",PinType.PinSubCategoryObject=/Script/CoreUObject.ScriptStruct'"/Script/InputCore.Key"',PinType.PinSubCategoryMemberReference=(),PinType.PinValueType=(),PinType.ContainerType=None,PinType.bIsReference=False,PinType.bIsConst=False,PinType.bIsWeakPointer=False,PinType.bIsUObjectWrapper=False,PinType.bSerializeAsSinglePrecisionFloat=False,DefaultValue="None",AutogeneratedDefaultValue="None",PersistentGuid=00000000000000000000000000000000,bHidden=False,bNotConnectable=False,bDefaultValueIsReadOnly=False,bDefaultValueIsIgnored=False,bAdvancedView=False,bOrphanedPin=False,) - End Object - `, - size: [6, 8], - color: Configuration.nodeColors.red, - icon: SVGIcon.keyboard, - pins: 3, - pinNames: ["Pressed", "Released", "Key"], - delegate: false, - development: false, - }, - { - name: "Debug Key 0", - value: String.raw` - Begin Object Class=/Script/InputBlueprintNodes.K2Node_InputDebugKey Name="K2Node_InputDebugKey_1" - InputKey=Zero - NodePosX=-304 - NodePosY=192 - NodeGuid=C07BBFC668144C4FB437B3F6B355E184 - CustomProperties Pin (PinId=9F869036E3A744A8A43AA43A7620F55F,PinName="Pressed",Direction="EGPD_Output",PinType.PinCategory="exec",PinType.PinSubCategory="",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,) - CustomProperties Pin (PinId=6E45643AF86B4A62A751A9B63A57862A,PinName="Released",Direction="EGPD_Output",PinType.PinCategory="exec",PinType.PinSubCategory="",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,) - CustomProperties Pin (PinId=EC8FCA3A4A034EA59784E3A145C8DDCF,PinName="Key",Direction="EGPD_Output",PinType.PinCategory="struct",PinType.PinSubCategory="",PinType.PinSubCategoryObject=/Script/CoreUObject.ScriptStruct'"/Script/InputCore.Key"',PinType.PinSubCategoryMemberReference=(),PinType.PinValueType=(),PinType.ContainerType=None,PinType.bIsReference=False,PinType.bIsConst=False,PinType.bIsWeakPointer=False,PinType.bIsUObjectWrapper=False,PinType.bSerializeAsSinglePrecisionFloat=False,DefaultValue="None",AutogeneratedDefaultValue="None",PersistentGuid=00000000000000000000000000000000,bHidden=False,bNotConnectable=False,bDefaultValueIsReadOnly=False,bDefaultValueIsIgnored=False,bAdvancedView=False,bOrphanedPin=False,) - CustomProperties Pin (PinId=1F6919C3378A48EBBDEE77BD7F1F4E6A,PinName="ActionValue",Direction="EGPD_Output",PinType.PinCategory="struct",PinType.PinSubCategory="",PinType.PinSubCategoryObject=/Script/CoreUObject.ScriptStruct'"/Script/EnhancedInput.InputActionValue"',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: [8.5, 11], - color: Configuration.nodeColors.red, - icon: SVGIcon.keyboard, - pins: 4, - pinNames: ["Pressed", "Released", "Key", "Action Value"], - delegate: false, - development: true, - }, - { - name: "Debug Key 4", - value: String.raw` - Begin Object Class=/Script/InputBlueprintNodes.K2Node_InputDebugKey Name="K2Node_InputDebugKey_2" - InputKey=Four - NodePosY=160 - NodeGuid=10A6E414241D451ABCCDD93A5DC731EC - CustomProperties Pin (PinId=2F11C0CFA4334DC69E85B9E319A4535D,PinName="Pressed",Direction="EGPD_Output",PinType.PinCategory="exec",PinType.PinSubCategory="",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,) - CustomProperties Pin (PinId=19A17B1886904EE7872288EA7750E0A0,PinName="Released",Direction="EGPD_Output",PinType.PinCategory="exec",PinType.PinSubCategory="",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,) - CustomProperties Pin (PinId=C3166A5D6C914ACE9A897A8F95F832A3,PinName="Key",Direction="EGPD_Output",PinType.PinCategory="struct",PinType.PinSubCategory="",PinType.PinSubCategoryObject=/Script/CoreUObject.ScriptStruct'"/Script/InputCore.Key"',PinType.PinSubCategoryMemberReference=(),PinType.PinValueType=(),PinType.ContainerType=None,PinType.bIsReference=False,PinType.bIsConst=False,PinType.bIsWeakPointer=False,PinType.bIsUObjectWrapper=False,PinType.bSerializeAsSinglePrecisionFloat=False,DefaultValue="None",AutogeneratedDefaultValue="None",PersistentGuid=00000000000000000000000000000000,bHidden=False,bNotConnectable=False,bDefaultValueIsReadOnly=False,bDefaultValueIsIgnored=False,bAdvancedView=False,bOrphanedPin=False,) - CustomProperties Pin (PinId=411B9A362C694A60A29B2FA623CF1CD4,PinName="ActionValue",Direction="EGPD_Output",PinType.PinCategory="struct",PinType.PinSubCategory="",PinType.PinSubCategoryObject=/Script/CoreUObject.ScriptStruct'"/Script/EnhancedInput.InputActionValue"',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: [8.5, 11], - color: Configuration.nodeColors.red, - icon: SVGIcon.keyboard, - pins: 4, - pinNames: ["Pressed", "Released", "Key", "Action Value"], - delegate: false, - development: true, - }, - { - name: "Num 1", - value: String.raw` - Begin Object Class=/Script/BlueprintGraph.K2Node_InputKey Name="K2Node_InputKey_9" - InputKey=NumPadOne - NodePosX=-240 - NodeGuid=1B61D1A914354095A8A8420B68656463 - CustomProperties Pin (PinId=2F18160D6E56431D8A81ACD578E0131C,PinName="Pressed",Direction="EGPD_Output",PinType.PinCategory="exec",PinType.PinSubCategory="",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,) - CustomProperties Pin (PinId=0957F9CBAC034E2EBD87B15904B75FF1,PinName="Released",Direction="EGPD_Output",PinType.PinCategory="exec",PinType.PinSubCategory="",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,) - CustomProperties Pin (PinId=45805673C5CF4C80BB198F99EF1FEB24,PinName="Key",Direction="EGPD_Output",PinType.PinCategory="struct",PinType.PinSubCategory="",PinType.PinSubCategoryObject=/Script/CoreUObject.ScriptStruct'"/Script/InputCore.Key"',PinType.PinSubCategoryMemberReference=(),PinType.PinValueType=(),PinType.ContainerType=None,PinType.bIsReference=False,PinType.bIsConst=False,PinType.bIsWeakPointer=False,PinType.bIsUObjectWrapper=False,PinType.bSerializeAsSinglePrecisionFloat=False,DefaultValue="None",AutogeneratedDefaultValue="None",PersistentGuid=00000000000000000000000000000000,bHidden=False,bNotConnectable=False,bDefaultValueIsReadOnly=False,bDefaultValueIsIgnored=False,bAdvancedView=False,bOrphanedPin=False,) - End Object - `, - size: [6.5, 8], - color: Configuration.nodeColors.red, - icon: SVGIcon.keyboard, - pins: 3, - pinNames: ["Pressed", "Released", "Key"], - delegate: false, - development: false, - }, - { - name: "Num 6", - value: String.raw` - Begin Object Class=/Script/BlueprintGraph.K2Node_InputKey Name="K2Node_InputKey_10" - InputKey=NumPadSix - NodePosX=256 - NodePosY=-32 - NodeGuid=26F046FCA2394E5A975801CA389D6E18 - CustomProperties Pin (PinId=450CA89B6E3348D8819EBA1315618F01,PinName="Pressed",Direction="EGPD_Output",PinType.PinCategory="exec",PinType.PinSubCategory="",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,) - CustomProperties Pin (PinId=4F3B98C52357433E9436C29F86844F94,PinName="Released",Direction="EGPD_Output",PinType.PinCategory="exec",PinType.PinSubCategory="",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,) - CustomProperties Pin (PinId=A5BFA728BEA7452B99D3A67DFB2E800E,PinName="Key",Direction="EGPD_Output",PinType.PinCategory="struct",PinType.PinSubCategory="",PinType.PinSubCategoryObject=/Script/CoreUObject.ScriptStruct'"/Script/InputCore.Key"',PinType.PinSubCategoryMemberReference=(),PinType.PinValueType=(),PinType.ContainerType=None,PinType.bIsReference=False,PinType.bIsConst=False,PinType.bIsWeakPointer=False,PinType.bIsUObjectWrapper=False,PinType.bSerializeAsSinglePrecisionFloat=False,DefaultValue="None",AutogeneratedDefaultValue="None",PersistentGuid=00000000000000000000000000000000,bHidden=False,bNotConnectable=False,bDefaultValueIsReadOnly=False,bDefaultValueIsIgnored=False,bAdvancedView=False,bOrphanedPin=False,) - End Object - `, - size: [6.5, 8], - color: Configuration.nodeColors.red, - icon: SVGIcon.keyboard, - pins: 3, - pinNames: ["Pressed", "Released", "Key"], - delegate: false, - development: false, - }, - { - name: "Debug Key Num 5", - value: String.raw` - Begin Object Class=/Script/InputBlueprintNodes.K2Node_InputDebugKey Name="K2Node_InputDebugKey_3" - InputKey=NumPadFive - NodePosX=16 - NodePosY=-48 - NodeGuid=FB21225080DF48DFB7A662369E470AA1 - CustomProperties Pin (PinId=8540A18FD95D477C93035CDB3D2AE2B0,PinName="Pressed",Direction="EGPD_Output",PinType.PinCategory="exec",PinType.PinSubCategory="",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,) - CustomProperties Pin (PinId=B8E224DBCEB1454B81EC9462A6DB5F06,PinName="Released",Direction="EGPD_Output",PinType.PinCategory="exec",PinType.PinSubCategory="",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,) - CustomProperties Pin (PinId=D7B687EA384A4E81B45C9CFB0996989F,PinName="Key",Direction="EGPD_Output",PinType.PinCategory="struct",PinType.PinSubCategory="",PinType.PinSubCategoryObject=/Script/CoreUObject.ScriptStruct'"/Script/InputCore.Key"',PinType.PinSubCategoryMemberReference=(),PinType.PinValueType=(),PinType.ContainerType=None,PinType.bIsReference=False,PinType.bIsConst=False,PinType.bIsWeakPointer=False,PinType.bIsUObjectWrapper=False,PinType.bSerializeAsSinglePrecisionFloat=False,DefaultValue="None",AutogeneratedDefaultValue="None",PersistentGuid=00000000000000000000000000000000,bHidden=False,bNotConnectable=False,bDefaultValueIsReadOnly=False,bDefaultValueIsIgnored=False,bAdvancedView=False,bOrphanedPin=False,) - CustomProperties Pin (PinId=EC6AE35C9D9343E6965884DE97A9555A,PinName="ActionValue",Direction="EGPD_Output",PinType.PinCategory="struct",PinType.PinSubCategory="",PinType.PinSubCategoryObject=/Script/CoreUObject.ScriptStruct'"/Script/EnhancedInput.InputActionValue"',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: [10.5, 11], - color: Configuration.nodeColors.red, - icon: SVGIcon.keyboard, - pins: 4, - pinNames: ["Pressed", "Released", "Key", "Action Value"], - delegate: false, - development: true, - }, - { - name: "Num +", - value: String.raw` - Begin Object Class=/Script/BlueprintGraph.K2Node_InputKey Name="K2Node_InputKey_11" - InputKey=Add - NodePosX=-176 - NodePosY=-128 - NodeGuid=5D4F157F72EC42B69CDB89CB6EEC507C - CustomProperties Pin (PinId=9EFDA67BE6D341B8BC6248F6AEFC75DB,PinName="Pressed",Direction="EGPD_Output",PinType.PinCategory="exec",PinType.PinSubCategory="",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,) - CustomProperties Pin (PinId=35304E478D344F05B081FCA9C3271C52,PinName="Released",Direction="EGPD_Output",PinType.PinCategory="exec",PinType.PinSubCategory="",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,) - CustomProperties Pin (PinId=22180FA7E6054064922D73E6BF50E23A,PinName="Key",Direction="EGPD_Output",PinType.PinCategory="struct",PinType.PinSubCategory="",PinType.PinSubCategoryObject=/Script/CoreUObject.ScriptStruct'"/Script/InputCore.Key"',PinType.PinSubCategoryMemberReference=(),PinType.PinValueType=(),PinType.ContainerType=None,PinType.bIsReference=False,PinType.bIsConst=False,PinType.bIsWeakPointer=False,PinType.bIsUObjectWrapper=False,PinType.bSerializeAsSinglePrecisionFloat=False,DefaultValue="None",AutogeneratedDefaultValue="None",PersistentGuid=00000000000000000000000000000000,bHidden=False,bNotConnectable=False,bDefaultValueIsReadOnly=False,bDefaultValueIsIgnored=False,bAdvancedView=False,bOrphanedPin=False,) - End Object - `, - size: [6, 8], - color: Configuration.nodeColors.red, - icon: SVGIcon.keyboard, - pins: 3, - pinNames: ["Pressed", "Released", "Key"], - delegate: false, - development: false, - }, - { - name: "Num -", - value: String.raw` - Begin Object Class=/Script/BlueprintGraph.K2Node_InputKey Name="K2Node_InputKey_12" - InputKey=Subtract - NodePosX=-480 - NodePosY=128 - NodeGuid=5DC438BC02904EC7B7252EC3A9E63E7E - CustomProperties Pin (PinId=EEF5174C8F8B4BBF999E26222C9F0003,PinName="Pressed",Direction="EGPD_Output",PinType.PinCategory="exec",PinType.PinSubCategory="",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,) - CustomProperties Pin (PinId=C005CB1322CF4A39832A878229F790A4,PinName="Released",Direction="EGPD_Output",PinType.PinCategory="exec",PinType.PinSubCategory="",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,) - CustomProperties Pin (PinId=58DC51053EC343BFA7033F833D7AEC4A,PinName="Key",Direction="EGPD_Output",PinType.PinCategory="struct",PinType.PinSubCategory="",PinType.PinSubCategoryObject=/Script/CoreUObject.ScriptStruct'"/Script/InputCore.Key"',PinType.PinSubCategoryMemberReference=(),PinType.PinValueType=(),PinType.ContainerType=None,PinType.bIsReference=False,PinType.bIsConst=False,PinType.bIsWeakPointer=False,PinType.bIsUObjectWrapper=False,PinType.bSerializeAsSinglePrecisionFloat=False,DefaultValue="None",AutogeneratedDefaultValue="None",PersistentGuid=00000000000000000000000000000000,bHidden=False,bNotConnectable=False,bDefaultValueIsReadOnly=False,bDefaultValueIsIgnored=False,bAdvancedView=False,bOrphanedPin=False,) - End Object - `, - size: [6, 8], - color: Configuration.nodeColors.red, - icon: SVGIcon.keyboard, - pins: 3, - pinNames: ["Pressed", "Released", "Key"], - delegate: false, - development: false, - }, - { - name: "Num *", - value: String.raw` - Begin Object Class=/Script/BlueprintGraph.K2Node_InputKey Name="K2Node_InputKey_13" - InputKey=Multiply - NodePosX=-304 - NodePosY=368 - NodeGuid=7B9AEEA6FD3D43BE9703A49FC653B3EE - CustomProperties Pin (PinId=13493EE95CF9461D82EBC6312E5FB99B,PinName="Pressed",Direction="EGPD_Output",PinType.PinCategory="exec",PinType.PinSubCategory="",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,) - CustomProperties Pin (PinId=10E9155D52D340E59522D3004C684C58,PinName="Released",Direction="EGPD_Output",PinType.PinCategory="exec",PinType.PinSubCategory="",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,) - CustomProperties Pin (PinId=BFC37A52F314418AAB75DFC22ACFC823,PinName="Key",Direction="EGPD_Output",PinType.PinCategory="struct",PinType.PinSubCategory="",PinType.PinSubCategoryObject=/Script/CoreUObject.ScriptStruct'"/Script/InputCore.Key"',PinType.PinSubCategoryMemberReference=(),PinType.PinValueType=(),PinType.ContainerType=None,PinType.bIsReference=False,PinType.bIsConst=False,PinType.bIsWeakPointer=False,PinType.bIsUObjectWrapper=False,PinType.bSerializeAsSinglePrecisionFloat=False,DefaultValue="None",AutogeneratedDefaultValue="None",PersistentGuid=00000000000000000000000000000000,bHidden=False,bNotConnectable=False,bDefaultValueIsReadOnly=False,bDefaultValueIsIgnored=False,bAdvancedView=False,bOrphanedPin=False,) - End Object - `, - size: [6, 8], - color: Configuration.nodeColors.red, - icon: SVGIcon.keyboard, - pins: 3, - pinNames: ["Pressed", "Released", "Key"], - delegate: false, - development: false, - }, - { - name: "Num /", - value: String.raw` - Begin Object Class=/Script/BlueprintGraph.K2Node_InputKey Name="K2Node_InputKey_14" - InputKey=Divide - NodePosX=-16 - NodePosY=320 - NodeGuid=3614847DFA5F4E029DDAEA817DF34A92 - CustomProperties Pin (PinId=7A1E3D92081743D58198DFBC7F2B8A6E,PinName="Pressed",Direction="EGPD_Output",PinType.PinCategory="exec",PinType.PinSubCategory="",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,) - CustomProperties Pin (PinId=6B03709D315C42229EF60E1CB72EC05F,PinName="Released",Direction="EGPD_Output",PinType.PinCategory="exec",PinType.PinSubCategory="",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,) - CustomProperties Pin (PinId=49C225DB9A9A4054A3710C2C1A36B908,PinName="Key",Direction="EGPD_Output",PinType.PinCategory="struct",PinType.PinSubCategory="",PinType.PinSubCategoryObject=/Script/CoreUObject.ScriptStruct'"/Script/InputCore.Key"',PinType.PinSubCategoryMemberReference=(),PinType.PinValueType=(),PinType.ContainerType=None,PinType.bIsReference=False,PinType.bIsConst=False,PinType.bIsWeakPointer=False,PinType.bIsUObjectWrapper=False,PinType.bSerializeAsSinglePrecisionFloat=False,DefaultValue="None",AutogeneratedDefaultValue="None",PersistentGuid=00000000000000000000000000000000,bHidden=False,bNotConnectable=False,bDefaultValueIsReadOnly=False,bDefaultValueIsIgnored=False,bAdvancedView=False,bOrphanedPin=False,) - End Object - `, - size: [6, 8], - color: Configuration.nodeColors.red, - icon: SVGIcon.keyboard, - pins: 3, - pinNames: ["Pressed", "Released", "Key"], - delegate: false, - development: false, - }, - { - name: "Num .", - value: String.raw` - Begin Object Class=/Script/BlueprintGraph.K2Node_InputKey Name="K2Node_InputKey_15" - InputKey=Decimal - NodePosX=352 - NodePosY=-96 - NodeGuid=572FFD40DB4541D497414E86EC4CC310 - CustomProperties Pin (PinId=8A053F5C10A942F88E96C966ABD2CDFF,PinName="Pressed",Direction="EGPD_Output",PinType.PinCategory="exec",PinType.PinSubCategory="",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,) - CustomProperties Pin (PinId=2E39E39C2F3D4F8F8DDBD0B04A30A23E,PinName="Released",Direction="EGPD_Output",PinType.PinCategory="exec",PinType.PinSubCategory="",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,) - CustomProperties Pin (PinId=BE6CA5BA91FF4AB29D695D881E42EC8C,PinName="Key",Direction="EGPD_Output",PinType.PinCategory="struct",PinType.PinSubCategory="",PinType.PinSubCategoryObject=/Script/CoreUObject.ScriptStruct'"/Script/InputCore.Key"',PinType.PinSubCategoryMemberReference=(),PinType.PinValueType=(),PinType.ContainerType=None,PinType.bIsReference=False,PinType.bIsConst=False,PinType.bIsWeakPointer=False,PinType.bIsUObjectWrapper=False,PinType.bSerializeAsSinglePrecisionFloat=False,DefaultValue="None",AutogeneratedDefaultValue="None",PersistentGuid=00000000000000000000000000000000,bHidden=False,bNotConnectable=False,bDefaultValueIsReadOnly=False,bDefaultValueIsIgnored=False,bAdvancedView=False,bOrphanedPin=False,) - End Object - `, - size: [6, 8], - color: Configuration.nodeColors.red, - icon: SVGIcon.keyboard, - pins: 3, - pinNames: ["Pressed", "Released", "Key"], - delegate: false, - development: false, - }, - { - name: "Debug Key Num *", - value: String.raw` - Begin Object Class=/Script/InputBlueprintNodes.K2Node_InputDebugKey Name="K2Node_InputDebugKey_6" - InputKey=Multiply - NodePosX=-128 - NodePosY=144 - NodeGuid=997A0FD2D9774330AF08F15369C56285 - CustomProperties Pin (PinId=26A30BF9FBC446E6BEED77ACFC4ECF11,PinName="Pressed",Direction="EGPD_Output",PinType.PinCategory="exec",PinType.PinSubCategory="",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,) - CustomProperties Pin (PinId=833512F46F464761ACC78C2555D654E5,PinName="Released",Direction="EGPD_Output",PinType.PinCategory="exec",PinType.PinSubCategory="",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,) - CustomProperties Pin (PinId=ACACF4785ED34276B22969BA174904F2,PinName="Key",Direction="EGPD_Output",PinType.PinCategory="struct",PinType.PinSubCategory="",PinType.PinSubCategoryObject=/Script/CoreUObject.ScriptStruct'"/Script/InputCore.Key"',PinType.PinSubCategoryMemberReference=(),PinType.PinValueType=(),PinType.ContainerType=None,PinType.bIsReference=False,PinType.bIsConst=False,PinType.bIsWeakPointer=False,PinType.bIsUObjectWrapper=False,PinType.bSerializeAsSinglePrecisionFloat=False,DefaultValue="None",AutogeneratedDefaultValue="None",PersistentGuid=00000000000000000000000000000000,bHidden=False,bNotConnectable=False,bDefaultValueIsReadOnly=False,bDefaultValueIsIgnored=False,bAdvancedView=False,bOrphanedPin=False,) - CustomProperties Pin (PinId=AC8DDD237434456DA1802FD4C07EE2F5,PinName="ActionValue",Direction="EGPD_Output",PinType.PinCategory="struct",PinType.PinSubCategory="",PinType.PinSubCategoryObject=/Script/CoreUObject.ScriptStruct'"/Script/EnhancedInput.InputActionValue"',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: [10.5, 11], - color: Configuration.nodeColors.red, - icon: SVGIcon.keyboard, - pins: 4, - pinNames: ["Pressed", "Released", "Key", "Action Value"], - delegate: false, - development: true, - }, -] - -generateNodeTests(tests) diff --git a/cypress/e2e/legacyNodes.cy.js b/cypress/e2e/legacyNodes.cy.js deleted file mode 100644 index 3c6e436..0000000 --- a/cypress/e2e/legacyNodes.cy.js +++ /dev/null @@ -1,79 +0,0 @@ -/// - -import generateNodeTests from "../fixtures/testUtilities.js" -import Configuration from "../../js/Configuration.js" -import SVGIcon from "../../js/SVGIcon.js" - -const tests = [ - { - name: "Flip Flop", - value: String.raw` - Begin Object Class=K2Node_MacroInstance Name="K2Node_MacroInstance_1262" - NodePosX=3984 - NodePosY=-960 - NodeGuid=968059974A02AF6B67D2879EC909179A - Begin Object Class=EdGraphPin Name="EdGraphPin_59688" - End Object - Begin Object Class=EdGraphPin Name="EdGraphPin_59689" - End Object - Begin Object Class=EdGraphPin Name="EdGraphPin_59690" - End Object - Begin Object Class=EdGraphPin Name="EdGraphPin_59691" - End Object - MacroGraphReference=(MacroGraph=EdGraph'/Engine/EditorBlueprintResources/StandardMacros.StandardMacros:FlipFlop',GraphBlueprint=Blueprint'/Engine/EditorBlueprintResources/StandardMacros.StandardMacros',GraphGuid=BFFFAAE4434E166F549665AD1AA89B60) - Pins(0)=EdGraphPin'EdGraphPin_59688' - Pins(1)=EdGraphPin'EdGraphPin_59689' - Pins(2)=EdGraphPin'EdGraphPin_59690' - Pins(3)=EdGraphPin'EdGraphPin_59691' - Begin Object Name="EdGraphPin_59688" - PinType=(PinCategory="exec") - LinkedTo(0)=EdGraphPin'K2Node_InputKey_1185.EdGraphPin_42090' - LinkedTo(1)=EdGraphPin'K2Node_InputKey_14487.EdGraphPin_45417' - End Object - Begin Object Name="EdGraphPin_59689" - PinName="A" - Direction=EGPD_Output - PinType=(PinCategory="exec") - LinkedTo(0)=EdGraphPin'K2Node_CallFunction_7370.EdGraphPin_43320' - End Object - Begin Object Name="EdGraphPin_59690" - PinName="B" - Direction=EGPD_Output - PinType=(PinCategory="exec") - LinkedTo(0)=EdGraphPin'K2Node_CallFunction_44249.EdGraphPin_43272' - End Object - Begin Object Name="EdGraphPin_59691" - PinName="IsA" - Direction=EGPD_Output - PinType=(PinCategory="bool") - End Object - End Object - `, - size: [7.5, 8], - color: Configuration.nodeColors.gray, - icon: SVGIcon.flipflop, - pins: 4, - pinNames: ["A", "B", "Is A"], - delegate: false, - development: false, - additionalTest: - /** @param {import("../../js/element/NodeElement.js").default} node */ - node => { - const entity = node.entity - expect(entity.Class.type).to.be.equal("/Script/BlueprintGraph.K2Node_MacroInstance") - expect(entity.MacroGraphReference.MacroGraph.type).to.be.equal("/Script/Engine.EdGraph") - expect(entity.MacroGraphReference.MacroGraph.path).to.be.equal("/Engine/EditorBlueprintResources/StandardMacros.StandardMacros:FlipFlop") - expect(entity.MacroGraphReference.GraphBlueprint.type).to.be.equal("/Script/Engine.Blueprint") - expect(entity.MacroGraphReference.GraphBlueprint.path).to.be.equal("/Engine/EditorBlueprintResources/StandardMacros.StandardMacros") - const pinObjects = Object.keys(entity) - .filter(k => k.startsWith(Configuration.subObjectAttributeNamePrefix)) - .map(k => /** @type {import("../../js/entity/ObjectEntity.js").default} */(entity[k])) - .filter(v => v.Class) - expect(pinObjects).to.be.of.length(4) - pinObjects.forEach(v => expect(v.getType()).to.be.equal(Configuration.paths.edGraphPinDeprecated)) - expect(entity.getPinEntities()).to.be.of.length(4) - } - }, -] - -generateNodeTests(tests) diff --git a/cypress/e2e/materialNodes.cy.js b/cypress/e2e/materialNodes.cy.js deleted file mode 100644 index 82951c1..0000000 --- a/cypress/e2e/materialNodes.cy.js +++ /dev/null @@ -1,466 +0,0 @@ -/// - -import Configuration from "../../js/Configuration.js" -import generateNodeTests from "../fixtures/testUtilities.js" -import IntegerEntity from "../../js/entity/IntegerEntity.js" -import LinearColorEntity from "../../js/entity/LinearColorEntity.js" -import NodeElement from "../../js/element/NodeElement.js" -import PinElement from "../../js/element/PinElement.js" -import RBSerializationVector2DEntity from "../../js/entity/RBSerializationVector2DEntity.js" -import Utility from "../../js/Utility.js" -import VectorEntity from "../../js/entity/VectorEntity.js" - -const tests = [ - { - name: "Comment", - value: String.raw` - Begin Object Class=/Script/UnrealEd.MaterialGraphNode_Comment Name="MaterialGraphNode_Comment_0" ExportPath=/Script/UnrealEd.MaterialGraphNode_Comment'"/Engine/Transient.M_CobbleStone_Smooth:MaterialGraph_0.MaterialGraphNode_Comment_0"' - Begin Object Class=/Script/Engine.MaterialExpressionComment Name="MaterialExpressionComment_0" ExportPath=/Script/Engine.MaterialExpressionComment'"/Engine/Transient.M_CobbleStone_Smooth:MaterialGraph_0.MaterialGraphNode_Comment_0.MaterialExpressionComment_0"' - End Object - Begin Object Name="MaterialExpressionComment_0" ExportPath=/Script/Engine.MaterialExpressionComment'"/Engine/Transient.M_CobbleStone_Smooth:MaterialGraph_0.MaterialGraphNode_Comment_0.MaterialExpressionComment_0"' - SizeX=249 - SizeY=165 - Text="Comment" - MaterialExpressionEditorX=-5920 - MaterialExpressionEditorY=-704 - MaterialExpressionGuid=E21961B2B09144CF8607171C9D1E3489 - End Object - MaterialExpressionComment=/Script/Engine.MaterialExpressionComment'"MaterialExpressionComment_0"' - bCommentBubbleVisible_InDetailsPanel=False - NodePosX=-5920 - NodePosY=-704 - NodeWidth=249 - NodeHeight=165 - bCommentBubblePinned=False - bCommentBubbleVisible=False - NodeComment="Comment" - NodeGuid=A04CE0EEECF047A4918AC9B13818854E - End Object - `, - delegate: false, - development: false, - }, - { - name: "Constant", - title: "1e+04", - value: String.raw` - Begin Object Class=/Script/UnrealEd.MaterialGraphNode Name="MaterialGraphNode_41" ExportPath=/Script/UnrealEd.MaterialGraphNode'"/Engine/Transient.M_Brick_Cut_Stone:MaterialGraph_0.MaterialGraphNode_41"' - Begin Object Class=/Script/Engine.MaterialExpressionConstant Name="MaterialExpressionConstant_0" ExportPath=/Script/Engine.MaterialExpressionConstant'"/Engine/Transient.M_Brick_Cut_Stone:MaterialGraph_0.MaterialGraphNode_41.MaterialExpressionConstant_0"' - End Object - Begin Object Name="MaterialExpressionConstant_0" ExportPath=/Script/Engine.MaterialExpressionConstant'"/Engine/Transient.M_Brick_Cut_Stone:MaterialGraph_0.MaterialGraphNode_41.MaterialExpressionConstant_0"' - R=10000.000000 - MaterialExpressionEditorX=-1328 - MaterialExpressionEditorY=-880 - MaterialExpressionGuid=1149D6828E794743B8343514F4B5E579 - Material=/Script/UnrealEd.PreviewMaterial'"/Engine/Transient.M_Brick_Cut_Stone"' - bCollapsed=False - End Object - MaterialExpression=/Script/Engine.MaterialExpressionConstant'"MaterialExpressionConstant_0"' - NodePosX=-1328 - NodePosY=-880 - NodeGuid=087DAB628E1148BE89BB1DBC720109F1 - CustomProperties Pin (PinId=A4EA20596A6C410598615F5328D298C4,PinName="Value",PinType.PinCategory="optional",PinType.PinSubCategory="red",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,DefaultValue="10000.0",PersistentGuid=00000000000000000000000000000000,bHidden=False,bNotConnectable=True,bDefaultValueIsReadOnly=False,bDefaultValueIsIgnored=False,bAdvancedView=False,bOrphanedPin=False,) - CustomProperties Pin (PinId=99BE24A176124E02830C5F17A7DEF554,PinName="Output",PinFriendlyName=NSLOCTEXT("MaterialGraphNode", "Space", " "),Direction="EGPD_Output",PinType.PinCategory="",PinType.PinSubCategory="",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 - `, - color: Configuration.nodeColors.green, - icon: false, - pins: 2, - pinNames: ["Value"], - delegate: false, - development: false, - additionalTest: - /** @param {import("../../js/element/NodeElement.js").default} node */ - node => { - /** - * @typedef {import("../../js/element/PinElement.js").default} NumberPinEntity - * @typedef {import("../../js/element/InputElement.js").default} InputElement - */ - const value = 10000.0 - const constantPin = /** @type {NumberPinEntity} */(node.querySelectorAll("ueb-pin")[0]) - expect(Utility.approximatelyEqual(constantPin.getDefaultValue(), value)).to.be.true - /** @type {NodeListOf} */ - const inputFields = node.querySelectorAll("ueb-input") - expect(inputFields).to.be.lengthOf(1) - expect(inputFields[0].innerText).to.equal(Utility.printNumber(value)) - } - }, - { - name: "Constance2Vector", - title: "0.1,23.9", - value: String.raw` - Begin Object Class=/Script/UnrealEd.MaterialGraphNode Name="MaterialGraphNode_42" ExportPath=/Script/UnrealEd.MaterialGraphNode'"/Engine/Transient.M_Brick_Cut_Stone:MaterialGraph_0.MaterialGraphNode_42"' - Begin Object Class=/Script/Engine.MaterialExpressionConstant2Vector Name="MaterialExpressionConstant2Vector_1" ExportPath=/Script/Engine.MaterialExpressionConstant2Vector'"/Engine/Transient.M_Brick_Cut_Stone:MaterialGraph_0.MaterialGraphNode_42.MaterialExpressionConstant2Vector_1"' - End Object - Begin Object Name="MaterialExpressionConstant2Vector_1" ExportPath=/Script/Engine.MaterialExpressionConstant2Vector'"/Engine/Transient.M_Brick_Cut_Stone:MaterialGraph_0.MaterialGraphNode_42.MaterialExpressionConstant2Vector_1"' - R=0.100000 - G=23.888880 - MaterialExpressionEditorX=-1312 - MaterialExpressionEditorY=-1312 - MaterialExpressionGuid=E1302404B22A4D66BB39F9C2652EA0A5 - Material=/Script/UnrealEd.PreviewMaterial'"/Engine/Transient.M_Brick_Cut_Stone"' - End Object - MaterialExpression=/Script/Engine.MaterialExpressionConstant2Vector'"MaterialExpressionConstant2Vector_1"' - NodePosX=-1312 - NodePosY=-1312 - NodeGuid=50998E65A4E54B04A39EADA323DEEEE0 - CustomProperties Pin (PinId=F0B9EDE0763E414096FA82A0C1D3B3D3,PinName="X",PinType.PinCategory="optional",PinType.PinSubCategory="red",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,DefaultValue="0.1",PersistentGuid=00000000000000000000000000000000,bHidden=False,bNotConnectable=True,bDefaultValueIsReadOnly=False,bDefaultValueIsIgnored=False,bAdvancedView=False,bOrphanedPin=False,) - CustomProperties Pin (PinId=A5A2FCBE348D4075A3F7FCAD9299C9CB,PinName="Y",PinType.PinCategory="optional",PinType.PinSubCategory="red",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,DefaultValue="23.88888",PersistentGuid=00000000000000000000000000000000,bHidden=False,bNotConnectable=True,bDefaultValueIsReadOnly=False,bDefaultValueIsIgnored=False,bAdvancedView=False,bOrphanedPin=False,) - CustomProperties Pin (PinId=FF6B0DF61B3849DEA00B539430E73C90,PinName="Output",PinFriendlyName=NSLOCTEXT("MaterialGraphNode", "Space", " "),Direction="EGPD_Output",PinType.PinCategory="mask",PinType.PinSubCategory="",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,) - CustomProperties Pin (PinId=68FF49DB3534433CB8A7486036E434B7,PinName="Output2",PinFriendlyName=NSLOCTEXT("MaterialGraphNode", "Space", " "),Direction="EGPD_Output",PinType.PinCategory="mask",PinType.PinSubCategory="red",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,) - CustomProperties Pin (PinId=A98F7CB8EB5D467D8E2217BF4A1AFA71,PinName="Output3",PinFriendlyName=NSLOCTEXT("MaterialGraphNode", "Space", " "),Direction="EGPD_Output",PinType.PinCategory="mask",PinType.PinSubCategory="green",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 - `, - color: Configuration.nodeColors.yellow, - icon: false, - pins: 5, - pinNames: ["X", "Y"], - delegate: false, - development: false, - additionalTest: - /** @param {import("../../js/element/NodeElement.js").default} node */ - node => { - /** - * @typedef {import("../../js/element/PinElement.js").default} VectorPinElement - * @typedef {import("../../js/element/InputElement.js").default} InputElement - */ - const x = 0.1 - const y = 23.88888 - const xPin = /** @type {VectorPinElement} */(node.querySelectorAll("ueb-pin")[0]) - const yPin = /** @type {VectorPinElement} */(node.querySelectorAll("ueb-pin")[1]) - expect(Utility.approximatelyEqual(xPin.getDefaultValue(), x)).to.be.true - expect(Utility.approximatelyEqual(yPin.getDefaultValue(), y)).to.be.true - /** @type {NodeListOf} */ - const inputFields = node.querySelectorAll("ueb-input") - expect(inputFields).to.be.lengthOf(2) - expect(inputFields[0].innerText).to.equal(Utility.printNumber(x)) - expect(inputFields[1].innerText).to.equal(Utility.printNumber(y)) - } - }, - { - name: "Constant3Vector", - title: "0.00432,123,7.66e+09", - value: String.raw` - Begin Object Class=/Script/UnrealEd.MaterialGraphNode Name="MaterialGraphNode_40" ExportPath=/Script/UnrealEd.MaterialGraphNode'"/Engine/Transient.M_Brick_Cut_Stone:MaterialGraph_0.MaterialGraphNode_40"' - Begin Object Class=/Script/Engine.MaterialExpressionConstant3Vector Name="MaterialExpressionConstant3Vector_1" ExportPath=/Script/Engine.MaterialExpressionConstant3Vector'"/Engine/Transient.M_Brick_Cut_Stone:MaterialGraph_0.MaterialGraphNode_40.MaterialExpressionConstant3Vector_1"' - End Object - Begin Object Name="MaterialExpressionConstant3Vector_1" ExportPath=/Script/Engine.MaterialExpressionConstant3Vector'"/Engine/Transient.M_Brick_Cut_Stone:MaterialGraph_0.MaterialGraphNode_40.MaterialExpressionConstant3Vector_1"' - Constant=(R=0.004320,G=123.199997,B=7657650176.000000,A=0.000000) - MaterialExpressionEditorX=-2592 - MaterialExpressionEditorY=-688 - MaterialExpressionGuid=6854D92803B449F79902FC5BE6D244F9 - Material=/Script/UnrealEd.PreviewMaterial'"/Engine/Transient.M_Brick_Cut_Stone"' - End Object - MaterialExpression=/Script/Engine.MaterialExpressionConstant3Vector'"MaterialExpressionConstant3Vector_1"' - NodePosX=-2592 - NodePosY=-688 - NodeGuid=A166C6EF5D5D4C298F8549BFCD353E30 - CustomProperties Pin (PinId=8CFCA073717A4E7795F803C9A3F3ADA6,PinName="Constant",PinType.PinCategory="optional",PinType.PinSubCategory="rgb",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,DefaultValue="0.00432,123.199997,7657650176.0",PersistentGuid=00000000000000000000000000000000,bHidden=False,bNotConnectable=True,bDefaultValueIsReadOnly=False,bDefaultValueIsIgnored=False,bAdvancedView=False,bOrphanedPin=False,) - CustomProperties Pin (PinId=CD2387366A1745BA9A1F861F7698480A,PinName="Output",PinFriendlyName=NSLOCTEXT("MaterialGraphNode", "Space", " "),Direction="EGPD_Output",PinType.PinCategory="mask",PinType.PinSubCategory="",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,) - CustomProperties Pin (PinId=F1B3B937A4074949AA46A2D9743D51A1,PinName="Output2",PinFriendlyName=NSLOCTEXT("MaterialGraphNode", "Space", " "),Direction="EGPD_Output",PinType.PinCategory="mask",PinType.PinSubCategory="red",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,) - CustomProperties Pin (PinId=2EE41C91F9B841ADA834AA42D10ADE20,PinName="Output3",PinFriendlyName=NSLOCTEXT("MaterialGraphNode", "Space", " "),Direction="EGPD_Output",PinType.PinCategory="mask",PinType.PinSubCategory="green",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,) - CustomProperties Pin (PinId=A4B265999B284DB0A5175E969C471A17,PinName="Output4",PinFriendlyName=NSLOCTEXT("MaterialGraphNode", "Space", " "),Direction="EGPD_Output",PinType.PinCategory="mask",PinType.PinSubCategory="blue",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 - `, - color: Configuration.nodeColors.yellow, - icon: false, - pins: 5, - pinNames: ["Constant"], - delegate: false, - development: false, - additionalTest: - /** @param {import("../../js/element/NodeElement.js").default} node */ - node => { - /** - * @typedef {import("../../js/element/PinElement.js").default} VectorPinElement - * @typedef {import("../../js/element/InputElement.js").default} InputElement - */ - const x = 0.00432 - const y = 123.199997 - const z = 7657650176.0 - const constantPin = /** @type {VectorPinElement} */(node.querySelectorAll("ueb-pin")[0]) - expect(Utility.approximatelyEqual(constantPin.getDefaultValue().X, x)).to.be.true - expect(Utility.approximatelyEqual(constantPin.getDefaultValue().Y, y)).to.be.true - expect(Utility.approximatelyEqual(constantPin.getDefaultValue().Z, z)).to.be.true - /** @type {NodeListOf} */ - const inputFields = node.querySelectorAll("ueb-input") - expect(inputFields).to.be.lengthOf(3) - expect(inputFields[0].innerText).to.equal(Utility.printNumber(x)) - expect(inputFields[1].innerText).to.equal(Utility.printNumber(y)) - expect(inputFields[2].innerText).to.equal(Utility.printNumber(z)) - } - }, - { - name: "Constant4Vector", - title: "4,10.5,2.5e+03,0.33", - value: String.raw` - Begin Object Class=/Script/UnrealEd.MaterialGraphNode Name="MaterialGraphNode_45" ExportPath=/Script/UnrealEd.MaterialGraphNode'"/Engine/Transient.M_Brick_Cut_Stone:MaterialGraph_0.MaterialGraphNode_45"' - Begin Object Class=/Script/Engine.MaterialExpressionConstant4Vector Name="MaterialExpressionConstant4Vector_1" ExportPath=/Script/Engine.MaterialExpressionConstant4Vector'"/Engine/Transient.M_Brick_Cut_Stone:MaterialGraph_0.MaterialGraphNode_45.MaterialExpressionConstant4Vector_1"' - End Object - Begin Object Name="MaterialExpressionConstant4Vector_1" ExportPath=/Script/Engine.MaterialExpressionConstant4Vector'"/Engine/Transient.M_Brick_Cut_Stone:MaterialGraph_0.MaterialGraphNode_45.MaterialExpressionConstant4Vector_1"' - Constant=(R=4.000000,G=10.500000,B=2500.669922,A=0.330000) - MaterialExpressionEditorX=-2864 - MaterialExpressionEditorY=-1600 - MaterialExpressionGuid=FA680399FB1F40299DCCD649976E2007 - Material=/Script/UnrealEd.PreviewMaterial'"/Engine/Transient.M_Brick_Cut_Stone"' - End Object - MaterialExpression=/Script/Engine.MaterialExpressionConstant4Vector'"MaterialExpressionConstant4Vector_1"' - NodePosX=-2864 - NodePosY=-1600 - NodeGuid=E48583AF6A9443409451AADB2BB950D8 - CustomProperties Pin (PinId=053AE05C1AE341DA9DF315E7AD1C181C,PinName="Constant",PinType.PinCategory="optional",PinType.PinSubCategory="rgba",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,DefaultValue="(R=4.000000,G=10.500000,B=2500.669922,A=0.330000)",PersistentGuid=00000000000000000000000000000000,bHidden=False,bNotConnectable=True,bDefaultValueIsReadOnly=False,bDefaultValueIsIgnored=False,bAdvancedView=False,bOrphanedPin=False,) - CustomProperties Pin (PinId=DE4B35BE73EA4746848199EF88522E9F,PinName="Output",PinFriendlyName=NSLOCTEXT("MaterialGraphNode", "Space", " "),Direction="EGPD_Output",PinType.PinCategory="mask",PinType.PinSubCategory="rgba",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,) - CustomProperties Pin (PinId=68ECEB1DC6FD474285DCD24084C6791D,PinName="Output2",PinFriendlyName=NSLOCTEXT("MaterialGraphNode", "Space", " "),Direction="EGPD_Output",PinType.PinCategory="mask",PinType.PinSubCategory="red",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,) - CustomProperties Pin (PinId=4781E87620764899BAFA52A198FBD3CD,PinName="Output3",PinFriendlyName=NSLOCTEXT("MaterialGraphNode", "Space", " "),Direction="EGPD_Output",PinType.PinCategory="mask",PinType.PinSubCategory="green",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,) - CustomProperties Pin (PinId=447371DFAD4C468993232380A3E37707,PinName="Output4",PinFriendlyName=NSLOCTEXT("MaterialGraphNode", "Space", " "),Direction="EGPD_Output",PinType.PinCategory="mask",PinType.PinSubCategory="blue",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,) - CustomProperties Pin (PinId=AFCF5ADE766948A2889F0FAC51FDA44D,PinName="Output5",PinFriendlyName=NSLOCTEXT("MaterialGraphNode", "Space", " "),Direction="EGPD_Output",PinType.PinCategory="mask",PinType.PinSubCategory="alpha",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 - `, - color: Configuration.nodeColors.yellow, - icon: false, - pins: 6, - pinNames: ["Constant"], - delegate: false, - development: false, - additionalTest: - /** @param {import("../../js/element/NodeElement.js").default} node */ - node => { - /** - * @typedef {import("../../js/element/PinElement.js").default} LinearColorPinElement - * @typedef {import("../../js/element/InputElement.js").default} InputElement - */ - const r = 4.0 - const g = 10.5 - const b = 2500.669922 - const a = 0.33 - const constantPin = /** @type {LinearColorPinElement} */(node.querySelectorAll("ueb-pin")[0]) - expect(Utility.approximatelyEqual(constantPin.getDefaultValue().R, r)).to.be.true - expect(Utility.approximatelyEqual(constantPin.getDefaultValue().G, g)).to.be.true - expect(Utility.approximatelyEqual(constantPin.getDefaultValue().B, b)).to.be.true - expect(Utility.approximatelyEqual(constantPin.getDefaultValue().A, a)).to.be.true - } - }, - { - name: "Sqrt", - value: String.raw` - Begin Object Class=/Script/UnrealEd.MaterialGraphNode Name="MaterialGraphNode_24" ExportPath=/Script/UnrealEd.MaterialGraphNode'"/Engine/Transient.M_CobbleStone_Pebble:MaterialGraph_0.MaterialGraphNode_24"' - Begin Object Class=/Script/Engine.MaterialExpressionSquareRoot Name="MaterialExpressionSquareRoot_0" ExportPath=/Script/Engine.MaterialExpressionSquareRoot'"/Engine/Transient.M_CobbleStone_Pebble:MaterialGraph_0.MaterialGraphNode_24.MaterialExpressionSquareRoot_0"' - End Object - Begin Object Name="MaterialExpressionSquareRoot_0" ExportPath=/Script/Engine.MaterialExpressionSquareRoot'"/Engine/Transient.M_CobbleStone_Pebble:MaterialGraph_0.MaterialGraphNode_24.MaterialExpressionSquareRoot_0"' - MaterialExpressionEditorX=-1552 - MaterialExpressionEditorY=-416 - MaterialExpressionGuid=3F37EEB301AE4B0192673A114358C546 - Material=/Script/UnrealEd.PreviewMaterial'"/Engine/Transient.M_CobbleStone_Pebble"' - bCollapsed=False - End Object - MaterialExpression=/Script/Engine.MaterialExpressionSquareRoot'"MaterialExpressionSquareRoot_0"' - NodePosX=-1552 - NodePosY=-416 - NodeGuid=5DB895BECADE486CB5F8A40B72C64637 - CustomProperties Pin (PinId=9BEA4A9DE7DE411EB9590041B6137505,PinName="Input",PinFriendlyName=NSLOCTEXT("MaterialGraphNode", "Space", " "),PinType.PinCategory="required",PinType.PinSubCategory="",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,) - CustomProperties Pin (PinId=4F7BCB72BB064C5FA9EDFC004EEF3591,PinName="Output",PinFriendlyName=NSLOCTEXT("MaterialGraphNode", "Space", " "),Direction="EGPD_Output",PinType.PinCategory="",PinType.PinSubCategory="",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 - `, - color: Configuration.nodeColors.green, - icon: false, - pins: 2, - pinNames: [], - delegate: false, - development: false, - }, - { - name: "Log10", - value: String.raw` - Begin Object Class=/Script/UnrealEd.MaterialGraphNode Name="MaterialGraphNode_26" ExportPath=/Script/UnrealEd.MaterialGraphNode'"/Engine/Transient.M_CobbleStone_Pebble:MaterialGraph_0.MaterialGraphNode_26"' - Begin Object Class=/Script/Engine.MaterialExpressionLogarithm10 Name="MaterialExpressionLogarithm10_0" ExportPath=/Script/Engine.MaterialExpressionLogarithm10'"/Engine/Transient.M_CobbleStone_Pebble:MaterialGraph_0.MaterialGraphNode_26.MaterialExpressionLogarithm10_0"' - End Object - Begin Object Name="MaterialExpressionLogarithm10_0" ExportPath=/Script/Engine.MaterialExpressionLogarithm10'"/Engine/Transient.M_CobbleStone_Pebble:MaterialGraph_0.MaterialGraphNode_26.MaterialExpressionLogarithm10_0"' - MaterialExpressionEditorX=-1699 - MaterialExpressionEditorY=-366 - MaterialExpressionGuid=D6C0D0C0B1C241C7BC5CAE85C32A967E - Material=/Script/UnrealEd.PreviewMaterial'"/Engine/Transient.M_CobbleStone_Pebble"' - End Object - MaterialExpression=/Script/Engine.MaterialExpressionLogarithm10'"MaterialExpressionLogarithm10_0"' - NodePosX=-1699 - NodePosY=-366 - NodeGuid=7432C0BB32F74D54B23EB5FFEB9D7255 - CustomProperties Pin (PinId=C3E922C93B644E5781F1C76FD70CA87D,PinName="X",PinType.PinCategory="required",PinType.PinSubCategory="",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,) - CustomProperties Pin (PinId=48EB102C92F74A7E817286C32A8D217A,PinName="Output",PinFriendlyName=NSLOCTEXT("MaterialGraphNode", "Space", " "),Direction="EGPD_Output",PinType.PinCategory="",PinType.PinSubCategory="",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 - `, - color: Configuration.nodeColors.green, - icon: false, - pins: 2, - pinNames: ["X"], - delegate: false, - development: false, - }, - { - name: "Log2", - value: String.raw` - Begin Object Class=/Script/UnrealEd.MaterialGraphNode Name="MaterialGraphNode_25" ExportPath=/Script/UnrealEd.MaterialGraphNode'"/Engine/Transient.M_CobbleStone_Pebble:MaterialGraph_0.MaterialGraphNode_25"' - Begin Object Class=/Script/Engine.MaterialExpressionLogarithm2 Name="MaterialExpressionLogarithm2_0" ExportPath=/Script/Engine.MaterialExpressionLogarithm2'"/Engine/Transient.M_CobbleStone_Pebble:MaterialGraph_0.MaterialGraphNode_25.MaterialExpressionLogarithm2_0"' - End Object - Begin Object Name="MaterialExpressionLogarithm2_0" ExportPath=/Script/Engine.MaterialExpressionLogarithm2'"/Engine/Transient.M_CobbleStone_Pebble:MaterialGraph_0.MaterialGraphNode_25.MaterialExpressionLogarithm2_0"' - MaterialExpressionEditorX=-1343 - MaterialExpressionEditorY=-380 - MaterialExpressionGuid=DFB490DA67CD4FED91729623FA6F76F9 - Material=/Script/UnrealEd.PreviewMaterial'"/Engine/Transient.M_CobbleStone_Pebble"' - End Object - MaterialExpression=/Script/Engine.MaterialExpressionLogarithm2'"MaterialExpressionLogarithm2_0"' - NodePosX=-1343 - NodePosY=-380 - NodeGuid=C413E5EDE2484269AB5BB8E6E14FD5DC - CustomProperties Pin (PinId=AA0DC6E48E864B2483F3F5239FDBC26D,PinName="X",PinType.PinCategory="required",PinType.PinSubCategory="",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,) - CustomProperties Pin (PinId=7E2CEF20073B4A8DBCA5AEAFBEA3BE0B,PinName="Output",PinFriendlyName=NSLOCTEXT("MaterialGraphNode", "Space", " "),Direction="EGPD_Output",PinType.PinCategory="",PinType.PinSubCategory="",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 - `, - color: Configuration.nodeColors.green, - icon: false, - pins: 2, - pinNames: ["X"], - delegate: false, - development: false, - }, - { - name: "Ln", - value: String.raw` - Begin Object Class=/Script/UnrealEd.MaterialGraphNode Name="MaterialGraphNode_27" ExportPath=/Script/UnrealEd.MaterialGraphNode'"/Engine/Transient.M_CobbleStone_Pebble:MaterialGraph_0.MaterialGraphNode_27"' - Begin Object Class=/Script/InterchangeImport.MaterialExpressionLogarithm Name="MaterialExpressionLogarithm_0" ExportPath=/Script/InterchangeImport.MaterialExpressionLogarithm'"/Engine/Transient.M_CobbleStone_Pebble:MaterialGraph_0.MaterialGraphNode_27.MaterialExpressionLogarithm_0"' - End Object - Begin Object Name="MaterialExpressionLogarithm_0" ExportPath=/Script/InterchangeImport.MaterialExpressionLogarithm'"/Engine/Transient.M_CobbleStone_Pebble:MaterialGraph_0.MaterialGraphNode_27.MaterialExpressionLogarithm_0"' - MaterialExpressionEditorX=-1808 - MaterialExpressionEditorY=-384 - MaterialExpressionGuid=A88BE2DBB50544539F7C340F1C521570 - Material=/Script/UnrealEd.PreviewMaterial'"/Engine/Transient.M_CobbleStone_Pebble"' - End Object - MaterialExpression=/Script/InterchangeImport.MaterialExpressionLogarithm'"MaterialExpressionLogarithm_0"' - NodePosX=-1808 - NodePosY=-384 - NodeGuid=7BC7C5E93F8F47BAB3C0086F9C2AE036 - CustomProperties Pin (PinId=DCCD2C267163472C98FFD44B5AC004DD,PinName="Input",PinFriendlyName=NSLOCTEXT("MaterialGraphNode", "Space", " "),PinType.PinCategory="required",PinType.PinSubCategory="",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,) - CustomProperties Pin (PinId=D0ACD287FE494F0D8CB682DC7EABDD07,PinName="Output",PinFriendlyName=NSLOCTEXT("MaterialGraphNode", "Space", " "),Direction="EGPD_Output",PinType.PinCategory="",PinType.PinSubCategory="",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 - `, - color: Configuration.nodeColors.green, - icon: false, - pins: 2, - pinNames: [], - delegate: false, - development: false, - }, - { - name: "Texture Sample", - value: String.raw` - Begin Object Class=/Script/UnrealEd.MaterialGraphNode Name="MaterialGraphNode_11" ExportPath=/Script/UnrealEd.MaterialGraphNode'"/Engine/Transient.M_CobbleStone_Pebble:MaterialGraph_0.MaterialGraphNode_11"' - Begin Object Class=/Script/Engine.MaterialExpressionTextureSample Name="MaterialExpressionTextureSample_8" ExportPath=/Script/Engine.MaterialExpressionTextureSample'"/Engine/Transient.M_CobbleStone_Pebble:MaterialGraph_0.MaterialGraphNode_11.MaterialExpressionTextureSample_8"' - End Object - Begin Object Name="MaterialExpressionTextureSample_8" ExportPath=/Script/Engine.MaterialExpressionTextureSample'"/Engine/Transient.M_CobbleStone_Pebble:MaterialGraph_0.MaterialGraphNode_11.MaterialExpressionTextureSample_8"' - Coordinates=(Expression=/Script/Engine.MaterialExpressionMultiply'"MaterialExpressionMultiply_12"') - Texture=/Script/Engine.Texture2D'"/Game/StarterContent/Textures/T_MacroVariation.T_MacroVariation"' - MaterialExpressionEditorX=-1056 - MaterialExpressionEditorY=-1392 - MaterialExpressionGuid=8A9B66F54B20419B8A09B9A31EEE0326 - Material=/Script/UnrealEd.PreviewMaterial'"/Engine/Transient.M_CobbleStone_Pebble"' - End Object - MaterialExpression=/Script/Engine.MaterialExpressionTextureSample'"MaterialExpressionTextureSample_8"' - NodePosX=-1056 - NodePosY=-1392 - AdvancedPinDisplay=Shown - NodeGuid=ABB48A5BD2DD43FFA097F233839224B4 - CustomProperties Pin (PinId=57F9CF0C528346ACBF859D991A2977C8,PinName="UVs",PinType.PinCategory="optional",PinType.PinSubCategory="byte",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,DefaultValue="0",LinkedTo=(MaterialGraphNode_13 103847E51C494723BAC2A040FB53291F,),PersistentGuid=00000000000000000000000000000000,bHidden=False,bNotConnectable=False,bDefaultValueIsReadOnly=False,bDefaultValueIsIgnored=False,bAdvancedView=False,bOrphanedPin=False,) - CustomProperties Pin (PinId=04074338E0FB457FB39F2F8737202A9D,PinName="Tex",PinType.PinCategory="optional",PinType.PinSubCategory="",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,) - CustomProperties Pin (PinId=B6216A82E662464E9547EAF8F7C9156B,PinName="Apply View MipBias",PinType.PinCategory="optional",PinType.PinSubCategory="",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,) - CustomProperties Pin (PinId=86F88FBB9F4744ABAF530B1699FD5C45,PinName="MipValueMode",PinType.PinCategory="optional",PinType.PinSubCategory="byte",PinType.PinSubCategoryObject=/Script/CoreUObject.Enum'"/Script/Engine.ETextureMipValueMode"',PinType.PinSubCategoryMemberReference=(),PinType.PinValueType=(),PinType.ContainerType=None,PinType.bIsReference=False,PinType.bIsConst=False,PinType.bIsWeakPointer=False,PinType.bIsUObjectWrapper=False,PinType.bSerializeAsSinglePrecisionFloat=False,DefaultValue="None (use computed mip level)",PersistentGuid=00000000000000000000000000000000,bHidden=False,bNotConnectable=True,bDefaultValueIsReadOnly=False,bDefaultValueIsIgnored=False,bAdvancedView=True,bOrphanedPin=False,) - CustomProperties Pin (PinId=F971048A6287441491B3F431F9204643,PinName="Sampler Source",PinType.PinCategory="optional",PinType.PinSubCategory="byte",PinType.PinSubCategoryObject=/Script/CoreUObject.Enum'"/Script/Engine.ESamplerSourceMode"',PinType.PinSubCategoryMemberReference=(),PinType.PinValueType=(),PinType.ContainerType=None,PinType.bIsReference=False,PinType.bIsConst=False,PinType.bIsWeakPointer=False,PinType.bIsUObjectWrapper=False,PinType.bSerializeAsSinglePrecisionFloat=False,DefaultValue="From texture asset",PersistentGuid=00000000000000000000000000000000,bHidden=False,bNotConnectable=True,bDefaultValueIsReadOnly=False,bDefaultValueIsIgnored=False,bAdvancedView=True,bOrphanedPin=False,) - CustomProperties Pin (PinId=57AE297DD9B641D49F96DE01DE60352D,PinName="Sampler Type",PinType.PinCategory="optional",PinType.PinSubCategory="byte",PinType.PinSubCategoryObject=/Script/CoreUObject.Enum'"/Script/Engine.EMaterialSamplerType"',PinType.PinSubCategoryMemberReference=(),PinType.PinValueType=(),PinType.ContainerType=None,PinType.bIsReference=False,PinType.bIsConst=False,PinType.bIsWeakPointer=False,PinType.bIsUObjectWrapper=False,PinType.bSerializeAsSinglePrecisionFloat=False,DefaultValue="Color",PersistentGuid=00000000000000000000000000000000,bHidden=False,bNotConnectable=True,bDefaultValueIsReadOnly=False,bDefaultValueIsIgnored=False,bAdvancedView=True,bOrphanedPin=False,) - CustomProperties Pin (PinId=5EB251794C274FE29D545A848C25061A,PinName="RGB",Direction="EGPD_Output",PinType.PinCategory="mask",PinType.PinSubCategory="",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,) - CustomProperties Pin (PinId=22B624FB96F2457AB5199C9AC8D6FED7,PinName="R",Direction="EGPD_Output",PinType.PinCategory="mask",PinType.PinSubCategory="red",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,LinkedTo=(MaterialGraphNode_14 F0018EB452FE4F1C8A7A713AB4FBB4BA,),PersistentGuid=00000000000000000000000000000000,bHidden=False,bNotConnectable=False,bDefaultValueIsReadOnly=False,bDefaultValueIsIgnored=False,bAdvancedView=False,bOrphanedPin=False,) - CustomProperties Pin (PinId=0193BCA3C4A04EA3B71604FC23D817AB,PinName="G",Direction="EGPD_Output",PinType.PinCategory="mask",PinType.PinSubCategory="green",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,) - CustomProperties Pin (PinId=3105CB21DB34441582786D8B5FCB9B5E,PinName="B",Direction="EGPD_Output",PinType.PinCategory="mask",PinType.PinSubCategory="blue",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,) - CustomProperties Pin (PinId=057FD07998624E67B613294C0E91FDB0,PinName="A",Direction="EGPD_Output",PinType.PinCategory="mask",PinType.PinSubCategory="alpha",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,) - CustomProperties Pin (PinId=168889DC9D5D4F22B2F581DB425812EA,PinName="RGBA",Direction="EGPD_Output",PinType.PinCategory="mask",PinType.PinSubCategory="rgba",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 - `, - color: Configuration.nodeColors.darkBlue, - icon: false, - pins: 12, - pinNames: [ - "UVs", - "Tex", - "Apply View Mip Bias", - "Mip Value Mode", - "Sampler Source", - "Sampler Type", - "RGB", - "R", - "G", - "B", - "A", - "RGBA" - ], - delegate: false, - development: false, - additionalTest: - /** @param {import("../../js/element/NodeElement.js").default} node */ - node => { - /** - * @typedef {import("../../js/element/PinElement.js").default} LinearColorPinElement - * @typedef {import("../../js/element/InputElement.js").default} InputElement - */ - const r = 4.0 - const g = 10.5 - const b = 2500.669922 - const a = 0.33 - const constantPin = /** @type {LinearColorPinElement} */(node.querySelectorAll("ueb-pin")[0]) - expect(Utility.approximatelyEqual(constantPin.getDefaultValue().R, r)).to.be.true - expect(Utility.approximatelyEqual(constantPin.getDefaultValue().G, g)).to.be.true - expect(Utility.approximatelyEqual(constantPin.getDefaultValue().B, b)).to.be.true - expect(Utility.approximatelyEqual(constantPin.getDefaultValue().A, a)).to.be.true - } - }, - { - name: "Temporal Sobol", - value: String.raw` - Begin Object Class=/Script/UnrealEd.MaterialGraphNode Name="MaterialGraphNode_9" ExportPath=/Script/UnrealEd.MaterialGraphNode'"/Engine/Transient.NewMaterial:MaterialGraph_0.MaterialGraphNode_9"' - Begin Object Class=/Script/Engine.MaterialExpressionTemporalSobol Name="MaterialExpressionTemporalSobol_0" ExportPath=/Script/Engine.MaterialExpressionTemporalSobol'"/Engine/Transient.NewMaterial:MaterialGraph_0.MaterialGraphNode_9.MaterialExpressionTemporalSobol_0"' - End Object - Begin Object Name="MaterialExpressionTemporalSobol_0" ExportPath=/Script/Engine.MaterialExpressionTemporalSobol'"/Engine/Transient.NewMaterial:MaterialGraph_0.MaterialGraphNode_9.MaterialExpressionTemporalSobol_0"' - "ConstIndex"=4 - "ConstSeed"=(X=77.000000,Y=55.000000) - "MaterialExpressionEditorX"=-345 - "MaterialExpressionEditorY"=225 - "MaterialExpressionGuid"=D1A3B12340EE27538A3109B7B3D0E119 - "Material"=/Script/UnrealEd.PreviewMaterial'"/Engine/Transient.NewMaterial"' - End Object - "MaterialExpression"=/Script/Engine.MaterialExpressionTemporalSobol'"MaterialExpressionTemporalSobol_0"' - "NodePosX"=-345 - "NodePosY"=225 - "NodeGuid"=5BE5108B48EB26B6366D4DA6AF99285D - CustomProperties Pin (PinId=E9B08066434FD243EF8856B11A08588D,PinName="Index",PinType.PinCategory="optional",PinType.PinSubCategory="int",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,DefaultValue="4",PersistentGuid=00000000000000000000000000000000,bHidden=False,bNotConnectable=False,bDefaultValueIsReadOnly=False,bDefaultValueIsIgnored=False,bAdvancedView=False,bOrphanedPin=False,) - CustomProperties Pin (PinId=4EB376FB4105AA0CFA52D990C82FE284,PinName="Seed",PinType.PinCategory="optional",PinType.PinSubCategory="rg",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,DefaultValue="X=77.000 Y=55.000",PersistentGuid=00000000000000000000000000000000,bHidden=False,bNotConnectable=False,bDefaultValueIsReadOnly=False,bDefaultValueIsIgnored=False,bAdvancedView=False,bOrphanedPin=False,) - CustomProperties Pin (PinId=4A57DE0448EEA04661E83AA561BE2D94,PinName="Output",PinFriendlyName=NSLOCTEXT("MaterialGraphNode", "Space", " "),Direction="EGPD_Output",PinType.PinCategory="",PinType.PinSubCategory="",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 - `, - color: Configuration.nodeColors.green, - icon: false, - pins: 3, - pinNames: [ - "Index", - "Seed" - ], - delegate: false, - development: false, - additionalTest: - /** @param {NodeElement} node */ - node => { - const indexPin = /** @type {PinElement} */(node.querySelectorAll("ueb-pin")[0]) - const seedPin = /** @type {PinElement} */(node.querySelectorAll("ueb-pin")[1]) - expect(indexPin.getDefaultValue().value).to.be.equal(4) - expect(seedPin.getDefaultValue().X).to.be.equal(77) - expect(seedPin.getDefaultValue().Y).to.be.equal(55) - } - }, -] - -generateNodeTests(tests) diff --git a/cypress/e2e/operationsNodes.cy.js b/cypress/e2e/operationsNodes.cy.js deleted file mode 100644 index fdd7e4c..0000000 --- a/cypress/e2e/operationsNodes.cy.js +++ /dev/null @@ -1,536 +0,0 @@ -/// - -import generateNodeTests from "../fixtures/testUtilities.js" -import NodeElement from "../../js/element/NodeElement.js" -import PinElement from "../../js/element/PinElement.js" -import SVGIcon from "../../js/SVGIcon.js" - -const tests = [ - { - name: "Less", - title: "<", - value: String.raw` - Begin Object Class=/Script/BlueprintGraph.K2Node_PromotableOperator Name="K2Node_PromotableOperator_0" ExportPath=/Script/BlueprintGraph.K2Node_PromotableOperator'"/Temp/Untitled_1.Untitled_1:PersistentLevel.Untitled.EventGraph.K2Node_PromotableOperator_0"' - bIsPureFunc=True - FunctionReference=(MemberParent=/Script/CoreUObject.Class'"/Script/Engine.KismetMathLibrary"',MemberName="Less_TimespanTimespan") - NodePosX=-192 - NodeGuid=2CF3423BF9604C71957BE3EFDFD9DAFF - CustomProperties Pin (PinId=84732B8AE02247EB898E6FB149457E6A,PinName="A",PinType.PinCategory="wildcard",PinType.PinSubCategory="",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,) - CustomProperties Pin (PinId=8218DDBA01704149AD5FE655CE9FAD07,PinName="B",PinType.PinCategory="wildcard",PinType.PinSubCategory="",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,) - CustomProperties Pin (PinId=680CD9CFA7924525AFE30B703BD20BD6,PinName="ReturnValue",Direction="EGPD_Output",PinType.PinCategory="bool",PinType.PinSubCategory="",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: [7.5, 4], - pins: 3, - delegate: false, - development: false, - additionalTest: - /** @param {NodeElement} node */ - node => { - let pins = /** @type {PinElement[]} */(node.querySelectorAll("ueb-pin")) - for (const pin of pins) { - expect(pin.template.renderIcon().strings.join("").trim()).to.be.equal(SVGIcon.operationPin.strings.join("").trim()) - } - } - }, - { - name: "Less Equal", - title: "<=", - value: String.raw` - Begin Object Class=/Script/BlueprintGraph.K2Node_PromotableOperator Name="K2Node_PromotableOperator_6" ExportPath=/Script/BlueprintGraph.K2Node_PromotableOperator'"/Temp/Untitled_1.Untitled_1:PersistentLevel.Untitled.EventGraph.K2Node_PromotableOperator_6"' - bIsPureFunc=True - FunctionReference=(MemberParent=/Script/CoreUObject.Class'"/Script/Engine.KismetMathLibrary"',MemberName="LessEqual_DoubleDouble") - NodePosX=-128 - NodePosY=-128 - NodeGuid=BE4FB00052224A8AA7695069C0A4A6C0 - CustomProperties Pin (PinId=B83E6D436D73468087242654C1E71F11,PinName="A",PinToolTip="A\nWildcard",PinType.PinCategory="wildcard",PinType.PinSubCategory="",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,) - CustomProperties Pin (PinId=25C2CC62A0834A07B81E770F3BD41493,PinName="B",PinToolTip="B\nWildcard",PinType.PinCategory="wildcard",PinType.PinSubCategory="",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,) - CustomProperties Pin (PinId=3E135915A0FE467CBC499FDCAAB3906A,PinName="ReturnValue",PinToolTip="Return Value\nBoolean\n\nReturns true if A is Less than or equal to B (A <= B)",Direction="EGPD_Output",PinType.PinCategory="bool",PinType.PinSubCategory="",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,) - CustomProperties Pin (PinId=708C4E7324034655B5677DAAE057220D,PinName="ErrorTolerance",PinToolTip="Error Tolerance\nWildcard",PinType.PinCategory="wildcard",PinType.PinSubCategory="",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=True,bNotConnectable=False,bDefaultValueIsReadOnly=False,bDefaultValueIsIgnored=False,bAdvancedView=False,bOrphanedPin=False,) - End Object - `, - size: [9, 4], - pins: 3, - delegate: false, - development: false, - additionalTest: - /** @param {NodeElement} node */ - node => { - let pins = /** @type {PinElement[]} */(node.querySelectorAll("ueb-pin")) - for (const pin of pins) { - expect(pin.template.renderIcon().strings.join("").trim()).to.be.equal(SVGIcon.operationPin.strings.join("").trim()) - } - } - }, - { - name: "Equal", - title: "==", - value: String.raw` - Begin Object Class=/Script/BlueprintGraph.K2Node_PromotableOperator Name="K2Node_PromotableOperator_0" - bIsPureFunc=True - FunctionReference=(MemberParent=/Script/CoreUObject.Class'"/Script/UMG.SlateBlueprintLibrary"',MemberName="EqualEqual_SlateBrush") - NodePosX=704 - NodePosY=-320 - NodeGuid=F0C20233151743A3A37807274CF6DF61 - CustomProperties Pin (PinId=4E90C9A1D4034AE68B26FF54DEDF4764,PinName="A",PinToolTip="A\nWildcard",PinType.PinCategory="wildcard",PinType.PinSubCategory="",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,) - CustomProperties Pin (PinId=1E4802AFBB51467083225499C8967FA5,PinName="B",PinToolTip="B\nWildcard",PinType.PinCategory="wildcard",PinType.PinSubCategory="",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,) - CustomProperties Pin (PinId=F34B818F900A4222BCC1DE111C2C7816,PinName="ReturnValue",PinToolTip="Return Value\nBoolean\n\nReturns whether brushes A and B are identical.",Direction="EGPD_Output",PinType.PinCategory="bool",PinType.PinSubCategory="",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, 4], - pins: 3, - delegate: false, - development: false, - additionalTest: - /** @param {NodeElement} node */ - node => { - let pins = /** @type {PinElement[]} */(node.querySelectorAll("ueb-pin")) - for (const pin of pins) { - expect(pin.template.renderIcon().strings.join("").trim()).to.be.equal(SVGIcon.operationPin.strings.join("").trim()) - } - } - }, - { - name: "Greater", - title: ">", - value: String.raw` - Begin Object Class=/Script/BlueprintGraph.K2Node_PromotableOperator Name="K2Node_PromotableOperator_3" ExportPath=/Script/BlueprintGraph.K2Node_PromotableOperator'"/Temp/Untitled_1.Untitled_1:PersistentLevel.Untitled.EventGraph.K2Node_PromotableOperator_3"' - "bIsPureFunc"=True - "FunctionReference"=(MemberParent=/Script/CoreUObject.Class'"/Script/Engine.KismetMathLibrary"',MemberName="Greater_TimespanTimespan") - "NodePosX"=-288 - "NodeGuid"=F7FABC9C44966BAAC491D4AE6E588CCC - CustomProperties Pin (PinId=E5B7684F4812610A60F5E8A1217BD592,PinName="A",PinType.PinCategory="wildcard",PinType.PinSubCategory="",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,) - CustomProperties Pin (PinId=62516570444A943984F804A683C737A1,PinName="B",PinType.PinCategory="wildcard",PinType.PinSubCategory="",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,) - CustomProperties Pin (PinId=58F3E9EC42933068D0F9B493EB7C1F16,PinName="ReturnValue",Direction="EGPD_Output",PinType.PinCategory="bool",PinType.PinSubCategory="",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: [7.5, 4], - pins: 3, - delegate: false, - development: false, - additionalTest: - /** @param {NodeElement} node */ - node => { - let pins = /** @type {PinElement[]} */(node.querySelectorAll("ueb-pin")) - for (const pin of pins) { - expect(pin.template.renderIcon().strings.join("").trim()).to.be.equal(SVGIcon.operationPin.strings.join("").trim()) - } - } - }, - { - name: "Greater Equal", - title: ">=", - value: String.raw` - Begin Object Class=/Script/BlueprintGraph.K2Node_PromotableOperator Name="K2Node_PromotableOperator_8" ExportPath=/Script/BlueprintGraph.K2Node_PromotableOperator'"/Temp/Untitled_1.Untitled_1:PersistentLevel.Untitled.EventGraph.K2Node_PromotableOperator_8"' - bIsPureFunc=True - FunctionReference=(MemberParent=/Script/CoreUObject.Class'"/Script/Engine.KismetMathLibrary"',MemberName="GreaterEqual_ByteByte") - NodePosX=-128 - NodePosY=128 - NodeGuid=97ABB121B7F6446CA7C5A0D2BB35D9CB - CustomProperties Pin (PinId=9DC86E2C7B5E4D499EDD11C26E0CE2F0,PinName="A",PinToolTip="A\nWildcard",PinType.PinCategory="wildcard",PinType.PinSubCategory="",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,) - CustomProperties Pin (PinId=C4C29B972BCE479681067C79A8B45C55,PinName="B",PinToolTip="B\nWildcard",PinType.PinCategory="wildcard",PinType.PinSubCategory="",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,) - CustomProperties Pin (PinId=BC0F5E45AED74808A59F5E7ACF749DA7,PinName="ReturnValue",PinToolTip="Return Value\nBoolean\n\nReturns true if A is greater than or equal to B (A >= B)",Direction="EGPD_Output",PinType.PinCategory="bool",PinType.PinSubCategory="",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,) - CustomProperties Pin (PinId=D231C63140CC4A37946C69DA21245F1C,PinName="ErrorTolerance",PinToolTip="Error Tolerance\nWildcard",PinType.PinCategory="wildcard",PinType.PinSubCategory="",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=True,bNotConnectable=False,bDefaultValueIsReadOnly=False,bDefaultValueIsIgnored=False,bAdvancedView=False,bOrphanedPin=False,) - End Object - `, - size: [9, 4], - pins: 3, - delegate: false, - development: false, - additionalTest: - /** @param {NodeElement} node */ - node => { - let pins = /** @type {PinElement[]} */(node.querySelectorAll("ueb-pin")) - for (const pin of pins) { - expect(pin.template.renderIcon().strings.join("").trim()).to.be.equal(SVGIcon.operationPin.strings.join("").trim()) - } - } - }, - { - name: "AND", - value: String.raw` - Begin Object Class=/Script/BlueprintGraph.K2Node_CommutativeAssociativeBinaryOperator Name="K2Node_CommutativeAssociativeBinaryOperator_0" ExportPath=/Script/BlueprintGraph.K2Node_CommutativeAssociativeBinaryOperator'"/Temp/Untitled_1.Untitled_1:PersistentLevel.Untitled.EventGraph.K2Node_CommutativeAssociativeBinaryOperator_0"' - bIsPureFunc=True - FunctionReference=(MemberParent=/Script/CoreUObject.Class'"/Script/Engine.KismetMathLibrary"',MemberName="BooleanAND") - NodePosX=-128 - NodePosY=240 - NodeGuid=9E1635738D62423D9FD5F68526C4C6BF - CustomProperties Pin (PinId=DDE978511D404B33BC2B8FE6546ED348,PinName="self",PinFriendlyName=NSLOCTEXT("K2Node", "Target", "Target"),PinToolTip="Target\nKismet Math Library Object Reference",PinType.PinCategory="object",PinType.PinSubCategory="",PinType.PinSubCategoryObject=/Script/CoreUObject.Class'"/Script/Engine.KismetMathLibrary"',PinType.PinSubCategoryMemberReference=(),PinType.PinValueType=(),PinType.ContainerType=None,PinType.bIsReference=False,PinType.bIsConst=False,PinType.bIsWeakPointer=False,PinType.bIsUObjectWrapper=False,PinType.bSerializeAsSinglePrecisionFloat=False,DefaultObject="/Script/Engine.Default__KismetMathLibrary",PersistentGuid=00000000000000000000000000000000,bHidden=True,bNotConnectable=False,bDefaultValueIsReadOnly=False,bDefaultValueIsIgnored=False,bAdvancedView=False,bOrphanedPin=False,) - CustomProperties Pin (PinId=651536110BC540B8902A00F40231EC0E,PinName="A",PinToolTip="A\nBoolean",PinType.PinCategory="bool",PinType.PinSubCategory="",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,DefaultValue="false",AutogeneratedDefaultValue="false",PersistentGuid=00000000000000000000000000000000,bHidden=False,bNotConnectable=False,bDefaultValueIsReadOnly=False,bDefaultValueIsIgnored=False,bAdvancedView=False,bOrphanedPin=False,) - CustomProperties Pin (PinId=AD6A19CF20A24DAB9D04A29222CFC7A4,PinName="B",PinToolTip="B\nBoolean",PinType.PinCategory="bool",PinType.PinSubCategory="",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,DefaultValue="false",AutogeneratedDefaultValue="false",PersistentGuid=00000000000000000000000000000000,bHidden=False,bNotConnectable=False,bDefaultValueIsReadOnly=False,bDefaultValueIsIgnored=False,bAdvancedView=False,bOrphanedPin=False,) - CustomProperties Pin (PinId=6CB3B4F8E6B245FDAC6C8EBB4C7255CA,PinName="ReturnValue",PinToolTip="Return Value\nBoolean\n\nReturns the logical AND of two values (A AND B)",Direction="EGPD_Output",PinType.PinCategory="bool",PinType.PinSubCategory="",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,DefaultValue="false",AutogeneratedDefaultValue="false",PersistentGuid=00000000000000000000000000000000,bHidden=False,bNotConnectable=False,bDefaultValueIsReadOnly=False,bDefaultValueIsIgnored=False,bAdvancedView=False,bOrphanedPin=False,) - End Object - `, - size: [12, 5], - pins: 3, - delegate: false, - development: false, - variadic: true, - additionalTest: - /** @param {NodeElement} node */ - node => { - let pins = /** @type {PinElement[]} */(node.querySelectorAll("ueb-pin")) - for (const pin of pins) { - expect(pin.template.renderIcon().strings.join("").trim()).to.be.equal(SVGIcon.operationPin.strings.join("").trim()) - } - } - }, - { - name: "NAND", - value: String.raw` - Begin Object Class=/Script/BlueprintGraph.K2Node_CommutativeAssociativeBinaryOperator Name="K2Node_CommutativeAssociativeBinaryOperator_1" ExportPath=/Script/BlueprintGraph.K2Node_CommutativeAssociativeBinaryOperator'"/Temp/Untitled_1.Untitled_1:PersistentLevel.Untitled.EventGraph.K2Node_CommutativeAssociativeBinaryOperator_1"' - bIsPureFunc=True - FunctionReference=(MemberParent=/Script/CoreUObject.Class'"/Script/Engine.KismetMathLibrary"',MemberName="BooleanNAND") - NodePosX=128 - NodePosY=256 - NodeGuid=04151C35334346F485A72260148E3683 - CustomProperties Pin (PinId=DA6F57B8405A454CB732191CC8E1DA8C,PinName="self",PinFriendlyName=NSLOCTEXT("K2Node", "Target", "Target"),PinToolTip="Target\nKismet Math Library Object Reference",PinType.PinCategory="object",PinType.PinSubCategory="",PinType.PinSubCategoryObject=/Script/CoreUObject.Class'"/Script/Engine.KismetMathLibrary"',PinType.PinSubCategoryMemberReference=(),PinType.PinValueType=(),PinType.ContainerType=None,PinType.bIsReference=False,PinType.bIsConst=False,PinType.bIsWeakPointer=False,PinType.bIsUObjectWrapper=False,PinType.bSerializeAsSinglePrecisionFloat=False,DefaultObject="/Script/Engine.Default__KismetMathLibrary",PersistentGuid=00000000000000000000000000000000,bHidden=True,bNotConnectable=False,bDefaultValueIsReadOnly=False,bDefaultValueIsIgnored=False,bAdvancedView=False,bOrphanedPin=False,) - CustomProperties Pin (PinId=FE1504B885304718AFBB1F25A267B0E5,PinName="A",PinToolTip="A\nBoolean",PinType.PinCategory="bool",PinType.PinSubCategory="",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,DefaultValue="false",AutogeneratedDefaultValue="false",PersistentGuid=00000000000000000000000000000000,bHidden=False,bNotConnectable=False,bDefaultValueIsReadOnly=False,bDefaultValueIsIgnored=False,bAdvancedView=False,bOrphanedPin=False,) - CustomProperties Pin (PinId=C86F9F7461DF492F90491C54C15531AC,PinName="B",PinToolTip="B\nBoolean",PinType.PinCategory="bool",PinType.PinSubCategory="",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,DefaultValue="false",AutogeneratedDefaultValue="false",PersistentGuid=00000000000000000000000000000000,bHidden=False,bNotConnectable=False,bDefaultValueIsReadOnly=False,bDefaultValueIsIgnored=False,bAdvancedView=False,bOrphanedPin=False,) - CustomProperties Pin (PinId=61F2A8E28586405D8CFF9713B457A9DC,PinName="ReturnValue",PinToolTip="Return Value\nBoolean\n\nReturns the logical NAND of two values (A AND B)",Direction="EGPD_Output",PinType.PinCategory="bool",PinType.PinSubCategory="",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,DefaultValue="false",AutogeneratedDefaultValue="false",PersistentGuid=00000000000000000000000000000000,bHidden=False,bNotConnectable=False,bDefaultValueIsReadOnly=False,bDefaultValueIsIgnored=False,bAdvancedView=False,bOrphanedPin=False,) - End Object - `, - size: [13, 5], - pins: 3, - delegate: false, - development: false, - variadic: true, - additionalTest: - /** @param {NodeElement} node */ - node => { - let pins = /** @type {PinElement[]} */(node.querySelectorAll("ueb-pin")) - for (const pin of pins) { - expect(pin.template.renderIcon().strings.join("").trim()).to.be.equal(SVGIcon.operationPin.strings.join("").trim()) - } - } - }, - { - name: "Bitwise AND 1", - title: "&", - value: String.raw` - Begin Object Class=/Script/BlueprintGraph.K2Node_CommutativeAssociativeBinaryOperator Name="K2Node_CommutativeAssociativeBinaryOperator_7" ExportPath=/Script/BlueprintGraph.K2Node_CommutativeAssociativeBinaryOperator'"/Temp/Untitled_1.Untitled_1:PersistentLevel.Untitled.EventGraph.K2Node_CommutativeAssociativeBinaryOperator_7"' - bIsPureFunc=True - FunctionReference=(MemberParent=/Script/CoreUObject.Class'"/Script/Engine.KismetMathLibrary"',MemberName="And_IntInt") - NodePosX=-128 - NodePosY=-128 - NodeGuid=31C7173497E64F959674B9541C5E5E6A - CustomProperties Pin (PinId=D5A01DF5C9D84769BB13CAC3B62612C6,PinName="self",PinFriendlyName=NSLOCTEXT("K2Node", "Target", "Target"),PinToolTip="Target\nKismet Math Library Object Reference",PinType.PinCategory="object",PinType.PinSubCategory="",PinType.PinSubCategoryObject=/Script/CoreUObject.Class'"/Script/Engine.KismetMathLibrary"',PinType.PinSubCategoryMemberReference=(),PinType.PinValueType=(),PinType.ContainerType=None,PinType.bIsReference=False,PinType.bIsConst=False,PinType.bIsWeakPointer=False,PinType.bIsUObjectWrapper=False,PinType.bSerializeAsSinglePrecisionFloat=False,DefaultObject="/Script/Engine.Default__KismetMathLibrary",PersistentGuid=00000000000000000000000000000000,bHidden=True,bNotConnectable=False,bDefaultValueIsReadOnly=False,bDefaultValueIsIgnored=False,bAdvancedView=False,bOrphanedPin=False,) - CustomProperties Pin (PinId=EF6F926F005143BB8C751D2ED71FD820,PinName="A",PinToolTip="A\nInteger",PinType.PinCategory="int",PinType.PinSubCategory="",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,DefaultValue="0",AutogeneratedDefaultValue="0",PersistentGuid=00000000000000000000000000000000,bHidden=False,bNotConnectable=False,bDefaultValueIsReadOnly=False,bDefaultValueIsIgnored=False,bAdvancedView=False,bOrphanedPin=False,) - CustomProperties Pin (PinId=4DFFC112D90C4E59B1D8B4A8278E6BE5,PinName="B",PinToolTip="B\nInteger",PinType.PinCategory="int",PinType.PinSubCategory="",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,DefaultValue="0",AutogeneratedDefaultValue="0",PersistentGuid=00000000000000000000000000000000,bHidden=False,bNotConnectable=False,bDefaultValueIsReadOnly=False,bDefaultValueIsIgnored=False,bAdvancedView=False,bOrphanedPin=False,) - CustomProperties Pin (PinId=4B661B544EA44016B03B498A7606DA99,PinName="ReturnValue",PinToolTip="Return Value\nInteger\n\nBitwise AND (A & B)",Direction="EGPD_Output",PinType.PinCategory="int",PinType.PinSubCategory="",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,DefaultValue="0",AutogeneratedDefaultValue="0",PersistentGuid=00000000000000000000000000000000,bHidden=False,bNotConnectable=False,bDefaultValueIsReadOnly=False,bDefaultValueIsIgnored=False,bAdvancedView=False,bOrphanedPin=False,) - End Object - `, - size: [9, 5], - pins: 3, - delegate: false, - development: false, - variadic: true, - additionalTest: - /** @param {NodeElement} node */ - node => { - let pins = /** @type {PinElement[]} */(node.querySelectorAll("ueb-pin")) - for (const pin of pins) { - expect(pin.template.renderIcon().strings.join("").trim()).to.be.equal(SVGIcon.operationPin.strings.join("").trim()) - } - } - }, - { - name: "Bitwise AND 2", - title: "&", - value: String.raw` - Begin Object Class=/Script/BlueprintGraph.K2Node_CommutativeAssociativeBinaryOperator Name="K2Node_CommutativeAssociativeBinaryOperator_8" ExportPath=/Script/BlueprintGraph.K2Node_CommutativeAssociativeBinaryOperator'"/Temp/Untitled_1.Untitled_1:PersistentLevel.Untitled.EventGraph.K2Node_CommutativeAssociativeBinaryOperator_8"' - bIsPureFunc=True - FunctionReference=(MemberParent=/Script/CoreUObject.Class'"/Script/Engine.KismetMathLibrary"',MemberName="And_Int64Int64") - NodePosX=128 - NodePosY=-128 - NodeGuid=48CCB97A110B4A6F8D54A95E138ABCE3 - CustomProperties Pin (PinId=A9992AAF8CFA4349A77A5BAE866884D3,PinName="self",PinFriendlyName=NSLOCTEXT("K2Node", "Target", "Target"),PinToolTip="Target\nKismet Math Library Object Reference",PinType.PinCategory="object",PinType.PinSubCategory="",PinType.PinSubCategoryObject=/Script/CoreUObject.Class'"/Script/Engine.KismetMathLibrary"',PinType.PinSubCategoryMemberReference=(),PinType.PinValueType=(),PinType.ContainerType=None,PinType.bIsReference=False,PinType.bIsConst=False,PinType.bIsWeakPointer=False,PinType.bIsUObjectWrapper=False,PinType.bSerializeAsSinglePrecisionFloat=False,DefaultObject="/Script/Engine.Default__KismetMathLibrary",PersistentGuid=00000000000000000000000000000000,bHidden=True,bNotConnectable=False,bDefaultValueIsReadOnly=False,bDefaultValueIsIgnored=False,bAdvancedView=False,bOrphanedPin=False,) - CustomProperties Pin (PinId=7433EDE1E9CE4293BC3C8D73BC9D9E65,PinName="A",PinToolTip="A\nInteger64",PinType.PinCategory="int64",PinType.PinSubCategory="",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,DefaultValue="0",AutogeneratedDefaultValue="0",PersistentGuid=00000000000000000000000000000000,bHidden=False,bNotConnectable=False,bDefaultValueIsReadOnly=False,bDefaultValueIsIgnored=False,bAdvancedView=False,bOrphanedPin=False,) - CustomProperties Pin (PinId=C5CCE51FCE554859A66EDCA66875B382,PinName="B",PinToolTip="B\nInteger64",PinType.PinCategory="int64",PinType.PinSubCategory="",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,DefaultValue="0",AutogeneratedDefaultValue="0",PersistentGuid=00000000000000000000000000000000,bHidden=False,bNotConnectable=False,bDefaultValueIsReadOnly=False,bDefaultValueIsIgnored=False,bAdvancedView=False,bOrphanedPin=False,) - CustomProperties Pin (PinId=A4753BC402474CDFB5A2513A2D7FC8A5,PinName="ReturnValue",PinToolTip="Return Value\nInteger64\n\nBitwise AND (A & B)",Direction="EGPD_Output",PinType.PinCategory="int64",PinType.PinSubCategory="",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,DefaultValue="0",AutogeneratedDefaultValue="0",PersistentGuid=00000000000000000000000000000000,bHidden=False,bNotConnectable=False,bDefaultValueIsReadOnly=False,bDefaultValueIsIgnored=False,bAdvancedView=False,bOrphanedPin=False,) - End Object - `, - size: [9, 5], - pins: 3, - delegate: false, - development: false, - variadic: true, - additionalTest: - /** @param {NodeElement} node */ - node => { - let pins = /** @type {PinElement[]} */(node.querySelectorAll("ueb-pin")) - for (const pin of pins) { - expect(pin.template.renderIcon().strings.join("").trim()).to.be.equal(SVGIcon.operationPin.strings.join("").trim()) - } - } - }, - { - name: "Bitwise OR 1", - title: "|", - value: String.raw` - Begin Object Class=/Script/BlueprintGraph.K2Node_CommutativeAssociativeBinaryOperator Name="K2Node_CommutativeAssociativeBinaryOperator_9" ExportPath=/Script/BlueprintGraph.K2Node_CommutativeAssociativeBinaryOperator'"/Temp/Untitled_1.Untitled_1:PersistentLevel.Untitled.EventGraph.K2Node_CommutativeAssociativeBinaryOperator_9"' - NumAdditionalInputs=3 - bIsPureFunc=True - FunctionReference=(MemberParent=/Script/CoreUObject.Class'"/Script/Engine.KismetMathLibrary"',MemberName="Or_IntInt") - NodePosX=-128 - NodeGuid=06CD76925AB9409989EA7D87CE23D6F5 - CustomProperties Pin (PinId=F8954C94C4174CDD84E8B12E07AF3C8E,PinName="self",PinFriendlyName=NSLOCTEXT("K2Node", "Target", "Target"),PinToolTip="Target\nKismet Math Library Object Reference",PinType.PinCategory="object",PinType.PinSubCategory="",PinType.PinSubCategoryObject=/Script/CoreUObject.Class'"/Script/Engine.KismetMathLibrary"',PinType.PinSubCategoryMemberReference=(),PinType.PinValueType=(),PinType.ContainerType=None,PinType.bIsReference=False,PinType.bIsConst=False,PinType.bIsWeakPointer=False,PinType.bIsUObjectWrapper=False,PinType.bSerializeAsSinglePrecisionFloat=False,DefaultObject="/Script/Engine.Default__KismetMathLibrary",PersistentGuid=00000000000000000000000000000000,bHidden=True,bNotConnectable=False,bDefaultValueIsReadOnly=False,bDefaultValueIsIgnored=False,bAdvancedView=False,bOrphanedPin=False,) - CustomProperties Pin (PinId=13660D801D69401399CD1A1F5A35433B,PinName="A",PinToolTip="A\nInteger",PinType.PinCategory="int",PinType.PinSubCategory="",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,DefaultValue="0",AutogeneratedDefaultValue="0",PersistentGuid=00000000000000000000000000000000,bHidden=False,bNotConnectable=False,bDefaultValueIsReadOnly=False,bDefaultValueIsIgnored=False,bAdvancedView=False,bOrphanedPin=False,) - CustomProperties Pin (PinId=D3721D48AE4545B59E01352B68C5D5AE,PinName="B",PinToolTip="B\nInteger",PinType.PinCategory="int",PinType.PinSubCategory="",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,DefaultValue="0",AutogeneratedDefaultValue="0",PersistentGuid=00000000000000000000000000000000,bHidden=False,bNotConnectable=False,bDefaultValueIsReadOnly=False,bDefaultValueIsIgnored=False,bAdvancedView=False,bOrphanedPin=False,) - CustomProperties Pin (PinId=D6418AD11A2E4FD4A3E691DCDD9ED5C2,PinName="ReturnValue",PinToolTip="Return Value\nInteger\n\nBitwise OR (A | B)",Direction="EGPD_Output",PinType.PinCategory="int",PinType.PinSubCategory="",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,DefaultValue="0",AutogeneratedDefaultValue="0",PersistentGuid=00000000000000000000000000000000,bHidden=False,bNotConnectable=False,bDefaultValueIsReadOnly=False,bDefaultValueIsIgnored=False,bAdvancedView=False,bOrphanedPin=False,) - CustomProperties Pin (PinId=54F9F4C9334341C6B393DDD94521C7F0,PinName="C",PinType.PinCategory="int",PinType.PinSubCategory="",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,) - CustomProperties Pin (PinId=428ED3DA8C334D96B16D2660499AAD64,PinName="D",PinType.PinCategory="int",PinType.PinSubCategory="",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,) - CustomProperties Pin (PinId=2B26090C03C7442CB4706D0757901B53,PinName="E",PinType.PinCategory="int",PinType.PinSubCategory="",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, 11], - pins: 6, - delegate: false, - development: false, - variadic: true, - additionalTest: - /** @param {NodeElement} node */ - node => { - let pins = /** @type {PinElement[]} */(node.querySelectorAll("ueb-pin")) - for (const pin of pins) { - expect(pin.template.renderIcon().strings.join("").trim()).to.be.equal(SVGIcon.operationPin.strings.join("").trim()) - } - } - }, - { - name: "Bitwise OR 2", - title: "|", - value: String.raw` - Begin Object Class=/Script/BlueprintGraph.K2Node_CommutativeAssociativeBinaryOperator Name="K2Node_CommutativeAssociativeBinaryOperator_10" ExportPath=/Script/BlueprintGraph.K2Node_CommutativeAssociativeBinaryOperator'"/Temp/Untitled_1.Untitled_1:PersistentLevel.Untitled.EventGraph.K2Node_CommutativeAssociativeBinaryOperator_10"' - NumAdditionalInputs=1 - bIsPureFunc=True - FunctionReference=(MemberParent=/Script/CoreUObject.Class'"/Script/Engine.KismetMathLibrary"',MemberName="Or_Int64Int64") - NodePosX=128 - NodeGuid=490A54B477EA44128BA4024490F503F3 - CustomProperties Pin (PinId=EE1E4196F1554E14A0288F9F68BF25D9,PinName="self",PinFriendlyName=NSLOCTEXT("K2Node", "Target", "Target"),PinToolTip="Target\nKismet Math Library Object Reference",PinType.PinCategory="object",PinType.PinSubCategory="",PinType.PinSubCategoryObject=/Script/CoreUObject.Class'"/Script/Engine.KismetMathLibrary"',PinType.PinSubCategoryMemberReference=(),PinType.PinValueType=(),PinType.ContainerType=None,PinType.bIsReference=False,PinType.bIsConst=False,PinType.bIsWeakPointer=False,PinType.bIsUObjectWrapper=False,PinType.bSerializeAsSinglePrecisionFloat=False,DefaultObject="/Script/Engine.Default__KismetMathLibrary",PersistentGuid=00000000000000000000000000000000,bHidden=True,bNotConnectable=False,bDefaultValueIsReadOnly=False,bDefaultValueIsIgnored=False,bAdvancedView=False,bOrphanedPin=False,) - CustomProperties Pin (PinId=64AB191561114DA58FA423353A7EAA14,PinName="A",PinToolTip="A\nInteger64",PinType.PinCategory="int64",PinType.PinSubCategory="",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,DefaultValue="0",AutogeneratedDefaultValue="0",PersistentGuid=00000000000000000000000000000000,bHidden=False,bNotConnectable=False,bDefaultValueIsReadOnly=False,bDefaultValueIsIgnored=False,bAdvancedView=False,bOrphanedPin=False,) - CustomProperties Pin (PinId=4B572FB2A58647ED8869D587215EF6D2,PinName="B",PinToolTip="B\nInteger64",PinType.PinCategory="int64",PinType.PinSubCategory="",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,DefaultValue="0",AutogeneratedDefaultValue="0",PersistentGuid=00000000000000000000000000000000,bHidden=False,bNotConnectable=False,bDefaultValueIsReadOnly=False,bDefaultValueIsIgnored=False,bAdvancedView=False,bOrphanedPin=False,) - CustomProperties Pin (PinId=BBC01569CA1C4C378917FF3FC42EA6DA,PinName="ReturnValue",PinToolTip="Return Value\nInteger64\n\nBitwise OR (A | B)",Direction="EGPD_Output",PinType.PinCategory="int64",PinType.PinSubCategory="",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,DefaultValue="0",AutogeneratedDefaultValue="0",PersistentGuid=00000000000000000000000000000000,bHidden=False,bNotConnectable=False,bDefaultValueIsReadOnly=False,bDefaultValueIsIgnored=False,bAdvancedView=False,bOrphanedPin=False,) - CustomProperties Pin (PinId=C00EE5428FE0454B970846CBEEFD5B73,PinName="C",PinType.PinCategory="int64",PinType.PinSubCategory="",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, 7], - pins: 4, - delegate: false, - development: false, - variadic: true, - additionalTest: - /** @param {NodeElement} node */ - node => { - let pins = /** @type {PinElement[]} */(node.querySelectorAll("ueb-pin")) - for (const pin of pins) { - expect(pin.template.renderIcon().strings.join("").trim()).to.be.equal(SVGIcon.operationPin.strings.join("").trim()) - } - } - }, - { - name: "Bitwise NOT 1", - title: "~", - value: String.raw` - Begin Object Class=/Script/BlueprintGraph.K2Node_CallFunction Name="K2Node_CallFunction_10" ExportPath=/Script/BlueprintGraph.K2Node_CallFunction'"/Temp/Untitled_1.Untitled_1:PersistentLevel.Untitled.EventGraph.K2Node_CallFunction_10"' - bIsPureFunc=True - FunctionReference=(MemberParent=/Script/CoreUObject.Class'"/Script/Engine.KismetMathLibrary"',MemberName="Not_Int") - NodePosX=-128 - NodePosY=-128 - NodeGuid=8EFCE5FB3D8847FC9B7A157358B52801 - CustomProperties Pin (PinId=C52BB542DF824EA7A7F89CE345326ACD,PinName="self",PinFriendlyName=NSLOCTEXT("K2Node", "Target", "Target"),PinToolTip="Target\nKismet Math Library Object Reference",PinType.PinCategory="object",PinType.PinSubCategory="",PinType.PinSubCategoryObject=/Script/CoreUObject.Class'"/Script/Engine.KismetMathLibrary"',PinType.PinSubCategoryMemberReference=(),PinType.PinValueType=(),PinType.ContainerType=None,PinType.bIsReference=False,PinType.bIsConst=False,PinType.bIsWeakPointer=False,PinType.bIsUObjectWrapper=False,PinType.bSerializeAsSinglePrecisionFloat=False,DefaultObject="/Script/Engine.Default__KismetMathLibrary",PersistentGuid=00000000000000000000000000000000,bHidden=True,bNotConnectable=False,bDefaultValueIsReadOnly=False,bDefaultValueIsIgnored=False,bAdvancedView=False,bOrphanedPin=False,) - CustomProperties Pin (PinId=46BB4962971443EB8B7FB532FADAB165,PinName="A",PinToolTip="A\nInteger",PinType.PinCategory="int",PinType.PinSubCategory="",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,DefaultValue="0",AutogeneratedDefaultValue="0",PersistentGuid=00000000000000000000000000000000,bHidden=False,bNotConnectable=False,bDefaultValueIsReadOnly=False,bDefaultValueIsIgnored=False,bAdvancedView=False,bOrphanedPin=False,) - CustomProperties Pin (PinId=64C43A0B4D1641688CB90B1706F3CE1F,PinName="ReturnValue",PinToolTip="Return Value\nInteger\n\nBitwise NOT (~A)",Direction="EGPD_Output",PinType.PinCategory="int",PinType.PinSubCategory="",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,DefaultValue="0",AutogeneratedDefaultValue="0",PersistentGuid=00000000000000000000000000000000,bHidden=False,bNotConnectable=False,bDefaultValueIsReadOnly=False,bDefaultValueIsIgnored=False,bAdvancedView=False,bOrphanedPin=False,) - End Object - `, - size: [9, 3], - pins: 2, - delegate: false, - development: false, - variadic: false, - additionalTest: - /** @param {NodeElement} node */ - node => { - let pins = /** @type {PinElement[]} */(node.querySelectorAll("ueb-pin")) - for (const pin of pins) { - expect(pin.template.renderIcon().strings.join("").trim()).to.be.equal(SVGIcon.operationPin.strings.join("").trim()) - } - } - }, - { - name: "Bitwise NOT 2", - title: "~", - value: String.raw` - Begin Object Class=/Script/BlueprintGraph.K2Node_CallFunction Name="K2Node_CallFunction_11" ExportPath=/Script/BlueprintGraph.K2Node_CallFunction'"/Temp/Untitled_1.Untitled_1:PersistentLevel.Untitled.EventGraph.K2Node_CallFunction_11"' - bIsPureFunc=True - FunctionReference=(MemberParent=/Script/CoreUObject.Class'"/Script/Engine.KismetMathLibrary"',MemberName="Not_Int64") - NodePosX=112 - NodePosY=-128 - NodeGuid=F3857767A96A4FD9A8E4FE678DA89BC7 - CustomProperties Pin (PinId=AB8568CF0A4B4E88A88E988A3B45EA37,PinName="self",PinFriendlyName=NSLOCTEXT("K2Node", "Target", "Target"),PinToolTip="Target\nKismet Math Library Object Reference",PinType.PinCategory="object",PinType.PinSubCategory="",PinType.PinSubCategoryObject=/Script/CoreUObject.Class'"/Script/Engine.KismetMathLibrary"',PinType.PinSubCategoryMemberReference=(),PinType.PinValueType=(),PinType.ContainerType=None,PinType.bIsReference=False,PinType.bIsConst=False,PinType.bIsWeakPointer=False,PinType.bIsUObjectWrapper=False,PinType.bSerializeAsSinglePrecisionFloat=False,DefaultObject="/Script/Engine.Default__KismetMathLibrary",PersistentGuid=00000000000000000000000000000000,bHidden=True,bNotConnectable=False,bDefaultValueIsReadOnly=False,bDefaultValueIsIgnored=False,bAdvancedView=False,bOrphanedPin=False,) - CustomProperties Pin (PinId=FFD7B2F660CA480C835AB2EB846EC468,PinName="A",PinToolTip="A\nInteger64",PinType.PinCategory="int64",PinType.PinSubCategory="",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,DefaultValue="0",AutogeneratedDefaultValue="0",PersistentGuid=00000000000000000000000000000000,bHidden=False,bNotConnectable=False,bDefaultValueIsReadOnly=False,bDefaultValueIsIgnored=False,bAdvancedView=False,bOrphanedPin=False,) - CustomProperties Pin (PinId=52C04C277D1348A6A507F01E8D31DE96,PinName="ReturnValue",PinToolTip="Return Value\nInteger64\n\nBitwise NOT (~A)",Direction="EGPD_Output",PinType.PinCategory="int64",PinType.PinSubCategory="",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,DefaultValue="0",AutogeneratedDefaultValue="0",PersistentGuid=00000000000000000000000000000000,bHidden=False,bNotConnectable=False,bDefaultValueIsReadOnly=False,bDefaultValueIsIgnored=False,bAdvancedView=False,bOrphanedPin=False,) - End Object - `, - size: [9, 3], - pins: 2, - delegate: false, - development: false, - variadic: false, - additionalTest: - /** @param {NodeElement} node */ - node => { - let pins = /** @type {PinElement[]} */(node.querySelectorAll("ueb-pin")) - for (const pin of pins) { - expect(pin.template.renderIcon().strings.join("").trim()).to.be.equal(SVGIcon.operationPin.strings.join("").trim()) - } - } - }, - { - name: "Bitwise XOR 1", - title: "^", - value: String.raw` - Begin Object Class=/Script/BlueprintGraph.K2Node_CallFunction Name="K2Node_CallFunction_12" ExportPath=/Script/BlueprintGraph.K2Node_CallFunction'"/Temp/Untitled_1.Untitled_1:PersistentLevel.Untitled.EventGraph.K2Node_CallFunction_12"' - bIsPureFunc=True - FunctionReference=(MemberParent=/Script/CoreUObject.Class'"/Script/Engine.KismetMathLibrary"',MemberName="Xor_IntInt") - NodePosX=-128 - NodeGuid=81529F08A6E045D6BD6C8BF368729C14 - CustomProperties Pin (PinId=1C2B19C61AC54A92835DDA0AD0750F2E,PinName="self",PinFriendlyName=NSLOCTEXT("K2Node", "Target", "Target"),PinToolTip="Target\nKismet Math Library Object Reference",PinType.PinCategory="object",PinType.PinSubCategory="",PinType.PinSubCategoryObject=/Script/CoreUObject.Class'"/Script/Engine.KismetMathLibrary"',PinType.PinSubCategoryMemberReference=(),PinType.PinValueType=(),PinType.ContainerType=None,PinType.bIsReference=False,PinType.bIsConst=False,PinType.bIsWeakPointer=False,PinType.bIsUObjectWrapper=False,PinType.bSerializeAsSinglePrecisionFloat=False,DefaultObject="/Script/Engine.Default__KismetMathLibrary",PersistentGuid=00000000000000000000000000000000,bHidden=True,bNotConnectable=False,bDefaultValueIsReadOnly=False,bDefaultValueIsIgnored=False,bAdvancedView=False,bOrphanedPin=False,) - CustomProperties Pin (PinId=153EAE01EAD44FBC9A23A088F3F2BCDD,PinName="A",PinToolTip="A\nInteger",PinType.PinCategory="int",PinType.PinSubCategory="",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,DefaultValue="0",AutogeneratedDefaultValue="0",PersistentGuid=00000000000000000000000000000000,bHidden=False,bNotConnectable=False,bDefaultValueIsReadOnly=False,bDefaultValueIsIgnored=False,bAdvancedView=False,bOrphanedPin=False,) - CustomProperties Pin (PinId=59E8178A4C394862BEF24B2D3DF9D919,PinName="B",PinToolTip="B\nInteger",PinType.PinCategory="int",PinType.PinSubCategory="",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,DefaultValue="0",AutogeneratedDefaultValue="0",PersistentGuid=00000000000000000000000000000000,bHidden=False,bNotConnectable=False,bDefaultValueIsReadOnly=False,bDefaultValueIsIgnored=False,bAdvancedView=False,bOrphanedPin=False,) - CustomProperties Pin (PinId=63037115949747768EF0E3164D7C52AD,PinName="ReturnValue",PinToolTip="Return Value\nInteger\n\nBitwise XOR (A ^ B)",Direction="EGPD_Output",PinType.PinCategory="int",PinType.PinSubCategory="",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,DefaultValue="0",AutogeneratedDefaultValue="0",PersistentGuid=00000000000000000000000000000000,bHidden=False,bNotConnectable=False,bDefaultValueIsReadOnly=False,bDefaultValueIsIgnored=False,bAdvancedView=False,bOrphanedPin=False,) - End Object - - `, - size: [9, 5], - pins: 3, - delegate: false, - development: false, - variadic: false, - additionalTest: - /** @param {NodeElement} node */ - node => { - let pins = /** @type {PinElement[]} */(node.querySelectorAll("ueb-pin")) - for (const pin of pins) { - expect(pin.template.renderIcon().strings.join("").trim()).to.be.equal(SVGIcon.operationPin.strings.join("").trim()) - } - } - }, - { - name: "Bitwise XOR 2", - title: "^", - value: String.raw` - Begin Object Class=/Script/BlueprintGraph.K2Node_CallFunction Name="K2Node_CallFunction_13" ExportPath=/Script/BlueprintGraph.K2Node_CallFunction'"/Temp/Untitled_1.Untitled_1:PersistentLevel.Untitled.EventGraph.K2Node_CallFunction_13"' - bIsPureFunc=True - FunctionReference=(MemberParent=/Script/CoreUObject.Class'"/Script/Engine.KismetMathLibrary"',MemberName="Xor_Int64Int64") - NodePosX=128 - NodeGuid=A95FABA8132C4BC0B4E35D2CAB877B7D - CustomProperties Pin (PinId=93AD25D5F9E846CFA01F5684AA015EFA,PinName="self",PinFriendlyName=NSLOCTEXT("K2Node", "Target", "Target"),PinToolTip="Target\nKismet Math Library Object Reference",PinType.PinCategory="object",PinType.PinSubCategory="",PinType.PinSubCategoryObject=/Script/CoreUObject.Class'"/Script/Engine.KismetMathLibrary"',PinType.PinSubCategoryMemberReference=(),PinType.PinValueType=(),PinType.ContainerType=None,PinType.bIsReference=False,PinType.bIsConst=False,PinType.bIsWeakPointer=False,PinType.bIsUObjectWrapper=False,PinType.bSerializeAsSinglePrecisionFloat=False,DefaultObject="/Script/Engine.Default__KismetMathLibrary",PersistentGuid=00000000000000000000000000000000,bHidden=True,bNotConnectable=False,bDefaultValueIsReadOnly=False,bDefaultValueIsIgnored=False,bAdvancedView=False,bOrphanedPin=False,) - CustomProperties Pin (PinId=06FE8043E6454053B2F89474C4C028B5,PinName="A",PinToolTip="A\nInteger64",PinType.PinCategory="int64",PinType.PinSubCategory="",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,DefaultValue="0",AutogeneratedDefaultValue="0",PersistentGuid=00000000000000000000000000000000,bHidden=False,bNotConnectable=False,bDefaultValueIsReadOnly=False,bDefaultValueIsIgnored=False,bAdvancedView=False,bOrphanedPin=False,) - CustomProperties Pin (PinId=E025E8CC7D21449A8FF29F755BC2180B,PinName="B",PinToolTip="B\nInteger64",PinType.PinCategory="int64",PinType.PinSubCategory="",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,DefaultValue="0",AutogeneratedDefaultValue="0",PersistentGuid=00000000000000000000000000000000,bHidden=False,bNotConnectable=False,bDefaultValueIsReadOnly=False,bDefaultValueIsIgnored=False,bAdvancedView=False,bOrphanedPin=False,) - CustomProperties Pin (PinId=F43AEAD2428E400BB22DEAD9F4D05BCF,PinName="ReturnValue",PinToolTip="Return Value\nInteger64\n\nBitwise XOR (A ^ B)",Direction="EGPD_Output",PinType.PinCategory="int64",PinType.PinSubCategory="",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,DefaultValue="0",AutogeneratedDefaultValue="0",PersistentGuid=00000000000000000000000000000000,bHidden=False,bNotConnectable=False,bDefaultValueIsReadOnly=False,bDefaultValueIsIgnored=False,bAdvancedView=False,bOrphanedPin=False,) - End Object - `, - size: [9, 5], - pins: 3, - delegate: false, - development: false, - variadic: false, - additionalTest: - /** @param {NodeElement} node */ - node => { - let pins = /** @type {PinElement[]} */(node.querySelectorAll("ueb-pin")) - for (const pin of pins) { - expect(pin.template.renderIcon().strings.join("").trim()).to.be.equal(SVGIcon.operationPin.strings.join("").trim()) - } - } - }, - { - name: "SIN", - value: String.raw` - Begin Object Class=/Script/BlueprintGraph.K2Node_CallFunction Name="K2Node_CallFunction_26" ExportPath=/Script/BlueprintGraph.K2Node_CallFunction'"/Temp/Untitled_1.Untitled_1:PersistentLevel.Untitled.EventGraph.K2Node_CallFunction_26"' - bIsPureFunc=True - FunctionReference=(MemberParent=/Script/CoreUObject.Class'"/Script/Engine.KismetMathLibrary"',MemberName="Sin") - NodePosX=-256 - NodePosY=-256 - NodeGuid=FE2CD3AF6DF14671A45FB273B5DDDF8E - CustomProperties Pin (PinId=E48C5BE04F244CCFA93C5DF17AA41727,PinName="self",PinFriendlyName=NSLOCTEXT("K2Node", "Target", "Target"),PinToolTip="Target\nKismet Math Library Object Reference",PinType.PinCategory="object",PinType.PinSubCategory="",PinType.PinSubCategoryObject=/Script/CoreUObject.Class'"/Script/Engine.KismetMathLibrary"',PinType.PinSubCategoryMemberReference=(),PinType.PinValueType=(),PinType.ContainerType=None,PinType.bIsReference=False,PinType.bIsConst=False,PinType.bIsWeakPointer=False,PinType.bIsUObjectWrapper=False,PinType.bSerializeAsSinglePrecisionFloat=False,DefaultObject="/Script/Engine.Default__KismetMathLibrary",PersistentGuid=00000000000000000000000000000000,bHidden=True,bNotConnectable=False,bDefaultValueIsReadOnly=False,bDefaultValueIsIgnored=False,bAdvancedView=False,bOrphanedPin=False,) - CustomProperties Pin (PinId=ED71A80DC02B45518D8D016209E95FB6,PinName="A",PinToolTip="A\nFloat (double-precision)",PinType.PinCategory="real",PinType.PinSubCategory="double",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,DefaultValue="0.0",AutogeneratedDefaultValue="0.0",PersistentGuid=00000000000000000000000000000000,bHidden=False,bNotConnectable=False,bDefaultValueIsReadOnly=False,bDefaultValueIsIgnored=False,bAdvancedView=False,bOrphanedPin=False,) - CustomProperties Pin (PinId=B89EE79C0898454BB00D8335BE922ED3,PinName="ReturnValue",PinToolTip="Return Value\nFloat (double-precision)\n\nReturns the sine of A (expects Radians)",Direction="EGPD_Output",PinType.PinCategory="real",PinType.PinSubCategory="double",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,DefaultValue="0.0",AutogeneratedDefaultValue="0.0",PersistentGuid=00000000000000000000000000000000,bHidden=False,bNotConnectable=False,bDefaultValueIsReadOnly=False,bDefaultValueIsIgnored=False,bAdvancedView=False,bOrphanedPin=False,) - End Object - `, - size: [12, 3], - pins: 2, - delegate: false, - development: false, - variadic: false, - additionalTest: - /** @param {NodeElement} node */ - node => { - let pins = /** @type {PinElement[]} */(node.querySelectorAll("ueb-pin")) - for (const pin of pins) { - expect(pin.template.renderIcon().strings.join("").trim()).to.be.equal(SVGIcon.operationPin.strings.join("").trim()) - } - } - }, - { - name: "Not Equal", - title: "!=", - value: String.raw` - Begin Object Class=/Script/BlueprintGraph.K2Node_PromotableOperator Name="K2Node_PromotableOperator_0" ExportPath=/Script/BlueprintGraph.K2Node_PromotableOperator'"/Temp/Untitled_1.Untitled_1:PersistentLevel.Untitled.EventGraph.K2Node_PromotableOperator_0"' - "bIsPureFunc"=True - "FunctionReference"=(MemberParent=/Script/CoreUObject.Class'"/Script/GameplayTags.BlueprintGameplayTagLibrary"',MemberName="NotEqual_GameplayTagContainer") - "NodePosX"=-256 - "NodeGuid"=29F5E14B4509543D59F652854F3B6AB6 - CustomProperties Pin (PinId=815D7F344EC326D3E021F68BB4D9B3AD,PinName="A",PinToolTip="A\nWildcard",PinType.PinCategory="wildcard",PinType.PinSubCategory="",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,) - CustomProperties Pin (PinId=3B762DCB4AA262D90BA202939BDB049D,PinName="B",PinToolTip="B\nWildcard",PinType.PinCategory="wildcard",PinType.PinSubCategory="",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,) - CustomProperties Pin (PinId=6DACCB8046585A22DA055FA2ECE67712,PinName="ReturnValue",PinToolTip="Return Value\nBoolean\n\nReturns true if the values are not equal (A != B)",Direction="EGPD_Output",PinType.PinCategory="bool",PinType.PinSubCategory="",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, 4], - pins: 3, - delegate: false, - development: false, - variadic: false, - additionalTest: - /** @param {NodeElement} node */ - node => { - let pins = /** @type {PinElement[]} */(node.querySelectorAll("ueb-pin")) - for (const pin of pins) { - expect(pin.template.renderIcon().strings.join("").trim()).to.be.equal(SVGIcon.operationPin.strings.join("").trim()) - } - } - }, - { - name: "Equal", - title: "==", - value: String.raw` - Begin Object Class=/Script/BlueprintGraph.K2Node_PromotableOperator Name="K2Node_PromotableOperator_1" ExportPath=/Script/BlueprintGraph.K2Node_PromotableOperator'"/Temp/Untitled_1.Untitled_1:PersistentLevel.Untitled.EventGraph.K2Node_PromotableOperator_1"' - "bIsPureFunc"=True - "FunctionReference"=(MemberParent=/Script/CoreUObject.Class'"/Script/Engine.KismetMathLibrary"',MemberName="EqualEqual_ByteByte") - "NodePosX"=-256 - "NodePosY"=128 - "NodeGuid"=219043694FA6E83CD69DD791FB1C08AE - CustomProperties Pin (PinId=8E6EE9EB47FF4B99F5092CAA5DC364D2,PinName="A",PinToolTip="A\nByte",PinType.PinCategory="byte",PinType.PinSubCategory="",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,LinkedTo=(K2Node_ForEachElementInEnum_0 E892F26242AA3EDCB057699DC234F057,),PersistentGuid=00000000000000000000000000000000,bHidden=False,bNotConnectable=False,bDefaultValueIsReadOnly=False,bDefaultValueIsIgnored=False,bAdvancedView=False,bOrphanedPin=False,) - CustomProperties Pin (PinId=6A74B02D468CF910E233A48E38EDDDD8,PinName="B",PinToolTip="B\nByte",PinType.PinCategory="byte",PinType.PinSubCategory="",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,) - CustomProperties Pin (PinId=1D70EDE14002E5290A451090FC8D747B,PinName="ReturnValue",PinToolTip="Return Value\nBoolean\n\nReturns true if A is equal to B (A == B)",Direction="EGPD_Output",PinType.PinCategory="bool",PinType.PinSubCategory="",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,) - CustomProperties Pin (PinId=503CA95B4180C28504ECE5AE43FA118B,PinName="ErrorTolerance",PinToolTip="Error Tolerance\n",PinType.PinCategory="",PinType.PinSubCategory="",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=True,bNotConnectable=False,bDefaultValueIsReadOnly=False,bDefaultValueIsIgnored=False,bAdvancedView=False,bOrphanedPin=False,) - End Object - `, - size: [10, 4], - pins: 3, - delegate: false, - development: false, - variadic: false, - additionalTest: - /** @param {NodeElement} node */ - node => { - let pins = /** @type {PinElement[]} */(node.querySelectorAll("ueb-pin")) - for (const pin of pins) { - expect(pin.template.renderIcon().strings.join("").trim()).to.be.equal(SVGIcon.operationPin.strings.join("").trim()) - } - } - }, -] - -generateNodeTests(tests) diff --git a/cypress/e2e/otherNodes.cy.js b/cypress/e2e/otherNodes.cy.js deleted file mode 100644 index 7673c9e..0000000 --- a/cypress/e2e/otherNodes.cy.js +++ /dev/null @@ -1,527 +0,0 @@ -/// - -import generateNodeTests from "../fixtures/testUtilities.js" -import Configuration from "../../js/Configuration.js" -import SVGIcon from "../../js/SVGIcon.js" - -const tests = [ - { - name: "Has Matching Gameplay Tag", - subtitle: "Target is Gameplay Tag Asset Interface", - value: String.raw` - Begin Object Class=/Script/BlueprintGraph.K2Node_Message Name="K2Node_Message_0" - bIsPureFunc=True - bIsConstFunc=True - bIsInterfaceCall=True - FunctionReference=(MemberParent=/Script/CoreUObject.Class'"/Script/GameplayTags.GameplayTagAssetInterface"',MemberName="HasMatchingGameplayTag") - NodePosX=-848 - NodePosY=-16 - NodeGuid=1A6F45D8B6C5452A87596976F23B84E6 - CustomProperties Pin (PinId=0BE7D0A19E49412380B3DC930CFAB511,PinName="execute",PinToolTip="\nExec",PinType.PinCategory="exec",PinType.PinSubCategory="",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,) - CustomProperties Pin (PinId=1F51344A80C541309418234B6CD92251,PinName="then",PinToolTip="\nExec",Direction="EGPD_Output",PinType.PinCategory="exec",PinType.PinSubCategory="",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,) - CustomProperties Pin (PinId=ADA8C6785AA94026882EEBBE42AA0B02,PinName="self",PinFriendlyName=NSLOCTEXT("K2Node", "Target", "Target"),PinToolTip="Target\nObject Reference",PinType.PinCategory="object",PinType.PinSubCategory="",PinType.PinSubCategoryObject=/Script/CoreUObject.Class'"/Script/CoreUObject.Object"',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=True,bAdvancedView=False,bOrphanedPin=False,) - CustomProperties Pin (PinId=7EDFDB02E67941018F24BBBEE5702B45,PinName="TagToCheck",PinToolTip="Tag to Check\nGameplay Tag Structure\n\nTag to check for a match",PinType.PinCategory="struct",PinType.PinSubCategory="",PinType.PinSubCategoryObject=/Script/CoreUObject.ScriptStruct'"/Script/GameplayTags.GameplayTag"',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=55131057064742A6860304B1D06BEFAC,PinName="ReturnValue",PinToolTip="Return Value\nBoolean\n\nTrue if the asset has a gameplay tag that matches, false if not",Direction="EGPD_Output",PinType.PinCategory="bool",PinType.PinSubCategory="",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,DefaultValue="false",AutogeneratedDefaultValue="false",PersistentGuid=00000000000000000000000000000000,bHidden=False,bNotConnectable=False,bDefaultValueIsReadOnly=False,bDefaultValueIsIgnored=False,bAdvancedView=False,bOrphanedPin=False,) - End Object - `, - color: Configuration.nodeColors.green, - icon: SVGIcon.functionSymbol, - pins: 5, - pinNames: ["Target", "Tag to Check", "Return Value"], - delegate: false, - development: false, - }, - { - name: "Can Jump", - subtitle: "Target is Character", - value: String.raw` - Begin Object Class=/Script/BlueprintGraph.K2Node_CallFunction Name="K2Node_CallFunction_8" - bIsPureFunc=True - bIsConstFunc=True - FunctionReference=(MemberParent=/Script/CoreUObject.Class'"/Script/Engine.Character"',MemberName="CanJump") - NodePosX=-672 - NodePosY=192 - NodeGuid=B02C8FE6AC8446D0841E7AC6539684A9 - CustomProperties Pin (PinId=B561A480CA65436A864A12201A469A6A,PinName="self",PinFriendlyName=NSLOCTEXT("K2Node", "Target", "Target"),PinToolTip="Target\nCharacter Object Reference",PinType.PinCategory="object",PinType.PinSubCategory="",PinType.PinSubCategoryObject=/Script/CoreUObject.Class'"/Script/Engine.Character"',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=446739D0F2FB4ADD99427D3361351BFF,PinName="ReturnValue",PinToolTip="Return Value\nBoolean\n\nWhether the character can jump in the current state.",Direction="EGPD_Output",PinType.PinCategory="bool",PinType.PinSubCategory="",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,DefaultValue="false",AutogeneratedDefaultValue="false",PersistentGuid=00000000000000000000000000000000,bHidden=False,bNotConnectable=False,bDefaultValueIsReadOnly=False,bDefaultValueIsIgnored=False,bAdvancedView=False,bOrphanedPin=False,) - End Object - `, - color: Configuration.nodeColors.green, - icon: SVGIcon.functionSymbol, - pins: 2, - pinNames: ["Target", "Return Value"], - delegate: false, - development: false, - }, - { - name: "Set Finish On Message", - subtitle: "Target is BTTask Blueprint Base", - value: String.raw` - Begin Object Class=/Script/BlueprintGraph.K2Node_CallFunction Name="K2Node_CallFunction_9" - FunctionReference=(MemberParent=/Script/CoreUObject.Class'"/Script/AIModule.BTTask_BlueprintBase"',MemberName="SetFinishOnMessage") - NodePosX=-752 - NodePosY=32 - NodeGuid=152AE61522404C4FB8A984E22233BA90 - CustomProperties Pin (PinId=AA65F714245245BBABEAC9DB0D30A1B8,PinName="execute",PinToolTip="\nExec",PinType.PinCategory="exec",PinType.PinSubCategory="",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,) - CustomProperties Pin (PinId=E65D6A14850B4C3099B184E2718A253D,PinName="then",PinToolTip="\nExec",Direction="EGPD_Output",PinType.PinCategory="exec",PinType.PinSubCategory="",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,) - CustomProperties Pin (PinId=B28838C8FD994D8B9CF9F9F5D1C60BF2,PinName="self",PinFriendlyName=NSLOCTEXT("K2Node", "Target", "Target"),PinToolTip="Target\nBTTask Blueprint Base Object Reference",PinType.PinCategory="object",PinType.PinSubCategory="",PinType.PinSubCategoryObject=/Script/CoreUObject.Class'"/Script/AIModule.BTTask_BlueprintBase"',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=E31CB815EF3E418A89CAED51C9798597,PinName="MessageName",PinToolTip="Message Name\nName",PinType.PinCategory="name",PinType.PinSubCategory="",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,DefaultValue="None",AutogeneratedDefaultValue="None",PersistentGuid=00000000000000000000000000000000,bHidden=False,bNotConnectable=False,bDefaultValueIsReadOnly=False,bDefaultValueIsIgnored=False,bAdvancedView=False,bOrphanedPin=False,) - End Object - `, - color: Configuration.nodeColors.blue, - icon: SVGIcon.functionSymbol, - pins: 4, - pinNames: ["Target", "Message Name"], - delegate: false, - development: false, - }, - { - name: "Line Trace By Channel", - value: String.raw` - Begin Object Class=/Script/BlueprintGraph.K2Node_CallFunction Name="K2Node_CallFunction_0" - FunctionReference=(MemberParent=/Script/CoreUObject.Class'"/Script/Engine.KismetSystemLibrary"',MemberName="LineTraceSingle") - NodePosX=-480 - NodePosY=-144 - AdvancedPinDisplay=Shown - NodeGuid=F842A7449F24455B8B1198B11345DB9C - CustomProperties Pin (PinId=BFABF69DBB914DE38D163751AAB70E4B,PinName="execute",PinToolTip="\nExec",PinType.PinCategory="exec",PinType.PinSubCategory="",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,) - CustomProperties Pin (PinId=EDFC912BE807488599E27B717CAD40AD,PinName="then",PinToolTip="\nExec",Direction="EGPD_Output",PinType.PinCategory="exec",PinType.PinSubCategory="",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,) - CustomProperties Pin (PinId=B3716E637CD048418CE6D5D8D0C2A799,PinName="self",PinFriendlyName=NSLOCTEXT("K2Node", "Target", "Target"),PinToolTip="Target\nKismet System Library Object Reference",PinType.PinCategory="object",PinType.PinSubCategory="",PinType.PinSubCategoryObject=/Script/CoreUObject.Class'"/Script/Engine.KismetSystemLibrary"',PinType.PinSubCategoryMemberReference=(),PinType.PinValueType=(),PinType.ContainerType=None,PinType.bIsReference=False,PinType.bIsConst=False,PinType.bIsWeakPointer=False,PinType.bIsUObjectWrapper=False,PinType.bSerializeAsSinglePrecisionFloat=False,DefaultObject="/Script/Engine.Default__KismetSystemLibrary",PersistentGuid=00000000000000000000000000000000,bHidden=True,bNotConnectable=False,bDefaultValueIsReadOnly=False,bDefaultValueIsIgnored=False,bAdvancedView=False,bOrphanedPin=False,) - CustomProperties Pin (PinId=9DA3C37CCD4A417A9F2DCE2A71232D6F,PinName="WorldContextObject",PinToolTip="World Context Object\nObject Reference",PinType.PinCategory="object",PinType.PinSubCategory="",PinType.PinSubCategoryObject=/Script/CoreUObject.Class'"/Script/CoreUObject.Object"',PinType.PinSubCategoryMemberReference=(),PinType.PinValueType=(),PinType.ContainerType=None,PinType.bIsReference=False,PinType.bIsConst=True,PinType.bIsWeakPointer=False,PinType.bIsUObjectWrapper=False,PinType.bSerializeAsSinglePrecisionFloat=False,PersistentGuid=00000000000000000000000000000000,bHidden=True,bNotConnectable=False,bDefaultValueIsReadOnly=False,bDefaultValueIsIgnored=False,bAdvancedView=False,bOrphanedPin=False,) - CustomProperties Pin (PinId=A3053BF0111F468789C77E9EADCB1331,PinName="Start",PinToolTip="Start\nVector\n\nStart of line segment.",PinType.PinCategory="struct",PinType.PinSubCategory="",PinType.PinSubCategoryObject=/Script/CoreUObject.ScriptStruct'"/Script/CoreUObject.Vector"',PinType.PinSubCategoryMemberReference=(),PinType.PinValueType=(),PinType.ContainerType=None,PinType.bIsReference=False,PinType.bIsConst=True,PinType.bIsWeakPointer=False,PinType.bIsUObjectWrapper=False,PinType.bSerializeAsSinglePrecisionFloat=False,DefaultValue="0, 0, 0",AutogeneratedDefaultValue="0, 0, 0",PersistentGuid=00000000000000000000000000000000,bHidden=False,bNotConnectable=False,bDefaultValueIsReadOnly=False,bDefaultValueIsIgnored=False,bAdvancedView=False,bOrphanedPin=False,) - CustomProperties Pin (PinId=9D71C42C3FA94EE68623F50EDF0A3ED7,PinName="End",PinToolTip="End\nVector\n\nEnd of line segment.",PinType.PinCategory="struct",PinType.PinSubCategory="",PinType.PinSubCategoryObject=/Script/CoreUObject.ScriptStruct'"/Script/CoreUObject.Vector"',PinType.PinSubCategoryMemberReference=(),PinType.PinValueType=(),PinType.ContainerType=None,PinType.bIsReference=False,PinType.bIsConst=True,PinType.bIsWeakPointer=False,PinType.bIsUObjectWrapper=False,PinType.bSerializeAsSinglePrecisionFloat=False,DefaultValue="0, 0, 0",AutogeneratedDefaultValue="0, 0, 0",PersistentGuid=00000000000000000000000000000000,bHidden=False,bNotConnectable=False,bDefaultValueIsReadOnly=False,bDefaultValueIsIgnored=False,bAdvancedView=False,bOrphanedPin=False,) - CustomProperties Pin (PinId=93DD1DFD330C48E785CC19B0ED37F0B8,PinName="TraceChannel",PinToolTip="Trace Channel\nETraceTypeQuery Enum",PinType.PinCategory="byte",PinType.PinSubCategory="",PinType.PinSubCategoryObject=/Script/CoreUObject.Enum'"/Script/Engine.ETraceTypeQuery"',PinType.PinSubCategoryMemberReference=(),PinType.PinValueType=(),PinType.ContainerType=None,PinType.bIsReference=False,PinType.bIsConst=False,PinType.bIsWeakPointer=False,PinType.bIsUObjectWrapper=False,PinType.bSerializeAsSinglePrecisionFloat=False,DefaultValue="TraceTypeQuery1",PersistentGuid=00000000000000000000000000000000,bHidden=False,bNotConnectable=False,bDefaultValueIsReadOnly=False,bDefaultValueIsIgnored=False,bAdvancedView=False,bOrphanedPin=False,) - CustomProperties Pin (PinId=DCF9ABA98358461099ED15E9DBD71D16,PinName="bTraceComplex",PinToolTip="Trace Complex\nBoolean\n\nTrue to test against complex collision, false to test against simplified collision.",PinType.PinCategory="bool",PinType.PinSubCategory="",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,DefaultValue="false",AutogeneratedDefaultValue="false",PersistentGuid=00000000000000000000000000000000,bHidden=False,bNotConnectable=False,bDefaultValueIsReadOnly=False,bDefaultValueIsIgnored=False,bAdvancedView=False,bOrphanedPin=False,) - CustomProperties Pin (PinId=C8F98AFBD7D24416A6EBC9E5F99D71C0,PinName="ActorsToIgnore",PinToolTip="Actors to Ignore\nArray of Actor Object References",PinType.PinCategory="object",PinType.PinSubCategory="",PinType.PinSubCategoryObject=/Script/CoreUObject.Class'"/Script/Engine.Actor"',PinType.PinSubCategoryMemberReference=(),PinType.PinValueType=(),PinType.ContainerType=Array,PinType.bIsReference=True,PinType.bIsConst=True,PinType.bIsWeakPointer=False,PinType.bIsUObjectWrapper=False,PinType.bSerializeAsSinglePrecisionFloat=False,PersistentGuid=00000000000000000000000000000000,bHidden=False,bNotConnectable=False,bDefaultValueIsReadOnly=False,bDefaultValueIsIgnored=True,bAdvancedView=False,bOrphanedPin=False,) - CustomProperties Pin (PinId=BA6811254B84450382EA2A6113BB0805,PinName="DrawDebugType",PinToolTip="Draw Debug Type\nEDrawDebugTrace Enum",PinType.PinCategory="byte",PinType.PinSubCategory="",PinType.PinSubCategoryObject=/Script/CoreUObject.Enum'"/Script/Engine.EDrawDebugTrace"',PinType.PinSubCategoryMemberReference=(),PinType.PinValueType=(),PinType.ContainerType=None,PinType.bIsReference=False,PinType.bIsConst=False,PinType.bIsWeakPointer=False,PinType.bIsUObjectWrapper=False,PinType.bSerializeAsSinglePrecisionFloat=False,DefaultValue="None",PersistentGuid=00000000000000000000000000000000,bHidden=False,bNotConnectable=False,bDefaultValueIsReadOnly=False,bDefaultValueIsIgnored=False,bAdvancedView=False,bOrphanedPin=False,) - CustomProperties Pin (PinId=899C9DB84C70423285DE65B2CA053FCB,PinName="OutHit",PinToolTip="Out Hit\nHit Result Structure\n\nProperties of the trace hit.",Direction="EGPD_Output",PinType.PinCategory="struct",PinType.PinSubCategory="",PinType.PinSubCategoryObject=/Script/CoreUObject.ScriptStruct'"/Script/Engine.HitResult"',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=8D886907D6AD42C3B6EEBF4C843E2007,PinName="bIgnoreSelf",PinToolTip="Ignore Self\nBoolean",PinType.PinCategory="bool",PinType.PinSubCategory="",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,DefaultValue="true",AutogeneratedDefaultValue="true",PersistentGuid=00000000000000000000000000000000,bHidden=False,bNotConnectable=False,bDefaultValueIsReadOnly=False,bDefaultValueIsIgnored=False,bAdvancedView=False,bOrphanedPin=False,) - CustomProperties Pin (PinId=A8976968AE0046C493C612AF2B433D39,PinName="TraceColor",PinToolTip="Trace Color\nLinear Color Structure",PinType.PinCategory="struct",PinType.PinSubCategory="",PinType.PinSubCategoryObject=/Script/CoreUObject.ScriptStruct'"/Script/CoreUObject.LinearColor"',PinType.PinSubCategoryMemberReference=(),PinType.PinValueType=(),PinType.ContainerType=None,PinType.bIsReference=False,PinType.bIsConst=False,PinType.bIsWeakPointer=False,PinType.bIsUObjectWrapper=False,PinType.bSerializeAsSinglePrecisionFloat=False,DefaultValue="(R=1.000000,G=0.000000,B=0.000000,A=1.000000)",AutogeneratedDefaultValue="(R=1.000000,G=0.000000,B=0.000000,A=1.000000)",PersistentGuid=00000000000000000000000000000000,bHidden=False,bNotConnectable=False,bDefaultValueIsReadOnly=False,bDefaultValueIsIgnored=False,bAdvancedView=True,bOrphanedPin=False,) - CustomProperties Pin (PinId=1AE4B506C8174ACE9CD51E2638B16661,PinName="TraceHitColor",PinToolTip="Trace Hit Color\nLinear Color Structure",PinType.PinCategory="struct",PinType.PinSubCategory="",PinType.PinSubCategoryObject=/Script/CoreUObject.ScriptStruct'"/Script/CoreUObject.LinearColor"',PinType.PinSubCategoryMemberReference=(),PinType.PinValueType=(),PinType.ContainerType=None,PinType.bIsReference=False,PinType.bIsConst=False,PinType.bIsWeakPointer=False,PinType.bIsUObjectWrapper=False,PinType.bSerializeAsSinglePrecisionFloat=False,DefaultValue="(R=0.000000,G=1.000000,B=0.000000,A=1.000000)",AutogeneratedDefaultValue="(R=0.000000,G=1.000000,B=0.000000,A=1.000000)",PersistentGuid=00000000000000000000000000000000,bHidden=False,bNotConnectable=False,bDefaultValueIsReadOnly=False,bDefaultValueIsIgnored=False,bAdvancedView=True,bOrphanedPin=False,) - CustomProperties Pin (PinId=B7E84F13C2E44C0F9D5C967D0C2200A2,PinName="DrawTime",PinToolTip="Draw Time\nFloat (single-precision)",PinType.PinCategory="real",PinType.PinSubCategory="float",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,DefaultValue="5.000000",AutogeneratedDefaultValue="5.000000",PersistentGuid=00000000000000000000000000000000,bHidden=False,bNotConnectable=False,bDefaultValueIsReadOnly=False,bDefaultValueIsIgnored=False,bAdvancedView=True,bOrphanedPin=False,) - CustomProperties Pin (PinId=87EB3263DE5C4297AAFBAB07A960C352,PinName="ReturnValue",PinToolTip="Return Value\nBoolean\n\nTrue if there was a hit, false otherwise.",Direction="EGPD_Output",PinType.PinCategory="bool",PinType.PinSubCategory="",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,DefaultValue="false",AutogeneratedDefaultValue="false",PersistentGuid=00000000000000000000000000000000,bHidden=False,bNotConnectable=False,bDefaultValueIsReadOnly=False,bDefaultValueIsIgnored=False,bAdvancedView=False,bOrphanedPin=False,) - End Object - `, - color: Configuration.nodeColors.blue, - icon: SVGIcon.functionSymbol, - pins: 14, - pinNames: ["Start", "End", "Trace Channel", "Trace Complex", "Actors to Ignore", "Draw Debug Type", "Ignore Self", "Trace Color", "Trace Hit Color", "Draw Time", "Out Hit", "Return Value"], - delegate: false, - development: false, - }, - { - name: "Line Trace By Profile", - value: String.raw` - Begin Object Class=/Script/BlueprintGraph.K2Node_CallFunction Name="K2Node_CallFunction_21" - FunctionReference=(MemberParent=/Script/CoreUObject.Class'"/Script/Engine.KismetSystemLibrary"',MemberName="LineTraceSingleByProfile") - NodePosX=-672 - NodePosY=-1600 - AdvancedPinDisplay=Hidden - NodeGuid=D8472647289146CCBC7857EF1A9AE666 - CustomProperties Pin (PinId=9BDB78D31C0743B09A5CFFC6330A952C,PinName="execute",PinToolTip="\nExec",PinType.PinCategory="exec",PinType.PinSubCategory="",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,) - CustomProperties Pin (PinId=048F5710FF65448EBB67C4E0E6FB3CF6,PinName="then",PinToolTip="\nExec",Direction="EGPD_Output",PinType.PinCategory="exec",PinType.PinSubCategory="",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,) - CustomProperties Pin (PinId=221C53FC10AF40EA9F03C2E240F62F26,PinName="self",PinFriendlyName=NSLOCTEXT("K2Node", "Target", "Target"),PinToolTip="Target\nKismet System Library Object Reference",PinType.PinCategory="object",PinType.PinSubCategory="",PinType.PinSubCategoryObject=/Script/CoreUObject.Class'"/Script/Engine.KismetSystemLibrary"',PinType.PinSubCategoryMemberReference=(),PinType.PinValueType=(),PinType.ContainerType=None,PinType.bIsReference=False,PinType.bIsConst=False,PinType.bIsWeakPointer=False,PinType.bIsUObjectWrapper=False,PinType.bSerializeAsSinglePrecisionFloat=False,DefaultObject="/Script/Engine.Default__KismetSystemLibrary",PersistentGuid=00000000000000000000000000000000,bHidden=True,bNotConnectable=False,bDefaultValueIsReadOnly=False,bDefaultValueIsIgnored=False,bAdvancedView=False,bOrphanedPin=False,) - CustomProperties Pin (PinId=209531A0061F4F6DBC094F90D19FCEB1,PinName="WorldContextObject",PinToolTip="World Context Object\nObject Reference",PinType.PinCategory="object",PinType.PinSubCategory="",PinType.PinSubCategoryObject=/Script/CoreUObject.Class'"/Script/CoreUObject.Object"',PinType.PinSubCategoryMemberReference=(),PinType.PinValueType=(),PinType.ContainerType=None,PinType.bIsReference=False,PinType.bIsConst=True,PinType.bIsWeakPointer=False,PinType.bIsUObjectWrapper=False,PinType.bSerializeAsSinglePrecisionFloat=False,PersistentGuid=00000000000000000000000000000000,bHidden=True,bNotConnectable=False,bDefaultValueIsReadOnly=False,bDefaultValueIsIgnored=False,bAdvancedView=False,bOrphanedPin=False,) - CustomProperties Pin (PinId=AE9C2442EBBC433D84165E0D424C7228,PinName="Start",PinToolTip="Start\nVector\n\nStart of line segment.",PinType.PinCategory="struct",PinType.PinSubCategory="",PinType.PinSubCategoryObject=/Script/CoreUObject.ScriptStruct'"/Script/CoreUObject.Vector"',PinType.PinSubCategoryMemberReference=(),PinType.PinValueType=(),PinType.ContainerType=None,PinType.bIsReference=False,PinType.bIsConst=True,PinType.bIsWeakPointer=False,PinType.bIsUObjectWrapper=False,PinType.bSerializeAsSinglePrecisionFloat=False,DefaultValue="0, 0, 0",AutogeneratedDefaultValue="0, 0, 0",PersistentGuid=00000000000000000000000000000000,bHidden=False,bNotConnectable=False,bDefaultValueIsReadOnly=False,bDefaultValueIsIgnored=False,bAdvancedView=False,bOrphanedPin=False,) - CustomProperties Pin (PinId=10A25344350C48D9A0AEFA65BB528F26,PinName="End",PinToolTip="End\nVector\n\nEnd of line segment.",PinType.PinCategory="struct",PinType.PinSubCategory="",PinType.PinSubCategoryObject=/Script/CoreUObject.ScriptStruct'"/Script/CoreUObject.Vector"',PinType.PinSubCategoryMemberReference=(),PinType.PinValueType=(),PinType.ContainerType=None,PinType.bIsReference=False,PinType.bIsConst=True,PinType.bIsWeakPointer=False,PinType.bIsUObjectWrapper=False,PinType.bSerializeAsSinglePrecisionFloat=False,DefaultValue="0, 0, 0",AutogeneratedDefaultValue="0, 0, 0",PersistentGuid=00000000000000000000000000000000,bHidden=False,bNotConnectable=False,bDefaultValueIsReadOnly=False,bDefaultValueIsIgnored=False,bAdvancedView=False,bOrphanedPin=False,) - CustomProperties Pin (PinId=B0CC397419234E8EB505CC49655B4AF9,PinName="ProfileName",PinToolTip="Profile Name\nName\n\nThe \'profile\' used to determine which components to hit",PinType.PinCategory="name",PinType.PinSubCategory="",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,DefaultValue="None",AutogeneratedDefaultValue="None",PersistentGuid=00000000000000000000000000000000,bHidden=False,bNotConnectable=False,bDefaultValueIsReadOnly=False,bDefaultValueIsIgnored=False,bAdvancedView=False,bOrphanedPin=False,) - CustomProperties Pin (PinId=36237D5C776B4C8EA106EF6C4AD9FCE5,PinName="bTraceComplex",PinToolTip="Trace Complex\nBoolean\n\nTrue to test against complex collision, false to test against simplified collision.",PinType.PinCategory="bool",PinType.PinSubCategory="",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,DefaultValue="false",AutogeneratedDefaultValue="false",PersistentGuid=00000000000000000000000000000000,bHidden=False,bNotConnectable=False,bDefaultValueIsReadOnly=False,bDefaultValueIsIgnored=False,bAdvancedView=False,bOrphanedPin=False,) - CustomProperties Pin (PinId=952F86C97CDC4D198448C5964FFB8C6A,PinName="ActorsToIgnore",PinToolTip="Actors to Ignore\nArray of Actor Object References",PinType.PinCategory="object",PinType.PinSubCategory="",PinType.PinSubCategoryObject=/Script/CoreUObject.Class'"/Script/Engine.Actor"',PinType.PinSubCategoryMemberReference=(),PinType.PinValueType=(),PinType.ContainerType=Array,PinType.bIsReference=True,PinType.bIsConst=True,PinType.bIsWeakPointer=False,PinType.bIsUObjectWrapper=False,PinType.bSerializeAsSinglePrecisionFloat=False,PersistentGuid=00000000000000000000000000000000,bHidden=False,bNotConnectable=False,bDefaultValueIsReadOnly=False,bDefaultValueIsIgnored=True,bAdvancedView=False,bOrphanedPin=False,) - CustomProperties Pin (PinId=9E783D0881F54373A454F020BB737545,PinName="DrawDebugType",PinToolTip="Draw Debug Type\nEDrawDebugTrace Enum",PinType.PinCategory="byte",PinType.PinSubCategory="",PinType.PinSubCategoryObject=/Script/CoreUObject.Enum'"/Script/Engine.EDrawDebugTrace"',PinType.PinSubCategoryMemberReference=(),PinType.PinValueType=(),PinType.ContainerType=None,PinType.bIsReference=False,PinType.bIsConst=False,PinType.bIsWeakPointer=False,PinType.bIsUObjectWrapper=False,PinType.bSerializeAsSinglePrecisionFloat=False,DefaultValue="None",PersistentGuid=00000000000000000000000000000000,bHidden=False,bNotConnectable=False,bDefaultValueIsReadOnly=False,bDefaultValueIsIgnored=False,bAdvancedView=False,bOrphanedPin=False,) - CustomProperties Pin (PinId=9380611C5EC6421EAE830F811AE4CA9B,PinName="OutHit",PinToolTip="Out Hit\nHit Result Structure\n\nProperties of the trace hit.",Direction="EGPD_Output",PinType.PinCategory="struct",PinType.PinSubCategory="",PinType.PinSubCategoryObject=/Script/CoreUObject.ScriptStruct'"/Script/Engine.HitResult"',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=F50E8E483801451EA367DEE291EDB9C0,PinName="bIgnoreSelf",PinToolTip="Ignore Self\nBoolean",PinType.PinCategory="bool",PinType.PinSubCategory="",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,DefaultValue="true",AutogeneratedDefaultValue="true",PersistentGuid=00000000000000000000000000000000,bHidden=False,bNotConnectable=False,bDefaultValueIsReadOnly=False,bDefaultValueIsIgnored=False,bAdvancedView=False,bOrphanedPin=False,) - CustomProperties Pin (PinId=C34949E571254F43840B72ADAA5EB1C1,PinName="TraceColor",PinToolTip="Trace Color\nLinear Color Structure",PinType.PinCategory="struct",PinType.PinSubCategory="",PinType.PinSubCategoryObject=/Script/CoreUObject.ScriptStruct'"/Script/CoreUObject.LinearColor"',PinType.PinSubCategoryMemberReference=(),PinType.PinValueType=(),PinType.ContainerType=None,PinType.bIsReference=False,PinType.bIsConst=False,PinType.bIsWeakPointer=False,PinType.bIsUObjectWrapper=False,PinType.bSerializeAsSinglePrecisionFloat=False,DefaultValue="(R=1.000000,G=0.000000,B=0.000000,A=1.000000)",AutogeneratedDefaultValue="(R=1.000000,G=0.000000,B=0.000000,A=1.000000)",PersistentGuid=00000000000000000000000000000000,bHidden=False,bNotConnectable=False,bDefaultValueIsReadOnly=False,bDefaultValueIsIgnored=False,bAdvancedView=True,bOrphanedPin=False,) - CustomProperties Pin (PinId=9AADB2287BF1491984DB8C5BEFA60B91,PinName="TraceHitColor",PinToolTip="Trace Hit Color\nLinear Color Structure",PinType.PinCategory="struct",PinType.PinSubCategory="",PinType.PinSubCategoryObject=/Script/CoreUObject.ScriptStruct'"/Script/CoreUObject.LinearColor"',PinType.PinSubCategoryMemberReference=(),PinType.PinValueType=(),PinType.ContainerType=None,PinType.bIsReference=False,PinType.bIsConst=False,PinType.bIsWeakPointer=False,PinType.bIsUObjectWrapper=False,PinType.bSerializeAsSinglePrecisionFloat=False,DefaultValue="(R=0.000000,G=1.000000,B=0.000000,A=1.000000)",AutogeneratedDefaultValue="(R=0.000000,G=1.000000,B=0.000000,A=1.000000)",PersistentGuid=00000000000000000000000000000000,bHidden=False,bNotConnectable=False,bDefaultValueIsReadOnly=False,bDefaultValueIsIgnored=False,bAdvancedView=True,bOrphanedPin=False,) - CustomProperties Pin (PinId=28D9F3ADA25044D08C614D119047BAB6,PinName="DrawTime",PinToolTip="Draw Time\nFloat (single-precision)",PinType.PinCategory="real",PinType.PinSubCategory="float",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,DefaultValue="5.000000",AutogeneratedDefaultValue="5.000000",PersistentGuid=00000000000000000000000000000000,bHidden=False,bNotConnectable=False,bDefaultValueIsReadOnly=False,bDefaultValueIsIgnored=False,bAdvancedView=True,bOrphanedPin=False,) - CustomProperties Pin (PinId=3720AA15FE9045F2A7A6D99A87C90A77,PinName="ReturnValue",PinToolTip="Return Value\nBoolean\n\nTrue if there was a hit, false otherwise.",Direction="EGPD_Output",PinType.PinCategory="bool",PinType.PinSubCategory="",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,DefaultValue="false",AutogeneratedDefaultValue="false",PersistentGuid=00000000000000000000000000000000,bHidden=False,bNotConnectable=False,bDefaultValueIsReadOnly=False,bDefaultValueIsIgnored=False,bAdvancedView=False,bOrphanedPin=False,) - End Object - `, - color: Configuration.nodeColors.blue, - icon: SVGIcon.functionSymbol, - pins: 14, - pinNames: ["Start", "End", "Profile Name", "Trace Complex", "Actors to Ignore", "Draw Debug Type", "Ignore Self", "Trace Color", "Trace Hit Color", "Draw Time", "Out Hit", "Return Value"], - delegate: false, - development: false, - }, - { - name: "Line Trace Component", - subtitle: "Target is Primitive Component", - value: String.raw` - Begin Object Class=/Script/BlueprintGraph.K2Node_CallFunction Name="K2Node_CallFunction_2" - FunctionReference=(MemberParent=/Script/CoreUObject.Class'"/Script/Engine.PrimitiveComponent"',MemberName="K2_LineTraceComponent") - NodePosX=-480 - NodePosY=-96 - NodeGuid=AD1BECF7AEFB48418C321FACE1F6FEE6 - CustomProperties Pin (PinId=71E725C8BA2C4CDC9AD4A7666F88BC95,PinName="execute",PinToolTip="\nExec",PinType.PinCategory="exec",PinType.PinSubCategory="",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,) - CustomProperties Pin (PinId=02915C65578D498983A1236076974343,PinName="then",PinToolTip="\nExec",Direction="EGPD_Output",PinType.PinCategory="exec",PinType.PinSubCategory="",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,) - CustomProperties Pin (PinId=01035373F7D74828B1AF9F3A2D55BD1D,PinName="self",PinFriendlyName=NSLOCTEXT("K2Node", "Target", "Target"),PinToolTip="Target\nPrimitive Component Object Reference",PinType.PinCategory="object",PinType.PinSubCategory="",PinType.PinSubCategoryObject=/Script/CoreUObject.Class'"/Script/Engine.PrimitiveComponent"',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=AC73F75AC0F444458C8F245E2434ADB7,PinName="TraceStart",PinToolTip="Trace Start\nVector\n\nThe start of the trace in world-space",PinType.PinCategory="struct",PinType.PinSubCategory="",PinType.PinSubCategoryObject=/Script/CoreUObject.ScriptStruct'"/Script/CoreUObject.Vector"',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, 0",AutogeneratedDefaultValue="0, 0, 0",PersistentGuid=00000000000000000000000000000000,bHidden=False,bNotConnectable=False,bDefaultValueIsReadOnly=False,bDefaultValueIsIgnored=False,bAdvancedView=False,bOrphanedPin=False,) - CustomProperties Pin (PinId=FB1F08A845BD487C94E7D77544D6DFAD,PinName="TraceEnd",PinToolTip="Trace End\nVector\n\nThe end of the trace in world-space",PinType.PinCategory="struct",PinType.PinSubCategory="",PinType.PinSubCategoryObject=/Script/CoreUObject.ScriptStruct'"/Script/CoreUObject.Vector"',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, 0",AutogeneratedDefaultValue="0, 0, 0",PersistentGuid=00000000000000000000000000000000,bHidden=False,bNotConnectable=False,bDefaultValueIsReadOnly=False,bDefaultValueIsIgnored=False,bAdvancedView=False,bOrphanedPin=False,) - CustomProperties Pin (PinId=789D51671D014297856F0396DD3E4BC3,PinName="bTraceComplex",PinToolTip="Trace Complex\nBoolean\n\nWhether or not to trace the complex physics representation or just the simple representation",PinType.PinCategory="bool",PinType.PinSubCategory="",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,DefaultValue="true",AutogeneratedDefaultValue="true",PersistentGuid=00000000000000000000000000000000,bHidden=False,bNotConnectable=False,bDefaultValueIsReadOnly=False,bDefaultValueIsIgnored=False,bAdvancedView=False,bOrphanedPin=False,) - CustomProperties Pin (PinId=0CBD953C86A544FE98C066F4FEB320EC,PinName="bShowTrace",PinToolTip="Show Trace\nBoolean\n\nWhether or not to draw the trace in the world (for debugging)",PinType.PinCategory="bool",PinType.PinSubCategory="",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,DefaultValue="false",AutogeneratedDefaultValue="false",PersistentGuid=00000000000000000000000000000000,bHidden=False,bNotConnectable=False,bDefaultValueIsReadOnly=False,bDefaultValueIsIgnored=False,bAdvancedView=False,bOrphanedPin=False,) - CustomProperties Pin (PinId=782378B513EC4329A7E00BBBCA9190CC,PinName="bPersistentShowTrace",PinToolTip="Persistent Show Trace\nBoolean\n\nWhether or not to make the debugging draw stay in the world permanently",PinType.PinCategory="bool",PinType.PinSubCategory="",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,DefaultValue="false",AutogeneratedDefaultValue="false",PersistentGuid=00000000000000000000000000000000,bHidden=False,bNotConnectable=False,bDefaultValueIsReadOnly=False,bDefaultValueIsIgnored=False,bAdvancedView=False,bOrphanedPin=False,) - CustomProperties Pin (PinId=F077B022655742FF891ACDF37D15F1BA,PinName="HitLocation",PinToolTip="Hit Location\nVector",Direction="EGPD_Output",PinType.PinCategory="struct",PinType.PinSubCategory="",PinType.PinSubCategoryObject=/Script/CoreUObject.ScriptStruct'"/Script/CoreUObject.Vector"',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, 0",AutogeneratedDefaultValue="0, 0, 0",PersistentGuid=00000000000000000000000000000000,bHidden=False,bNotConnectable=False,bDefaultValueIsReadOnly=False,bDefaultValueIsIgnored=False,bAdvancedView=False,bOrphanedPin=False,) - CustomProperties Pin (PinId=6D8B46698B1547D187E949DB90482C78,PinName="HitNormal",PinToolTip="Hit Normal\nVector",Direction="EGPD_Output",PinType.PinCategory="struct",PinType.PinSubCategory="",PinType.PinSubCategoryObject=/Script/CoreUObject.ScriptStruct'"/Script/CoreUObject.Vector"',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, 0",AutogeneratedDefaultValue="0, 0, 0",PersistentGuid=00000000000000000000000000000000,bHidden=False,bNotConnectable=False,bDefaultValueIsReadOnly=False,bDefaultValueIsIgnored=False,bAdvancedView=False,bOrphanedPin=False,) - CustomProperties Pin (PinId=158EB11340C84CA5958FE7B4F296076B,PinName="BoneName",PinToolTip="Bone Name\nName",Direction="EGPD_Output",PinType.PinCategory="name",PinType.PinSubCategory="",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,DefaultValue="None",AutogeneratedDefaultValue="None",PersistentGuid=00000000000000000000000000000000,bHidden=False,bNotConnectable=False,bDefaultValueIsReadOnly=False,bDefaultValueIsIgnored=False,bAdvancedView=False,bOrphanedPin=False,) - CustomProperties Pin (PinId=13AD4AE0297E43639A30413D3F65407D,PinName="OutHit",PinToolTip="Out Hit\nHit Result Structure",Direction="EGPD_Output",PinType.PinCategory="struct",PinType.PinSubCategory="",PinType.PinSubCategoryObject=/Script/CoreUObject.ScriptStruct'"/Script/Engine.HitResult"',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=963914D01EDF49EDA30FBB91F2CF493C,PinName="ReturnValue",PinToolTip="Return Value\nBoolean",Direction="EGPD_Output",PinType.PinCategory="bool",PinType.PinSubCategory="",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,DefaultValue="false",AutogeneratedDefaultValue="false",PersistentGuid=00000000000000000000000000000000,bHidden=False,bNotConnectable=False,bDefaultValueIsReadOnly=False,bDefaultValueIsIgnored=False,bAdvancedView=False,bOrphanedPin=False,) - End Object - `, - color: Configuration.nodeColors.blue, - icon: SVGIcon.functionSymbol, - pins: 13, - pinNames: ["Target", "Trace Start", "Trace End", "Trace Complex", "Show Trace", "Persistent Show Trace", "Hit Location", "Hit Normal", "Bone Name", "Out Hit", "Return Value"], - delegate: false, - development: false, - }, - { - name: "Delay", - value: String.raw` - Begin Object Class=/Script/BlueprintGraph.K2Node_CallFunction Name="K2Node_CallFunction_17" - FunctionReference=(MemberParent=/Script/CoreUObject.Class'"/Script/Engine.KismetSystemLibrary"',MemberName="Delay") - NodePosX=-224 - NodePosY=-336 - NodeGuid=8CDD81286D894EBA8414B5DEBA780D9E - CustomProperties Pin (PinId=B2476CF3411C6290BC6D97B714E207D4,PinName="execute",PinToolTip="\nExec",PinType.PinCategory="exec",PinType.PinSubCategory="",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,LinkedTo=(K2Node_CallFunction_19 9C174E82466ECE8521C95FBF22ED4A68,),PersistentGuid=00000000000000000000000000000000,bHidden=False,bNotConnectable=False,bDefaultValueIsReadOnly=False,bDefaultValueIsIgnored=False,bAdvancedView=False,bOrphanedPin=False,) - CustomProperties Pin (PinId=69F8184E4070B5FBDEF06A94677454D5,PinName="then",PinFriendlyName="Completed",PinToolTip="Completed\nExec",Direction="EGPD_Output",PinType.PinCategory="exec",PinType.PinSubCategory="",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,LinkedTo=(K2Node_CallFunction_18 1F53F0D240A7547201D59D8C9A37290B,),PersistentGuid=00000000000000000000000000000000,bHidden=False,bNotConnectable=False,bDefaultValueIsReadOnly=False,bDefaultValueIsIgnored=False,bAdvancedView=False,bOrphanedPin=False,) - CustomProperties Pin (PinId=BA6B7D3B429FDD4C250237BD54D75099,PinName="self",PinFriendlyName=NSLOCTEXT("K2Node", "Target", "Target"),PinToolTip="Target\nKismet System Library Object Reference",PinType.PinCategory="object",PinType.PinSubCategory="",PinType.PinSubCategoryObject=/Script/CoreUObject.Class'"/Script/Engine.KismetSystemLibrary"',PinType.PinSubCategoryMemberReference=(),PinType.PinValueType=(),PinType.ContainerType=None,PinType.bIsReference=False,PinType.bIsConst=False,PinType.bIsWeakPointer=False,PinType.bIsUObjectWrapper=False,PinType.bSerializeAsSinglePrecisionFloat=False,DefaultObject="/Script/Engine.Default__KismetSystemLibrary",PersistentGuid=00000000000000000000000000000000,bHidden=True,bNotConnectable=False,bDefaultValueIsReadOnly=False,bDefaultValueIsIgnored=False,bAdvancedView=False,bOrphanedPin=False,) - CustomProperties Pin (PinId=A2E27ABE4A7EE373C1983487B550FCA1,PinName="WorldContextObject",PinToolTip="World Context Object\nObject Reference",PinType.PinCategory="object",PinType.PinSubCategory="",PinType.PinSubCategoryObject=/Script/CoreUObject.Class'"/Script/CoreUObject.Object"',PinType.PinSubCategoryMemberReference=(),PinType.PinValueType=(),PinType.ContainerType=None,PinType.bIsReference=False,PinType.bIsConst=True,PinType.bIsWeakPointer=False,PinType.bIsUObjectWrapper=False,PinType.bSerializeAsSinglePrecisionFloat=False,PersistentGuid=00000000000000000000000000000000,bHidden=True,bNotConnectable=False,bDefaultValueIsReadOnly=False,bDefaultValueIsIgnored=False,bAdvancedView=False,bOrphanedPin=False,) - CustomProperties Pin (PinId=AEB97A71428D31E899D38F9E30243F68,PinName="Duration",PinToolTip="Duration\nFloat (single-precision)\n\nlength of delay (in seconds).",PinType.PinCategory="real",PinType.PinSubCategory="float",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,DefaultValue="0.2",AutogeneratedDefaultValue="0.2",LinkedTo=(K2Node_VariableGet_8 7F1D5C3A40DB0725BEC01192B06FE830,),PersistentGuid=00000000000000000000000000000000,bHidden=False,bNotConnectable=False,bDefaultValueIsReadOnly=False,bDefaultValueIsIgnored=False,bAdvancedView=False,bOrphanedPin=False,) - CustomProperties Pin (PinId=D95C20784C876E9AFC7E4BB3C3CCE773,PinName="LatentInfo",PinToolTip="Latent Info\nLatent Action Info Structure\n\nThe latent action.",PinType.PinCategory="struct",PinType.PinSubCategory="",PinType.PinSubCategoryObject=/Script/CoreUObject.ScriptStruct'"/Script/Engine.LatentActionInfo"',PinType.PinSubCategoryMemberReference=(),PinType.PinValueType=(),PinType.ContainerType=None,PinType.bIsReference=False,PinType.bIsConst=False,PinType.bIsWeakPointer=False,PinType.bIsUObjectWrapper=False,PinType.bSerializeAsSinglePrecisionFloat=False,DefaultValue="(Linkage=-1,UUID=-1,ExecutionFunction=\"\",CallbackTarget=None)",AutogeneratedDefaultValue="LatentInfo",PersistentGuid=00000000000000000000000000000000,bHidden=True,bNotConnectable=False,bDefaultValueIsReadOnly=False,bDefaultValueIsIgnored=False,bAdvancedView=False,bOrphanedPin=False,) - End Object - `, - color: Configuration.nodeColors.blue, - icon: SVGIcon.functionSymbol, - pins: 3, - pinNames: ["Duration", "Completed"], - delegate: false, - development: false, - }, - { - name: "Literal enum EARLineTraceChannels", - value: String.raw` - Begin Object Class=/Script/BlueprintGraph.K2Node_EnumLiteral Name="K2Node_EnumLiteral_0" - Enum=/Script/CoreUObject.Enum'"/Script/AugmentedReality.EARLineTraceChannels"' - NodePosX=-864 - NodePosY=-1856 - NodeGuid=50A89C411ADB4A4388E2CDE22CBEF9B0 - CustomProperties Pin (PinId=BEEA33BA22304D868E6E7C78C7E4BE6A,PinName="Enum",PinType.PinCategory="byte",PinType.PinSubCategory="",PinType.PinSubCategoryObject=/Script/CoreUObject.Enum'"/Script/AugmentedReality.EARLineTraceChannels"',PinType.PinSubCategoryMemberReference=(),PinType.PinValueType=(),PinType.ContainerType=None,PinType.bIsReference=False,PinType.bIsConst=False,PinType.bIsWeakPointer=False,PinType.bIsUObjectWrapper=False,PinType.bSerializeAsSinglePrecisionFloat=False,DefaultValue="None",PersistentGuid=00000000000000000000000000000000,bHidden=False,bNotConnectable=False,bDefaultValueIsReadOnly=False,bDefaultValueIsIgnored=False,bAdvancedView=False,bOrphanedPin=False,) - CustomProperties Pin (PinId=B682278698A545E79A232FCCA7C1EB4D,PinName="ReturnValue",Direction="EGPD_Output",PinType.PinCategory="byte",PinType.PinSubCategory="",PinType.PinSubCategoryObject=/Script/CoreUObject.Enum'"/Script/AugmentedReality.EARLineTraceChannels"',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 - `, - color: Configuration.nodeColors.green, - icon: SVGIcon.enum, - pins: 2, - pinNames: ["Enum", "Return Value"], - delegate: false, - development: false, - }, - { - name: "Create Event", - value: String.raw` - Begin Object Class=/Script/BlueprintGraph.K2Node_CreateDelegate Name="K2Node_CreateDelegate_1" - NodePosX=368 - NodePosY=-224 - NodeGuid=0FA4EE58928C4CF285441256561E250A - CustomProperties Pin (PinId=4735A6AC4F9F7A3AFD64B2801F623052,PinName="self",PinFriendlyName=NSLOCTEXT("K2Node", "CreateDelegate_ObjectInputName", "Object"),PinType.PinCategory="object",PinType.PinSubCategory="",PinType.PinSubCategoryObject=/Script/CoreUObject.Class'"/Script/CoreUObject.Object"',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=0A66F49740A5DDD42C1AECA040844EBF,PinName="OutputDelegate",PinFriendlyName=NSLOCTEXT("K2Node", "CreateDelegate_DelegateOutName", "Event"),Direction="EGPD_Output",PinType.PinCategory="delegate",PinType.PinSubCategory="",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 - `, - color: Configuration.nodeColors.green, - icon: SVGIcon.node, - pins: 2, - pinNames: ["Object", "Event"], - delegate: false, - development: false, - }, - { - name: "SpawnActor NONE", - value: String.raw` - Begin Object Class=/Script/BlueprintGraph.K2Node_SpawnActorFromClass Name="K2Node_SpawnActorFromClass_1" ExportPath=/Script/BlueprintGraph.K2Node_SpawnActorFromClass'"/Temp/Untitled_1.Untitled_1:PersistentLevel.Untitled.EventGraph.K2Node_SpawnActorFromClass_1"' - NodePosX=-256 - NodePosY=-128 - AdvancedPinDisplay=Shown - NodeGuid=24B049D9DB0F44D882AFE6C80BCFD6D7 - CustomProperties Pin (PinId=DAD2D02C89FA40C2816217E9926FE015,PinName="execute",PinType.PinCategory="exec",PinType.PinSubCategory="",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,) - CustomProperties Pin (PinId=16CEF4A26976499C8D28A51FC5D5FC06,PinName="then",Direction="EGPD_Output",PinType.PinCategory="exec",PinType.PinSubCategory="",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,) - CustomProperties Pin (PinId=FCDCE4268C464334BEDFD7166183C92E,PinName="Class",PinToolTip="Actor Class Reference Class\nThe object class you want to construct",PinType.PinCategory="class",PinType.PinSubCategory="",PinType.PinSubCategoryObject=/Script/CoreUObject.Class'"/Script/Engine.Actor"',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=431A4F3F9A9444FAB27C9A4FF1F5DF75,PinName="ReturnValue",PinToolTip="Actor Object Reference Return Value\nThe constructed object",Direction="EGPD_Output",PinType.PinCategory="object",PinType.PinSubCategory="",PinType.PinSubCategoryObject=/Script/CoreUObject.Class'"/Script/Engine.Actor"',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=0A8BF8604B274EC6A2FC38665C78179C,PinName="SpawnTransform",PinToolTip="Spawn Transform\nTransform\n\nThe transform to spawn the Actor with",PinType.PinCategory="struct",PinType.PinSubCategory="",PinType.PinSubCategoryObject=/Script/CoreUObject.ScriptStruct'"/Script/CoreUObject.Transform"',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=22A7ADCDABD041C78907E027D38A3972,PinName="CollisionHandlingOverride",PinToolTip="Collision Handling Override\nESpawnActorCollisionHandlingMethod Enum\n\nSpecifies how to handle collisions at the spawn point. If undefined, uses actor class settings.",PinType.PinCategory="byte",PinType.PinSubCategory="",PinType.PinSubCategoryObject=/Script/CoreUObject.Enum'"/Script/Engine.ESpawnActorCollisionHandlingMethod"',PinType.PinSubCategoryMemberReference=(),PinType.PinValueType=(),PinType.ContainerType=None,PinType.bIsReference=False,PinType.bIsConst=False,PinType.bIsWeakPointer=False,PinType.bIsUObjectWrapper=False,PinType.bSerializeAsSinglePrecisionFloat=False,DefaultValue="Undefined",PersistentGuid=00000000000000000000000000000000,bHidden=False,bNotConnectable=False,bDefaultValueIsReadOnly=False,bDefaultValueIsIgnored=False,bAdvancedView=False,bOrphanedPin=False,) - CustomProperties Pin (PinId=7C7F74180B6B464F946E79A8AF068F97,PinName="TransformScaleMethod",PinType.PinCategory="byte",PinType.PinSubCategory="",PinType.PinSubCategoryObject=/Script/CoreUObject.Enum'"/Script/Engine.ESpawnActorScaleMethod"',PinType.PinSubCategoryMemberReference=(),PinType.PinValueType=(),PinType.ContainerType=None,PinType.bIsReference=False,PinType.bIsConst=False,PinType.bIsWeakPointer=False,PinType.bIsUObjectWrapper=False,PinType.bSerializeAsSinglePrecisionFloat=False,DefaultValue="MultiplyWithRoot",PersistentGuid=00000000000000000000000000000000,bHidden=False,bNotConnectable=False,bDefaultValueIsReadOnly=False,bDefaultValueIsIgnored=False,bAdvancedView=True,bOrphanedPin=False,) - CustomProperties Pin (PinId=A8322AFB4361415CB589F9F97A1AEAF7,PinName="Owner",PinToolTip="Owner\nActor Object Reference\n\nCan be left empty; primarily used for replication (bNetUseOwnerRelevancy and bOnlyRelevantToOwner), or visibility (PrimitiveComponent\'s bOwnerNoSee/bOnlyOwnerSee)",PinType.PinCategory="object",PinType.PinSubCategory="",PinType.PinSubCategoryObject=/Script/CoreUObject.Class'"/Script/Engine.Actor"',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=True,bOrphanedPin=False,) - End Object - `, - color: Configuration.nodeColors.blue, - icon: SVGIcon.spawnActor, - pins: 8, - pinNames: ["Class", "Spawn Transform", "Collision Handling Override", "Transform Scale Method", "Owner", "Return Value"], - delegate: false, - development: false, - }, - { - name: "SpawnActor Point Light", - value: String.raw` - Begin Object Class=/Script/BlueprintGraph.K2Node_SpawnActorFromClass Name="K2Node_SpawnActorFromClass_0" ExportPath=/Script/BlueprintGraph.K2Node_SpawnActorFromClass'"/Temp/Untitled_1.Untitled_1:PersistentLevel.Untitled.EventGraph.K2Node_SpawnActorFromClass_0"' - NodePosX=-560 - NodePosY=-96 - AdvancedPinDisplay=Shown - NodeGuid=339A61F4C503440C93AB7A8B8B464A42 - CustomProperties Pin (PinId=BEEE0AE5F4F24EE2A0CC153B52844919,PinName="execute",PinType.PinCategory="exec",PinType.PinSubCategory="",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,) - CustomProperties Pin (PinId=CFA5506C331541C0B35739F95ACCC110,PinName="then",Direction="EGPD_Output",PinType.PinCategory="exec",PinType.PinSubCategory="",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,) - CustomProperties Pin (PinId=C9088BD19473494B8426AAE584D5F5F6,PinName="Class",PinToolTip="Actor Class Reference Class\nThe object class you want to construct",PinType.PinCategory="class",PinType.PinSubCategory="",PinType.PinSubCategoryObject=/Script/CoreUObject.Class'"/Script/Engine.Actor"',PinType.PinSubCategoryMemberReference=(),PinType.PinValueType=(),PinType.ContainerType=None,PinType.bIsReference=False,PinType.bIsConst=False,PinType.bIsWeakPointer=False,PinType.bIsUObjectWrapper=False,PinType.bSerializeAsSinglePrecisionFloat=False,DefaultObject="/Script/Engine.PointLight",PersistentGuid=00000000000000000000000000000000,bHidden=False,bNotConnectable=False,bDefaultValueIsReadOnly=False,bDefaultValueIsIgnored=False,bAdvancedView=False,bOrphanedPin=False,) - CustomProperties Pin (PinId=8A9DB62EE64D4E9987578479E0E83C0B,PinName="ReturnValue",PinToolTip="Point Light Object Reference Return Value\nThe constructed object",Direction="EGPD_Output",PinType.PinCategory="object",PinType.PinSubCategory="",PinType.PinSubCategoryObject=/Script/CoreUObject.Class'"/Script/Engine.PointLight"',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=9038EC19A2F74900AC57B4BD05146E2C,PinName="SpawnTransform",PinToolTip="Spawn Transform\nTransform\n\nThe transform to spawn the Actor with",PinType.PinCategory="struct",PinType.PinSubCategory="",PinType.PinSubCategoryObject=/Script/CoreUObject.ScriptStruct'"/Script/CoreUObject.Transform"',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=DF50478D9FF04AA393E8D08D8EC8D6EF,PinName="CollisionHandlingOverride",PinToolTip="Collision Handling Override\nESpawnActorCollisionHandlingMethod Enum\n\nSpecifies how to handle collisions at the spawn point. If undefined, uses actor class settings.",PinType.PinCategory="byte",PinType.PinSubCategory="",PinType.PinSubCategoryObject=/Script/CoreUObject.Enum'"/Script/Engine.ESpawnActorCollisionHandlingMethod"',PinType.PinSubCategoryMemberReference=(),PinType.PinValueType=(),PinType.ContainerType=None,PinType.bIsReference=False,PinType.bIsConst=False,PinType.bIsWeakPointer=False,PinType.bIsUObjectWrapper=False,PinType.bSerializeAsSinglePrecisionFloat=False,DefaultValue="AdjustIfPossibleButDontSpawnIfColliding",PersistentGuid=00000000000000000000000000000000,bHidden=False,bNotConnectable=False,bDefaultValueIsReadOnly=False,bDefaultValueIsIgnored=False,bAdvancedView=False,bOrphanedPin=False,) - CustomProperties Pin (PinId=BBEB70384DE441AFB752C06D2484260A,PinName="TransformScaleMethod",PinType.PinCategory="byte",PinType.PinSubCategory="",PinType.PinSubCategoryObject=/Script/CoreUObject.Enum'"/Script/Engine.ESpawnActorScaleMethod"',PinType.PinSubCategoryMemberReference=(),PinType.PinValueType=(),PinType.ContainerType=None,PinType.bIsReference=False,PinType.bIsConst=False,PinType.bIsWeakPointer=False,PinType.bIsUObjectWrapper=False,PinType.bSerializeAsSinglePrecisionFloat=False,DefaultValue="MultiplyWithRoot",PersistentGuid=00000000000000000000000000000000,bHidden=False,bNotConnectable=False,bDefaultValueIsReadOnly=False,bDefaultValueIsIgnored=False,bAdvancedView=True,bOrphanedPin=False,) - CustomProperties Pin (PinId=C6D5782B0BD64B5E89E2FC5ED3402871,PinName="Owner",PinToolTip="Owner\nActor Object Reference\n\nCan be left empty; primarily used for replication (bNetUseOwnerRelevancy and bOnlyRelevantToOwner), or visibility (PrimitiveComponent\'s bOwnerNoSee/bOnlyOwnerSee)",PinType.PinCategory="object",PinType.PinSubCategory="",PinType.PinSubCategoryObject=/Script/CoreUObject.Class'"/Script/Engine.Actor"',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=True,bOrphanedPin=False,) - CustomProperties Pin (PinId=C6F3F40366F54FCAB1071FC6838BA4BD,PinName="Instigator",PinToolTip="Instigator\nPawn Object Reference\n\nPawn responsible for damage and other gameplay events caused by this actor.",PinType.PinCategory="object",PinType.PinSubCategory="",PinType.PinSubCategoryObject=/Script/CoreUObject.Class'"/Script/Engine.Pawn"',PinType.PinSubCategoryMemberReference=(),PinType.PinValueType=(),PinType.ContainerType=None,PinType.bIsReference=False,PinType.bIsConst=False,PinType.bIsWeakPointer=False,PinType.bIsUObjectWrapper=True,PinType.bSerializeAsSinglePrecisionFloat=False,AutogeneratedDefaultValue="None",PersistentGuid=00000000000000000000000000000000,bHidden=False,bNotConnectable=False,bDefaultValueIsReadOnly=False,bDefaultValueIsIgnored=False,bAdvancedView=False,bOrphanedPin=False,) - End Object - `, - color: Configuration.nodeColors.blue, - icon: SVGIcon.spawnActor, - pins: 9, - pinNames: [ - "Class", - "Spawn Transform", - "Collision Handling Override", - "Transform Scale Method", - "Owner", - "Instigator", - "Return Value" - ], - delegate: false, - development: false, - }, - { - name: "Line Trace For Objects", - value: String.raw` - Begin Object Class=/Script/BlueprintGraph.K2Node_CallFunction Name="K2Node_CallFunction_8" - FunctionReference=(MemberParent=/Script/CoreUObject.Class'"/Script/Engine.KismetSystemLibrary"',MemberName="LineTraceSingleForObjects") - NodePosX=-208 - NodePosY=-352 - AdvancedPinDisplay=Shown - ErrorType=1 - NodeGuid=3EE71DDB1BD944DE961519875B895319 - CustomProperties Pin (PinId=96A094494D762C998E774ABB929EB41C,PinName="execute",PinToolTip="\nExec",PinType.PinCategory="exec",PinType.PinSubCategory="",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,) - CustomProperties Pin (PinId=718E43E94384B5B10074D6BD04E74488,PinName="then",PinToolTip="\nExec",Direction="EGPD_Output",PinType.PinCategory="exec",PinType.PinSubCategory="",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,) - CustomProperties Pin (PinId=0DB3EEE24A4161EE635A9A9D33EC9512,PinName="self",PinFriendlyName=NSLOCTEXT("K2Node", "Target", "Target"),PinToolTip="Target\nKismet System Library Object Reference",PinType.PinCategory="object",PinType.PinSubCategory="",PinType.PinSubCategoryObject=/Script/CoreUObject.Class'"/Script/Engine.KismetSystemLibrary"',PinType.PinSubCategoryMemberReference=(),PinType.PinValueType=(),PinType.ContainerType=None,PinType.bIsReference=False,PinType.bIsConst=False,PinType.bIsWeakPointer=False,PinType.bIsUObjectWrapper=False,PinType.bSerializeAsSinglePrecisionFloat=False,DefaultObject="/Script/Engine.Default__KismetSystemLibrary",PersistentGuid=00000000000000000000000000000000,bHidden=True,bNotConnectable=False,bDefaultValueIsReadOnly=False,bDefaultValueIsIgnored=False,bAdvancedView=False,bOrphanedPin=False,) - CustomProperties Pin (PinId=124D88C54AF09D670C3A42A2576E8454,PinName="WorldContextObject",PinToolTip="World Context Object\nObject Reference",PinType.PinCategory="object",PinType.PinSubCategory="",PinType.PinSubCategoryObject=/Script/CoreUObject.Class'"/Script/CoreUObject.Object"',PinType.PinSubCategoryMemberReference=(),PinType.PinValueType=(),PinType.ContainerType=None,PinType.bIsReference=False,PinType.bIsConst=True,PinType.bIsWeakPointer=False,PinType.bIsUObjectWrapper=False,PinType.bSerializeAsSinglePrecisionFloat=False,PersistentGuid=00000000000000000000000000000000,bHidden=True,bNotConnectable=False,bDefaultValueIsReadOnly=False,bDefaultValueIsIgnored=False,bAdvancedView=False,bOrphanedPin=False,) - CustomProperties Pin (PinId=9884A8D5423FB15AE0A4ECA2C08F258E,PinName="Start",PinToolTip="Start\nVector\n\nStart of line segment.",PinType.PinCategory="struct",PinType.PinSubCategory="",PinType.PinSubCategoryObject=/Script/CoreUObject.ScriptStruct'"/Script/CoreUObject.Vector"',PinType.PinSubCategoryMemberReference=(),PinType.PinValueType=(),PinType.ContainerType=None,PinType.bIsReference=False,PinType.bIsConst=True,PinType.bIsWeakPointer=False,PinType.bIsUObjectWrapper=False,PinType.bSerializeAsSinglePrecisionFloat=False,DefaultValue="0, 0, 0",AutogeneratedDefaultValue="0, 0, 0",PersistentGuid=00000000000000000000000000000000,bHidden=False,bNotConnectable=False,bDefaultValueIsReadOnly=False,bDefaultValueIsIgnored=False,bAdvancedView=False,bOrphanedPin=False,) - CustomProperties Pin (PinId=A4C186FF494EFAF15578EF9A0453DB39,PinName="End",PinToolTip="End\nVector\n\nEnd of line segment.",PinType.PinCategory="struct",PinType.PinSubCategory="",PinType.PinSubCategoryObject=/Script/CoreUObject.ScriptStruct'"/Script/CoreUObject.Vector"',PinType.PinSubCategoryMemberReference=(),PinType.PinValueType=(),PinType.ContainerType=None,PinType.bIsReference=False,PinType.bIsConst=True,PinType.bIsWeakPointer=False,PinType.bIsUObjectWrapper=False,PinType.bSerializeAsSinglePrecisionFloat=False,DefaultValue="0, 0, 0",AutogeneratedDefaultValue="0, 0, 0",PersistentGuid=00000000000000000000000000000000,bHidden=False,bNotConnectable=False,bDefaultValueIsReadOnly=False,bDefaultValueIsIgnored=False,bAdvancedView=False,bOrphanedPin=False,) - CustomProperties Pin (PinId=4BED576E40A832A6F31237AEFBACBB71,PinName="ObjectTypes",PinToolTip="Object Types\nArray of EObjectTypeQuery Enums\n\nArray of Object Types to trace",PinType.PinCategory="byte",PinType.PinSubCategory="",PinType.PinSubCategoryObject=/Script/CoreUObject.Enum'"/Script/Engine.EObjectTypeQuery"',PinType.PinSubCategoryMemberReference=(),PinType.PinValueType=(),PinType.ContainerType=Array,PinType.bIsReference=True,PinType.bIsConst=True,PinType.bIsWeakPointer=False,PinType.bIsUObjectWrapper=False,PinType.bSerializeAsSinglePrecisionFloat=False,DefaultValue="ObjectTypeQuery1",PersistentGuid=00000000000000000000000000000000,bHidden=False,bNotConnectable=False,bDefaultValueIsReadOnly=False,bDefaultValueIsIgnored=True,bAdvancedView=False,bOrphanedPin=False,) - CustomProperties Pin (PinId=A8296F984AFE64743DAB3E897CC3DF47,PinName="bTraceComplex",PinToolTip="Trace Complex\nBoolean\n\nTrue to test against complex collision, false to test against simplified collision.",PinType.PinCategory="bool",PinType.PinSubCategory="",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,DefaultValue="false",AutogeneratedDefaultValue="false",PersistentGuid=00000000000000000000000000000000,bHidden=False,bNotConnectable=False,bDefaultValueIsReadOnly=False,bDefaultValueIsIgnored=False,bAdvancedView=False,bOrphanedPin=False,) - CustomProperties Pin (PinId=A19DB65F47B607A3AAF50EA382815B7D,PinName="ActorsToIgnore",PinToolTip="Actors to Ignore\nArray of Actor Object References",PinType.PinCategory="object",PinType.PinSubCategory="",PinType.PinSubCategoryObject=/Script/CoreUObject.Class'"/Script/Engine.Actor"',PinType.PinSubCategoryMemberReference=(),PinType.PinValueType=(),PinType.ContainerType=Array,PinType.bIsReference=True,PinType.bIsConst=True,PinType.bIsWeakPointer=False,PinType.bIsUObjectWrapper=False,PinType.bSerializeAsSinglePrecisionFloat=False,PersistentGuid=00000000000000000000000000000000,bHidden=False,bNotConnectable=False,bDefaultValueIsReadOnly=False,bDefaultValueIsIgnored=True,bAdvancedView=False,bOrphanedPin=False,) - CustomProperties Pin (PinId=A3E482A7474A05E0E58F6AAA6E4734CD,PinName="DrawDebugType",PinToolTip="Draw Debug Type\nEDrawDebugTrace Enum",PinType.PinCategory="byte",PinType.PinSubCategory="",PinType.PinSubCategoryObject=/Script/CoreUObject.Enum'"/Script/Engine.EDrawDebugTrace"',PinType.PinSubCategoryMemberReference=(),PinType.PinValueType=(),PinType.ContainerType=None,PinType.bIsReference=False,PinType.bIsConst=False,PinType.bIsWeakPointer=False,PinType.bIsUObjectWrapper=False,PinType.bSerializeAsSinglePrecisionFloat=False,DefaultValue="ForOneFrame",PersistentGuid=00000000000000000000000000000000,bHidden=False,bNotConnectable=False,bDefaultValueIsReadOnly=False,bDefaultValueIsIgnored=False,bAdvancedView=False,bOrphanedPin=False,) - CustomProperties Pin (PinId=FE2B25154C824BB9EAF9E9A2ADA5943E,PinName="OutHit",PinToolTip="Out Hit\nHit Result Structure\n\nProperties of the trace hit.",Direction="EGPD_Output",PinType.PinCategory="struct",PinType.PinSubCategory="",PinType.PinSubCategoryObject=/Script/CoreUObject.ScriptStruct'"/Script/Engine.HitResult"',PinType.PinSubCategoryMemberReference=(),PinType.PinValueType=(),PinType.ContainerType=None,PinType.bIsReference=False,PinType.bIsConst=False,PinType.bIsWeakPointer=False,PinType.bIsUObjectWrapper=False,PinType.bSerializeAsSinglePrecisionFloat=False,SubPins=(K2Node_CallFunction_8 D06FD3BB41F114BBF8C89DB38EAC0761,K2Node_CallFunction_8 B45FC53E42E98D2933D7A6A33722F4D8,K2Node_CallFunction_8 4DB0E6CC46E5A3C80AC6C1A5FA3E5129,K2Node_CallFunction_8 3A3C030840A593D2D379B2B716F271AB,K2Node_CallFunction_8 4466B24F480077A3458BF49C92FC9BAA,K2Node_CallFunction_8 F25B18164D6964B12DFEABADDB74919E,K2Node_CallFunction_8 71CB4433415AB77E32B1709BBD6573C4,K2Node_CallFunction_8 7AA02A024FF3C7D1429BE89272EB95A9,K2Node_CallFunction_8 4520C8C14542EBD0F7E6F49B25374A3A,K2Node_CallFunction_8 0D36352148C729A423CAD69546B499D3,K2Node_CallFunction_8 70B373F6489AD4ACF61A95BA7D172DA8,K2Node_CallFunction_8 70B601B342FDB51653A3069BE9ED80C1,K2Node_CallFunction_8 B0B9765C4B5539AC163A42B1C71EB743,K2Node_CallFunction_8 64F90D394DB9CA34EB4EA09AFF22C35B,K2Node_CallFunction_8 421966B241843C5AC06C179E9FDCBF59,K2Node_CallFunction_8 F2AC86054C34D620A396B48266CE6555,K2Node_CallFunction_8 C6128AA849ED10F1A91BB78A480187B4,K2Node_CallFunction_8 0624877E4E2FE8DEFAD2BB848F637811,),PersistentGuid=00000000000000000000000000000000,bHidden=True,bNotConnectable=False,bDefaultValueIsReadOnly=False,bDefaultValueIsIgnored=False,bAdvancedView=False,bOrphanedPin=False,) - CustomProperties Pin (PinId=D06FD3BB41F114BBF8C89DB38EAC0761,PinName="OutHit_bBlockingHit",PinFriendlyName=LOCGEN_FORMAT_NAMED(NSLOCTEXT("KismetSchema", "SplitPinFriendlyNameFormat", "{PinDisplayName} {ProtoPinDisplayName}"), "PinDisplayName", "Out Hit", "ProtoPinDisplayName", "Blocking Hit"),PinToolTip="Out Hit Blocking Hit\nBoolean",Direction="EGPD_Output",PinType.PinCategory="bool",PinType.PinSubCategory="",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,DefaultValue="false",AutogeneratedDefaultValue="false",ParentPin=K2Node_CallFunction_8 FE2B25154C824BB9EAF9E9A2ADA5943E,PersistentGuid=00000000000000000000000000000000,bHidden=False,bNotConnectable=False,bDefaultValueIsReadOnly=False,bDefaultValueIsIgnored=False,bAdvancedView=False,bOrphanedPin=False,) - CustomProperties Pin (PinId=B45FC53E42E98D2933D7A6A33722F4D8,PinName="OutHit_bInitialOverlap",PinFriendlyName=LOCGEN_FORMAT_NAMED(NSLOCTEXT("KismetSchema", "SplitPinFriendlyNameFormat", "{PinDisplayName} {ProtoPinDisplayName}"), "PinDisplayName", "Out Hit", "ProtoPinDisplayName", "Initial Overlap"),PinToolTip="Out Hit Initial Overlap\nBoolean",Direction="EGPD_Output",PinType.PinCategory="bool",PinType.PinSubCategory="",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,DefaultValue="false",AutogeneratedDefaultValue="false",ParentPin=K2Node_CallFunction_8 FE2B25154C824BB9EAF9E9A2ADA5943E,PersistentGuid=00000000000000000000000000000000,bHidden=False,bNotConnectable=False,bDefaultValueIsReadOnly=False,bDefaultValueIsIgnored=False,bAdvancedView=False,bOrphanedPin=False,) - CustomProperties Pin (PinId=4DB0E6CC46E5A3C80AC6C1A5FA3E5129,PinName="OutHit_Time",PinFriendlyName=LOCGEN_FORMAT_NAMED(NSLOCTEXT("KismetSchema", "SplitPinFriendlyNameFormat", "{PinDisplayName} {ProtoPinDisplayName}"), "PinDisplayName", "Out Hit", "ProtoPinDisplayName", "Time"),PinToolTip="Out Hit Time\nFloat (single-precision)",Direction="EGPD_Output",PinType.PinCategory="real",PinType.PinSubCategory="float",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,DefaultValue="0.0",AutogeneratedDefaultValue="0.0",ParentPin=K2Node_CallFunction_8 FE2B25154C824BB9EAF9E9A2ADA5943E,PersistentGuid=00000000000000000000000000000000,bHidden=False,bNotConnectable=False,bDefaultValueIsReadOnly=False,bDefaultValueIsIgnored=False,bAdvancedView=False,bOrphanedPin=False,) - CustomProperties Pin (PinId=3A3C030840A593D2D379B2B716F271AB,PinName="OutHit_Distance",PinFriendlyName=LOCGEN_FORMAT_NAMED(NSLOCTEXT("KismetSchema", "SplitPinFriendlyNameFormat", "{PinDisplayName} {ProtoPinDisplayName}"), "PinDisplayName", "Out Hit", "ProtoPinDisplayName", "Distance"),PinToolTip="Out Hit Distance\nFloat (single-precision)",Direction="EGPD_Output",PinType.PinCategory="real",PinType.PinSubCategory="float",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,DefaultValue="0.0",AutogeneratedDefaultValue="0.0",ParentPin=K2Node_CallFunction_8 FE2B25154C824BB9EAF9E9A2ADA5943E,PersistentGuid=00000000000000000000000000000000,bHidden=False,bNotConnectable=False,bDefaultValueIsReadOnly=False,bDefaultValueIsIgnored=False,bAdvancedView=False,bOrphanedPin=False,) - CustomProperties Pin (PinId=4466B24F480077A3458BF49C92FC9BAA,PinName="OutHit_Location",PinFriendlyName=LOCGEN_FORMAT_NAMED(NSLOCTEXT("KismetSchema", "SplitPinFriendlyNameFormat", "{PinDisplayName} {ProtoPinDisplayName}"), "PinDisplayName", "Out Hit", "ProtoPinDisplayName", "Location"),PinToolTip="Out Hit Location\nVector",Direction="EGPD_Output",PinType.PinCategory="struct",PinType.PinSubCategory="",PinType.PinSubCategoryObject=/Script/CoreUObject.ScriptStruct'"/Script/CoreUObject.Vector"',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, 0",AutogeneratedDefaultValue="0, 0, 0",ParentPin=K2Node_CallFunction_8 FE2B25154C824BB9EAF9E9A2ADA5943E,PersistentGuid=00000000000000000000000000000000,bHidden=False,bNotConnectable=False,bDefaultValueIsReadOnly=False,bDefaultValueIsIgnored=False,bAdvancedView=False,bOrphanedPin=False,) - CustomProperties Pin (PinId=F25B18164D6964B12DFEABADDB74919E,PinName="OutHit_ImpactPoint",PinFriendlyName=LOCGEN_FORMAT_NAMED(NSLOCTEXT("KismetSchema", "SplitPinFriendlyNameFormat", "{PinDisplayName} {ProtoPinDisplayName}"), "PinDisplayName", "Out Hit", "ProtoPinDisplayName", "Impact Point"),PinToolTip="Out Hit Impact Point\nVector",Direction="EGPD_Output",PinType.PinCategory="struct",PinType.PinSubCategory="",PinType.PinSubCategoryObject=/Script/CoreUObject.ScriptStruct'"/Script/CoreUObject.Vector"',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, 0",AutogeneratedDefaultValue="0, 0, 0",ParentPin=K2Node_CallFunction_8 FE2B25154C824BB9EAF9E9A2ADA5943E,PersistentGuid=00000000000000000000000000000000,bHidden=False,bNotConnectable=False,bDefaultValueIsReadOnly=False,bDefaultValueIsIgnored=False,bAdvancedView=False,bOrphanedPin=False,) - CustomProperties Pin (PinId=71CB4433415AB77E32B1709BBD6573C4,PinName="OutHit_Normal",PinFriendlyName=LOCGEN_FORMAT_NAMED(NSLOCTEXT("KismetSchema", "SplitPinFriendlyNameFormat", "{PinDisplayName} {ProtoPinDisplayName}"), "PinDisplayName", "Out Hit", "ProtoPinDisplayName", "Normal"),PinToolTip="Out Hit Normal\nVector",Direction="EGPD_Output",PinType.PinCategory="struct",PinType.PinSubCategory="",PinType.PinSubCategoryObject=/Script/CoreUObject.ScriptStruct'"/Script/CoreUObject.Vector"',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, 0",AutogeneratedDefaultValue="0, 0, 0",ParentPin=K2Node_CallFunction_8 FE2B25154C824BB9EAF9E9A2ADA5943E,PersistentGuid=00000000000000000000000000000000,bHidden=False,bNotConnectable=False,bDefaultValueIsReadOnly=False,bDefaultValueIsIgnored=False,bAdvancedView=False,bOrphanedPin=False,) - CustomProperties Pin (PinId=7AA02A024FF3C7D1429BE89272EB95A9,PinName="OutHit_ImpactNormal",PinFriendlyName=LOCGEN_FORMAT_NAMED(NSLOCTEXT("KismetSchema", "SplitPinFriendlyNameFormat", "{PinDisplayName} {ProtoPinDisplayName}"), "PinDisplayName", "Out Hit", "ProtoPinDisplayName", "Impact Normal"),PinToolTip="Out Hit Impact Normal\nVector",Direction="EGPD_Output",PinType.PinCategory="struct",PinType.PinSubCategory="",PinType.PinSubCategoryObject=/Script/CoreUObject.ScriptStruct'"/Script/CoreUObject.Vector"',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, 0",AutogeneratedDefaultValue="0, 0, 0",ParentPin=K2Node_CallFunction_8 FE2B25154C824BB9EAF9E9A2ADA5943E,PersistentGuid=00000000000000000000000000000000,bHidden=False,bNotConnectable=False,bDefaultValueIsReadOnly=False,bDefaultValueIsIgnored=False,bAdvancedView=False,bOrphanedPin=False,) - CustomProperties Pin (PinId=4520C8C14542EBD0F7E6F49B25374A3A,PinName="OutHit_PhysMat",PinFriendlyName=LOCGEN_FORMAT_NAMED(NSLOCTEXT("KismetSchema", "SplitPinFriendlyNameFormat", "{PinDisplayName} {ProtoPinDisplayName}"), "PinDisplayName", "Out Hit", "ProtoPinDisplayName", "Phys Mat"),PinToolTip="Out Hit Phys Mat\nPhysical Material Object Reference",Direction="EGPD_Output",PinType.PinCategory="object",PinType.PinSubCategory="",PinType.PinSubCategoryObject=/Script/CoreUObject.Class'"/Script/PhysicsCore.PhysicalMaterial"',PinType.PinSubCategoryMemberReference=(),PinType.PinValueType=(),PinType.ContainerType=None,PinType.bIsReference=False,PinType.bIsConst=False,PinType.bIsWeakPointer=False,PinType.bIsUObjectWrapper=False,PinType.bSerializeAsSinglePrecisionFloat=False,ParentPin=K2Node_CallFunction_8 FE2B25154C824BB9EAF9E9A2ADA5943E,PersistentGuid=00000000000000000000000000000000,bHidden=False,bNotConnectable=False,bDefaultValueIsReadOnly=False,bDefaultValueIsIgnored=False,bAdvancedView=False,bOrphanedPin=False,) - CustomProperties Pin (PinId=0D36352148C729A423CAD69546B499D3,PinName="OutHit_HitActor",PinFriendlyName=LOCGEN_FORMAT_NAMED(NSLOCTEXT("KismetSchema", "SplitPinFriendlyNameFormat", "{PinDisplayName} {ProtoPinDisplayName}"), "PinDisplayName", "Out Hit", "ProtoPinDisplayName", "Hit Actor"),PinToolTip="Out Hit Hit Actor\nActor Object Reference",Direction="EGPD_Output",PinType.PinCategory="object",PinType.PinSubCategory="",PinType.PinSubCategoryObject=/Script/CoreUObject.Class'"/Script/Engine.Actor"',PinType.PinSubCategoryMemberReference=(),PinType.PinValueType=(),PinType.ContainerType=None,PinType.bIsReference=False,PinType.bIsConst=False,PinType.bIsWeakPointer=False,PinType.bIsUObjectWrapper=False,PinType.bSerializeAsSinglePrecisionFloat=False,ParentPin=K2Node_CallFunction_8 FE2B25154C824BB9EAF9E9A2ADA5943E,PersistentGuid=00000000000000000000000000000000,bHidden=False,bNotConnectable=False,bDefaultValueIsReadOnly=False,bDefaultValueIsIgnored=False,bAdvancedView=False,bOrphanedPin=False,) - CustomProperties Pin (PinId=70B373F6489AD4ACF61A95BA7D172DA8,PinName="OutHit_HitComponent",PinFriendlyName=LOCGEN_FORMAT_NAMED(NSLOCTEXT("KismetSchema", "SplitPinFriendlyNameFormat", "{PinDisplayName} {ProtoPinDisplayName}"), "PinDisplayName", "Out Hit", "ProtoPinDisplayName", "Hit Component"),PinToolTip="Out Hit Hit Component\nPrimitive Component Object Reference",Direction="EGPD_Output",PinType.PinCategory="object",PinType.PinSubCategory="",PinType.PinSubCategoryObject=/Script/CoreUObject.Class'"/Script/Engine.PrimitiveComponent"',PinType.PinSubCategoryMemberReference=(),PinType.PinValueType=(),PinType.ContainerType=None,PinType.bIsReference=False,PinType.bIsConst=False,PinType.bIsWeakPointer=False,PinType.bIsUObjectWrapper=False,PinType.bSerializeAsSinglePrecisionFloat=False,ParentPin=K2Node_CallFunction_8 FE2B25154C824BB9EAF9E9A2ADA5943E,PersistentGuid=00000000000000000000000000000000,bHidden=False,bNotConnectable=False,bDefaultValueIsReadOnly=False,bDefaultValueIsIgnored=False,bAdvancedView=False,bOrphanedPin=False,) - CustomProperties Pin (PinId=70B601B342FDB51653A3069BE9ED80C1,PinName="OutHit_HitBoneName",PinFriendlyName=LOCGEN_FORMAT_NAMED(NSLOCTEXT("KismetSchema", "SplitPinFriendlyNameFormat", "{PinDisplayName} {ProtoPinDisplayName}"), "PinDisplayName", "Out Hit", "ProtoPinDisplayName", "Hit Bone Name"),PinToolTip="Out Hit Hit Bone Name\nName",Direction="EGPD_Output",PinType.PinCategory="name",PinType.PinSubCategory="",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,DefaultValue="None",AutogeneratedDefaultValue="None",ParentPin=K2Node_CallFunction_8 FE2B25154C824BB9EAF9E9A2ADA5943E,PersistentGuid=00000000000000000000000000000000,bHidden=False,bNotConnectable=False,bDefaultValueIsReadOnly=False,bDefaultValueIsIgnored=False,bAdvancedView=False,bOrphanedPin=False,) - CustomProperties Pin (PinId=B0B9765C4B5539AC163A42B1C71EB743,PinName="OutHit_BoneName",PinFriendlyName=LOCGEN_FORMAT_NAMED(NSLOCTEXT("KismetSchema", "SplitPinFriendlyNameFormat", "{PinDisplayName} {ProtoPinDisplayName}"), "PinDisplayName", "Out Hit", "ProtoPinDisplayName", "Bone Name"),PinToolTip="Out Hit Bone Name\nName",Direction="EGPD_Output",PinType.PinCategory="name",PinType.PinSubCategory="",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,DefaultValue="None",AutogeneratedDefaultValue="None",ParentPin=K2Node_CallFunction_8 FE2B25154C824BB9EAF9E9A2ADA5943E,PersistentGuid=00000000000000000000000000000000,bHidden=False,bNotConnectable=False,bDefaultValueIsReadOnly=False,bDefaultValueIsIgnored=False,bAdvancedView=False,bOrphanedPin=False,) - CustomProperties Pin (PinId=64F90D394DB9CA34EB4EA09AFF22C35B,PinName="OutHit_HitItem",PinFriendlyName=LOCGEN_FORMAT_NAMED(NSLOCTEXT("KismetSchema", "SplitPinFriendlyNameFormat", "{PinDisplayName} {ProtoPinDisplayName}"), "PinDisplayName", "Out Hit", "ProtoPinDisplayName", "Hit Item"),PinToolTip="Out Hit Hit Item\nInteger",Direction="EGPD_Output",PinType.PinCategory="int",PinType.PinSubCategory="",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,DefaultValue="0",AutogeneratedDefaultValue="0",ParentPin=K2Node_CallFunction_8 FE2B25154C824BB9EAF9E9A2ADA5943E,PersistentGuid=00000000000000000000000000000000,bHidden=False,bNotConnectable=False,bDefaultValueIsReadOnly=False,bDefaultValueIsIgnored=False,bAdvancedView=False,bOrphanedPin=False,) - CustomProperties Pin (PinId=421966B241843C5AC06C179E9FDCBF59,PinName="OutHit_ElementIndex",PinFriendlyName=LOCGEN_FORMAT_NAMED(NSLOCTEXT("KismetSchema", "SplitPinFriendlyNameFormat", "{PinDisplayName} {ProtoPinDisplayName}"), "PinDisplayName", "Out Hit", "ProtoPinDisplayName", "Element Index"),PinToolTip="Out Hit Element Index\nInteger",Direction="EGPD_Output",PinType.PinCategory="int",PinType.PinSubCategory="",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,DefaultValue="0",AutogeneratedDefaultValue="0",ParentPin=K2Node_CallFunction_8 FE2B25154C824BB9EAF9E9A2ADA5943E,PersistentGuid=00000000000000000000000000000000,bHidden=False,bNotConnectable=False,bDefaultValueIsReadOnly=False,bDefaultValueIsIgnored=False,bAdvancedView=False,bOrphanedPin=False,) - CustomProperties Pin (PinId=F2AC86054C34D620A396B48266CE6555,PinName="OutHit_FaceIndex",PinFriendlyName=LOCGEN_FORMAT_NAMED(NSLOCTEXT("KismetSchema", "SplitPinFriendlyNameFormat", "{PinDisplayName} {ProtoPinDisplayName}"), "PinDisplayName", "Out Hit", "ProtoPinDisplayName", "Face Index"),PinToolTip="Out Hit Face Index\nInteger",Direction="EGPD_Output",PinType.PinCategory="int",PinType.PinSubCategory="",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,DefaultValue="0",AutogeneratedDefaultValue="0",ParentPin=K2Node_CallFunction_8 FE2B25154C824BB9EAF9E9A2ADA5943E,PersistentGuid=00000000000000000000000000000000,bHidden=False,bNotConnectable=False,bDefaultValueIsReadOnly=False,bDefaultValueIsIgnored=False,bAdvancedView=False,bOrphanedPin=False,) - CustomProperties Pin (PinId=C6128AA849ED10F1A91BB78A480187B4,PinName="OutHit_TraceStart",PinFriendlyName=LOCGEN_FORMAT_NAMED(NSLOCTEXT("KismetSchema", "SplitPinFriendlyNameFormat", "{PinDisplayName} {ProtoPinDisplayName}"), "PinDisplayName", "Out Hit", "ProtoPinDisplayName", "Trace Start"),PinToolTip="Out Hit Trace Start\nVector",Direction="EGPD_Output",PinType.PinCategory="struct",PinType.PinSubCategory="",PinType.PinSubCategoryObject=/Script/CoreUObject.ScriptStruct'"/Script/CoreUObject.Vector"',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, 0",AutogeneratedDefaultValue="0, 0, 0",ParentPin=K2Node_CallFunction_8 FE2B25154C824BB9EAF9E9A2ADA5943E,PersistentGuid=00000000000000000000000000000000,bHidden=False,bNotConnectable=False,bDefaultValueIsReadOnly=False,bDefaultValueIsIgnored=False,bAdvancedView=False,bOrphanedPin=False,) - CustomProperties Pin (PinId=0624877E4E2FE8DEFAD2BB848F637811,PinName="OutHit_TraceEnd",PinFriendlyName=LOCGEN_FORMAT_NAMED(NSLOCTEXT("KismetSchema", "SplitPinFriendlyNameFormat", "{PinDisplayName} {ProtoPinDisplayName}"), "PinDisplayName", "Out Hit", "ProtoPinDisplayName", "Trace End"),PinToolTip="Out Hit Trace End\nVector",Direction="EGPD_Output",PinType.PinCategory="struct",PinType.PinSubCategory="",PinType.PinSubCategoryObject=/Script/CoreUObject.ScriptStruct'"/Script/CoreUObject.Vector"',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, 0",AutogeneratedDefaultValue="0, 0, 0",ParentPin=K2Node_CallFunction_8 FE2B25154C824BB9EAF9E9A2ADA5943E,PersistentGuid=00000000000000000000000000000000,bHidden=False,bNotConnectable=False,bDefaultValueIsReadOnly=False,bDefaultValueIsIgnored=False,bAdvancedView=False,bOrphanedPin=False,) - CustomProperties Pin (PinId=297204E248B1AE9336367F9F0A184BC8,PinName="bIgnoreSelf",PinToolTip="Ignore Self\nBoolean",PinType.PinCategory="bool",PinType.PinSubCategory="",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,DefaultValue="true",AutogeneratedDefaultValue="true",PersistentGuid=00000000000000000000000000000000,bHidden=False,bNotConnectable=False,bDefaultValueIsReadOnly=False,bDefaultValueIsIgnored=False,bAdvancedView=False,bOrphanedPin=False,) - CustomProperties Pin (PinId=DAB5394745AA51AAE6033EB7CCF1C095,PinName="TraceColor",PinToolTip="Trace Color\nLinear Color Structure",PinType.PinCategory="struct",PinType.PinSubCategory="",PinType.PinSubCategoryObject=/Script/CoreUObject.ScriptStruct'"/Script/CoreUObject.LinearColor"',PinType.PinSubCategoryMemberReference=(),PinType.PinValueType=(),PinType.ContainerType=None,PinType.bIsReference=False,PinType.bIsConst=False,PinType.bIsWeakPointer=False,PinType.bIsUObjectWrapper=False,PinType.bSerializeAsSinglePrecisionFloat=False,DefaultValue="(R=1.000000,G=0.000000,B=0.000000,A=1.000000)",AutogeneratedDefaultValue="(R=1.000000,G=0.000000,B=0.000000,A=1.000000)",PersistentGuid=00000000000000000000000000000000,bHidden=False,bNotConnectable=False,bDefaultValueIsReadOnly=False,bDefaultValueIsIgnored=False,bAdvancedView=True,bOrphanedPin=False,) - CustomProperties Pin (PinId=8CD5CC5E4F927E9CBBFF58B0872C0546,PinName="TraceHitColor",PinToolTip="Trace Hit Color\nLinear Color Structure",PinType.PinCategory="struct",PinType.PinSubCategory="",PinType.PinSubCategoryObject=/Script/CoreUObject.ScriptStruct'"/Script/CoreUObject.LinearColor"',PinType.PinSubCategoryMemberReference=(),PinType.PinValueType=(),PinType.ContainerType=None,PinType.bIsReference=False,PinType.bIsConst=False,PinType.bIsWeakPointer=False,PinType.bIsUObjectWrapper=False,PinType.bSerializeAsSinglePrecisionFloat=False,DefaultValue="(R=0.000000,G=1.000000,B=0.000000,A=1.000000)",AutogeneratedDefaultValue="(R=0.000000,G=1.000000,B=0.000000,A=1.000000)",PersistentGuid=00000000000000000000000000000000,bHidden=False,bNotConnectable=False,bDefaultValueIsReadOnly=False,bDefaultValueIsIgnored=False,bAdvancedView=True,bOrphanedPin=False,) - CustomProperties Pin (PinId=FB76ED6F40844C82A75DA4A4A5A73820,PinName="DrawTime",PinToolTip="Draw Time\nFloat (single-precision)",PinType.PinCategory="real",PinType.PinSubCategory="float",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,DefaultValue="5.000000",AutogeneratedDefaultValue="5.000000",PersistentGuid=00000000000000000000000000000000,bHidden=False,bNotConnectable=False,bDefaultValueIsReadOnly=False,bDefaultValueIsIgnored=False,bAdvancedView=True,bOrphanedPin=False,) - CustomProperties Pin (PinId=54F6EF174A02D88C99CAFFBCF1E05B6E,PinName="ReturnValue",PinToolTip="Return Value\nBoolean\n\nTrue if there was a hit, false otherwise.",Direction="EGPD_Output",PinType.PinCategory="bool",PinType.PinSubCategory="",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,DefaultValue="false",AutogeneratedDefaultValue="false",PersistentGuid=00000000000000000000000000000000,bHidden=False,bNotConnectable=False,bDefaultValueIsReadOnly=False,bDefaultValueIsIgnored=False,bAdvancedView=False,bOrphanedPin=False,) - End Object - `, - color: Configuration.nodeColors.blue, - icon: SVGIcon.functionSymbol, - pins: 31, - pinNames: [ - "Start", - "End", - "Object Types", - "Trace Complex", - "Actors to Ignore", - "Draw Debug Type", - "Ignore Self", - "Trace Color", - "Trace Hit Color", - "Draw Time", - "Out Hit Blocking Hit", - "Out Hit Initial Overlap", - "Out Hit Time", - "Out Hit Distance", - "Out Hit Location", - "Out Hit Impact Point", - "Out Hit Normal", - "Out Hit Impact Normal", - "Out Hit Phys Mat", - "Out Hit Hit Actor", - "Out Hit Hit Component", - "Out Hit Hit Bone Name", - "Out Hit Bone Name", - "Out Hit Hit Item", - "Out Hit Element Index", - "Out Hit Face Index", - "Out Hit Trace Start", - "Out Hit Trace End", - "Return Value", - ], - delegate: false, - development: false, - }, - { - name: "Timeline", - value: String.raw` - Begin Object Class=/Script/BlueprintGraph.K2Node_Timeline Name="K2Node_Timeline_0" - TimelineName="Timeline" - TimelineGuid=5A2932A3D7004616A4F233DB24D4E31F - NodePosX=-1136 - NodePosY=-464 - bCanRenameNode=True - NodeGuid=FAA474FEEE534CAB9F8E0828CDE95892 - CustomProperties Pin (PinId=73D6A2B467F9472C8069BAB3E3245EE0,PinName="Play",PinType.PinCategory="exec",PinType.PinSubCategory="",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,) - CustomProperties Pin (PinId=A65D68F22BC7446998845F65C262B4AA,PinName="PlayFromStart",PinType.PinCategory="exec",PinType.PinSubCategory="",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,) - CustomProperties Pin (PinId=D1CF97026F034CF3A79C6E6F90C348BA,PinName="Stop",PinType.PinCategory="exec",PinType.PinSubCategory="",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,) - CustomProperties Pin (PinId=16A43012A9A14EB2B917962FD24731A7,PinName="Reverse",PinType.PinCategory="exec",PinType.PinSubCategory="",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,) - CustomProperties Pin (PinId=74C2E50D186D4230B6ED2327D08FDA34,PinName="ReverseFromEnd",PinType.PinCategory="exec",PinType.PinSubCategory="",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,) - CustomProperties Pin (PinId=434043688FB5451293945CA3C0E2D202,PinName="Update",Direction="EGPD_Output",PinType.PinCategory="exec",PinType.PinSubCategory="",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,LinkedTo=(K2Node_CallFunction_35 585A3CD5A0BA42569102B28820988070,),PersistentGuid=00000000000000000000000000000000,bHidden=False,bNotConnectable=False,bDefaultValueIsReadOnly=False,bDefaultValueIsIgnored=False,bAdvancedView=False,bOrphanedPin=False,) - CustomProperties Pin (PinId=296FA705872C4598BD613C68751387E3,PinName="Finished",Direction="EGPD_Output",PinType.PinCategory="exec",PinType.PinSubCategory="",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,) - CustomProperties Pin (PinId=95467DD3FD76493FB981FCD2B8287EA7,PinName="SetNewTime",PinType.PinCategory="exec",PinType.PinSubCategory="",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,) - CustomProperties Pin (PinId=48F9B48502CC484CA433FB1497A341E0,PinName="NewTime",PinType.PinCategory="real",PinType.PinSubCategory="float",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,DefaultValue="0.0",AutogeneratedDefaultValue="0.0",PersistentGuid=00000000000000000000000000000000,bHidden=False,bNotConnectable=False,bDefaultValueIsReadOnly=False,bDefaultValueIsIgnored=False,bAdvancedView=False,bOrphanedPin=False,) - CustomProperties Pin (PinId=5B2BC8D35A154CCE87AEA274C4CACED6,PinName="Direction",Direction="EGPD_Output",PinType.PinCategory="byte",PinType.PinSubCategory="",PinType.PinSubCategoryObject=/Script/CoreUObject.Enum'"/Script/Engine.ETimelineDirection"',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 - `, - color: Configuration.nodeColors.yellow, - icon: SVGIcon.timer, - pins: 10, - pinNames: [ - "Play", - "Play From Start", // No info in the graph that "from" is lower case - "Stop", - "Reverse", - "Reverse From End", // No info in the graph that "from" is lower case - "Set New Time", - "New Time", - "Update", - "Finished", - "Direction", - ], - delegate: false, - development: false, - }, - { - name: "Construction Script", - value: String.raw` - Begin Object Class=/Script/BlueprintGraph.K2Node_FunctionEntry Name="K2Node_FunctionEntry_11" - bEnforceConstCorrectness=False - FunctionReference=(MemberParent=/Script/CoreUObject.Class'"/Script/Engine.Actor"',MemberName="UserConstructionScript") - NodePosX=16 - NodePosY=-32 - NodeGuid=521B69F742A30F8EA5B92B8CC131AB54 - CustomProperties Pin (PinId=DE073CBD9EE44F4AA43C9BE239BBCB33,PinName="then",Direction="EGPD_Output",PinType.PinCategory="exec",PinType.PinSubCategory="",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,LinkedTo=(K2Node_CallFunction_4248 064F1F38F42D43ADA53BC41AFC6FBE9F,),PersistentGuid=00000000000000000000000000000000,bHidden=False,bNotConnectable=False,bDefaultValueIsReadOnly=False,bDefaultValueIsIgnored=False,bAdvancedView=False,bOrphanedPin=False,) - End Object - `, - color: Configuration.nodeColors.violet, - icon: SVGIcon.node, - pins: 1, - delegate: false, - development: false, - }, - { - name: "Set Relative Rotation", - subtitle: "Target is Scene Component", - value: String.raw` - Begin Object Class=/Script/BlueprintGraph.K2Node_CallFunction Name="K2Node_CallFunction_5" ExportPath=/Script/BlueprintGraph.K2Node_CallFunction'"/Temp/Untitled_1.Untitled_1:PersistentLevel.Untitled.EventGraph.K2Node_CallFunction_5"' - FunctionReference=(MemberParent=/Script/CoreUObject.Class'"/Script/Engine.SceneComponent"',MemberName="K2_SetRelativeRotation") - NodePosX=512 - NodePosY=-48 - AdvancedPinDisplay=Hidden - NodeGuid=2140E0AA9D8F4C5FB89F5CA378A9B56D - CustomProperties Pin (PinId=C347AFEE7AFC4848A63B99FF6167F73F,PinName="execute",PinToolTip="\nExec",PinType.PinCategory="exec",PinType.PinSubCategory="",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,) - CustomProperties Pin (PinId=F3E0EED07DD54370A2DA0FD76353286B,PinName="then",PinToolTip="\nExec",Direction="EGPD_Output",PinType.PinCategory="exec",PinType.PinSubCategory="",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,) - CustomProperties Pin (PinId=7EB45B16ED954F929722FBCD91A187A8,PinName="self",PinFriendlyName=NSLOCTEXT("K2Node", "Target", "Target"),PinToolTip="Target\nScene Component Object Reference",PinType.PinCategory="object",PinType.PinSubCategory="",PinType.PinSubCategoryObject=/Script/CoreUObject.Class'"/Script/Engine.SceneComponent"',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=AE73B4E46A094DD788D04725FD7C6DF9,PinName="NewRotation",PinToolTip="New Rotation\nRotator\n\nNew rotation of the component relative to its parent",PinType.PinCategory="struct",PinType.PinSubCategory="",PinType.PinSubCategoryObject=/Script/CoreUObject.ScriptStruct'"/Script/CoreUObject.Rotator"',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, 0",AutogeneratedDefaultValue="0, 0, 0",SubPins=(K2Node_CallFunction_5 F82B6140AD50485E8955369B735BC627,K2Node_CallFunction_5 0A417B3EA3074164B7DC605B7F85AF05,K2Node_CallFunction_5 8539DDEA84C24BE48F9D84B629FEA410,),PersistentGuid=00000000000000000000000000000000,bHidden=True,bNotConnectable=False,bDefaultValueIsReadOnly=False,bDefaultValueIsIgnored=False,bAdvancedView=False,bOrphanedPin=False,) - CustomProperties Pin (PinId=F82B6140AD50485E8955369B735BC627,PinName="NewRotation_Roll",PinFriendlyName=LOCGEN_FORMAT_NAMED(NSLOCTEXT("KismetSchema", "SplitPinFriendlyNameFormat", "{PinDisplayName} {ProtoPinDisplayName}"), "PinDisplayName", NSLOCTEXT("", "8F133E70437642249A31E409DD1E3852", "New Rotation"), "ProtoPinDisplayName", NSLOCTEXT("", "751A9C34B79E4E7F94E2F02DB922AFCE", "X (Roll)")),PinType.PinCategory="real",PinType.PinSubCategory="float",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,DefaultValue="0.0",AutogeneratedDefaultValue="0.0",ParentPin=K2Node_CallFunction_5 AE73B4E46A094DD788D04725FD7C6DF9,PersistentGuid=00000000000000000000000000000000,bHidden=False,bNotConnectable=False,bDefaultValueIsReadOnly=False,bDefaultValueIsIgnored=False,bAdvancedView=False,bOrphanedPin=False,) - CustomProperties Pin (PinId=0A417B3EA3074164B7DC605B7F85AF05,PinName="NewRotation_Pitch",PinFriendlyName=LOCGEN_FORMAT_NAMED(NSLOCTEXT("KismetSchema", "SplitPinFriendlyNameFormat", "{PinDisplayName} {ProtoPinDisplayName}"), "PinDisplayName", NSLOCTEXT("", "26BC4556F421494A8E68A42D38A23EF1", "New Rotation"), "ProtoPinDisplayName", NSLOCTEXT("", "105B6B68DAF74E6CAD83079F9E795ECF", "Y (Pitch)")),PinType.PinCategory="real",PinType.PinSubCategory="float",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,DefaultValue="0.0",AutogeneratedDefaultValue="0.0",ParentPin=K2Node_CallFunction_5 AE73B4E46A094DD788D04725FD7C6DF9,PersistentGuid=00000000000000000000000000000000,bHidden=False,bNotConnectable=False,bDefaultValueIsReadOnly=False,bDefaultValueIsIgnored=False,bAdvancedView=False,bOrphanedPin=False,) - CustomProperties Pin (PinId=8539DDEA84C24BE48F9D84B629FEA410,PinName="NewRotation_Yaw",PinFriendlyName=LOCGEN_FORMAT_NAMED(NSLOCTEXT("KismetSchema", "SplitPinFriendlyNameFormat", "{PinDisplayName} {ProtoPinDisplayName}"), "PinDisplayName", NSLOCTEXT("", "DE7AB5AB52D84405922E28EE72ABBB26", "New Rotation"), "ProtoPinDisplayName", NSLOCTEXT("", "1462F96F7C0B4D68B082EBA02E99F1EC", "Z (Yaw)")),PinType.PinCategory="real",PinType.PinSubCategory="float",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,DefaultValue="0.0",AutogeneratedDefaultValue="0.0",ParentPin=K2Node_CallFunction_5 AE73B4E46A094DD788D04725FD7C6DF9,PersistentGuid=00000000000000000000000000000000,bHidden=False,bNotConnectable=False,bDefaultValueIsReadOnly=False,bDefaultValueIsIgnored=False,bAdvancedView=False,bOrphanedPin=False,) - CustomProperties Pin (PinId=E9652915F52D465E993222AC59ABBEDF,PinName="bSweep",PinToolTip="Sweep\nBoolean\n\nWhether we sweep to the destination (currently not supported for rotation).",PinType.PinCategory="bool",PinType.PinSubCategory="",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,DefaultValue="false",AutogeneratedDefaultValue="false",PersistentGuid=00000000000000000000000000000000,bHidden=False,bNotConnectable=False,bDefaultValueIsReadOnly=False,bDefaultValueIsIgnored=False,bAdvancedView=True,bOrphanedPin=False,) - CustomProperties Pin (PinId=3EE87DFBA5AB473F93F003AC9F8A2DED,PinName="SweepHitResult",PinToolTip="Sweep Hit Result\nHit Result Structure\n\nHit result from any impact if sweep is true.",Direction="EGPD_Output",PinType.PinCategory="struct",PinType.PinSubCategory="",PinType.PinSubCategoryObject=/Script/CoreUObject.ScriptStruct'"/Script/Engine.HitResult"',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=True,bOrphanedPin=False,) - CustomProperties Pin (PinId=649255CFBCB9480E8DC1AA214F9FCE6B,PinName="bTeleport",PinToolTip="Teleport\nBoolean\n\nWhether we teleport the physics state (if physics collision is enabled for this object). If true, physics velocity for this object is unchanged (so ragdoll parts are not affected by change in location). If false, physics velocity is updated based on the change in position (affecting ragdoll parts).",PinType.PinCategory="bool",PinType.PinSubCategory="",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,DefaultValue="false",AutogeneratedDefaultValue="false",PersistentGuid=00000000000000000000000000000000,bHidden=False,bNotConnectable=False,bDefaultValueIsReadOnly=False,bDefaultValueIsIgnored=False,bAdvancedView=True,bOrphanedPin=False,) - End Object - `, - size: [15, 16.5], - color: Configuration.nodeColors.blue, - icon: SVGIcon.functionSymbol, - pins: 9, - pinNames: [ - "Target", - "New Rotation X (Roll)", - "New Rotation Y (Pitch)", - "New Rotation Z (Yaw)", - "Sweep", - "Teleport", - "Sweep Hit Result", - ], - delegate: false, - development: false, - }, - { - name: "Async Change Bundle State For Matching Primary Assets", - value: String.raw` - Begin Object Class=/Script/BlueprintGraph.K2Node_AsyncAction Name="K2Node_AsyncAction_0" ExportPath=/Script/BlueprintGraph.K2Node_AsyncAction'"/Temp/Untitled_1.Untitled_1:PersistentLevel.Untitled.EventGraph.K2Node_AsyncAction_0"' - ProxyFactoryFunctionName="AsyncChangeBundleStateForMatchingPrimaryAssets" - ProxyFactoryClass=/Script/CoreUObject.Class'"/Script/Engine.AsyncActionChangePrimaryAssetBundles"' - ProxyClass=/Script/CoreUObject.Class'"/Script/Engine.AsyncActionChangePrimaryAssetBundles"' - NodePosX=-384 - NodePosY=-1152 - NodeGuid=BE2398EE906341DFBF4027C551933479 - CustomProperties Pin (PinId=0ADB80D7303A4B70A271609DEF026A74,PinName="execute",PinToolTip="\nExec",PinType.PinCategory="exec",PinType.PinSubCategory="",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,) - CustomProperties Pin (PinId=982E6A6405014809B46CA263AA26EBE3,PinName="then",Direction="EGPD_Output",PinType.PinCategory="exec",PinType.PinSubCategory="",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,) - CustomProperties Pin (PinId=58B7B76B29454FAD99B90931BD676CAB,PinName="Completed",PinFriendlyName=NSLOCTEXT("UObjectDisplayNames", "AsyncActionChangePrimaryAssetBundles:Completed", "Completed"),Direction="EGPD_Output",PinType.PinCategory="exec",PinType.PinSubCategory="",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,) - CustomProperties Pin (PinId=FD58E0E4210D4714AFB0A5D049BF57D0,PinName="WorldContextObject",PinToolTip="World Context Object\nObject Reference",PinType.PinCategory="object",PinType.PinSubCategory="",PinType.PinSubCategoryObject=/Script/CoreUObject.Class'"/Script/CoreUObject.Object"',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=True,bNotConnectable=False,bDefaultValueIsReadOnly=False,bDefaultValueIsIgnored=False,bAdvancedView=False,bOrphanedPin=False,) - CustomProperties Pin (PinId=C97FE20A5B2D450CA45CE0313CF86D19,PinName="NewBundles",PinToolTip="New Bundles\nArray of Names",PinType.PinCategory="name",PinType.PinSubCategory="",PinType.PinSubCategoryObject=None,PinType.PinSubCategoryMemberReference=(),PinType.PinValueType=(),PinType.ContainerType=Array,PinType.bIsReference=True,PinType.bIsConst=True,PinType.bIsWeakPointer=False,PinType.bIsUObjectWrapper=False,PinType.bSerializeAsSinglePrecisionFloat=False,PersistentGuid=00000000000000000000000000000000,bHidden=False,bNotConnectable=False,bDefaultValueIsReadOnly=False,bDefaultValueIsIgnored=True,bAdvancedView=False,bOrphanedPin=False,) - CustomProperties Pin (PinId=94C2A7BB42E8416B8F275FC59D536272,PinName="OldBundles",PinToolTip="Old Bundles\nArray of Names",PinType.PinCategory="name",PinType.PinSubCategory="",PinType.PinSubCategoryObject=None,PinType.PinSubCategoryMemberReference=(),PinType.PinValueType=(),PinType.ContainerType=Array,PinType.bIsReference=True,PinType.bIsConst=True,PinType.bIsWeakPointer=False,PinType.bIsUObjectWrapper=False,PinType.bSerializeAsSinglePrecisionFloat=False,PersistentGuid=00000000000000000000000000000000,bHidden=False,bNotConnectable=False,bDefaultValueIsReadOnly=False,bDefaultValueIsIgnored=True,bAdvancedView=False,bOrphanedPin=False,) - End Object - `, - size: [24.5, 7.5], - color: Configuration.nodeColors.blue, - icon: SVGIcon.node, - pins: 5, - pinNames: ["New Bundles", "Old Bundles", "Completed"], - delegate: false, - development: false, - }, - { - name: "Make Some_§-AStruct", - value: String.raw` - Begin Object Class=/Script/BlueprintGraph.K2Node_MakeStruct Name="K2Node_MakeStruct_1" ExportPath=/Script/BlueprintGraph.K2Node_MakeStruct'"/Temp/Untitled_1.Untitled_1:PersistentLevel.Untitled.EventGraph.K2Node_MakeStruct_1"' - "bMadeAfterOverridePinRemoval"=True - "ShowPinForProperties"(0)=(PropertyName="FirstVariable_1_13DD7A0E491E619509C7408F7D8C4071",PropertyFriendlyName="First.Variable",bShowPin=True,bCanToggleVisibility=True) - "ShowPinForProperties"(1)=(PropertyName="Second-Variable_5_B897B051478F270D20FF29B3BC3B5A8C",PropertyFriendlyName="Second-Variable",bShowPin=True,bCanToggleVisibility=True) - "StructType"=/Script/Engine.UserDefinedStruct'"/Game/StarterContent/Blueprints/Some_§-AStruct.Some_§-AStruct"' - "NodePosX"=384 - "NodePosY"=144 - "NodeGuid"=118962B441E9282349A21EA43ADEE816 - CustomProperties Pin (PinId=3DD8E64049B1CD7AF21517B9C9C0E52E,PinName="Some_§-AStruct",Direction="EGPD_Output",PinType.PinCategory="struct",PinType.PinSubCategory="",PinType.PinSubCategoryObject=/Script/Engine.UserDefinedStruct'"/Game/StarterContent/Blueprints/Some_§-AStruct.Some_§-AStruct"',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=97BAE50C41A8924F13A6E9B6EB9F83C8,PinName="FirstVariable_1_13DD7A0E491E619509C7408F7D8C4071",PinFriendlyName="First.Variable",PinToolTip="First. Variable\nBoolean",PinType.PinCategory="bool",PinType.PinSubCategory="",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,DefaultValue="False",AutogeneratedDefaultValue="False",PersistentGuid=13DD7A0E491E619509C7408F7D8C4071,bHidden=False,bNotConnectable=False,bDefaultValueIsReadOnly=False,bDefaultValueIsIgnored=False,bAdvancedView=False,bOrphanedPin=False,) - CustomProperties Pin (PinId=94B8DE014A527EBDC91E48A6E95D8D2E,PinName="Second-Variable_5_B897B051478F270D20FF29B3BC3B5A8C",PinFriendlyName="Second-Variable",PinToolTip="Second- Variable\nArray of Transforms",PinType.PinCategory="struct",PinType.PinSubCategory="",PinType.PinSubCategoryObject=/Script/CoreUObject.ScriptStruct'"/Script/CoreUObject.Transform"',PinType.PinSubCategoryMemberReference=(),PinType.PinValueType=(),PinType.ContainerType=Array,PinType.bIsReference=False,PinType.bIsConst=False,PinType.bIsWeakPointer=False,PinType.bIsUObjectWrapper=False,PinType.bSerializeAsSinglePrecisionFloat=False,PersistentGuid=B897B051478F270D20FF29B3BC3B5A8C,bHidden=False,bNotConnectable=False,bDefaultValueIsReadOnly=False,bDefaultValueIsIgnored=True,bAdvancedView=False,bOrphanedPin=False,) - End Object - `, - size: [17.5, 6], - color: Configuration.nodeColors.darkBlue, - icon: SVGIcon.makeStruct, - pins: 3, - pinNames: ["First.Variable", "Second-Variable", "Some_§-AStruct"], - delegate: false, - development: false, - }, -] - -generateNodeTests(tests) diff --git a/cypress/e2e/parsing.cy.js b/cypress/e2e/parsing.cy.js deleted file mode 100644 index 262afc0..0000000 --- a/cypress/e2e/parsing.cy.js +++ /dev/null @@ -1,422 +0,0 @@ -/// - -import FormatTextEntity from "../../js/entity/FormatTextEntity.js" -import Grammar from "../../js/serialization/Grammar.js" -import GuidEntity from "../../js/entity/GuidEntity.js" -import initializeSerializerFactory from "../../js/serialization/initializeSerializerFactory.js" -import IntegerEntity from "../../js/entity/IntegerEntity.js" -import KeyBindingEntity from "../../js/entity/KeyBindingEntity.js" -import LinearColorEntity from "../../js/entity/LinearColorEntity.js" -import ObjectReferenceEntity from "../../js/entity/ObjectReferenceEntity.js" -import RotatorEntity from "../../js/entity/RotatorEntity.js" -import SerializerFactory from "../../js/serialization/SerializerFactory.js" -import SymbolEntity from "../../js/entity/SymbolEntity.js" -import UnknownKeysEntity from "../../js/entity/UnknownKeysEntity.js" -import Utility from "../../js/Utility.js" -import Vector2DEntity from "../../js/entity/Vector2DEntity.js" -import VectorEntity from "../../js/entity/VectorEntity.js" - -initializeSerializerFactory() - -describe("Serializer", () => { - - context("Boolean", () => { - let serializer = SerializerFactory.getSerializer(Boolean) - - it("Parses true", () => expect(serializer.read("true")).to.be.true) - it("Parses True", () => expect(serializer.read("True")).to.be.true) - it("Parses false", () => expect(serializer.read("false")).to.be.false) - it("Parses False", () => expect(serializer.read("False")).to.be.false) - }) - - context("FormatTextEntity", () => { - let serializer = SerializerFactory.getSerializer(FormatTextEntity) - - it("Test 1", () => expect( - serializer.read(`LOCGEN_FORMAT_NAMED(NSLOCTEXT("KismetSchema", "SplitPinFriendlyNameFormat", "{PinDisplayName} {ProtoPinDisplayName}"), "PinDisplayName", "Out Hit", "ProtoPinDisplayName", "Blocking Hit")`) - .toString() - ).to.be.equal("Out Hit Blocking Hit")) - it("Test 2", () => expect( - serializer.read(`LOCGEN_FORMAT_NAMED(NSLOCTEXT("KismetSchema", "SplitPinFriendlyNameFormat", "{PinDisplayName} {ProtoPinDisplayName}"), "PinDisplayName", "Out Hit", "ProtoPinDisplayName", "Hit Bone Name")`) - .toString() - ).to.be.equal("Out Hit Hit Bone Name")) - it("Test 3", () => expect( - serializer.read(String.raw`LOCGEN_FORMAT_ORDERED( - NSLOCTEXT( - "PCGSettings", - "OverridableParamPinTooltip", - "{0}Attribute type is \"{1}\" and its exact name is \"{2}\"" - ), - "If InRangeMin = InRangeMax, then that density value is mapped to the average of OutRangeMin and OutRangeMax\n", - "float", - "InRangeMin" - )`) - .toString() - - ).to.be.equal(`If InRangeMin = InRangeMax, then that density value is mapped to the average of OutRangeMin and OutRangeMax\nAttribute type is "float" and its exact name is "InRangeMin"`)) - }) - - context("GuidEntity", () => { - let serializer = SerializerFactory.getSerializer(GuidEntity) - - it("Parses 0556a3ecabf648d0a5c07b2478e9dd32", () => - expect(serializer.read("0556a3ecabf648d0a5c07b2478e9dd32")) - .to.be.instanceOf(GuidEntity) - .and.property("value").to.be.equal("0556a3ecabf648d0a5c07b2478e9dd32") - ) - it("Parses 64023BC344E0453DBB583FAC411489BC", () => - expect(serializer.read("64023BC344E0453DBB583FAC411489BC")) - .to.be.instanceOf(GuidEntity) - .and.property("value").to.be.equal("64023BC344E0453DBB583FAC411489BC") - ) - it("Parses 6edC4a425ca948da8bC78bA52DED6C6C", () => - expect(serializer.read("6edC4a425ca948da8bC78bA52DED6C6C")) - .to.be.instanceOf(GuidEntity) - .and.property("value").to.be.equal("6edC4a425ca948da8bC78bA52DED6C6C") - ) - it("Throws when finding space", () => - expect(() => serializer.read("172087193 9B04362973544B3564FDB2C")) - .to.throw() - ) - it("Throws when shorter by 1", () => - expect(() => serializer.read("E25F14F8F3E9441AB07153E7DA2BA2B")) - .to.throw() - ) - it("Throws when longer by 1", () => - expect(() => serializer.read("A78988B0097E48418C8CB87EC5A67ABF7")) - .to.throw() - ) - }) - - context("IntegerEntity", () => { - let serializer = SerializerFactory.getSerializer(IntegerEntity) - - it("Parses 0", () => expect(serializer.read("0")) - .to.be.instanceOf(IntegerEntity) - .and.property("value").to.be.equal(0) - ) - it("Parses +0", () => expect(serializer.read("+0")) - .to.be.instanceOf(IntegerEntity) - .and.property("value").to.be.equal(0) - ) - it("Parses -0", () => expect(serializer.read("-0")) - .to.be.instanceOf(IntegerEntity) - .and.property("value").to.be.equal(0) - ) - it("Parses 99", () => expect(serializer.read("99")) - .to.be.instanceOf(IntegerEntity) - .and.property("value").to.be.equal(99) - ) - it("Parses -8685", () => expect(serializer.read("-8685")) - .to.be.instanceOf(IntegerEntity) - .and.property("value").to.be.equal(-8685) - ) - it("Parses +555", () => expect(serializer.read("+555")) - .to.be.instanceOf(IntegerEntity) - .and.property("value").to.be.equal(555) - ) - it("Parses 1000000000", () => expect(serializer.read("1000000000")) - .to.be.instanceOf(IntegerEntity) - .and.property("value").to.be.equal(1000000000) - ) - it("Throws when not an integer", () => expect(() => serializer.read("1.2").value).to.throw()) - }) - - context("KeyBindingEntity", () => { - let serializer = SerializerFactory.getSerializer(KeyBindingEntity) - - it("Parses A", () => - expect(serializer.read("A")) - .to.be.instanceOf(KeyBindingEntity) - .and.to.deep.contain({ Key: { value: "A" } }) - ) - it("Parses (bCtrl=True,Key=A)", () => - expect(serializer.read("(bCtrl=True,Key=A)")) - .to.be.instanceOf(KeyBindingEntity) - .and.to.deep.contain({ Key: { value: "A" }, bCtrl: true }) - ) - it("Parses (bCtrl=false,bShift=false,bCmd=false,bAlt=false,Key=X)", () => - expect(serializer.read("(bCtrl=false,bShift=false,bCmd=true,bAlt=false,Key=X)")) - .to.be.instanceOf(KeyBindingEntity) - .and.to.deep.contain({ Key: { value: "X" }, bAlt: false, bCtrl: false, bCmd: true }) - ) - it("Parses spaces correctly", () => - expect(serializer.read("( bCtrl= false \n, Key \n\n\n =Y ,bAlt=true )")) - .to.be.instanceOf(KeyBindingEntity) - .and.to.deep.contain({ Key: { value: "Y" }, bAlt: true, bCtrl: false }) - ) - }) - - context("LinearColorEntity", () => { - let serializer = SerializerFactory.getSerializer(LinearColorEntity) - - it("check white color", () => { - const result = LinearColorEntity.getWhite() - expect(result.toRGBA()).to.be.deep.equal([255, 255, 255, 255]) - expect(result.toRGBAString()).to.be.equal("FFFFFFFF") - expect(result.toNumber()).to.be.equal(-1) - expect(result.toHSVA()).to.be.deep.equal([0, 0, 1, 1]) - }) - it("Parses red color", () => { - const result = serializer.read("(R=1,G=0,B=0)") - expect(result.toRGBA()).to.be.deep.equal([255, 0, 0, 255]) - expect(result.toRGBAString()).to.be.equal("FF0000FF") - expect(result.toNumber()).to.be.equal(-16776961) - expect(result.toHSVA()).to.be.deep.equal([0, 1, 1, 1]) - }) - it("Parses simple color", () => { - const result = serializer.read("(R=0.000000,G=0.660000,B=1.000000,A=1.000000)") - expect(result.toRGBA()).to.be.deep.equal([0, 168, 255, 255]) - expect(result.toRGBAString()).to.be.equal("00A8FFFF") - expect(result.toNumber()).to.be.equal(11075583) - expect(result.toHSVA()).to.be.deep.equal([0.55666666666666666666, 1, 1, 1]) - }) - it("Parses wrong order keys", () => { - const result = serializer.read("(B=0.04394509003266556,G=0.026789300067696642,A=0.83663232408635,R=0.6884158028074934,)") - expect(result.toRGBA()).to.be.deep.equal([176, 7, 11, 213]) - expect(result.toRGBAString()).to.be.equal("B0070BD5") - expect(result.toNumber()).to.be.equal(-1341715499) - expect(result.toHSVA().map(v => Utility.roundDecimals(v, 3))).to.be.deep.equal([0.996, 0.961, 0.688, 0.837]) - }) - it("Parses weird spaces", () => { - const result = serializer.read(`( - A = 0.327 , - R=0.530 , G = 0.685 - ,B - = 0.9 ,)`) - expect(result.toRGBA()).to.be.deep.equal([135, 175, 230, 83]) - expect(result.toRGBAString()).to.be.equal("87AFE653") - expect(result.toNumber()).to.be.equal(-2018515373) - expect(result.toHSVA().map(v => Utility.roundDecimals(v, 3))).to.be.deep.equal([0.597, 0.411, 0.9, 0.327]) - }) - it("Throws when missing an expected key", () => expect(() => serializer.read("(R=0.000000,G=0.660000,A=1.000000)")) - .to.throw() - ) - it("Throws when unexpected types", () => expect(() => serializer.read("(R=0.000000,G=\"hello\",A=1.000000)")) - .to.throw() - ) - }) - - context("Number", () => { - let serializer = SerializerFactory.getSerializer(Number) - - it("Parses 0", () => expect(serializer.read("0")).to.be.approximately(0, 0.00001)) - it("Parses +0", () => expect(serializer.read("+0")).to.be.approximately(0, 0.00001)) - it("Parses -0", () => expect(serializer.read("-0")).to.be.approximately(0, 0.00001)) - it("Parses 5", () => expect(serializer.read("5")).to.be.approximately(5, 0.00001)) - it("Parses 0.05", () => expect(serializer.read("0.05")).to.be.approximately(0.05, 0.00001)) - it("Parses -999.666", () => expect(serializer.read("-999.666")).to.be.approximately(-999.666, 0.001)) - it("Parses +45.4545", () => expect(serializer.read("+45.4545")).to.be.approximately(45.4545, 0.001)) - it("Parses +1000000000", () => expect(serializer.read("+1000000000")).to.be.approximately(1E9, 0.1)) - it("Throws when not numeric", () => expect(() => serializer.read("alpha")).to.throw()) - }) - - context("ObjectReferenceEntity", () => { - let serializer = SerializerFactory.getSerializer(ObjectReferenceEntity) - - it(`Parses Class`, () => - expect(serializer.read("Class")) - .to.be.instanceOf(ObjectReferenceEntity) - .and.to.deep.contain({ type: "Class", path: "" }) - ) - it(`Parses Class'/Script/ShooterGame.ShooterGameMode'`, () => - expect(serializer.read(`Class'/Script/ShooterGame.ShooterGameMode'`)) - .to.be.instanceOf(ObjectReferenceEntity) - .and.to.deep.contain({ type: "Class", path: "/Script/ShooterGame.ShooterGameMode" }) - ) - it(`Parses EdGraphPin'EdGraphPin_45417'`, () => - expect(serializer.read(`EdGraphPin'EdGraphPin_45417'`)) - .to.be.instanceOf(ObjectReferenceEntity) - .and.to.deep.contain({ type: "EdGraphPin", path: "EdGraphPin_45417" }) - ) - it(`Parses EdGraphPin'"K2Node_DynamicCast_2126.EdGraphPin_3990988"'`, () => - expect(serializer.read(`EdGraphPin'"K2Node_DynamicCast_2126.EdGraphPin_3990988"'`)) - .to.be.instanceOf(ObjectReferenceEntity) - .and.to.deep.contain({ type: "EdGraphPin", path: "K2Node_DynamicCast_2126.EdGraphPin_3990988" }) - ) - it(`Parses /Script/Engine.EdGraph'"/Engine/EditorBlueprintResources/StandardMacros.StandardMacros:Do N"'`, () => - expect(serializer.read(`/Script/Engine.EdGraph'"/Engine/EditorBlueprintResources/StandardMacros.StandardMacros:Do N"'`)) - .to.be.instanceOf(ObjectReferenceEntity) - .and.to.deep.contain({ type: "/Script/Engine.EdGraph", path: "/Engine/EditorBlueprintResources/StandardMacros.StandardMacros:Do N" }) - ) - it(`Parses Function'"/Game/Mods/CrazyDinos/ElementalDragon/CDElementalDragon_Character_BP.SKEL_CDElementalDragon_Character_BP_C:ROS Change Element"'`, () => - expect(serializer.read(`Function'"/Game/Mods/CrazyDinos/ElementalDragon/CDElementalDragon_Character_BP.SKEL_CDElementalDragon_Character_BP_C:ROS Change Element"'`)) - .to.be.instanceOf(ObjectReferenceEntity) - .and.to.deep.contain({ type: "Function", path: "/Game/Mods/CrazyDinos/ElementalDragon/CDElementalDragon_Character_BP.SKEL_CDElementalDragon_Character_BP_C:ROS Change Element" }) - ) - it(`Parses EdGraph'/Game/Systems/BP_MacroGlobal.BP_MacroGlobal:Or+Branch'`, () => - expect(serializer.read(`EdGraph'/Game/Systems/BP_MacroGlobal.BP_MacroGlobal:Or+Branch'`)) - .to.be.instanceOf(ObjectReferenceEntity) - .and.to.deep.contain({ type: "EdGraph", path: "/Game/Systems/BP_MacroGlobal.BP_MacroGlobal:Or+Branch" }) - ) - it(`Parses /Script/Engine.EdGraph'"+-Weird/2,Macro"'`, () => - expect(serializer.read(`/Script/Engine.EdGraph'"+-Weird/2,Macro"'`)) - .to.be.instanceOf(ObjectReferenceEntity) - .and.to.deep.contain({ type: "/Script/Engine.EdGraph", path: "+-Weird/2,Macro" }) - ) - }) - - context("String", () => { - let serializer = SerializerFactory.getSerializer(String) - - it('Parses ""', () => expect(serializer.read('""')).to.be.equal("")) - it('Parses "hello"', () => expect(serializer.read('"hello"')).to.be.equal("hello")) - it('Parses "hello world 123 - éèàò@ç ^ ^^^"', () => - expect(serializer.read('"hello world 123 - éèàò@ç ^ ^^^"')) - .to.be.equal("hello world 123 - éèàò@ç ^ ^^^") - ) - it('Parses "\\""', () => expect(serializer.read('"\\""')).to.be.equal('"')) - it('Throws when not a string', () => expect(() => serializer.read("Hello")).to.throw()) - }) - - context("UnknownKeysValue", () => { - let parser = Grammar.unknownValue - - it("Parses String", () => expect(parser.parse('"Hello"').value.constructor).equals(String)) - it("Parses null", () => expect(parser.parse("()").value).to.be.null) - it("Parses Number", () => expect(parser.parse("8345").value.constructor).equals(Number)) - it("Parses Boolean", () => expect(parser.parse("True").value.constructor).equals(Boolean)) - it("Parses Boolean 2", () => expect(parser.parse("False").value.constructor).equals(Boolean)) - it("Parses GuidEntity", () => - expect(parser.parse("F0223D3742E67C0D9FEFB2A64946B7F0").value.constructor).equals(GuidEntity) - ) - it("Parses SymbolEntity", () => expect(parser.parse("SYMBOL1").value.constructor).equals(SymbolEntity)) - it("Parses SymbolEntity 2", () => expect(parser.parse("Symbol_2_3_4").value.constructor).equals(SymbolEntity)) - it("Parses Vector2DEntity", () => - expect(parser.parse("(X=-0.495, Y=0, )").value.constructor).equals(Vector2DEntity) - ) - it("Parses VectorEntity", () => - expect(parser.parse("(X=-0.495,Y=+765.0,Z=7)").value.constructor).equals(VectorEntity) - ) - it("Parses RotatorEntity", () => - expect(parser.parse("(R=1.000000,P=7.6,Y=+88.99)").value.constructor).equals(RotatorEntity) - ) - it("Parses LinearColorEntity", () => - expect(parser.parse("(R=0.000000,G=0.660000,B=1.000000,A=1.000000)").value.constructor) - .equals(LinearColorEntity) - ) - it("Parses ObjectReferenceEntity", () => - expect(parser.parse(`Class'"/Script/Engine.KismetSystemLibrary"'`).value.constructor) - .equals(ObjectReferenceEntity) - ) - it("Parses Numbers array", () => - expect(parser.parse("(1,2,3,4,5,6,7,8,9)").value).to.be.deep.equal([1, 2, 3, 4, 5, 6, 7, 8, 9]) - ) - it("Parses Strings array", () => - expect(parser.parse(`( "Hello", "World", )`).value).to.be.deep.equal(["Hello", "World"]) - ) - it("Parses Heterogeneous array", () => - expect(parser.parse(`( "Alpha", 123, Beta, "Gamma", "Delta", 99 )`).value) - .to.be.deep.equal(["Alpha", 123, { value: "Beta" }, "Gamma", "Delta", 99]) - ) - }) - - context("UnknownKeysEntity", () => { - let serializer = SerializerFactory.getSerializer(UnknownKeysEntity) - - it('Parses LookbehindValue(FirstKey=1,SecondKey=SOME_SYMBOL2,ThirdKey="Hello")', () => - expect(serializer.read('LookbehindValue(FirstKey=1,SecondKey=SOME_SYMBOL2,ThirdKey="Hello")').equals( - new UnknownKeysEntity({ - lookbehind: "LookbehindValue", - FirstKey: 1, - SecondKey: new SymbolEntity("SOME_SYMBOL2"), - ThirdKey: "Hello", - }) - )).to.be.true - ) - it('Parses (A = (-1,-2,-3), B = SomeFunction(B1 = "b1", B2 = (X=101,Y=102,Z=103)))', () => - expect(serializer.read('(A = (-1,-2,-3), B = SomeFunction(B1 = "b1", B2 = (X=101,Y=102,Z=103)))').equals( - new UnknownKeysEntity({ - lookbehind: "", - A: [-1, -2, -3], - B: new UnknownKeysEntity({ - lookbehind: "SomeFunction", - B1: "b1", - B2: new VectorEntity({ X: 101, Y: 102, Z: 103 }), - }), - }) - )).to.be.true - ) - }) - - context("VectorEntity", () => { - let serializer = SerializerFactory.getSerializer(VectorEntity) - - it("Parses simple vector", () => expect(serializer.read("(X=1,Y=2,Z=3.5)")) - .to.be.deep.equal({ - X: 1, - Y: 2, - Z: 3.5, - }) - ) - it("Parses trailing comma", () => expect(serializer.read("(X=10,Y=+20.88,Z=-30.54,)")) - .to.be.deep.equal({ - X: 10, - Y: 20.88, - Z: -30.54, - }) - ) - it("Parses weird spaces", () => expect(serializer.read(`( - Z = -3.66 , - - X - = -1 , Y = - - - -2 - , - )`)) - .to.be.deep.equal({ - X: -1, - Y: -2, - Z: -3.66, - }) - ) - it("Throws when unexpected types", () => expect(() => serializer.read("(X=1,Y=\"2\",Z=3)")) - .to.throw() - ) - it("Throws when missing a key", () => expect(() => serializer.read("(X=1,Z=3)")) - .to.throw() - ) - it("Throws when finding unexpected keys", () => expect(() => serializer.read("(X=1,Y=2,Unexpected=6,Z=3.5)")) - .to.throw() - ) - }) - - context("Vector2DEntity", () => { - let serializer = SerializerFactory.getSerializer(Vector2DEntity) - - it("Parses simple vector", () => expect(serializer.read("(X=78,Y=56.3)")) - .to.be.deep.equal({ - X: 78, - Y: 56.3, - }) - ) - it("Parses trailing comma", () => expect(serializer.read("(X=+4.5,Y=-8.88,)")) - .to.be.deep.equal({ - X: 4.5, - Y: -8.88, - }) - ) - it("Parses weird spaces", () => expect(serializer.read(`( - Y = +93.004 , - - X - = 0 , - )`)) - .to.be.deep.equal({ - X: 0, - Y: 93.004, - }) - ) - it("Throws on unexpected type", () => expect(() => serializer.read("(X=1,Y=\"2\")")) - .to.throw() - ) - it("Throws when missing a key", () => expect(() => serializer.read("(X=1)")) - .to.throw() - ) - it("Throws when finding unexpected keys", () => expect(() => serializer.read("(X=777, Y=555, Unexpected=6, HH=2)")) - .to.throw() - ) - }) -}) diff --git a/cypress/e2e/pcgNodes.cy.js b/cypress/e2e/pcgNodes.cy.js deleted file mode 100644 index 9ad57e7..0000000 --- a/cypress/e2e/pcgNodes.cy.js +++ /dev/null @@ -1,94 +0,0 @@ -/// - -import Configuration from "../../js/Configuration.js" -import generateNodeTests from "../fixtures/testUtilities.js" -import NodeElement from "../../js/element/NodeElement.js" -import PinElement from "../../js/element/PinElement.js" -import SVGIcon from "../../js/SVGIcon.js" - -const tests = [ - { - name: "Execute Blueprint", - value: String.raw` - Begin Object Class=/Script/PCGEditor.PCGEditorGraphNode Name="PCGEditorGraphNode_2" ExportPath=/Script/PCGEditor.PCGEditorGraphNode'"/Game/NewPCGGraph.NewPCGGraph:PCGEditorGraph_1.PCGEditorGraphNode_2"' - Begin Object Class=/Script/PCG.PCGNode Name="ExecuteBlueprint_7" ExportPath=/Script/PCG.PCGNode'"/Game/NewPCGGraph.NewPCGGraph:PCGEditorGraph_1.PCGEditorGraphNode_2.ExecuteBlueprint_7"' - Begin Object Class=/Script/PCG.PCGBlueprintSettings Name="PCGBlueprintSettings_0" ExportPath=/Script/PCG.PCGBlueprintSettings'"/Game/NewPCGGraph.NewPCGGraph:PCGEditorGraph_1.PCGEditorGraphNode_2.ExecuteBlueprint_7.PCGBlueprintSettings_0"' - End Object - Begin Object Class=/Script/PCG.PCGPin Name="PCGPin_0" ExportPath=/Script/PCG.PCGPin'"/Game/NewPCGGraph.NewPCGGraph:PCGEditorGraph_1.PCGEditorGraphNode_2.ExecuteBlueprint_7.PCGPin_0"' - End Object - Begin Object Class=/Script/PCG.PCGPin Name="PCGPin_1" ExportPath=/Script/PCG.PCGPin'"/Game/NewPCGGraph.NewPCGGraph:PCGEditorGraph_1.PCGEditorGraphNode_2.ExecuteBlueprint_7.PCGPin_1"' - End Object - Begin Object Class=/Script/PCG.PCGPin Name="PCGPin_2" ExportPath=/Script/PCG.PCGPin'"/Game/NewPCGGraph.NewPCGGraph:PCGEditorGraph_1.PCGEditorGraphNode_2.ExecuteBlueprint_7.PCGPin_2"' - End Object - Begin Object Class=/Script/PCG.PCGPin Name="PCGPin_3" ExportPath=/Script/PCG.PCGPin'"/Game/NewPCGGraph.NewPCGGraph:PCGEditorGraph_1.PCGEditorGraphNode_2.ExecuteBlueprint_7.PCGPin_3"' - End Object - End Object - Begin Object Name="ExecuteBlueprint_7" ExportPath=/Script/PCG.PCGNode'"/Game/NewPCGGraph.NewPCGGraph:PCGEditorGraph_1.PCGEditorGraphNode_2.ExecuteBlueprint_7"' - Begin Object Name="PCGBlueprintSettings_0" ExportPath=/Script/PCG.PCGBlueprintSettings'"/Game/NewPCGGraph.NewPCGGraph:PCGEditorGraph_1.PCGEditorGraphNode_2.ExecuteBlueprint_7.PCGBlueprintSettings_0"' - "Seed"=-1282097489 - "bExposeToLibrary"=False - "CachedOverridableParams"(0)=(Label="Seed",PropertiesNames=("Seed"),PropertyClass=/Script/CoreUObject.Class'"/Script/PCG.PCGBlueprintSettings"') - End Object - Begin Object Name="PCGPin_0" ExportPath=/Script/PCG.PCGPin'"/Game/NewPCGGraph.NewPCGGraph:PCGEditorGraph_1.PCGEditorGraphNode_2.ExecuteBlueprint_7.PCGPin_0"' - "Node"=/Script/PCG.PCGNode'"PCGEditorGraphNode_2.ExecuteBlueprint_7"' - "Properties"=(Label="In") - End Object - Begin Object Name="PCGPin_1" ExportPath=/Script/PCG.PCGPin'"/Game/NewPCGGraph.NewPCGGraph:PCGEditorGraph_1.PCGEditorGraphNode_2.ExecuteBlueprint_7.PCGPin_1"' - "Node"=/Script/PCG.PCGNode'"PCGEditorGraphNode_2.ExecuteBlueprint_7"' - "Properties"=(Label="Overrides",AllowedTypes=Param,bAdvancedPin=True,Tooltip=NSLOCTEXT("PCGSettings", "GlobalParamPinTooltip", "Atribute Set containing multiple parameters to override. Names must match perfectly.")) - End Object - Begin Object Name="PCGPin_2" ExportPath=/Script/PCG.PCGPin'"/Game/NewPCGGraph.NewPCGGraph:PCGEditorGraph_1.PCGEditorGraphNode_2.ExecuteBlueprint_7.PCGPin_2"' - "Node"=/Script/PCG.PCGNode'"PCGEditorGraphNode_2.ExecuteBlueprint_7"' - "Properties"=(Label="Seed",AllowedTypes=Param,bAllowMultipleData=False,bAllowMultipleConnections=False,bAdvancedPin=True,Tooltip=LOCGEN_FORMAT_ORDERED(NSLOCTEXT("PCGSettings", "OverridableParamPinTooltip", "{0}Attribute type is \"{1}\" and its exact name is \"{2}\""), "", "int32", "Seed")) - End Object - Begin Object Name="PCGPin_3" ExportPath=/Script/PCG.PCGPin'"/Game/NewPCGGraph.NewPCGGraph:PCGEditorGraph_1.PCGEditorGraphNode_2.ExecuteBlueprint_7.PCGPin_3"' - "Node"=/Script/PCG.PCGNode'"PCGEditorGraphNode_2.ExecuteBlueprint_7"' - "Properties"=(Label="Out",AllowedTypes=Spatial) - End Object - "PositionX"=768 - "PositionY"=128 - "SettingsInterface"=/Script/PCG.PCGBlueprintSettings'"PCGBlueprintSettings_0"' - "InputPins"(0)=/Script/PCG.PCGPin'"PCGPin_0"' - "InputPins"(1)=/Script/PCG.PCGPin'"PCGPin_1"' - "InputPins"(2)=/Script/PCG.PCGPin'"PCGPin_2"' - "OutputPins"(0)=/Script/PCG.PCGPin'"PCGPin_3"' - End Object - "PCGNode"=/Script/PCG.PCGNode'"ExecuteBlueprint_7"' - "NodePosX"=768 - "NodePosY"=128 - "AdvancedPinDisplay"=Shown - "bUserSetEnabledState"=True - "NodeGuid"=510EDA9C48C94C29D834BDBC2E6698A5 - CustomProperties Pin (PinId=84EFEAC94F4D8F7B54DBA39777ACE90B,PinName="In",PinFriendlyName="In",PinType.PinCategory="",PinType.PinSubCategory="",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,) - CustomProperties Pin (PinId=14D4F997473AFF411CEB30824798BF16,PinName="Overrides",PinFriendlyName="Overrides",PinType.PinCategory="Attribute Set",PinType.PinSubCategory="",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=True,bOrphanedPin=False,) - CustomProperties Pin (PinId=B534894344C992A0A4DA798A15D1C438,PinName="Seed",PinFriendlyName="Seed",PinType.PinCategory="Attribute Set",PinType.PinSubCategory="",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=True,bOrphanedPin=False,) - CustomProperties Pin (PinId=A6E46EE44272FFAB9F2E1B944ADC28CB,PinName="Out",PinFriendlyName="Out",Direction="EGPD_Output",PinType.PinCategory="Spatial Data",PinType.PinSubCategory="",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: [10, 9], - color: Configuration.nodeColors.darkBlue, - pins: 4, - pinNames: ["In", "Overrides", "Seed", "Out"], - delegate: false, - development: false, - additionalTest: - /** @param {NodeElement} node */ - node => { - let pins = /** @type {PinElement[]} */(node.querySelectorAll("ueb-pin")) - const inPin = pins.find(pin => pin.innerText === "In") - const overridesPin = pins.find(pin => pin.innerText === "Overrides") - const seedPin = pins.find(pin => pin.innerText === "Seed") - const out = pins.find(pin => pin.innerText === "Out") - expect(inPin).to.not.be.null - expect(inPin.template.renderIcon()).to.be.equal(SVGIcon.pcgStackPin) - expect(overridesPin).to.not.be.null - expect(overridesPin.template.renderIcon()).to.be.equal(SVGIcon.pcgParamPin) - expect(seedPin).to.not.be.null - expect(seedPin.template.renderIcon()).to.be.equal(SVGIcon.pcgParamPin) - expect(out).to.not.be.null - expect(out.template.renderIcon()).to.be.equal(SVGIcon.pcgSpatialPin) - } - }, -] - -generateNodeTests(tests) diff --git a/cypress/e2e/utility.cy.js b/cypress/e2e/utility.cy.js deleted file mode 100644 index 9bff1b2..0000000 --- a/cypress/e2e/utility.cy.js +++ /dev/null @@ -1,201 +0,0 @@ -/// - -import Utility from "../../js/Utility.js" - -describe("Utility class", () => { - before(() => { - expect(Utility,).to.be.a("function") - }) - - context("Utility", () => { - it("clamp method test", () => { - expect(Utility.clamp(-4, -3)).to.be.equal(-3) - expect(Utility.clamp(-1, -3, -2)).to.be.equal(-2) - expect(Utility.clamp(5, 1, 11)).to.be.equal(5) - }) - it("minDecimals method test", () => { - expect(Utility.minDecimals(3.1, 3)).to.be.equal("3.100") - expect(Utility.minDecimals(-100, 2)).to.be.equal("-100.00") - expect(Utility.minDecimals(0.43, 0)).to.be.equal("0.43") - expect(Utility.minDecimals(0.43, 1)).to.be.equal("0.43") - expect(Utility.minDecimals(0.43, 2)).to.be.equal("0.43") - expect(Utility.minDecimals(0.43, 3)).to.be.equal("0.430") - expect(Utility.minDecimals(-2, 0)).to.be.equal("-2") - }) - it("roundDecimals method test", () => { - expect(Utility.roundDecimals(8.543943, 0)).to.be.equal(9) - expect(Utility.roundDecimals(8.543943, 1)).to.be.equal(8.5) - expect(Utility.roundDecimals(8.543943, 2)).to.be.equal(8.54) - expect(Utility.roundDecimals(8.543943, 3)).to.be.equal(8.544) - expect(Utility.roundDecimals(-2.192837, 0)).to.be.equal(-2) - expect(Utility.roundDecimals(-2.192837, 1)).to.be.equal(-2.2) - expect(Utility.roundDecimals(-2.192837, 2)).to.be.equal(-2.19) - expect(Utility.roundDecimals(-2.192837, 3)).to.be.equal(-2.193) - expect(Utility.roundDecimals(-2.192837, 4)).to.be.equal(-2.1928) - }) - it("approximatelyEqual method test", () => { - expect(Utility.approximatelyEqual(0.2 + 0.1, 0.3)).to.be.true - expect(Utility.approximatelyEqual(-0.2 - 0.1, -0.3)).to.be.true - expect(Utility.approximatelyEqual(0.1000001, 0.1)).to.be.false - expect(Utility.approximatelyEqual(40.1 + 0.2, 40.3)).to.be.true - expect(Utility.approximatelyEqual(2, 3)).to.be.false - }) - it("equals method test", () => { - expect(Utility.equals(0.2, 0.2)).to.be.true - expect(Utility.equals(new Number(0.7), 0.7)).to.be.true - expect(Utility.equals(-40.3, new Number(-40.3))).to.be.true - expect(Utility.equals(new Number(-40.3), new Number(-40.3))).to.be.true - expect(Utility.equals(0.2 + 0.1, 0.3)).to.be.false // Strict equality - expect(Utility.equals(null, undefined)).to.be.false - expect(Utility.equals(undefined, null)).to.be.false - expect(Utility.equals(0, false)).to.be.false - expect(Utility.equals(false, false)).to.be.true - expect(Utility.equals(2n, 2)).to.be.true - expect(Utility.equals(-6845, -6845n)).to.be.true - expect(Utility.equals(7735n, 7736)).to.be.false - expect(Utility.equals("abc", "abc")).to.be.true - expect(Utility.equals(new String("abc"), new String("abc"))).to.be.true - expect(Utility.equals("abc", "aBc")).to.be.false - expect(Utility.equals( - [-2, "alpha", new String("beta"), new Number(40), [1, 2, 3]], - [new Number(-2), new String("alpha"), new String("beta"), new Number(40), new Array(1, 2, 3)] - )).to.be.true - expect(Utility.equals( - [-2.1, "alpha", new String("beta"), new Number(40), [1, 2, 3]], - [new Number(-2), new String("alpha"), new String("beta"), new Number(40), new Array(1, 2, 3)] - )).to.be.false // First element is different - expect(Utility.equals( - [-2, "Alpha", new String("beta"), new Number(40), [1, 2, 3]], - [new Number(-2), new String("alpha"), new String("beta"), new Number(40), new Array(1, 2, 3)] - )).to.be.false // Second element is different - }) - it("isValueOfType method test", () => { - expect(Utility.isValueOfType(34, Number)).to.be.true - expect(Utility.isValueOfType(new Number(34), Number)).to.be.true - expect(Utility.isValueOfType("34", String)).to.be.true - expect(Utility.isValueOfType("34", Number)).to.be.false - }) - it("mergeArrays method test", () => { - expect(Utility.mergeArrays( - [], - [] - )).to.be.deep.equal( - [] - ) - expect(Utility.mergeArrays( - ["alpba", "beta"], - [] - )).to.be.deep.equal( - ["alpba", "beta"] - ) - expect(Utility.mergeArrays( - [], - ["alpba", "beta"] - )).to.be.deep.equal( - ["alpba", "beta"] - ) - expect(Utility.mergeArrays( - [1, 3, 5, 7, 9], - [1, 2, 3, 4, 5] - )).to.be.deep.equal( - [1, 2, 3, 4, 5, 7, 9] - ) - expect(Utility.mergeArrays( - [6, 7, 8], - [1, 2, 3] - )).to.be.deep.equal( - [6, 7, 8, 1, 2, 3] - ) - expect(Utility.mergeArrays( - ["e", "f", "g", "h"], - ["a", "b", "c", "d"] - )).to.be.deep.equal( - ["e", "f", "g", "h", "a", "b", "c", "d"] - ) - expect(Utility.mergeArrays( - ["e", "f", "g", "h"], - ["a", "b", "c", "d", "e"] - )).to.be.deep.equal( - ["a", "b", "c", "d", "e", "f", "g", "h"] - ) - expect(Utility.mergeArrays( - [2, 4, 6, 8], - [6, 4, 2] - )).to.be.deep.equal( - [2, 4, 6, 8] - ) - expect(Utility.mergeArrays( - [2, 4, 6, 8], - [4, 5, 6, 8, 1, 2] - )).to.be.deep.equal( - [2, 4, 5, 6, 8, 1] - ) - }) - it("capitalFirstLetter method test", () => { - expect(Utility.capitalFirstLetter("")).to.be.equal("") - expect(Utility.capitalFirstLetter("hello world")).to.be.equal("Hello world") - }) - it("range method test", () => { - expect(Utility.range()).to.be.deep.equal([]) - expect(Utility.range(5, 5)).to.be.deep.equal([]) - expect(Utility.range(5, 6)).to.be.deep.equal([5]) - expect(Utility.range(1, 10, 3)).to.be.deep.equal([1, 4, 7]) - expect(Utility.range(0, -3)).to.be.deep.equal([0, -1, -2]) - expect(Utility.range(7, -7, -4)).to.be.deep.equal([7, 3, -1, -5]) - }) - it("String escaping methods test", () => { - expect(Utility.escapeString("")).to.be.equal("") - expect(Utility.unescapeString("")).to.be.equal("") - - expect(Utility.escapeString('"')).to.be.equal('\\"') - expect(Utility.unescapeString('\\"')).to.be.equal('"') - - expect(Utility.escapeString("'")).to.be.equal("\\'") - expect(Utility.unescapeString("\\'")).to.be.equal("'") - - expect(Utility.escapeString(String.raw`\"`)).to.be.equal(String.raw`\\\"`) - expect(Utility.unescapeString(String.raw`\"`)).to.be.equal('"') - - expect(Utility.escapeString(String.raw`\'`)).to.be.equal(String.raw`\\\'`) - expect(Utility.unescapeString(String.raw`\'`)).to.be.equal("'") - - expect(Utility.escapeString(String.raw`Hello \"World\"`)).to.be.equal(String.raw`Hello \\\"World\\\"`) - expect(Utility.unescapeString(String.raw`Hello \"World\"`)).to.be.equal('Hello "World"') - - expect(Utility.escapeString(String.raw`Those "\\" are two backslash`)) - .to.be.equal(String.raw`Those \"\\\\\" are two backslash`) - expect(Utility.unescapeString(String.raw`Those "\\" are two backslash`)) - .to.be.equal(String.raw`Those "\" are two backslash`) - - expect(Utility.escapeString(String.raw`Alpha\Beta`)).to.be.equal(String.raw`Alpha\\Beta`) - expect(Utility.unescapeString(String.raw`Alpha\Beta`)).to.be.equal(String.raw`Alpha\Beta`) - - expect(Utility.escapeString(String.raw`Alpha\\Beta`)).to.be.equal(String.raw`Alpha\\\\Beta`) - expect(Utility.unescapeString(String.raw`Alpha\\Beta`)).to.be.equal(String.raw`Alpha\Beta`) - - expect(Utility.escapeString(String.raw`Alpha\\\Beta`)).to.be.equal(String.raw`Alpha\\\\\\Beta`) - expect(Utility.unescapeString(String.raw`Alpha\\\Beta`)).to.be.equal(String.raw`Alpha\\Beta`) - - expect(Utility.escapeString(String.raw`Alpha\\\\Beta`)).to.be.equal(String.raw`Alpha\\\\\\\\Beta`) - expect(Utility.unescapeString(String.raw`Alpha\\\\Beta`)).to.be.equal(String.raw`Alpha\\Beta`) - - expect(Utility.escapeString(String.raw`Alpha\\\\\Beta`)).to.be.equal(String.raw`Alpha\\\\\\\\\\Beta`) - expect(Utility.unescapeString(String.raw`Alpha\\\\\Beta`)).to.be.equal(String.raw`Alpha\\\Beta`) - - expect(Utility.escapeString(String.raw`Alpha\\\\\\Beta`)).to.be.equal(String.raw`Alpha\\\\\\\\\\\\Beta`) - expect(Utility.unescapeString(String.raw`Alpha\\\\\\Beta`)).to.be.equal(String.raw`Alpha\\\Beta`) - - expect(Utility.escapeString(String.raw`Alpha \"Beta\"`)).to.be.equal(String.raw`Alpha \\\"Beta\\\"`) - expect(Utility.unescapeString(String.raw`Alpha \"Beta\"`)).to.be.equal(String.raw`Alpha "Beta"`) - - expect(Utility.escapeString(String.raw`Alpha \\"Beta\\"`)).to.be.equal(String.raw`Alpha \\\\\"Beta\\\\\"`) - expect(Utility.unescapeString(String.raw`Alpha \\"Beta\\"`)).to.be.equal(String.raw`Alpha \"Beta\"`) - - expect(Utility.escapeString('Alpha\nBravo\\Charlie\n"Delta"')) - .to.equal(String.raw`Alpha\nBravo\\Charlie\n\"Delta\"`) - expect(Utility.unescapeString(String.raw`Alpha\nBravo\\Charlie\n\"Delta\"`)).to.equal( - `Alpha\nBravo\\Charlie\n"Delta"` - ) - }) - }) -}) diff --git a/cypress/fixtures/testUtilities.js b/cypress/fixtures/testUtilities.js deleted file mode 100644 index 3e43dcb..0000000 --- a/cypress/fixtures/testUtilities.js +++ /dev/null @@ -1,121 +0,0 @@ -/// - -import Blueprint from "../../js/Blueprint.js" -import Configuration from "../../js/Configuration.js" -import NodeElement from "../../js/element/NodeElement.js" -import Utility from "../../js/Utility.js" - -/** @param {String[]} words */ -function getFirstWordOrder(words) { - return new RegExp("\\s*" + words.join("[^\\n]+\\n\\s*") + "\\s*") -} - -/** @param {() => Blueprint} getBlueprint */ -function generateNodeTest(nodeTest, getBlueprint) { - context(nodeTest.name, () => { - /** @type {NodeElement} */ - let node - if (nodeTest.title === undefined) { - nodeTest.title = nodeTest.name - } - - before(() => { - getBlueprint().removeGraphElement(...getBlueprint().getNodes()) - Utility.paste(getBlueprint(), nodeTest.value) - node = getBlueprint().querySelector("ueb-node") - }) - if (nodeTest.color) { - it("Has correct color", () => expect(node.entity.nodeColor()).to.be.deep.equal(nodeTest.color)) - } - it("Has correct delegate", () => { - const delegate = node.querySelector('.ueb-node-top ueb-pin[data-type="delegate"]') - if (nodeTest.delegate) { - expect(delegate).to.not.be.null - } else { - expect(delegate).to.be.null - } - }) - if (nodeTest.title) { - it("Has title " + nodeTest.title, () => expect(node.getNodeDisplayName()).to.be.equal(nodeTest.title)) - } - it( - "Has expected subtitle " + nodeTest.subtitle, - () => expect(node.querySelector(".ueb-node-subtitle-text")?.innerText).to.be.equal(nodeTest.subtitle)) - if (nodeTest.size) { - it("Has approximately the expected size", () => { - const bounding = node.getBoundingClientRect() - const expectedSize = [ - bounding.width / Configuration.gridSize, - bounding.height / Configuration.gridSize, - ] - expect(Math.abs(nodeTest.size[0] - expectedSize[0])).to.be.lessThan(1.5) - expect(Math.abs(nodeTest.size[1] - expectedSize[1])).to.be.lessThan(1.5) - if ( - Math.abs(nodeTest.size[0] - expectedSize[0]) > 0.6 - || Math.abs(nodeTest.size[1] - expectedSize[1]) > 0.6 - ) { - console.error(`Node "${nodeTest.name}" size does not match`) - } - }) - } - if (nodeTest.icon) { - it("Has the correct icon", () => expect(node.entity.nodeIcon()).to.be.deep.equal(nodeTest.icon)) - } else if (nodeTest.icon === false) { - it("It does not have an icon", () => expect(node.entity.nodeIcon()).to.be.undefined) - } - if (nodeTest.pins) { - it(`Has ${nodeTest.pins} pins`, () => expect(node.querySelectorAll("ueb-pin")) - .to.be.lengthOf(nodeTest.pins)) - } - if (nodeTest.pinNames) { - it( - "Has correct pin names", - () => expect( - [...node.querySelectorAll(".ueb-pin-content")] - .map(elem => - /** @type {HTMLElement} */(elem.querySelector(".ueb-pin-name") ?? elem).innerText.trim() - ) - .filter(name => name.length) - ) - .to.be.deep.equal(nodeTest.pinNames)) - } - it("Expected development", () => expect(node.entity.isDevelopmentOnly()).equals(nodeTest.development)) - it("Maintains the order of attributes", () => { - getBlueprint().selectAll() - const value = getBlueprint().template.getCopyInputObject().getSerializedText() - const words = value.split("\n").map(row => row.match(/\s*("?\w+(\s+\w+)*).+/)?.[1]).filter(v => v?.length > 0) - expect(value).to.match(getFirstWordOrder(words)) - }) - if (nodeTest.additionalTest) { - it("Additional tests", () => { - nodeTest.additionalTest(node) - }) - } - if (nodeTest.variadic) { - it( - "Can add new pins", - () => { - const variadic = /** @type {HTMLElement} */(node.querySelector(".ueb-node-variadic")) - expect(variadic).to.not.be.undefined - variadic.click() - expect(node.querySelectorAll("ueb-pin")).to.be.lengthOf(nodeTest.pins + 1) - }) - } - }) -} - -export default function generateNodesTests(tests) { - - /** @type {Blueprint} */ - let blueprint - - before(() => { - cy.visit(`http://127.0.0.1:${Cypress.env("UEBLUEPRINT_TEST_SERVER_PORT")}/empty.html`, { - onLoad: () => { - cy.get("ueb-blueprint").then(b => blueprint = b[0]).click(100, 300) - } - }) - }) - - tests.forEach(testObject => generateNodeTest(testObject, () => blueprint)) -} diff --git a/cypress/support/commands.js b/cypress/support/commands.js deleted file mode 100644 index 66ea16e..0000000 --- a/cypress/support/commands.js +++ /dev/null @@ -1,25 +0,0 @@ -// *********************************************** -// This example commands.js shows you how to -// create various custom commands and overwrite -// existing commands. -// -// For more comprehensive examples of custom -// commands please read more here: -// https://on.cypress.io/custom-commands -// *********************************************** -// -// -// -- This is a parent command -- -// Cypress.Commands.add('login', (email, password) => { ... }) -// -// -// -- This is a child command -- -// Cypress.Commands.add('drag', { prevSubject: 'element'}, (subject, options) => { ... }) -// -// -// -- This is a dual command -- -// Cypress.Commands.add('dismiss', { prevSubject: 'optional'}, (subject, options) => { ... }) -// -// -// -- This will overwrite an existing command -- -// Cypress.Commands.overwrite('visit', (originalFn, url, options) => { ... }) \ No newline at end of file diff --git a/cypress/support/e2e.js b/cypress/support/e2e.js deleted file mode 100644 index 0e7290a..0000000 --- a/cypress/support/e2e.js +++ /dev/null @@ -1,20 +0,0 @@ -// *********************************************************** -// This example support/e2e.js is processed and -// loaded automatically before your test files. -// -// This is a great place to put global configuration and -// behavior that modifies Cypress. -// -// You can change the location of this file or turn off -// automatically serving support files with the -// 'supportFile' configuration option. -// -// You can read more here: -// https://on.cypress.io/configuration -// *********************************************************** - -// Import commands.js using ES2015 syntax: -import './commands' - -// Alternatively you can use CommonJS syntax: -// require('./commands') \ No newline at end of file diff --git a/dist/ueblueprint.js b/dist/ueblueprint.js index 2384d75..c94ffb9 100755 --- a/dist/ueblueprint.js +++ b/dist/ueblueprint.js @@ -16,7 +16,7 @@ const t$2=window,e$3=t$2.ShadowRoot&&(void 0===t$2.ShadyCSS||t$2.ShadyCSS.native * Copyright 2017 Google LLC * SPDX-License-Identifier: BSD-3-Clause */ -var t$1;const i$2=window,s$1=i$2.trustedTypes,e$1=s$1?s$1.createPolicy("lit-html",{createHTML:t=>t}):void 0,o$2="$lit$",n$2=`lit$${(Math.random()+"").slice(9)}$`,l$1="?"+n$2,h=`<${l$1}>`,r=document,u=()=>r.createComment(""),d=t=>null===t||"object"!=typeof t&&"function"!=typeof t,c=Array.isArray,v=t=>c(t)||"function"==typeof(null==t?void 0:t[Symbol.iterator]),a="[ \t\n\f\r]",f=/<(?:(!--|\/[^a-zA-Z])|(\/?[a-zA-Z][^>\s]*)|(\/?$))/g,_=/-->/g,m=/>/g,p=RegExp(`>|${a}(?:([^\\s"'>=/]+)(${a}*=${a}*(?:[^ \t\n\f\r"'\`<>=]|("|')|))|$)`,"g"),g=/'/g,$=/"/g,y=/^(?:script|style|textarea|title)$/i,w=t=>(i,...s)=>({_$litType$:t,strings:i,values:s}),x=w(1),T=Symbol.for("lit-noChange"),A=Symbol.for("lit-nothing"),E=new WeakMap,C=r.createTreeWalker(r,129,null,!1);function P$2(t,i){if(!Array.isArray(t)||!t.hasOwnProperty("raw"))throw Error("invalid template strings array");return void 0!==e$1?e$1.createHTML(i):i}const V=(t,i)=>{const s=t.length-1,e=[];let l,r=2===i?"":"",u=f;for(let i=0;i"===c[0]?(u=null!=l?l:f,v=-1):void 0===c[1]?v=-2:(v=u.lastIndex-c[2].length,d=c[1],u=void 0===c[3]?p:'"'===c[3]?$:g):u===$||u===g?u=p:u===_||u===m?u=f:(u=p,l=void 0);const w=u===p&&t[i+1].startsWith("/>")?" ":"";r+=u===f?s+h:v>=0?(e.push(d),s.slice(0,v)+o$2+s.slice(v)+n$2+w):s+n$2+(-2===v?(e.push(void 0),i):w);}return [P$2(t,r+(t[s]||"")+(2===i?"":"")),e]};class N{constructor({strings:t,_$litType$:i},e){let h;this.parts=[];let r=0,d=0;const c=t.length-1,v=this.parts,[a,f]=V(t,i);if(this.el=N.createElement(a,e),C.currentNode=this.el.content,2===i){const t=this.el.content,i=t.firstChild;i.remove(),t.append(...i.childNodes);}for(;null!==(h=C.nextNode())&&v.length0){h.textContent=s$1?s$1.emptyScript:"";for(let s=0;s2||""!==s[0]||""!==s[1]?(this._$AH=Array(s.length-1).fill(new String),this.strings=s):this._$AH=A;}get tagName(){return this.element.tagName}get _$AU(){return this._$AM._$AU}_$AI(t,i=this,s,e){const o=this.strings;let n=!1;if(void 0===o)t=S(this,t,i,0),n=!d(t)||t!==this._$AH&&t!==T,n&&(this._$AH=t);else {const e=t;let l,h;for(t=o[0],l=0;l{var e,o;const n=null!==(e=null==s?void 0:s.renderBefore)&&void 0!==e?e:i;let l=n._$litPart$;if(void 0===l){const t=null!==(o=null==s?void 0:s.renderBefore)&&void 0!==o?o:null;n._$litPart$=l=new R(i.insertBefore(u(),t),t,void 0,null!=s?s:{});}return l._$AI(t),l}; +var t$1;const i$2=window,s$1=i$2.trustedTypes,e$1=s$1?s$1.createPolicy("lit-html",{createHTML:t=>t}):void 0,o$2="$lit$",n$2=`lit$${(Math.random()+"").slice(9)}$`,l$1="?"+n$2,h=`<${l$1}>`,r=document,u=()=>r.createComment(""),d=t=>null===t||"object"!=typeof t&&"function"!=typeof t,c=Array.isArray,v=t=>c(t)||"function"==typeof(null==t?void 0:t[Symbol.iterator]),a="[ \t\n\f\r]",f=/<(?:(!--|\/[^a-zA-Z])|(\/?[a-zA-Z][^>\s]*)|(\/?$))/g,_=/-->/g,m=/>/g,p=RegExp(`>|${a}(?:([^\\s"'>=/]+)(${a}*=${a}*(?:[^ \t\n\f\r"'\`<>=]|("|')|))|$)`,"g"),g=/'/g,$=/"/g,y=/^(?:script|style|textarea|title)$/i,w=t=>(i,...s)=>({_$litType$:t,strings:i,values:s}),x=w(1),T=Symbol.for("lit-noChange"),A=Symbol.for("lit-nothing"),E=new WeakMap,C=r.createTreeWalker(r,129,null,!1);function P(t,i){if(!Array.isArray(t)||!t.hasOwnProperty("raw"))throw Error("invalid template strings array");return void 0!==e$1?e$1.createHTML(i):i}const V=(t,i)=>{const s=t.length-1,e=[];let l,r=2===i?"":"",u=f;for(let i=0;i"===c[0]?(u=null!=l?l:f,v=-1):void 0===c[1]?v=-2:(v=u.lastIndex-c[2].length,d=c[1],u=void 0===c[3]?p:'"'===c[3]?$:g):u===$||u===g?u=p:u===_||u===m?u=f:(u=p,l=void 0);const w=u===p&&t[i+1].startsWith("/>")?" ":"";r+=u===f?s+h:v>=0?(e.push(d),s.slice(0,v)+o$2+s.slice(v)+n$2+w):s+n$2+(-2===v?(e.push(void 0),i):w);}return [P(t,r+(t[s]||"")+(2===i?"":"")),e]};class N{constructor({strings:t,_$litType$:i},e){let h;this.parts=[];let r=0,d=0;const c=t.length-1,v=this.parts,[a,f]=V(t,i);if(this.el=N.createElement(a,e),C.currentNode=this.el.content,2===i){const t=this.el.content,i=t.firstChild;i.remove(),t.append(...i.childNodes);}for(;null!==(h=C.nextNode())&&v.length0){h.textContent=s$1?s$1.emptyScript:"";for(let s=0;s2||""!==s[0]||""!==s[1]?(this._$AH=Array(s.length-1).fill(new String),this.strings=s):this._$AH=A;}get tagName(){return this.element.tagName}get _$AU(){return this._$AM._$AU}_$AI(t,i=this,s,e){const o=this.strings;let n=!1;if(void 0===o)t=S(this,t,i,0),n=!d(t)||t!==this._$AH&&t!==T,n&&(this._$AH=t);else {const e=t;let l,h;for(t=o[0],l=0;l{var e,o;const n=null!==(e=null==s?void 0:s.renderBefore)&&void 0!==e?e:i;let l=n._$litPart$;if(void 0===l){const t=null!==(o=null==s?void 0:s.renderBefore)&&void 0!==o?o:null;n._$litPart$=l=new R(i.insertBefore(u(),t),t,void 0,null!=s?s:{});}return l._$AI(t),l}; /** * @license @@ -58,7 +58,7 @@ class Configuration { begin: "blueprint-focus", end: "blueprint-unfocus", } - static fontSize = i$3`12.5px` + static fontSize = i$3`13px` static gridAxisLineColor = i$3`black` static gridExpandThreshold = 0.25 // remaining size factor threshold to cause an expansion event static gridLineColor = i$3`#353535` @@ -76,15 +76,16 @@ class Configuration { static linkCurveWidth = 80 // px static linkMinWidth = 100 // px static nameRegexSpaceReplacement = new RegExp( - // Leading K2_ or K2Node_ + // Leading K2_ or K2Node_ is removed "^K2(?:[Nn]ode)?_" - // End of a word (lower case followed by either upper case or number) + // End of a word (lower case followed by either upper case or number): "AlphaBravo" => "Alpha Bravo" + "|(?<=[a-z])(?=[A-Z0-9])" - // End of upper case work (upper case followed by either word or number) + // End of upper case word (upper case followed by either word or number) + "|(?<=[A-Z])" + /* Except "UVs" */ "(?} type + * @param {() => T} getter */ - constructor(type, key, getter = () => null) { + constructor(type, getter = null) { this.type = type; - this.key = key; this.getter = getter; } @@ -547,8 +554,9 @@ class MirroredEntity { return this.getter() } + /** @returns {AttributeConstructor} */ getTargetType() { - const result = this.type.attributes[this.key].type; + const result = this.type; if (result instanceof MirroredEntity) { return result.getTargetType() } @@ -556,24 +564,1198 @@ class MirroredEntity { } } -var commonjsGlobal = typeof globalThis !== 'undefined' ? globalThis : typeof window !== 'undefined' ? window : typeof global !== 'undefined' ? global : typeof self !== 'undefined' ? self : {}; +class Reply { -function getDefaultExportFromCjs (x) { - return x && x.__esModule && Object.prototype.hasOwnProperty.call(x, 'default') ? x['default'] : x; + /** + * @template T + * @param {Number} position + * @param {T} value + * @param {PathNode} bestPath + * @returns {Result} + */ + static makeSuccess(position, value, bestPath = null, bestPosition = 0) { + return { + status: true, + value: value, + position: position, + bestParser: bestPath, + bestPosition: bestPosition, + } + } + + /** + * @param {PathNode} bestPath + * @returns {Result} + */ + static makeFailure(position = 0, bestPath = null, bestPosition = 0) { + return { + status: false, + value: null, + position, + bestParser: bestPath, + bestPosition: bestPosition, + } + } + + /** @param {Parsernostrum} parsernostrum */ + static makeContext(parsernostrum = null, input = "") { + return /** @type {Context} */({ + parsernostrum, + input, + highlighted: null, + }) + } + + static makePathNode(parser, index = 0, previous = null) { + return /** @type {PathNode} */({ + parent: previous, + parser, + index, + }) + } } -var parsimmon_umd_min = {exports: {}}; +class Parser { -parsimmon_umd_min.exports; + static indentation = " " + static highlight = "Last valid parser" -(function (module, exports) { - !function(n,t){module.exports=t();}("undefined"!=typeof self?self:commonjsGlobal,function(){return function(n){var t={};function r(e){if(t[e])return t[e].exports;var u=t[e]={i:e,l:!1,exports:{}};return n[e].call(u.exports,u,u.exports,r),u.l=!0,u.exports}return r.m=n,r.c=t,r.d=function(n,t,e){r.o(n,t)||Object.defineProperty(n,t,{configurable:!1,enumerable:!0,get:e});},r.r=function(n){Object.defineProperty(n,"__esModule",{value:!0});},r.n=function(n){var t=n&&n.__esModule?function(){return n.default}:function(){return n};return r.d(t,"a",t),t},r.o=function(n,t){return Object.prototype.hasOwnProperty.call(n,t)},r.p="",r(r.s=0)}([function(n,t,r){function e(n){if(!(this instanceof e))return new e(n);this._=n;}var u=e.prototype;function o(n,t){for(var r=0;r>7),buf:function(n){var t=i(function(n,t,r,e){return n.concat(r===e.length-1?Buffer.from([t,0]).readUInt16BE(0):e.readUInt16BE(r))},[],n);return Buffer.from(a(function(n){return (n<<1&65535)>>8},t))}(r.buf)};}),r}function c(){return "undefined"!=typeof Buffer}function s(){if(!c())throw new Error("Buffer global does not exist; please use webpack if you need to parse Buffers in the browser.")}function l(n){s();var t=i(function(n,t){return n+t},0,n);if(t%8!=0)throw new Error("The bits ["+n.join(", ")+"] add up to "+t+" which is not an even number of bytes; the total should be divisible by 8");var r,u=t/8,o=(r=function(n){return n>48},i(function(n,t){return n||(r(t)?t:n)},null,n));if(o)throw new Error(o+" bit range requested exceeds 48 bit (6 byte) Number max.");return new e(function(t,r){var e=u+r;return e>t.length?x(r,u.toString()+" bytes"):b(e,i(function(n,t){var r=f(t,n.buf);return {coll:n.coll.concat(r.v),buf:r.buf}},{coll:[],buf:t.slice(r,e)},n).coll)})}function h(n,t){return new e(function(r,e){return s(),e+t>r.length?x(e,t+" bytes for "+n):b(e+t,r.slice(e,e+t))})}function p(n,t){if("number"!=typeof(r=t)||Math.floor(r)!==r||t<0||t>6)throw new Error(n+" requires integer length in range [0, 6].");var r;}function d(n){return p("uintBE",n),h("uintBE("+n+")",n).map(function(t){return t.readUIntBE(0,n)})}function v(n){return p("uintLE",n),h("uintLE("+n+")",n).map(function(t){return t.readUIntLE(0,n)})}function g(n){return p("intBE",n),h("intBE("+n+")",n).map(function(t){return t.readIntBE(0,n)})}function m(n){return p("intLE",n),h("intLE("+n+")",n).map(function(t){return t.readIntLE(0,n)})}function y(n){return n instanceof e}function E(n){return "[object Array]"==={}.toString.call(n)}function w(n){return c()&&Buffer.isBuffer(n)}function b(n,t){return {status:!0,index:n,value:t,furthest:-1,expected:[]}}function x(n,t){return E(t)||(t=[t]),{status:!1,index:-1,value:null,furthest:n,expected:t}}function B(n,t){if(!t)return n;if(n.furthest>t.furthest)return n;var r=n.furthest===t.furthest?function(n,t){if(function(){if(void 0!==e._supportsSet)return e._supportsSet;var n="undefined"!=typeof Set;return e._supportsSet=n,n}()&&Array.from){for(var r=new Set(n),u=0;u=0;){if(i in r){e=r[i].line,0===o&&(o=r[i].lineStart);break}("\n"===n.charAt(i)||"\r"===n.charAt(i)&&"\n"!==n.charAt(i+1))&&(u++,0===o&&(o=i+1)),i--;}var a=e+u,f=t-o;return r[t]={line:a,lineStart:o},{offset:t,line:a+1,column:f+1}}function _(n){if(!y(n))throw new Error("not a parser: "+n)}function L(n,t){return "string"==typeof n?n.charAt(t):n[t]}function O(n){if("number"!=typeof n)throw new Error("not a number: "+n)}function k(n){if("function"!=typeof n)throw new Error("not a function: "+n)}function P(n){if("string"!=typeof n)throw new Error("not a string: "+n)}var q=2,A=3,I=8,F=5*I,M=4*I,z=" ";function R(n,t){return new Array(t+1).join(n)}function U(n,t,r){var e=t-n.length;return e<=0?n:R(r,e)+n}function W(n,t,r,e){return {from:n-t>0?n-t:0,to:n+r>e?e:n+r}}function D(n,t){var r,e,u,o,f,c=t.index,s=c.offset,l=1;if(s===n.length)return "Got the end of the input";if(w(n)){var h=s-s%I,p=s-h,d=W(h,F,M+I,n.length),v=a(function(n){return a(function(n){return U(n.toString(16),2,"0")},n)},function(n,t){var r=n.length,e=[],u=0;if(r<=t)return [n.slice()];for(var o=0;o=4&&(r+=1),l=2,u=a(function(n){return n.length<=4?n.join(" "):n.slice(0,4).join(" ")+" "+n.slice(4).join(" ")},v),(f=(8*(o.to>0?o.to-1:o.to)).toString(16).length)<2&&(f=2);}else {var g=n.split(/\r\n|[\n\r\u2028\u2029]/);r=c.column-1,e=c.line-1,o=W(e,q,A,g.length),u=g.slice(o.from,o.to),f=o.to.toString().length;}var m=e-o.from;return w(n)&&(f=(8*(o.to>0?o.to-1:o.to)).toString(16).length)<2&&(f=2),i(function(t,e,u){var i,a=u===m,c=a?"> ":z;return i=w(n)?U((8*(o.from+u)).toString(16),f,"0"):U((o.from+u+1).toString(),f," "),[].concat(t,[c+i+" | "+e],a?[z+R(" ",f)+" | "+U("",r," ")+R("^",l)]:[])},[],u).join("\n")}function N(n,t){return ["\n","-- PARSING FAILED "+R("-",50),"\n\n",D(n,t),"\n\n",(r=t.expected,1===r.length?"Expected:\n\n"+r[0]:"Expected one of the following: \n\n"+r.join(", ")),"\n"].join("");var r;}function G(n){return void 0!==n.flags?n.flags:[n.global?"g":"",n.ignoreCase?"i":"",n.multiline?"m":"",n.unicode?"u":"",n.sticky?"y":""].join("")}function C(){for(var n=[].slice.call(arguments),t=n.length,r=0;r=2?O(t):t=0;var r=function(n){return RegExp("^(?:"+n.source+")",G(n))}(n),u=""+n;return e(function(n,e){var o=r.exec(n.slice(e));if(o){if(0<=t&&t<=o.length){var i=o[0],a=o[t];return b(e+i.length,a)}return x(e,"valid match group (0 to "+o.length+") in "+u)}return x(e,u)})}function X(n){return e(function(t,r){return b(r,n)})}function Y(n){return e(function(t,r){return x(r,n)})}function Z(n){if(y(n))return e(function(t,r){var e=n._(t,r);return e.index=r,e.value="",e});if("string"==typeof n)return Z(K(n));if(n instanceof RegExp)return Z(Q(n));throw new Error("not a string, regexp, or parser: "+n)}function $(n){return _(n),e(function(t,r){var e=n._(t,r),u=t.slice(r,e.index);return e.status?x(r,'not "'+u+'"'):b(r,null)})}function nn(n){return k(n),e(function(t,r){var e=L(t,r);return r=n.length?x(t,"any character/byte"):b(t+1,L(n,t))}),on=e(function(n,t){return b(n.length,n.slice(t))}),an=e(function(n,t){return t=0}).desc(t)},e.optWhitespace=hn,e.Parser=e,e.range=function(n,t){return nn(function(r){return n<=r&&r<=t}).desc(n+"-"+t)},e.regex=Q,e.regexp=Q,e.sepBy=V,e.sepBy1=H,e.seq=C,e.seqMap=J,e.seqObj=function(){for(var n,t={},r=0,u=(n=arguments,Array.prototype.slice.call(n)),o=u.length,i=0;i255)throw new Error("Value specified to byte constructor ("+n+"=0x"+n.toString(16)+") is larger in value than a single byte.");var t=(n>15?"0x":"0x0")+n.toString(16);return e(function(r,e){var u=L(r,e);return u===n?b(e+1,u):x(e,t)})},buffer:function(n){return h("buffer",n).map(function(n){return Buffer.from(n)})},encodedString:function(n,t){return h("string",t).map(function(t){return t.toString(n)})},uintBE:d,uint8BE:d(1),uint16BE:d(2),uint32BE:d(4),uintLE:v,uint8LE:v(1),uint16LE:v(2),uint32LE:v(4),intBE:g,int8BE:g(1),int16BE:g(2),int32BE:g(4),intLE:m,int8LE:m(1),int16LE:m(2),int32LE:m(4),floatBE:h("floatBE",4).map(function(n){return n.readFloatBE(0)}),floatLE:h("floatLE",4).map(function(n){return n.readFloatLE(0)}),doubleBE:h("doubleBE",8).map(function(n){return n.readDoubleBE(0)}),doubleLE:h("doubleLE",8).map(function(n){return n.readDoubleLE(0)})},n.exports=e;}])}); -} (parsimmon_umd_min, parsimmon_umd_min.exports)); + /** @type {(new (...args: any) => Parser) & typeof Parser} */ + Self -var parsimmon_umd_minExports = parsimmon_umd_min.exports; -var Parsimmon = /*@__PURE__*/getDefaultExportFromCjs(parsimmon_umd_minExports); + /** + * @param {String} target + * @param {String} value + */ + static appendBeforeHighlight(target, value) { + if (target.endsWith(Parser.highlight)) { + target = target.replace(/(?=(?:\n|^).+$)/, value); + } else { + target += value; + } + return target + } -const P$1 = Parsimmon; + /** @param {String} value */ + static lastRowLength(value, firstRowPadding = 0) { + // This regex always matches and group 2 (content of the last row) is always there + const match = value.match(/(?:\n|(^))([^\n]*)$/); + // Group 1 tells wheter or not it matched the first row (last row is also first row) + const additional = match[1] !== undefined ? firstRowPadding : 0; + return match[2].length + additional + } + + /** + * @param {Context} context + * @param {PathNode} path + */ + isHighlighted(context, path) { + if (context.highlighted instanceof Parser) { + return context.highlighted === this + } + if (!context.highlighted || !path) { + return false + } + let a, prevA, b, prevB; + loop: + for ( + a = path, + b = /** @type {PathNode} */(context.highlighted); + a && b; + prevA = a, a = a.parent, + prevB = b, b = b.parent + ) { + if (a.parser !== b.parser || a.index !== b.index) { + if (!prevA || !prevB) { + return false // Starting nodes did not match + } + // Try to speculatevely walk the path in reverse to find matching nodes + let nextA; + let nextB; + for ( + nextA = a, nextB = b; + nextA || nextB; + nextA = nextA?.parent, nextB = nextB?.parent + ) { + const aMatches = nextA?.parser === prevA.parser; + const bMatches = nextB?.parser === prevB.parser; + if (aMatches || bMatches) { + if (aMatches) { + prevA = nextA; + } + if (bMatches) { + prevB = nextB; + } + a = prevA; + b = prevB; + continue loop + } + } + return false + } + } + return true + } + + /** @param {PathNode?} path */ + isVisited(path) { + if (!path) { + return false + } + for (path = path.parent; path != null; path = path.parent) { + if (path.parser === this) { + return true + } + } + return false + } + + /** + * @param {Context} context + * @param {Number} position + * @param {PathNode} path + * @returns {Result>} + */ + parse(context, position, path) { + return null + } + + /** @param {PathNode} path */ + toString(context = Reply.makeContext(null, ""), indent = 0, path = null) { + if (this.isVisited(path)) { + return "<...>" // Recursive parser + } + const result = this.doToString(context, indent, path); + return result + } + + /** + * @protected + * @param {Context} context + * @param {Number} indent + * @param {PathNode} path + */ + doToString(context, indent, path) { + return `${this.constructor.name} does not implement toString()` + } +} + +/** @template {String} T */ +class StringParser extends Parser { + + #value + get value() { + return this.#value + } + + /** @param {T} value */ + constructor(value) { + super(); + this.#value = value; + } + + /** + * @param {Context} context + * @param {Number} position + * @param {PathNode} path + */ + parse(context, position, path) { + const end = position + this.#value.length; + const value = context.input.substring(position, end); + const result = this.#value === value + ? Reply.makeSuccess(end, this.#value, path, end) + : Reply.makeFailure(); + return result + } + + /** + * @protected + * @param {Context} context + * @param {Number} indent + * @param {PathNode} path + */ + doToString(context, indent, path) { + const inlined = this.value.replaceAll("\n", "\\n"); + let result = !this.value.match(/^[a-zA-Z]$/) + ? `"${inlined.replaceAll('"', '\\"')}"` + : inlined; + if (this.isHighlighted(context, path)) { + result += "\n" + Parser.indentation.repeat(indent) + "^".repeat(result.length) + " " + Parser.highlight; + } + return result + } +} + +class SuccessParser extends Parser { + + static instance = new SuccessParser() + + /** + * @param {Context} context + * @param {Number} position + * @param {PathNode} path + */ + parse(context, position, path) { + return Reply.makeSuccess(position, "", path, 0) + } + + /** + * @protected + * @param {Context} context + * @param {Number} indent + * @param {PathNode} path + */ + doToString(context, indent, path) { + return "" + + (this.isHighlighted(context, path) + ? `\n${Parser.indentation.repeat(indent)}^^^^^^^^^ ${Parser.highlight}` + : "" + ) + } +} + +/** @template {Parser[]} T */ +class AlternativeParser extends Parser { + + static highlightRegexp = new RegExp( + // Matches the beginning of a row containing Parser.highlight only when after the first row of an alternative + String.raw`(?<=[^\S\n]*\| .*\n)^(?=[^\S\n]*\^+ ${Parser.highlight}(?:\n|$))`, + "m" + ) + + #parsers + get parsers() { + return this.#parsers + } + + /** @param {T} parsers */ + constructor(...parsers) { + super(); + this.#parsers = parsers; + } + + /** + * @param {Context} context + * @param {Number} position + * @param {PathNode} path + */ + parse(context, position, path) { + const result = Reply.makeSuccess(0, /** @type {ParserValue} */("")); + for (let i = 0; i < this.#parsers.length; ++i) { + const outcome = this.#parsers[i].parse( + context, + position, + { parent: path, parser: this.#parsers[i], index: i } + ); + if (outcome.bestPosition > result.bestPosition) { + result.bestParser = outcome.bestParser; + result.bestPosition = outcome.bestPosition; + } + if (outcome.status) { + result.value = outcome.value; + result.position = outcome.position; + return result + } + } + result.status = false; + result.value = null; + return result + } + + /** + * @protected + * @param {Context} context + * @param {Number} indent + * @param {PathNode} path + */ + doToString(context, indent, path) { + const indentation = Parser.indentation.repeat(indent); + const deeperIndentation = Parser.indentation.repeat(indent + 1); + if (this.#parsers.length === 2 && this.#parsers[1] instanceof SuccessParser) { + let result = this.#parsers[0].toString( + context, + indent, + { parent: path, parser: this.#parsers[0], index: 0 } + ); + if (!(this.#parsers[0] instanceof StringParser)) { + result = "<" + result + ">"; + } + result += "?"; + return result + } + let serialized = this.#parsers + .map((parser, index) => parser.toString(context, indent + 1, { parent: path, parser, index })) + .join("\n" + deeperIndentation + "| "); + if (context.highlighted) { + serialized = serialized.replace(AlternativeParser.highlightRegexp, " "); + } + let result = "ALT<\n" + + (this.isHighlighted(context, path) ? `${indentation}^^^ ${Parser.highlight}\n` : "") + + deeperIndentation + serialized + + "\n" + indentation + ">"; + return result + } +} + +/** + * @template {Parser} T + * @template {(v: ParserValue, input: String, position: Number) => Parsernostrum} C + */ +class ChainedParser extends Parser { + + #parser + get parser() { + return this.#parser + } + + #fn + + /** + * @param {T} parser + * @param {C} chained + */ + constructor(parser, chained) { + super(); + this.#parser = parser; + this.#fn = chained; + } + + /** + * @param {Context} context + * @param {Number} position + * @param {PathNode} path + * @returns {Result>>>} + */ + parse(context, position, path) { + const outcome = this.#parser.parse(context, position, { parent: path, parser: this.#parser, index: 0 }); + if (!outcome.status) { + // @ts-expect-error + return outcome + } + // @ts-expect-error + const result = this.#fn(outcome.value, context.input, outcome.position) + .getParser() + .parse(context, outcome.position); + if (outcome.bestPosition > result.bestPosition) { + result.bestParser = outcome.bestParser; + result.bestPosition = outcome.bestPosition; + } + return result + } + + /** + * @protected + * @param {Context} context + * @param {Number} indent + * @param {PathNode} path + */ + doToString(context, indent, path) { + const serialized = "chained"; + let result = this.#parser.toString(context, indent, { parent: path, parser: this.#parser, index: 0 }); + if (this.isHighlighted(context, path)) { + result += + " => " + + serialized + + "\n" + // Group 1 is the portion between the last newline and end or the whole text + + Parser.indentation.repeat(indent) + + " ".repeat(result.match(/(?:\n|^)([^\n]+)$/)?.[1].length + 4) + + "^".repeat(serialized.length) + + " " + + Parser.highlight; + } else { + result = Parser.appendBeforeHighlight(result, " => " + serialized); + } + return result + } +} + +class FailureParser extends Parser { + + static instance = new FailureParser() + + /** + * @param {Context} context + * @param {Number} position + * @param {PathNode} path + */ + parse(context, position, path) { + return Reply.makeFailure() + } + + /** + * @protected + * @param {Context} context + * @param {Number} indent + * @param {PathNode} path + */ + doToString(context, indent, path) { + const result = "" + ( + this.isHighlighted(context, path) + ? `\n${Parser.indentation.repeat(indent)}^^^^^^^^^ ${Parser.highlight}` + : "" + ); + return result + } +} + +/** @template {Parser} T */ +class LazyParser extends Parser { + + #parser + + /** @type {T} */ + #resolvedPraser + + /** @param {() => Parsernostrum} parser */ + constructor(parser) { + super(); + this.#parser = parser; + } + + resolve() { + if (!this.#resolvedPraser) { + this.#resolvedPraser = this.#parser().getParser(); + } + return this.#resolvedPraser + } + + /** + * @param {Context} context + * @param {Number} position + * @param {PathNode} path + */ + parse(context, position, path) { + this.resolve(); + return this.#resolvedPraser.parse(context, position, { parent: path, parser: this.#resolvedPraser, index: 0 }) + } + + /** + * @protected + * @param {Context} context + * @param {Number} indent + * @param {PathNode} path + */ + doToString(context, indent, path) { + const childrenPath = { parent: path, parser: this.#resolvedPraser, index: 0 }; + if (this.isHighlighted(context, path)) { + context.highlighted = context.highlighted instanceof Parser ? this.#resolvedPraser : childrenPath; + } + return this.resolve().toString(context, indent, childrenPath) + } +} + +/** @template {Parser} T */ +class Lookahead extends Parser { + + #parser + get parser() { + return this.#parser + } + + #type + get type() { + return this.#type + } + + /** + * @readonly + * @enum {String} + */ + static Type = { + NEGATIVE_AHEAD: "?!", + NEGATIVE_BEHIND: "? String.raw`[^${character}\\]*(?:\\.[^${character}\\]*)*` + static #numberRegex = /[-\+]?(?:\d*\.)?\d+/ + static common = { + number: new RegExp(this.#numberRegex.source + String.raw`(?!\.)`), + numberInteger: /[\-\+]?\d+(?!\.\d)/, + numberNatural: /\d+/, + numberExponential: new RegExp(this.#numberRegex.source + String.raw`(?:[eE][\+\-]?\d+)?(?!\.)`), + numberUnit: /\+?(?:0(?:\.\d+)?|1(?:\.0+)?)(?![\.\d])/, + numberByte: /0*(?:25[0-5]|2[0-4]\d|1?\d?\d)(?!\d|\.)/, + whitespace: /\s+/, + whitespaceOpt: /\s*/, + whitespaceInline: /[^\S\n]+/, + whitespaceInlineOpt: /[^\S\n]*/, + whitespaceMultiline: /\s*?\n\s*/, + doubleQuotedString: new RegExp(`"(${this.#createEscapeable('"')})"`), + singleQuotedString: new RegExp(`'(${this.#createEscapeable("'")})'`), + backtickQuotedString: new RegExp("`(" + this.#createEscapeable("`") + ")`"), + } + + + /** + * @param {RegExp} regexp + * @param {(match: RegExpExecArray) => T} matchMapper + */ + constructor(regexp, matchMapper) { + super(); + this.#regexp = regexp; + this.#anchoredRegexp = new RegExp(`^(?:${regexp.source})`, regexp.flags); + this.#matchMapper = matchMapper; + } + + /** + * @param {Context} context + * @param {Number} position + * @param {PathNode} path + */ + parse(context, position, path) { + const match = this.#anchoredRegexp.exec(context.input.substring(position)); + if (match) { + position += match[0].length; + } + const result = match + ? Reply.makeSuccess(position, this.#matchMapper(match), path, position) + : Reply.makeFailure(); + return result + } + + /** + * @protected + * @param {Context} context + * @param {Number} indent + * @param {PathNode} path + */ + doToString(context, indent, path) { + let result = "/" + this.#regexp.source + "/"; + const shortname = Object + .entries(RegExpParser.common) + .find(([k, v]) => v.source === this.#regexp.source)?.[0]; + if (shortname) { + result = "P." + shortname; + } + if (this.isHighlighted(context, path)) { + result += "\n" + Parser.indentation.repeat(indent) + "^".repeat(result.length) + " " + Parser.highlight; + } + return result + } +} + +/** + * @template {Parser} T + * @template P + */ +class MapParser extends Parser { + + #parser + get parser() { + return this.#parser + } + + #mapper + get mapper() { + return this.#mapper + } + + /** + * @param {T} parser + * @param {(v: ParserValue

) => P} mapper + */ + constructor(parser, mapper) { + super(); + this.#parser = parser; + this.#mapper = mapper; + } + + /** + * @param {Context} context + * @param {Number} position + * @param {PathNode} path + * @returns {Result

} + */ + parse(context, position, path) { + const result = this.#parser.parse(context, position, { parent: path, parser: this.#parser, index: 0 }); + if (result.status) { + result.value = this.#mapper(result.value); + } + return result + } + + /** + * @protected + * @param {Context} context + * @param {Number} indent + * @param {PathNode} path + */ + doToString(context, indent, path) { + const childrenPath = { parent: path, parser: this.#parser, index: 0 }; + if (this.isHighlighted(context, path)) { + context.highlighted = context.highlighted instanceof Parser ? this.#parser : childrenPath; + } + let result = this.#parser.toString(context, indent, childrenPath); + if (this.#parser instanceof RegExpParser) { + if (Object.values(RegExpParser.common).includes(this.#parser.regexp)) { + if ( + this.#parser.regexp === RegExpParser.common.numberInteger + && this.#mapper === /** @type {(v: any) => BigInt} */(BigInt) + ) { + return "P.numberBigInteger" + } + return result + } + } + let serializedMapper = this.#mapper.toString(); + if (serializedMapper.length > 60 || serializedMapper.includes("\n")) { + serializedMapper = "(...) => { ... }"; + } + serializedMapper = ` -> map<${serializedMapper}>`; + result = Parser.appendBeforeHighlight(result, serializedMapper); + return result + } +} + +/** @extends {RegExpParser} */ +class RegExpArrayParser extends RegExpParser { + + /** @param {RegExpExecArray} match */ + static #mapper = match => match + + /** @param {RegExp} regexp */ + constructor(regexp) { + super(regexp, RegExpArrayParser.#mapper); + } +} + +/** @extends {RegExpParser} */ +class RegExpValueParser extends RegExpParser { + + /** @param {RegExp} regexp */ + constructor(regexp, group = 0) { + super( + regexp, + /** @param {RegExpExecArray} match */ + match => match[group] + ); + } +} + +/** @template {Parser[]} T */ +class SequenceParser extends Parser { + + #parsers + get parsers() { + return this.#parsers + } + + /** @param {T} parsers */ + constructor(...parsers) { + super(); + this.#parsers = parsers; + } + + /** + * @param {Context} context + * @param {Number} position + * @param {PathNode} path + */ + parse(context, position, path) { + const value = /** @type {ParserValue} */(new Array(this.#parsers.length)); + const result = Reply.makeSuccess(position, value); + for (let i = 0; i < this.#parsers.length; ++i) { + const outcome = this.#parsers[i].parse( + context, + result.position, + { parent: path, parser: this.#parsers[i], index: i } + ); + if (outcome.bestPosition > result.bestPosition) { + result.bestParser = outcome.bestParser; + result.bestPosition = outcome.bestPosition; + } + if (!outcome.status) { + result.status = false; + result.value = null; + break + } + result.value[i] = outcome.value; + result.position = outcome.position; + } + return result + } + + /** + * @protected + * @param {Context} context + * @param {Number} indent + * @param {PathNode} path + */ + doToString(context, indent, path) { + const indentation = Parser.indentation.repeat(indent); + const deeperIndentation = Parser.indentation.repeat(indent + 1); + const result = "SEQ<\n" + + (this.isHighlighted(context, path) ? `${indentation}^^^ ${Parser.highlight}\n` : "") + + this.#parsers + .map((parser, index) => deeperIndentation + parser.toString(context, indent + 1, { parent: path, parser, index })) + .join("\n") + + "\n" + indentation + ">"; + return result + } +} + +/** @template {Parser} T */ +class TimesParser extends Parser { + + #parser + get parser() { + return this.#parser + } + + #min + get min() { + return this.#min + } + + #max + get max() { + return this.#max + } + + /** @param {T} parser */ + constructor(parser, min = 0, max = Number.POSITIVE_INFINITY) { + super(); + if (min > max) { + throw new Error("Min is greater than max") + } + this.#parser = parser; + this.#min = min; + this.#max = max; + } + + /** + * @param {Context} context + * @param {Number} position + * @param {PathNode} path + */ + parse(context, position, path) { + const value = /** @type {ParserValue[]} */([]); + const result = Reply.makeSuccess(position, value, path); + for (let i = 0; i < this.#max; ++i) { + const outcome = this.#parser.parse( + context, + result.position, + { parent: path, parser: this.#parser, index: 0 } + ); + if (outcome.bestPosition > result.bestPosition) { + result.bestParser = outcome.bestParser; + result.bestPosition = outcome.bestPosition; + } + if (!outcome.status) { + if (i < this.#min) { + result.status = false; + result.value = null; + } + break + } + result.value.push(outcome.value); + result.position = outcome.position; + } + return result + } + + /** + * @protected + * @param {Context} context + * @param {Number} indent + * @param {PathNode} path + */ + doToString(context, indent, path) { + let result = this.parser.toString(context, indent, { parent: path, parser: this.parser, index: 0 }); + const serialized = + this.#min === 0 && this.#max === 1 ? "?" + : this.#min === 0 && this.#max === Number.POSITIVE_INFINITY ? "*" + : this.#min === 1 && this.#max === Number.POSITIVE_INFINITY ? "+" + : "{" + + this.#min + + (this.#min !== this.#max ? "," + this.#max : "") + + "}"; + if (this.isHighlighted(context, path)) { + result += + serialized + + "\n" + + " ".repeat(Parser.lastRowLength(result, Parser.indentation.length * indent)) + + "^".repeat(serialized.length) + + " " + + Parser.highlight; + } else { + result = Parser.appendBeforeHighlight(result, serialized); + } + return result + } +} + +/** @template {Parser} T */ +class Parsernostrum { + + #parser + + /** @type {(new (parser: Parser) => Parsernostrum) & typeof Parsernostrum} */ + Self + + static lineColumnFromOffset(string, offset) { + const lines = string.substring(0, offset).split('\n'); + const line = lines.length; + const column = lines[lines.length - 1].length + 1; + return { line, column } + } + /** @param {[any, ...any]|RegExpExecArray} param0 */ + static #firstElementGetter = ([v, _]) => v + /** @param {[any, any, ...any]|RegExpExecArray} param0 */ + static #secondElementGetter = ([_, v]) => v + static #arrayFlatter = ([first, rest]) => [first, ...rest] + /** + * @template T + * @param {T} v + * @returns {T extends Array ? String : T} + */ + // @ts-expect-error + static #joiner = v => v instanceof Array ? v.join("") : v + static #createEscapeable = character => String.raw`[^${character}\\]*(?:\\.[^${character}\\]*)*` + + // Prefedined parsers + + /** Parser accepting any valid decimal, possibly signed number */ + static number = this.reg(RegExpParser.common.number).map(Number) + + /** Parser accepting any digits only number */ + static numberInteger = this.reg(RegExpParser.common.numberInteger).map(Number) + + /** Parser accepting any digits only number and returns a BigInt */ + static numberBigInteger = this.reg(this.numberInteger.getParser().parser.regexp).map(BigInt) + + /** Parser accepting any digits only number */ + static numberNatural = this.reg(RegExpParser.common.numberNatural).map(Number) + + /** Parser accepting any valid decimal, possibly signed, possibly in the exponential form number */ + static numberExponential = this.reg(RegExpParser.common.numberExponential).map(Number) + + /** Parser accepting any valid decimal number between 0 and 1 */ + static numberUnit = this.reg(RegExpParser.common.numberUnit).map(Number) + + /** Parser accepting any integer between 0 and 255 */ + static numberByte = this.reg(RegExpParser.common.numberByte).map(Number) + + /** Parser accepting whitespace */ + static whitespace = this.reg(RegExpParser.common.whitespace) + + /** Parser accepting whitespace */ + static whitespaceOpt = this.reg(RegExpParser.common.whitespaceOpt) + + /** Parser accepting whitespace that spans on a single line */ + static whitespaceInline = this.reg(RegExpParser.common.whitespaceInline) + + /** Parser accepting whitespace that spans on a single line */ + static whitespaceInlineOpt = this.reg(RegExpParser.common.whitespaceInlineOpt) + + /** Parser accepting whitespace that contains a list a newline */ + static whitespaceMultiline = this.reg(RegExpParser.common.whitespaceMultiline) + + /** Parser accepting a double quoted string and returns the content */ + static doubleQuotedString = this.reg(RegExpParser.common.doubleQuotedString, 1) + + /** Parser accepting a single quoted string and returns the content */ + static singleQuotedString = this.reg(RegExpParser.common.singleQuotedString, 1) + + /** Parser accepting a backtick quoted string and returns the content */ + static backtickQuotedString = this.reg(RegExpParser.common.backtickQuotedString, 1) + + /** @param {T} parser */ + constructor(parser, optimized = false) { + this.#parser = parser; + } + + getParser() { + return this.#parser + } + + /** + * @param {String} input + * @returns {Result>} + */ + run(input) { + const result = this.#parser.parse(Reply.makeContext(this, input), 0, Reply.makePathNode(this.#parser)); + if (result.position !== input.length) { + result.status = false; + } + return result + } + + /** + * @param {String} input + * @throws {Error} when the parser fails to match + */ + parse(input) { + const result = this.run(input); + if (!result.status) { + const chunkLength = 60; + const chunkRange = /** @type {[Number, Number]} */( + [Math.ceil(chunkLength / 2), Math.floor(chunkLength / 2)] + ); + const position = Parsernostrum.lineColumnFromOffset(input, result.bestPosition); + let bestPosition = result.bestPosition; + const inlineInput = input.replaceAll( + /^(\s)+|\s{6,}|\s*?\n\s*/g, + (m, startingSpace, offset) => { + let replaced = startingSpace ? "..." : " ... "; + if (offset <= result.bestPosition) { + if (result.bestPosition < offset + m.length) { + bestPosition -= result.bestPosition - offset; + } else { + bestPosition -= m.length - replaced.length; + } + } + return replaced + } + ); + const string = inlineInput.substring(0, chunkLength).trimEnd(); + const leadingWhitespaceLength = Math.min( + input.substring(result.bestPosition - chunkRange[0]).match(/^\s*/)[0].length, + chunkRange[0] - 1, + ); + let offset = Math.min(bestPosition, chunkRange[0] - leadingWhitespaceLength); + chunkRange[0] = Math.max(0, bestPosition - chunkRange[0]) + leadingWhitespaceLength; + chunkRange[1] = Math.min(input.length, chunkRange[0] + chunkLength); + let segment = inlineInput.substring(...chunkRange); + if (chunkRange[0] > 0) { + segment = "..." + segment; + offset += 3; + } + if (chunkRange[1] < inlineInput.length - 1) { + segment = segment + "..."; + } + throw new Error( + `Could not parse: ${string}\n\n` + + `Input: ${segment}\n` + + " " + " ".repeat(offset) + + `^ From here (line: ${position.line}, column: ${position.column}, offset: ${result.bestPosition})${result.bestPosition === input.length ? ", end of string" : ""}\n\n` + + (result.bestParser ? "Last valid parser matched:" : "No parser matched:") + + this.toString(1, true, result.bestParser) + + "\n" + ) + } + return result.value + } + + // Parsers + + /** + * @template {String} S + * @param {S} value + */ + static str(value) { + return new this(new StringParser(value)) + } + + /** @param {RegExp} value */ + static reg(value, group = 0) { + return new this(new RegExpValueParser(value, group)) + } + + /** @param {RegExp} value */ + static regArray(value) { + return new this(new RegExpArrayParser(value)) + } + + static success() { + return new this(SuccessParser.instance) + } + + static failure() { + return new this(FailureParser.instance) + } + + // Combinators + + /** + * @template {[Parsernostrum, Parsernostrum, ...Parsernostrum[]]} P + * @param {P} parsers + * @returns {Parsernostrum>>} + */ + static seq(...parsers) { + const results = new this(new SequenceParser(...parsers.map(p => p.getParser()))); + // @ts-expect-error + return results + } + + /** + * @template {[Parsernostrum, Parsernostrum, ...Parsernostrum[]]} P + * @param {P} parsers + * @returns {Parsernostrum>>} + */ + static alt(...parsers) { + // @ts-expect-error + return new this(new AlternativeParser(...parsers.map(p => p.getParser()))) + } + + /** + * @template {Parsernostrum} P + * @param {P} parser + */ + static lookahead(parser) { + return new this(new Lookahead(parser.getParser(), Lookahead.Type.POSITIVE_AHEAD)) + } + + /** + * @template {Parsernostrum} P + * @param {() => P} parser + * @returns {Parsernostrum>>} + */ + static lazy(parser) { + return new this(new LazyParser(parser)) + } + + /** @param {Number} min */ + times(min, max = min) { + return new Parsernostrum(new TimesParser(this.#parser, min, max)) + } + + many() { + return this.times(0, Number.POSITIVE_INFINITY) + } + + /** @param {Number} n */ + atLeast(n) { + return this.times(n, Number.POSITIVE_INFINITY) + } + + /** @param {Number} n */ + atMost(n) { + return this.times(0, n) + } + + /** @returns {Parsernostrum} */ + opt() { + // @ts-expect-error + return Parsernostrum.alt(this, Parsernostrum.success()) + } + + /** + * @template {Parsernostrum} P + * @param {P} separator + */ + sepBy(separator, allowTrailing = false) { + const results = Parsernostrum.seq( + this, + Parsernostrum.seq(separator, this).map(Parsernostrum.#secondElementGetter).many() + ) + .map(Parsernostrum.#arrayFlatter); + return results + } + + skipSpace() { + return Parsernostrum.seq(this, Parsernostrum.whitespaceOpt).map(Parsernostrum.#firstElementGetter) + } + + /** + * @template P + * @param {(v: ParserValue) => P} fn + * @returns {Parsernostrum>} + */ + map(fn) { + // @ts-expect-error + return new Parsernostrum(new MapParser(this.#parser, fn)) + } + + /** + * @template {Parsernostrum} P + * @param {(v: ParserValue, input: String, position: Number) => P} fn + */ + chain(fn) { + return new Parsernostrum(new ChainedParser(this.#parser, fn)) + } + + /** + * @param {(v: ParserValue, input: String, position: Number) => boolean} fn + * @return {Parsernostrum} + */ + assert(fn) { + // @ts-expect-error + return this.chain((v, input, position) => fn(v, input, position) + ? Parsernostrum.success().map(() => v) + : Parsernostrum.failure() + ) + } + + join(value = "") { + return this.map(Parsernostrum.#joiner) + } + + /** @param {Parsernostrum | Parser | PathNode} highlight */ + toString(indent = 0, newline = false, highlight = null) { + if (highlight instanceof Parsernostrum) { + highlight = highlight.getParser(); + } + const context = Reply.makeContext(this, ""); + context.highlighted = highlight; + return (newline ? "\n" + Parser.indentation.repeat(indent) : "") + + this.#parser.toString(context, indent, Reply.makePathNode(this.#parser)) + } +} class Serializable { @@ -581,9 +1763,7 @@ class Serializable { /** @protected */ static createGrammar() { - return /** @type {Parsimmon.Parser} */(P$1.fail( - "Unimplemented createGrammar() method in " + this.name) - ) + return /** @type {Parsernostrum} */(Parsernostrum.failure()) } } @@ -592,7 +1772,7 @@ class SerializerFactory { static #serializers = new Map() /** - * @template {SimpleValueType} T + * @template {AttributeConstructor} T * @param {T} type * @param {Serializer} object */ @@ -601,9 +1781,9 @@ class SerializerFactory { } /** - * @template {SimpleValueType} T + * @template {AttributeConstructor} T * @param {T} type - * @returns {Serializer>} + * @returns {Serializer} */ static getSerializer(type) { return SerializerFactory.#serializers.get(type) @@ -745,33 +1925,28 @@ class Utility { } /** - * @param {Number[]} viewportLocation + * @param {Coordinates} viewportLocation * @param {HTMLElement} movementElement */ static convertLocation(viewportLocation, movementElement, ignoreScale = false) { const scaleCorrection = ignoreScale ? 1 : 1 / Utility.getScale(movementElement); const bounding = movementElement.getBoundingClientRect(); - let location = [ + const location = /** @type {Coordinates} */([ Math.round((viewportLocation[0] - bounding.x) * scaleCorrection), Math.round((viewportLocation[1] - bounding.y) * scaleCorrection) - ]; + ]); return location } /** - * @param {IEntity} entity + * @param {Attribute} entity * @param {String} key * @returns {Boolean} */ - static isSerialized( - entity, - key, - attribute = /** @type {EntityConstructor} */(entity.constructor).attributes?.[key] - ) { - if (attribute?.constructor === Object) { - return /** @type {AttributeInformation} */(attribute).serialized - } - return false + static isSerialized(entity, key) { + // @ts-expect-error + const attribute = (entity.attributes ?? entity.constructor?.attributes)?.[key]; + return attribute ? attribute.serialized : false } /** @param {String[]} keys */ @@ -815,8 +1990,8 @@ class Utility { } /** - * @param {AnyValue} a - * @param {AnyValue} b + * @param {Attribute} a + * @param {Attribute} b */ static equals(a, b) { // Here we cannot check both instanceof IEntity because this would introduce a circular include dependency @@ -840,24 +2015,23 @@ class Utility { } /** - * @template {AnyValue} T + * @template {Attribute | AttributeTypeDescription} T * @param {T} value - * @returns {SimpleValueType} + * @returns {AttributeConstructor} */ static getType(value) { if (value === null) { return null } if (value?.constructor === Object && /** @type {AttributeInformation} */(value)?.type instanceof Function) { - // @ts-expect-error return /** @type {AttributeInformation} */(value).type } - return /** @type {SimpleValueType} */(value?.constructor) + return /** @type {AttributeConstructor} */(value?.constructor) } /** - * @template {SimpleValue} V - * @template {SimpleValueType} C + * @template {Attribute} V + * @template {AttributeConstructor} C * @param {C} type * @returns {value is InstanceType} */ @@ -868,8 +2042,8 @@ class Utility { return (acceptNull && value === null) || value instanceof type || value?.constructor === type } - /** @param {AnyValue | Object} value */ - static sanitize(value, targetType = /** @type {SimpleValueType} */(value?.constructor)) { + /** @param {Attribute} value */ + static sanitize(value, targetType = /** @type {AttributeTypeDescription } */(value?.constructor)) { if (targetType instanceof Array) { targetType = targetType[0]; } @@ -895,7 +2069,7 @@ class Utility { : new /** @type {EntityConstructor} */(targetType)(value); } if (value instanceof Boolean || value instanceof Number || value instanceof String) { - value = /** @type {AnyValue} */(value.valueOf()); // Get the relative primitive value + value = /** @type {TerminalAttribute} */(value.valueOf()); // Get the relative primitive value } return value } @@ -904,7 +2078,7 @@ class Utility { * @param {Number} x * @param {Number} y * @param {Number} gridSize - * @returns {[Number, Number]} + * @returns {Coordinates} */ static snapToGrid(x, y, gridSize) { if (gridSize === 1) { @@ -1021,7 +2195,7 @@ class Utility { /** * @param {Number} x * @param {Number} y - * @returns {[Number, Number]} + * @returns {Coordinates} */ static getPolarCoordinates(x, y, positiveTheta = false) { let theta = Math.atan2(y, x); @@ -1037,7 +2211,7 @@ class Utility { /** * @param {Number} r * @param {Number} theta - * @returns {[Number, Number]} + * @returns {Coordinates} */ static getCartesianCoordinates(r, theta) { return [ @@ -1107,6 +2281,7 @@ class Utility { } } +/** @abstract */ class IEntity extends Serializable { /** @type {String | Union} */ @@ -1133,7 +2308,7 @@ class IEntity extends Serializable { let attributes = Self.attributes; if (values.attributes) { attributes = { ...Self.attributes }; - Utility.mergeArrays(Object.keys(attributes), Object.keys(values.attributes)) + Utility.mergeArrays(Object.keys(values.attributes), Object.keys(attributes)) .forEach(k => { attributes[k] = { ...IEntity.defaultAttribute, @@ -1157,13 +2332,17 @@ class IEntity extends Serializable { } for (const attributeName of allAttributesNames) { if (attributeName == "attributes") { + // Ignore this special attribute describing all the attributes continue } let value = values[attributeName]; let attribute = attributes[attributeName]; if (!suppressWarns && value !== undefined) { - if (!(attributeName in attributes) && !attributeName.startsWith("#SubObject")) { + if ( + !(attributeName in attributes) + && !attributeName.startsWith(Configuration.subObjectAttributeNamePrefix) + ) { const typeName = value instanceof Array ? `[${value[0]?.constructor.name}]` : value.constructor.name; console.warn( `UEBlueprint: Attribute ${attributeName} (of type ${typeName}) in the serialized data is not ` @@ -1230,7 +2409,7 @@ class IEntity extends Serializable { .getSerializer(defaultType) .read(/** @type {String} */(value)); } - assignAttribute(Utility.sanitize(value, /** @type {SimpleValueType} */(defaultType))); + assignAttribute(Utility.sanitize(value, /** @type {AttributeConstructor} */(defaultType))); continue // We have a value, need nothing more } if (Object.hasOwn(attribute, "default")) { // Accept also explicit undefined @@ -1239,7 +2418,7 @@ class IEntity extends Serializable { } } - /** @param {AttributeType} attributeType */ + /** @param {AttributeTypeDescription} attributeType */ static defaultValueProviderFromType(attributeType) { if (attributeType === Boolean) { return false @@ -1254,12 +2433,11 @@ class IEntity extends Serializable { } else if (attributeType instanceof Union) { return this.defaultValueProviderFromType(attributeType.values[0]) } else if (attributeType instanceof MirroredEntity) { - return () => new MirroredEntity(attributeType.type, attributeType.key, attributeType.getter) + return () => new MirroredEntity(attributeType.type, attributeType.getter) } else if (attributeType instanceof ComputedType) { return undefined } else { - // @ts-expect-error - return () => new attributeType() + return () => new /** @type {AnyConstructor} */(attributeType)() } } @@ -1307,6 +2485,7 @@ class IEntity extends Serializable { return this.getAttributes(object)[attribute] } + /** @returns {AttributeDeclarations} */ static getAttributes(object) { return object.attributes ?? object.constructor?.attributes ?? {} } @@ -1347,8 +2526,6 @@ class IEntity extends Serializable { } } -let P = Parsimmon; - class Grammar { static separatedBy = (source, separator, min = 1) => @@ -1358,14 +2535,10 @@ class Grammar { ) static Regex = class { - static ByteInteger = /0*(?:25[0-5]|2[0-4]\d|1?\d?\d)(?!\d|\.)/ // A integer between 0 and 255 static HexDigit = /[0-9a-fA-F]/ - static InlineOptWhitespace = /[^\S\n]*/ - static InlineWhitespace = /[^\S\n]+/ static InsideString = /(?:[^"\\]|\\.)*/ static InsideSingleQuotedString = /(?:[^'\\]|\\.)*/ static Integer = /[\-\+]?\d+(?!\d|\.)/ - static MultilineWhitespace = /\s*\n\s*/ static Number = /[-\+]?(?:\d*\.)?\d+(?!\d|\.)/ static RealUnit = /\+?(?:0(?:\.\d+)?|1(?:\.0+)?)(?![\.\d])/ // A number between 0 and 1 included static Word = Grammar.separatedBy("[a-zA-Z]", "_") @@ -1378,95 +2551,55 @@ class Grammar { /* --- Primitive --- */ - static null = P.lazy(() => P.regex(/\(\s*\)/).map(() => null)) - static true = P.lazy(() => P.regex(/true/i).map(() => true)) - static false = P.lazy(() => P.regex(/false/i).map(() => false)) - static boolean = P.lazy(() => Grammar.regexMap(/(true)|false/i, v => v[1] ? true : false)) - static number = P.lazy(() => - this.regexMap(new RegExp(`(${Grammar.Regex.Number.source})|(\\+?inf)|(-inf)`), result => { - if (result[2] !== undefined) { - return Number.POSITIVE_INFINITY - } else if (result[3] !== undefined) { - return Number.NEGATIVE_INFINITY - } - return Number(result[1]) - }) - ) - static integer = P.lazy(() => P.regex(Grammar.Regex.Integer).map(Number)) - static bigInt = P.lazy(() => P.regex(Grammar.Regex.Integer).map(BigInt)) - static realUnit = P.lazy(() => P.regex(Grammar.Regex.RealUnit).map(Number)) - static naturalNumber = P.lazy(() => P.regex(/\d+/).map(Number)) - static byteNumber = P.lazy(() => P.regex(Grammar.Regex.ByteInteger).map(Number)) - static string = P.lazy(() => - Grammar.regexMap( - new RegExp(`"(${Grammar.Regex.InsideString.source})"`), - ([_0, value]) => value + static null = Parsernostrum.reg(/\(\s*\)/).map(() => null) + static true = Parsernostrum.reg(/true/i).map(() => true) + static false = Parsernostrum.reg(/false/i).map(() => false) + static boolean = Parsernostrum.regArray(/(true)|false/i).map(v => v[1] ? true : false) + static number = Parsernostrum.regArray( + new RegExp(`(${Parsernostrum.number.getParser().parser.regexp.source})|(\\+?inf)|(-inf)`) + ).map(([_0, n, plusInf, minusInf]) => n ? Number(n) : plusInf ? Number.POSITIVE_INFINITY : Number.NEGATIVE_INFINITY) + static bigInt = Parsernostrum.reg(new RegExp(Parsernostrum.number.getParser().parser.regexp.source)).map(BigInt) + .map(result => + result[2] !== undefined + ? Number.POSITIVE_INFINITY + : result[3] !== undefined + ? Number.NEGATIVE_INFINITY + : Number(result[1]) ) - .map((insideString) => Utility.unescapeString(insideString)) - ) + static naturalNumber = Parsernostrum.lazy(() => Parsernostrum.reg(/\d+/).map(Number)) + static string = Parsernostrum.doubleQuotedString.map(insideString => Utility.unescapeString(insideString)) /* --- Fragment --- */ - static colorValue = this.byteNumber - static word = P.regex(Grammar.Regex.Word) - static pathQuotes = Grammar.regexMap( - new RegExp( - `'"(` + Grammar.Regex.InsideString.source + `)"'` - + `|'(` + Grammar.Regex.InsideSingleQuotedString.source + `)'` - + `|"(` + Grammar.Regex.InsideString.source + `)"` - ), - ([_0, a, b, c]) => a ?? b ?? c - ) - static path = Grammar.regexMap( - new RegExp( - `'"(` + Grammar.Regex.InsideString.source + `)"'` - + `|'(` + Grammar.Regex.InsideSingleQuotedString.source + `)'` - + `|"(` + Grammar.Regex.InsideString.source + `)"` - + `|(` + Grammar.Regex.Path.source + `)` - ), - ([_0, a, b, c, d]) => a ?? b ?? c ?? d - ) - static symbol = P.regex(Grammar.Regex.Symbol) - static symbolQuoted = Grammar.regexMap( - new RegExp('"(' + Grammar.Regex.Symbol.source + ')"'), - /** @type {(_0: String, v: String) => String} */ - ([_0, v]) => v - ) - static attributeName = P.regex(Grammar.Regex.DotSeparatedSymbols) - static attributeNameQuoted = Grammar.regexMap( - new RegExp('"(' + Grammar.Regex.DotSeparatedSymbols.source + ')"'), - ([_0, v]) => v - ) - static guid = P.regex(new RegExp(`${Grammar.Regex.HexDigit.source}{32}`)) - static commaSeparation = P.regex(/\s*,\s*(?!\))/) - static commaOrSpaceSeparation = P.regex(/\s*,\s*(?!\))|\s+/) - static equalSeparation = P.regex(/\s*=\s*/) - static typeReference = P.alt(P.regex(Grammar.Regex.Path), this.symbol) - static hexColorChannel = P.regex(new RegExp(Grammar.Regex.HexDigit.source + "{2}")) + static colorValue = Parsernostrum.numberByte + static word = Parsernostrum.reg(Grammar.Regex.Word) + static pathQuotes = Parsernostrum.regArray(new RegExp( + `'"(` + Grammar.Regex.InsideString.source + `)"'` + + `|'(` + Grammar.Regex.InsideSingleQuotedString.source + `)'` + + `|"(` + Grammar.Regex.InsideString.source + `)"` + )).map(([_0, a, b, c]) => a ?? b ?? c) + static path = Parsernostrum.regArray(new RegExp( + `'"(` + Grammar.Regex.InsideString.source + `)"'` + + `|'(` + Grammar.Regex.InsideSingleQuotedString.source + `)'` + + `|"(` + Grammar.Regex.InsideString.source + `)"` + + `|(` + Grammar.Regex.Path.source + `)` + )).map(([_0, a, b, c, d]) => a ?? b ?? c ?? d) + static symbol = Parsernostrum.reg(Grammar.Regex.Symbol) + static symbolQuoted = Parsernostrum.reg(new RegExp('"(' + Grammar.Regex.Symbol.source + ')"'), 1) + static attributeName = Parsernostrum.reg(Grammar.Regex.DotSeparatedSymbols) + static attributeNameQuoted = Parsernostrum.reg(new RegExp('"(' + Grammar.Regex.DotSeparatedSymbols.source + ')"'), 1) + static guid = Parsernostrum.reg(new RegExp(`${Grammar.Regex.HexDigit.source}{32}`)) + static commaSeparation = Parsernostrum.reg(/\s*,\s*(?!\))/) + static commaOrSpaceSeparation = Parsernostrum.reg(/\s*,\s*(?!\))|\s+/) + static equalSeparation = Parsernostrum.reg(/\s*=\s*/) + static typeReference = Parsernostrum.alt(Parsernostrum.reg(Grammar.Regex.Path), this.symbol) + static hexColorChannel = Parsernostrum.reg(new RegExp(Grammar.Regex.HexDigit.source + "{2}")) /* --- Factory --- */ /** - * @template T - * @param {RegExp} re - * @param {(execResult) => T} mapper - */ - static regexMap(re, mapper) { - const anchored = RegExp("^(?:" + re.source + ")", re.flags); - const expected = "" + re; - return P((input, i) => { - const match = anchored.exec(input.slice(i)); - if (match) { - return P.makeSuccess(i + match[0].length, mapper(match)) - } - return P.makeFailure(i, expected) - }) - } - - /** - * @template {SimpleValueType} T + * @template {AttributeTypeDescription} T * @param {T} type - * @returns {Parsimmon.Parser>} */ static grammarFor( attribute, @@ -1480,39 +2613,39 @@ class Grammar { if (attribute?.inlined) { return this.grammarFor(undefined, type[0]) } - result = P.seq( - P.regex(/\(\s*/), + result = Parsernostrum.seq( + Parsernostrum.reg(/\(\s*/), this.grammarFor(undefined, type[0]).sepBy(this.commaSeparation), - P.regex(/\s*(?:,\s*)?\)/), + Parsernostrum.reg(/\s*(?:,\s*)?\)/), ).map(([_0, values, _3]) => values); } else if (type instanceof Union) { result = type.values .map(v => this.grammarFor(undefined, v)) .reduce((acc, cur) => !cur || cur === this.unknownValue || acc === this.unknownValue ? this.unknownValue - : P.alt(acc, cur) + : Parsernostrum.alt(acc, cur) ); } else if (type instanceof MirroredEntity) { - return this.grammarFor(type.type.attributes[type.key]) - .map(() => new MirroredEntity(type.type, type.key, type.getter)) + return this.grammarFor(undefined, type.getTargetType()) + .map(v => new MirroredEntity(type.type, () => v)) } else if (attribute?.constructor === Object) { result = this.grammarFor(undefined, type); } else { switch (type) { - case BigInt: - result = this.bigInt; - break case Boolean: result = this.boolean; break case Number: result = this.number; break + case BigInt: + result = this.bigInt; + break case String: result = this.string; break default: - if (type?.prototype instanceof Serializable) { + if (/** @type {AttributeConstructor} */(type)?.prototype instanceof Serializable) { return /** @type {typeof Serializable} */(type).grammar } } @@ -1522,18 +2655,18 @@ class Grammar { if (result == this.unknownValue) { result = this.string; } else { - result = P.seq(P.string('"'), result, P.string('"')); + result = Parsernostrum.seq(Parsernostrum.str('"'), result, Parsernostrum.str('"')); } } if (attribute.nullable) { - result = P.alt(result, this.null); + result = Parsernostrum.alt(result, this.null); } } return result } /** - * @template {SimpleValueType} T + * @template {AttributeConstructor} T * @param {T} entityType * @param {String[]} key * @returns {AttributeInformation} @@ -1568,7 +2701,7 @@ class Grammar { valueSeparator = this.equalSeparation, handleObjectSet = (obj, k, v) => { } ) { - return P.seq( + return Parsernostrum.seq( attributeName, valueSeparator, ).chain(([attributeName, _1]) => { @@ -1589,20 +2722,19 @@ class Grammar { * @template {IEntity} T * @param {(new (...args: any) => T) & EntityConstructor} entityType * @param {Boolean | Number} acceptUnknownKeys Number to specify the limit or true, to let it be a reasonable value - * @returns {Parsimmon.Parser} */ static createEntityGrammar = (entityType, acceptUnknownKeys = true, entriesSeparator = this.commaSeparation) => - P.seq( - this.regexMap( + Parsernostrum.seq( + Parsernostrum.reg( entityType.lookbehind instanceof Union ? new RegExp(`(${entityType.lookbehind.values.reduce((acc, cur) => acc + "|" + cur)})\\s*\\(\\s*`) : entityType.lookbehind.constructor == String && entityType.lookbehind.length ? new RegExp(`(${entityType.lookbehind})\\s*\\(\\s*`) : /()\(\s*/, - result => result[1] + 1 ), - this.createAttributeGrammar(entityType).sepBy1(entriesSeparator), - P.regex(/\s*(?:,\s*)?\)/), // trailing comma + this.createAttributeGrammar(entityType).sepBy(entriesSeparator), + Parsernostrum.reg(/\s*(?:,\s*)?\)/), // trailing comma ) .map(([lookbehind, attributes, _2]) => { let values = {}; @@ -1615,20 +2747,19 @@ class Grammar { // Decide if we accept the entity or not. It is accepted if it doesn't have too many unexpected keys .chain(values => { let totalKeys = Object.keys(values); - let missingKey; // Check missing values if ( Object.keys(/** @type {AttributeInformation} */(entityType.attributes)) .filter(key => entityType.attributes[key].expected) - .find(key => !totalKeys.includes(key) && (missingKey = key)) + .find(key => !totalKeys.includes(key) && (key)) ) { - return P.fail("Missing key " + missingKey) + return Parsernostrum.failure() } const unknownKeys = Object.keys(values).filter(key => !(key in entityType.attributes)).length; if (!acceptUnknownKeys && unknownKeys > 0) { - return P.fail("Too many unknown keys") + return Parsernostrum.failure() } - return P.succeed(new entityType(values)) + return Parsernostrum.success().map(() => new entityType(values)) }) /* --- Entity --- */ @@ -1701,25 +2832,18 @@ class ObjectReferenceEntity extends IEntity { static { this.cleanupAttributes(this.attributes); } - static noneReferenceGrammar = Parsimmon.string("None").map(() => this.createNoneInstance()) - static fullReferenceGrammar = Parsimmon.seq( + static noneReferenceGrammar = Parsernostrum.str("None").map(() => this.createNoneInstance()) + static fullReferenceGrammar = Parsernostrum.seq( Grammar.typeReference, - Parsimmon.regex(Grammar.Regex.InlineOptWhitespace), + Parsernostrum.whitespaceInlineOpt, Grammar.pathQuotes - ) - .map(([type, _2, path]) => - new this({ type: type, path: path }) - ) - static typeReferenceGrammar = Grammar.typeReference.map(v => - new this({ type: v, path: "" }) - ) - static pathReferenceGrammar = Grammar.path.map(path => - new this({ type: "", path: path }) - ) + ).map(([type, _2, path]) => new this({ type, path })) + static typeReferenceGrammar = Grammar.typeReference.map(v => new this({ type: v, path: "" })) + static pathReferenceGrammar = Grammar.path.map(path => new this({ type: "", path: path })) static grammar = this.createGrammar() static createGrammar() { - return Parsimmon.alt( + return Parsernostrum.alt( this.noneReferenceGrammar, this.fullReferenceGrammar, this.typeReferenceGrammar, @@ -1851,11 +2975,14 @@ class IntegerEntity extends IEntity { static grammar = this.createGrammar() static createGrammar() { - return Grammar.integer.map(v => new this(v)) + return Parsernostrum.numberInteger.map(v => new this(v)) } /** @param {Number | AttributeInformation} value */ constructor(value = 0) { + if (value === -0) { + value = 0; + } super(value.constructor === Object ? value : { @@ -1888,7 +3015,7 @@ class ColorChannelEntity extends IEntity { static grammar = this.createGrammar() static createGrammar() { - return Grammar.number.map(value => new this(value)) + return Parsernostrum.number.map(value => new this(value)) } constructor(values = 0) { @@ -1994,29 +3121,26 @@ class LinearColorEntity extends IEntity { } static getLinearColorFromHexGrammar() { - return Grammar.regexMap(new RegExp( - `#(${Grammar.Regex.HexDigit.source - }{2})(${Grammar.Regex.HexDigit.source - }{2})(${Grammar.Regex.HexDigit.source - }{2})(${Grammar.Regex.HexDigit.source - }{2})?` - ), - v => [v[1], v[2], v[3], v[4] ?? "FF"]) - .map(([R, G, B, A]) => new this({ - R: parseInt(R, 16) / 255, - G: parseInt(G, 16) / 255, - B: parseInt(B, 16) / 255, - A: parseInt(A, 16) / 255, - })) + return Parsernostrum.regArray(new RegExp( + "#(" + Grammar.Regex.HexDigit.source + "{2})" + + "(" + Grammar.Regex.HexDigit.source + "{2})" + + "(" + Grammar.Regex.HexDigit.source + "{2})" + + "(" + Grammar.Regex.HexDigit.source + "{2})?" + )).map(([m, R, G, B, A]) => new this({ + R: parseInt(R, 16) / 255, + G: parseInt(G, 16) / 255, + B: parseInt(B, 16) / 255, + A: parseInt(A ?? "FF", 16) / 255, + })) } static getLinearColorRGBListGrammar() { - return Parsimmon.seq( - Grammar.byteNumber, + return Parsernostrum.seq( + Parsernostrum.numberByte, Grammar.commaSeparation, - Grammar.byteNumber, + Parsernostrum.numberByte, Grammar.commaSeparation, - Grammar.byteNumber, + Parsernostrum.numberByte, ).map(([R, _1, G, _3, B]) => new this({ R: R / 255, G: G / 255, @@ -2026,25 +3150,23 @@ class LinearColorEntity extends IEntity { } static getLinearColorRGBGrammar() { - return Parsimmon.seq( - Parsimmon.regex(/rgb\s*\(\s*/), + return Parsernostrum.seq( + Parsernostrum.reg(/rgb\s*\(\s*/), this.getLinearColorRGBListGrammar(), - Parsimmon.regex(/\s*\)/) - ) - .map(([_0, linearColor, _2]) => linearColor) + Parsernostrum.reg(/\s*\)/) + ).map(([_0, linearColor, _2]) => linearColor) } static getLinearColorRGBAGrammar() { - return Parsimmon.seq( - Parsimmon.regex(/rgba\s*\(\s*/), + return Parsernostrum.seq( + Parsernostrum.reg(/rgba\s*\(\s*/), this.getLinearColorRGBListGrammar(), - Parsimmon.regex(/\s*\)/) - ) - .map(([_0, linearColor, _2]) => linearColor) + Parsernostrum.reg(/\s*\)/) + ).map(([_0, linearColor, _2]) => linearColor) } static getLinearColorFromAnyFormat() { - return Parsimmon.alt( + return Parsernostrum.alt( this.getLinearColorFromHexGrammar(), this.getLinearColorRGBAGrammar(), this.getLinearColorRGBGrammar(), @@ -2233,6 +3355,11 @@ class LinearColorEntity extends IEntity { this.#updateHSV(); } + /** @returns {[Number, Number, Number, Number]} */ + toArray() { + return [this.R.value, this.G.value, this.B.value, this.A.value] + } + toString() { return Utility.printLinearColor(this) } @@ -2292,7 +3419,7 @@ class ByteEntity extends IntegerEntity { static grammar = this.createGrammar() static createGrammar() { - return Grammar.byteNumber.map(v => new this(v)) + return Parsernostrum.numberByte.map(v => new this(v)) } constructor(values = 0) { @@ -2351,7 +3478,7 @@ class EnumDisplayValueEntity extends EnumEntity { static grammar = this.createGrammar() static createGrammar() { - return Parsimmon.regex(Grammar.Regex.InsideString).map(v => new this(v)) + return Parsernostrum.reg(Grammar.Regex.InsideString).map(v => new this(v)) } } @@ -2370,14 +3497,14 @@ class InvariantTextEntity extends IEntity { static grammar = this.createGrammar() static createGrammar() { - return Parsimmon.alt( - Parsimmon.seq( - Parsimmon.regex(new RegExp(`${this.lookbehind}\\s*\\(`)), + return Parsernostrum.alt( + Parsernostrum.seq( + Parsernostrum.reg(new RegExp(`${this.lookbehind}\\s*\\(`)), Grammar.grammarFor(this.attributes.value), - Parsimmon.regex(/\s*\)/) + Parsernostrum.reg(/\s*\)/) ) .map(([_0, value, _2]) => value), - Parsimmon.regex(new RegExp(this.lookbehind)) // InvariantTextEntity can not have arguments + Parsernostrum.reg(new RegExp(this.lookbehind)) // InvariantTextEntity can not have arguments .map(() => "") ).map(value => new this(value)) } @@ -2414,22 +3541,19 @@ class LocalizedTextEntity extends IEntity { static grammar = this.createGrammar() static createGrammar() { - return Grammar.regexMap( - new RegExp( - String.raw`${this.lookbehind}\s*\(` - + String.raw`\s*"(${Grammar.Regex.InsideString.source})"\s*,` - + String.raw`\s*"(${Grammar.Regex.InsideString.source})"\s*,` - + String.raw`\s*"(${Grammar.Regex.InsideString.source})"\s*` - + String.raw`(?:,\s+)?` - + String.raw`\)`, - "m" - ), - matchResult => new this({ - namespace: Utility.unescapeString(matchResult[1]), - key: Utility.unescapeString(matchResult[2]), - value: Utility.unescapeString(matchResult[3]), - }) - ) + return Parsernostrum.regArray(new RegExp( + String.raw`${this.lookbehind}\s*\(` + + String.raw`\s*"(${Grammar.Regex.InsideString.source})"\s*,` + + String.raw`\s*"(${Grammar.Regex.InsideString.source})"\s*,` + + String.raw`\s*"(${Grammar.Regex.InsideString.source})"\s*` + + String.raw`(?:,\s+)?` + + String.raw`\)`, + "m" + )).map(matchResult => new this({ + namespace: Utility.unescapeString(matchResult[1]), + key: Utility.unescapeString(matchResult[2]), + value: Utility.unescapeString(matchResult[3]), + })) } constructor(values) { @@ -2460,23 +3584,21 @@ class FormatTextEntity extends IEntity { static grammar = this.createGrammar() static createGrammar() { - return Parsimmon.lazy(() => - Parsimmon.seq( - Grammar.regexMap( - // Resulting regex: /(LOCGEN_FORMAT_NAMED|LOCGEN_FORMAT_ORDERED)\s*/ - new RegExp(`(${this.lookbehind.values.reduce((acc, cur) => acc + "|" + cur)})\\s*`), - result => result[1] - ), - Grammar.grammarFor(this.attributes.value) - ) - .map(([lookbehind, values]) => { - const result = new this({ - value: values, - }); - result.lookbehind = lookbehind; - return result - }) + return Parsernostrum.seq( + Parsernostrum.reg( + // Resulting regex: /(LOCGEN_FORMAT_NAMED|LOCGEN_FORMAT_ORDERED)\s*/ + new RegExp(`(${this.lookbehind.values.reduce((acc, cur) => acc + "|" + cur)})\\s*`), + 1 + ), + Grammar.grammarFor(this.attributes.value) ) + .map(([lookbehind, values]) => { + const result = new this({ + value: values, + }); + result.lookbehind = lookbehind; + return result + }) } constructor(values) { @@ -2523,7 +3645,7 @@ class Integer64Entity extends IEntity { static grammar = this.createGrammar() static createGrammar() { - return Grammar.bigInt.map(v => new this(v)) + return Parsernostrum.numberBigInteger.map(v => new this(v)) } /** @param {BigInt | Number} value */ @@ -2600,9 +3722,9 @@ class PinReferenceEntity extends IEntity { static grammar = this.createGrammar() static createGrammar() { - return Parsimmon.seq( + return Parsernostrum.seq( PathSymbolEntity.createGrammar(), - Parsimmon.whitespace, + Parsernostrum.whitespace, GuidEntity.createGrammar() ).map( ([objectName, _1, pinGuid]) => new this({ @@ -2728,6 +3850,11 @@ class Vector2DEntity extends IEntity { /** @type {Number} */ this.X; /** @type {Number} */ this.Y; } + + /** @returns {[Number, Number]} */ + toArray() { + return [this.X, this.Y] + } } class RBSerializationVector2DEntity extends Vector2DEntity { @@ -2735,14 +3862,14 @@ class RBSerializationVector2DEntity extends Vector2DEntity { static grammar = this.createGrammar() static createGrammar() { - return Parsimmon.alt( - Parsimmon.seq( - Parsimmon.string("X").then(Grammar.equalSeparation).then(Grammar.number), - Parsimmon.regex(Grammar.Regex.InlineWhitespace), - Parsimmon.string("Y").then(Grammar.equalSeparation).then(Grammar.number), - ).map(([x, _1, y]) => new this({ - X: x, - Y: y, + return Parsernostrum.alt( + Parsernostrum.regArray(new RegExp( + /X\s*=\s*/.source + "(?" + Parsernostrum.number.getParser().parser.regexp.source + ")" + + "\\s+" + + /Y\s*=\s*/.source + "(?" + Parsernostrum.number.getParser().parser.regexp.source + ")" + )).map(({ groups: { x, y } }) => new this({ + X: Number(x), + Y: Number(y), })), Vector2DEntity.createGrammar() ) @@ -2800,20 +3927,19 @@ class SimpleSerializationRotatorEntity extends RotatorEntity { static grammar = this.createGrammar() static createGrammar() { - return Parsimmon.alt( - Parsimmon.seq( - Grammar.number, - Grammar.commaSeparation, - Grammar.number, - Grammar.commaSeparation, - Grammar.number, - ).map(([p, _1, y, _3, r]) => - new this({ - R: r, - P: p, - Y: y, - }) - ), + const number = Parsernostrum.number.getParser().parser.regexp.source; + return Parsernostrum.alt( + Parsernostrum.reg(new RegExp( + "(" + number + ")" + + "\\s*,\\s" + + "(" + number + ")" + + "\\s*,\\s" + + "(" + number + ")" + )).map(([p, y, r]) => new this({ + R: Number(r), + P: Number(p), + Y: Number(y), + })), RotatorEntity.createGrammar() ) } @@ -2824,14 +3950,15 @@ class SimpleSerializationVector2DEntity extends Vector2DEntity { static grammar = this.createGrammar() static createGrammar() { - return Parsimmon.alt( - Parsimmon.seq( - Grammar.number, - Grammar.commaSeparation, - Grammar.number, - ).map(([x, _1, y]) => new this({ - X: x, - Y: y, + const number = Parsernostrum.number.getParser().parser.regexp.source; + return Parsernostrum.alt( + Parsernostrum.reg(new RegExp( + "(" + number + ")" + + "\\s*,\\s" + + "(" + number + ")" + )).map(([x, y]) => new this({ + X: Number(x), + Y: Number(y), })), Vector2DEntity.createGrammar() ) @@ -2870,6 +3997,11 @@ class VectorEntity extends IEntity { /** @type {Number} */ this.Y; /** @type {Number} */ this.Z; } + + /** @returns {[Number, Number, Number]} */ + toArray() { + return [this.X, this.Y, this.Z] + } } class SimpleSerializationVectorEntity extends VectorEntity { @@ -2877,24 +4009,26 @@ class SimpleSerializationVectorEntity extends VectorEntity { static grammar = this.createGrammar() static createGrammar() { - return Parsimmon.alt( - Parsimmon.seq( - Grammar.number, - Grammar.commaSeparation, - Grammar.number, - Grammar.commaSeparation, - Grammar.number, - ).map(([x, _1, y, _3, z]) => new this({ - X: x, - Y: y, - Z: z, - })), + const number = Parsernostrum.number.getParser().parser.regexp.source; + return Parsernostrum.alt( + Parsernostrum.regArray(new RegExp( + "(" + number + ")" + + "\\s*,\\s*" + + "(" + number + ")" + + "\\s*,\\s*" + + "(" + number + ")" + )) + .map(([_0, x, y, z]) => new this({ + X: Number(x), + Y: Number(y), + Z: Number(z), + })), VectorEntity.createGrammar() ) } } -/** @template {AnyValue} T */ +/** @template {TerminalAttribute} T */ class PinEntity extends IEntity { static #typeEntityMap = { @@ -3630,23 +4764,22 @@ class UnknownPinEntity extends PinEntity { static grammar = this.createGrammar() static createGrammar() { - return Parsimmon.lazy(() => Parsimmon.seq( - Grammar.regexMap( + return Parsernostrum.seq( + Parsernostrum.reg( new RegExp(`${Grammar.Regex.Symbol.source}\\s*\\(\\s*`), - result => result[1] ?? "" + 1 ), - Grammar.createAttributeGrammar(this).sepBy1(Grammar.commaSeparation), - Parsimmon.regex(/\s*(?:,\s*)?\)/) - ) - .map(([lookbehind, attributes, _2]) => { - let values = {}; - if (lookbehind.length) { - values.lookbehind = lookbehind; - } - attributes.forEach(attributeSetter => attributeSetter(values)); - return new this(values) - }) - ) + Grammar.createAttributeGrammar(this).sepBy(Grammar.commaSeparation), + Parsernostrum.reg(/\s*(?:,\s*)?\)/) + ).map(([lookbehind, attributes, _2]) => { + lookbehind ??= ""; + let values = {}; + if (lookbehind.length) { + values.lookbehind = lookbehind; + } + attributes.forEach(attributeSetter => attributeSetter(values)); + return new this(values) + }) } constructor(values = {}) { @@ -3720,271 +4853,115 @@ class ObjectEntity extends IEntity { } static attributes = { ...super.attributes, - Class: { - type: ObjectReferenceEntity, + AdvancedPinDisplay: { type: IdentifierEntity }, + Archetype: { type: ObjectReferenceEntity }, + AxisKey: { type: SymbolEntity }, + bAlt: { type: Boolean }, + bCanRenameNode: { type: Boolean }, + bColorCommentBubble: { type: Boolean }, + bCommand: { type: Boolean }, + bCommentBubblePinned: { type: Boolean }, + bCommentBubbleVisible_InDetailsPanel: { type: Boolean }, + bCommentBubbleVisible: { type: Boolean }, + bConsumeInput: { type: Boolean }, + bControl: { type: Boolean }, + bExecuteWhenPaused: { type: Boolean }, + bExposeToLibrary: { type: Boolean }, + bInternalEvent: { type: Boolean }, + bIsCaseSensitive: { type: Boolean }, + bIsConstFunc: { type: Boolean }, + bIsPureFunc: { type: Boolean }, + BlueprintElementInstance: { type: ObjectReferenceEntity }, + BlueprintElementType: { type: ObjectReferenceEntity }, + bOverrideFunction: { type: Boolean }, + bOverrideParentBinding: { type: Boolean }, + bShift: { type: Boolean }, + Class: { type: ObjectReferenceEntity }, + CommentColor: { type: LinearColorEntity }, + ComponentPropertyName: { type: String }, + CustomFunctionName: { type: String }, + CustomProperties: { type: [new Union(PinEntity, UnknownPinEntity)] }, + DelegateOwnerClass: { type: ObjectReferenceEntity }, + DelegatePropertyName: { type: String }, + DelegateReference: { type: VariableReferenceEntity }, + EnabledState: { type: IdentifierEntity }, + Enum: { type: ObjectReferenceEntity }, + EnumEntries: { + type: [String], + inlined: true, }, - Name: { - type: String, + ErrorMsg: { type: String }, + ErrorType: { type: IntegerEntity }, + EventReference: { type: FunctionReferenceEntity }, + ExportPath: { type: ObjectReferenceEntity }, + FunctionReference: { type: FunctionReferenceEntity }, + G: { type: Number }, + Graph: { type: ObjectReferenceEntity }, + HiGenGridSize: { type: SymbolEntity }, + InputAxisKey: { type: SymbolEntity }, + InputKey: { type: SymbolEntity }, + InputPins: { + type: [ObjectReferenceEntity], + inlined: true, }, - Archetype: { - type: ObjectReferenceEntity, + MacroGraphReference: { type: MacroGraphReferenceEntity }, + MaterialExpression: { type: ObjectReferenceEntity }, + MaterialExpressionComment: { type: ObjectReferenceEntity }, + MaterialExpressionEditorX: { type: new MirroredEntity(IntegerEntity) }, + MaterialExpressionEditorY: { type: new MirroredEntity(IntegerEntity) }, + MaterialFunction: { type: ObjectReferenceEntity }, + MoveMode: { type: SymbolEntity }, + Name: { type: String }, + Node: { type: new MirroredEntity(ObjectReferenceEntity) }, + NodeComment: { type: String }, + NodeGuid: { type: GuidEntity }, + NodeHeight: { type: IntegerEntity }, + NodePosX: { type: IntegerEntity }, + NodePosY: { type: IntegerEntity }, + NodeTitle: { type: String }, + NodeTitleColor: { type: LinearColorEntity }, + NodeWidth: { type: IntegerEntity }, + NumAdditionalInputs: { type: Number }, + ObjectRef: { type: ObjectReferenceEntity }, + Operation: { type: SymbolEntity }, + OutputPins: { + type: [ObjectReferenceEntity], + inlined: true, }, - ExportPath: { - type: ObjectReferenceEntity, - }, - ObjectRef: { - type: ObjectReferenceEntity, - }, - BlueprintElementType: { - type: ObjectReferenceEntity - }, - BlueprintElementInstance: { - type: ObjectReferenceEntity + PCGNode: { type: ObjectReferenceEntity }, + PinNames: { + type: [String], + inlined: true, }, PinTags: { type: [null], inlined: true, }, - PinNames: { - type: [String], - inlined: true, - }, - AxisKey: { - type: SymbolEntity, - }, - InputAxisKey: { - type: SymbolEntity, - }, - NumAdditionalInputs: { - type: Number, - }, - bIsPureFunc: { - type: Boolean, - }, - bIsConstFunc: { - type: Boolean, - }, - bIsCaseSensitive: { - type: Boolean, - }, - VariableReference: { - type: VariableReferenceEntity, - }, - SelfContextInfo: { - type: SymbolEntity, - }, - DelegatePropertyName: { - type: String, - }, - DelegateOwnerClass: { - type: ObjectReferenceEntity, - }, - ComponentPropertyName: { - type: String, - }, - EventReference: { - type: FunctionReferenceEntity, - }, - FunctionReference: { - type: FunctionReferenceEntity, - }, - CustomFunctionName: { - type: String, - }, - TargetType: { - type: ObjectReferenceEntity, - }, - MacroGraphReference: { - type: MacroGraphReferenceEntity, - }, - Enum: { - type: ObjectReferenceEntity, - }, - EnumEntries: { - type: [String], - inlined: true, - }, - InputKey: { - type: SymbolEntity, - }, - MaterialFunction: { - type: ObjectReferenceEntity, - }, - bOverrideFunction: { - type: Boolean, - }, - bInternalEvent: { - type: Boolean, - }, - bConsumeInput: { - type: Boolean, - }, - bExecuteWhenPaused: { - type: Boolean, - }, - bOverrideParentBinding: { - type: Boolean, - }, - bControl: { - type: Boolean, - }, - bAlt: { - type: Boolean, - }, - bShift: { - type: Boolean, - }, - bCommand: { - type: Boolean, - }, - CommentColor: { - type: LinearColorEntity, - }, - bCommentBubbleVisible_InDetailsPanel: { - type: Boolean, - }, - bColorCommentBubble: { - type: Boolean, - }, - ProxyFactoryFunctionName: { - type: String, - }, - ProxyFactoryClass: { - type: ObjectReferenceEntity, - }, - ProxyClass: { - type: ObjectReferenceEntity, - }, - R: { - type: Number, - }, - G: { - type: Number, - }, - StructType: { - type: ObjectReferenceEntity, - }, - MaterialExpression: { - type: ObjectReferenceEntity, - }, - MaterialExpressionComment: { - type: ObjectReferenceEntity, - }, - MoveMode: { - type: SymbolEntity, - }, - TimelineName: { - type: String, - }, - TimelineGuid: { - type: GuidEntity, - }, - SizeX: { - type: new MirroredEntity(ObjectEntity, "NodeWidth"), - }, - SizeY: { - type: new MirroredEntity(ObjectEntity, "NodeHeight"), - }, - Text: { - type: new MirroredEntity(ObjectEntity, "NodeComment"), - }, - MaterialExpressionEditorX: { - type: new MirroredEntity(ObjectEntity, "NodePosX"), - }, - MaterialExpressionEditorY: { - type: new MirroredEntity(ObjectEntity, "NodePosY"), - }, - NodeTitle: { - type: String, - }, - NodeTitleColor: { - type: LinearColorEntity, - }, - PositionX: { - type: new MirroredEntity(ObjectEntity, "NodePosX"), - }, - PositionY: { - type: new MirroredEntity(ObjectEntity, "NodePosY"), - }, - PCGNode: { - type: ObjectReferenceEntity, - }, - HiGenGridSize: { - type: SymbolEntity, - }, - Operation: { - type: SymbolEntity, - }, - NodePosX: { - type: IntegerEntity, - }, - NodePosY: { - type: IntegerEntity, - }, - NodeWidth: { - type: IntegerEntity, - }, - NodeHeight: { - type: IntegerEntity, - }, - Graph: { - type: ObjectReferenceEntity, - }, - SubgraphInstance: { - type: String, - }, - SettingsInterface: { - type: ObjectReferenceEntity, - }, - InputPins: { - type: [ObjectReferenceEntity], - inlined: true, - }, - OutputPins: { - type: [ObjectReferenceEntity], - inlined: true, - }, - bExposeToLibrary: { - type: Boolean, - }, - bCanRenameNode: { - type: Boolean, - }, - bCommentBubblePinned: { - type: Boolean, - }, - bCommentBubbleVisible: { - type: Boolean, - }, - NodeComment: { - type: String, - }, - AdvancedPinDisplay: { - type: IdentifierEntity, - }, - EnabledState: { - type: IdentifierEntity, - }, - NodeGuid: { - type: GuidEntity, - }, - ErrorType: { - type: IntegerEntity, - }, - ErrorMsg: { - type: String, - }, - CustomProperties: { - type: [new Union(PinEntity, UnknownPinEntity)], - } + PositionX: { type: new MirroredEntity(IntegerEntity) }, + PositionY: { type: new MirroredEntity(IntegerEntity) }, + ProxyClass: { type: ObjectReferenceEntity }, + ProxyFactoryClass: { type: ObjectReferenceEntity }, + ProxyFactoryFunctionName: { type: String }, + R: { type: Number }, + SelfContextInfo: { type: SymbolEntity }, + SettingsInterface: { type: ObjectReferenceEntity }, + SizeX: { type: new MirroredEntity(IntegerEntity) }, + SizeY: { type: new MirroredEntity(IntegerEntity) }, + StructType: { type: ObjectReferenceEntity }, + SubgraphInstance: { type: String }, + TargetType: { type: ObjectReferenceEntity }, + Text: { type: new MirroredEntity(String) }, + TimelineGuid: { type: GuidEntity }, + TimelineName: { type: String }, + VariableReference: { type: VariableReferenceEntity }, } static { this.cleanupAttributes(this.attributes); } static nameRegex = /^(\w+?)(?:_(\d+))?$/ static sequencerScriptingNameRegex = /\/Script\/SequencerScripting\.MovieSceneScripting(.+)Channel/ - static customPropertyGrammar = Parsimmon.seq( - Parsimmon.regex(/CustomProperties\s+/), + static customPropertyGrammar = Parsernostrum.seq( + Parsernostrum.reg(/CustomProperties\s+/), Grammar.grammarFor( undefined, this.attributes.CustomProperties.type[0] @@ -3995,15 +4972,15 @@ class ObjectEntity extends IEntity { } values.CustomProperties.push(pin); }) - static inlinedArrayEntryGrammar = Parsimmon.seq( - Parsimmon.alt( + static inlinedArrayEntryGrammar = Parsernostrum.seq( + Parsernostrum.alt( Grammar.symbolQuoted.map(v => [v, true]), Grammar.symbol.map(v => [v, false]), ), - Grammar.regexMap( + Parsernostrum.reg( new RegExp(`\\s*\\(\\s*(\\d+)\\s*\\)\\s*\\=\\s*`), - v => Number(v[1]) - ) + 1 + ).map(Number) ) .chain( /** @param {[[String, Boolean], Number]} param */ @@ -4025,20 +5002,19 @@ class ObjectEntity extends IEntity { static grammar = this.createGrammar() static createSubObjectGrammar() { - return Parsimmon.lazy(() => - this.createGrammar() - .map(object => - values => values[Configuration.subObjectAttributeNameFromEntity(object)] = object - ) - ) + return Parsernostrum.lazy(() => this.createGrammar()) + .map(object => + values => values[Configuration.subObjectAttributeNameFromEntity(object)] = object + ) + } static createGrammar() { - return Parsimmon.seq( - Parsimmon.regex(/Begin\s+Object/), - Parsimmon.seq( - Parsimmon.whitespace, - Parsimmon.alt( + return Parsernostrum.seq( + Parsernostrum.reg(/Begin\s+Object/), + Parsernostrum.seq( + Parsernostrum.whitespace, + Parsernostrum.alt( this.customPropertyGrammar, Grammar.createAttributeGrammar(this), Grammar.createAttributeGrammar(this, Grammar.attributeNameQuoted, undefined, (obj, k, v) => @@ -4050,7 +5026,7 @@ class ObjectEntity extends IEntity { ) .map(([_0, entry]) => entry) .many(), - Parsimmon.regex(/\s+End\s+Object/), + Parsernostrum.reg(/\s+End\s+Object/), ) .map(([_0, attributes, _2]) => { const values = {}; @@ -4080,16 +5056,16 @@ class ObjectEntity extends IEntity { } static getMultipleObjectsGrammar() { - return Parsimmon.seq( - Parsimmon.optWhitespace, + return Parsernostrum.seq( + Parsernostrum.whitespaceOpt, this.createGrammar(), - Parsimmon.seq( - Parsimmon.whitespace, + Parsernostrum.seq( + Parsernostrum.whitespace, this.createGrammar(), ) .map(([_0, object]) => object) .many(), - Parsimmon.optWhitespace + Parsernostrum.whitespaceOpt ) .map(([_0, first, remaining, _4]) => [first, ...remaining]) } @@ -4113,91 +5089,93 @@ class ObjectEntity extends IEntity { }; } super(values, suppressWarns); - /** @type {ObjectReferenceEntity} */ this.Class; - /** @type {String} */ this.Name; - /** @type {ObjectReferenceEntity} */ this.Archetype; - /** @type {ObjectReferenceEntity} */ this.ExportPath; - /** @type {ObjectReferenceEntity} */ this.ObjectRef; - /** @type {ObjectReferenceEntity} */ this.BlueprintElementType; - /** @type {ObjectReferenceEntity} */ this.BlueprintElementInstance; - /** @type {null[]} */ this.PinTags; - /** @type {String[]} */ this.PinNames; - /** @type {SymbolEntity} */ this.AxisKey; - /** @type {SymbolEntity} */ this.InputAxisKey; - /** @type {Number} */ this.NumAdditionalInputs; - /** @type {Boolean} */ this.bIsPureFunc; - /** @type {Boolean} */ this.bIsConstFunc; + /** @type {(PinEntity | UnknownPinEntity)[]} */ this.CustomProperties; + /** @type {Boolean} */ this.bAlt; + /** @type {Boolean} */ this.bCanRenameNode; + /** @type {Boolean} */ this.bColorCommentBubble; + /** @type {Boolean} */ this.bCommand; + /** @type {Boolean} */ this.bCommentBubblePinned; + /** @type {Boolean} */ this.bCommentBubbleVisible; + /** @type {Boolean} */ this.bCommentBubbleVisible_InDetailsPanel; + /** @type {Boolean} */ this.bConsumeInput; + /** @type {Boolean} */ this.bControl; + /** @type {Boolean} */ this.bExecuteWhenPaused; + /** @type {Boolean} */ this.bExposeToLibrary; + /** @type {Boolean} */ this.bInternalEvent; /** @type {Boolean} */ this.bIsCaseSensitive; - /** @type {VariableReferenceEntity} */ this.VariableReference; - /** @type {SymbolEntity} */ this.SelfContextInfo; - /** @type {String} */ this.DelegatePropertyName; - /** @type {ObjectReferenceEntity} */ this.DelegateOwnerClass; + /** @type {Boolean} */ this.bIsConstFunc; + /** @type {Boolean} */ this.bIsPureFunc; + /** @type {Boolean} */ this.bOverrideFunction; + /** @type {Boolean} */ this.bOverrideParentBinding; + /** @type {Boolean} */ this.bShift; /** @type {FunctionReferenceEntity} */ this.ComponentPropertyName; /** @type {FunctionReferenceEntity} */ this.EventReference; /** @type {FunctionReferenceEntity} */ this.FunctionReference; - /** @type {String} */ this.CustomFunctionName; - /** @type {ObjectReferenceEntity} */ this.TargetType; - /** @type {MacroGraphReferenceEntity} */ this.MacroGraphReference; - /** @type {ObjectReferenceEntity} */ this.Enum; - /** @type {String[]} */ this.EnumEntries; - /** @type {SymbolEntity} */ this.InputKey; - /** @type {ObjectReferenceEntity} */ this.MaterialFunction; - /** @type {Boolean} */ this.bOverrideFunction; - /** @type {Boolean} */ this.bInternalEvent; - /** @type {Boolean} */ this.bConsumeInput; - /** @type {Boolean} */ this.bExecuteWhenPaused; - /** @type {Boolean} */ this.bOverrideParentBinding; - /** @type {Boolean} */ this.bControl; - /** @type {Boolean} */ this.bAlt; - /** @type {Boolean} */ this.bShift; - /** @type {Boolean} */ this.bCommand; - /** @type {LinearColorEntity} */ this.CommentColor; - /** @type {Boolean} */ this.bCommentBubbleVisible_InDetailsPanel; - /** @type {Boolean} */ this.bColorCommentBubble; - /** @type {String} */ this.ProxyFactoryFunctionName; - /** @type {ObjectReferenceEntity} */ this.ProxyFactoryClass; - /** @type {ObjectReferenceEntity} */ this.ProxyClass; - /** @type {Number} */ this.R; - /** @type {Number} */ this.G; - /** @type {ObjectReferenceEntity} */ this.StructType; - /** @type {ObjectReferenceEntity} */ this.MaterialExpression; - /** @type {ObjectReferenceEntity} */ this.MaterialExpressionComment; - /** @type {SymbolEntity} */ this.MoveMode; - /** @type {String} */ this.TimelineName; + /** @type {GuidEntity} */ this.NodeGuid; /** @type {GuidEntity} */ this.TimelineGuid; - /** @type {MirroredEntity} */ this.SizeX; - /** @type {MirroredEntity} */ this.SizeY; - /** @type {MirroredEntity} */ this.Text; - /** @type {MirroredEntity} */ this.MaterialExpressionEditorX; - /** @type {MirroredEntity} */ this.MaterialExpressionEditorY; - /** @type {String} */ this.NodeTitle; - /** @type {LinearColorEntity} */ this.NodeTitleColor; - /** @type {MirroredEntity} */ this.PositionX; - /** @type {MirroredEntity} */ this.PositionY; - /** @type {ObjectReferenceEntity} */ this.PCGNode; - /** @type {SymbolEntity} */ this.HiGenGridSize; - /** @type {String} */ this.Operation; + /** @type {IdentifierEntity} */ this.AdvancedPinDisplay; + /** @type {IdentifierEntity} */ this.EnabledState; + /** @type {IntegerEntity} */ this.ErrorType; + /** @type {IntegerEntity} */ this.NodeHeight; /** @type {IntegerEntity} */ this.NodePosX; /** @type {IntegerEntity} */ this.NodePosY; /** @type {IntegerEntity} */ this.NodeWidth; - /** @type {IntegerEntity} */ this.NodeHeight; - /** @type {ObjectReferenceEntity} */ this.Graph; - /** @type {String} */ this.SubgraphInstance; - /** @type {ObjectReferenceEntity} */ this.SettingsInterface; + /** @type {LinearColorEntity} */ this.CommentColor; + /** @type {LinearColorEntity} */ this.NodeTitleColor; + /** @type {MacroGraphReferenceEntity} */ this.MacroGraphReference; + /** @type {MirroredEntity} */ this.MaterialExpressionEditorX; + /** @type {MirroredEntity} */ this.MaterialExpressionEditorY; + /** @type {MirroredEntity} */ this.SizeX; + /** @type {MirroredEntity} */ this.SizeY; + /** @type {MirroredEntity} */ this.Text; + /** @type {MirroredEntity} */ this.PositionX; + /** @type {MirroredEntity} */ this.PositionY; + /** @type {MirroredEntity} */ this.Node; + /** @type {null[]} */ this.PinTags; + /** @type {Number} */ this.G; + /** @type {Number} */ this.NumAdditionalInputs; + /** @type {Number} */ this.R; /** @type {ObjectReferenceEntity[]} */ this.InputPins; /** @type {ObjectReferenceEntity[]} */ this.OutputPins; - /** @type {Boolean} */ this.bExposeToLibrary; - /** @type {Boolean} */ this.bCanRenameNode; - /** @type {Boolean} */ this.bCommentBubblePinned; - /** @type {Boolean} */ this.bCommentBubbleVisible; - /** @type {String} */ this.Text; - /** @type {String} */ this.NodeComment; - /** @type {IdentifierEntity} */ this.AdvancedPinDisplay; - /** @type {IdentifierEntity} */ this.EnabledState; - /** @type {GuidEntity} */ this.NodeGuid; - /** @type {IntegerEntity} */ this.ErrorType; + /** @type {ObjectReferenceEntity} */ this.Archetype; + /** @type {ObjectReferenceEntity} */ this.BlueprintElementInstance; + /** @type {ObjectReferenceEntity} */ this.BlueprintElementType; + /** @type {ObjectReferenceEntity} */ this.Class; + /** @type {ObjectReferenceEntity} */ this.DelegateOwnerClass; + /** @type {ObjectReferenceEntity} */ this.Enum; + /** @type {ObjectReferenceEntity} */ this.ExportPath; + /** @type {ObjectReferenceEntity} */ this.Graph; + /** @type {ObjectReferenceEntity} */ this.MaterialExpression; + /** @type {ObjectReferenceEntity} */ this.MaterialExpressionComment; + /** @type {ObjectReferenceEntity} */ this.MaterialFunction; + /** @type {ObjectReferenceEntity} */ this.ObjectRef; + /** @type {ObjectReferenceEntity} */ this.PCGNode; + /** @type {ObjectReferenceEntity} */ this.ProxyClass; + /** @type {ObjectReferenceEntity} */ this.ProxyFactoryClass; + /** @type {ObjectReferenceEntity} */ this.SettingsInterface; + /** @type {ObjectReferenceEntity} */ this.StructType; + /** @type {ObjectReferenceEntity} */ this.TargetType; + /** @type {String[]} */ this.EnumEntries; + /** @type {String[]} */ this.PinNames; + /** @type {String} */ this.CustomFunctionName; + /** @type {String} */ this.DelegatePropertyName; /** @type {String} */ this.ErrorMsg; - /** @type {(PinEntity | UnknownPinEntity)[]} */ this.CustomProperties; + /** @type {String} */ this.Name; + /** @type {String} */ this.NodeComment; + /** @type {String} */ this.NodeTitle; + /** @type {String} */ this.Operation; + /** @type {String} */ this.ProxyFactoryFunctionName; + /** @type {String} */ this.SubgraphInstance; + /** @type {String} */ this.Text; + /** @type {String} */ this.TimelineName; + /** @type {SymbolEntity} */ this.AxisKey; + /** @type {SymbolEntity} */ this.HiGenGridSize; + /** @type {SymbolEntity} */ this.InputAxisKey; + /** @type {SymbolEntity} */ this.InputKey; + /** @type {SymbolEntity} */ this.MoveMode; + /** @type {SymbolEntity} */ this.SelfContextInfo; + /** @type {VariableReferenceEntity} */ this.DelegateReference; + /** @type {VariableReferenceEntity} */ this.VariableReference; // Legacy nodes cleanup if (this["Pins"] instanceof Array) { @@ -4234,6 +5212,25 @@ class ObjectEntity extends IEntity { if (pcgObject) { pcgObject.PositionX && (pcgObject.PositionX.getter = () => this.NodePosX); pcgObject.PositionY && (pcgObject.PositionY.getter = () => this.NodePosY); + pcgObject.getSubobjects() + .forEach( + /** @param {ObjectEntity} obj */ + obj => { + if (obj.Node !== undefined) { + const nodeRef = obj.Node.get(); + if ( + nodeRef.type === this.PCGNode.type + && nodeRef.path === `${this.Name}.${this.PCGNode.path}` + ) { + obj.Node.getter = () => new ObjectReferenceEntity({ + type: this.PCGNode.type, + path: `${this.Name}.${this.PCGNode.path}`, + }); + } + } + } + ); + } let inputIndex = 0; let outputIndex = 0; @@ -4354,6 +5351,13 @@ class ObjectEntity extends IEntity { return this.getCustomproperties().filter(v => v.constructor === PinEntity) } + /** @returns {ObjectEntity[]} */ + getSubobjects() { + return Object.keys(this) + .filter(k => k.startsWith(Configuration.subObjectAttributeNamePrefix)) + .flatMap(k => [this[k], .../** @type {ObjectEntity} */(this[k]).getSubobjects()]) + } + switchTarget() { const switchMatch = this.getClass().match(Configuration.switchTargetPattern); if (switchMatch) { @@ -4449,6 +5453,8 @@ class ObjectEntity extends IEntity { case Configuration.paths.actorBoundEvent: case Configuration.paths.componentBoundEvent: return `${Utility.formatStringName(this.DelegatePropertyName)} (${this.ComponentPropertyName ?? "Unknown"})` + case Configuration.paths.callDelegate: + return `Call ${this.DelegateReference?.MemberName ?? "None"}` case Configuration.paths.createDelegate: return "Create Event" case Configuration.paths.customEvent: @@ -4812,7 +5818,7 @@ class ObjectEntity extends IEntity { nodeIcon() { if (this.isMaterial() || this.isPcg()) { - return undefined + return null } switch (this.getType()) { case Configuration.paths.addDelegate: @@ -5013,16 +6019,16 @@ class ObjectEntity extends IEntity { } } -/** @template {SimpleValueType} T */ +/** @template {AttributeConstructor} T */ class Serializer { /** @type {(v: String) => String} */ static same = v => v - /** @type {(entity: SimpleValue, serialized: String) => String} */ + /** @type {(entity: Attribute, serialized: String) => String} */ static notWrapped = (entity, serialized) => serialized - /** @type {(entity: SimpleValue, serialized: String) => String} */ + /** @type {(entity: Attribute, serialized: String) => String} */ static bracketsWrapped = (entity, serialized) => `(${serialized})` /** @param {T} entityType */ @@ -5053,7 +6059,6 @@ class Serializer { /** @param {ConstructedType} value */ write(value, insideString = false) { - // @ts-expect-error return this.doWrite(value, insideString) } @@ -5063,7 +6068,7 @@ class Serializer { */ doRead(value) { let grammar = Grammar.grammarFor(undefined, this.entityType); - const parseResult = grammar.parse(value); + const parseResult = grammar.run(value); if (!parseResult.status) { throw new Error(`Error when trying to parse the entity ${this.entityType.prototype.constructor.name}.`) } @@ -5071,7 +6076,7 @@ class Serializer { } /** - * @param {ConstructedType & IEntity} entity + * @param {ConstructedType} entity * @param {Boolean} insideString * @returns {String} */ @@ -5187,11 +6192,7 @@ class ObjectSerializer extends Serializer { /** @param {String} value */ doRead(value) { - const parseResult = Grammar.grammarFor(undefined, this.entityType).parse(value); - if (!parseResult.status) { - throw new Error("Error when trying to parse the object.") - } - return parseResult.value + return Grammar.grammarFor(undefined, this.entityType).parse(value) } /** @@ -5199,11 +6200,7 @@ class ObjectSerializer extends Serializer { * @returns {ObjectEntity[]} */ readMultiple(value) { - const parseResult = ObjectEntity.getMultipleObjectsGrammar().parse(value); - if (!parseResult.status) { - throw new Error("Error when trying to parse the object.") - } - return parseResult.value + return ObjectEntity.getMultipleObjectsGrammar().parse(value) } /** @@ -5263,6 +6260,13 @@ class ObjectSerializer extends Serializer { } } +/** + * @typedef {import("../IInput.js").Options & { + * listenOnFocus?: Boolean, + * unlistenOnTextEdit?: Boolean, + * }} Options + */ + class Copy extends IInput { static #serializer = new ObjectSerializer() @@ -5300,6 +6304,13 @@ class Copy extends IInput { } } +/** + * @typedef {import("../IInput.js").Options & { + * listenOnFocus?: Boolean, + * unlistenOnTextEdit?: Boolean, + * }} Options + */ + class Cut extends IInput { static #serializer = new ObjectSerializer() @@ -5307,6 +6318,11 @@ class Cut extends IInput { /** @type {(e: ClipboardEvent) => void} */ #cutHandler + /** + * @param {Element} target + * @param {Blueprint} blueprint + * @param {Options} options + */ constructor(target, blueprint, options = {}) { options.listenOnFocus ??= true; options.unlistenOnTextEdit ??= true; // No nodes copy if inside a text field, just text (default behavior) @@ -5423,7 +6439,7 @@ class KeyBindingEntity extends IEntity { static grammar = this.createGrammar() static createGrammar() { - return Parsimmon.alt( + return Parsernostrum.alt( IdentifierEntity.grammar.map(identifier => new this({ Key: identifier })), @@ -5442,6 +6458,15 @@ class KeyBindingEntity extends IEntity { } } +/** + * @typedef {import("../IInput.js").Options & { + * activationKeys?: String | KeyBindingEntity | (String | KeyBindingEntity)[], + * consumeEvent?: Boolean, + * listenOnFocus?: Boolean, + * unlistenOnTextEdit?: Boolean, + * }} Options + */ + /** * @template {Element} T * @extends IInput @@ -5460,7 +6485,7 @@ class KeyboardShortcut extends IInput { /** * @param {T} target * @param {Blueprint} blueprint - * @param {Object} options + * @param {Options} options */ constructor( target, @@ -5480,8 +6505,8 @@ class KeyboardShortcut extends IInput { if (v instanceof KeyBindingEntity) { return v } - if (typeof v === "string") { - const parsed = KeyBindingEntity.createGrammar().parse(v); + if (v.constructor === String) { + const parsed = KeyBindingEntity.createGrammar().run(v); if (parsed.status) { return parsed.value } @@ -5570,13 +6595,22 @@ class Shortcuts { static selectAllNodes = "(bCtrl=True,Key=A)" } +/** + * @typedef {import("../IInput.js").Options & { + * ignoreTranslateCompensate?: Boolean, + * ignoreScale?: Boolean, + * movementSpace?: HTMLElement, + * enablerKey?: KeyboardShortcut, + * }} Options + */ + /** * @template {Element} T * @extends {IInput} */ class IPointing extends IInput { - #location = [0, 0] + #location = /** @type {Coordinates} */([0, 0]) get location() { return this.#location } @@ -5591,6 +6625,11 @@ class IPointing extends IInput { return this.#enablerActivated } + /** + * @param {T} target + * @param {Blueprint} blueprint + * @param {Options} options + */ constructor(target, blueprint, options = {}) { options.ignoreTranslateCompensate ??= false; options.ignoreScale ??= false; @@ -5618,17 +6657,22 @@ class IPointing extends IInput { location = this.options.ignoreTranslateCompensate ? location : this.blueprint.compensateTranslation(location[0], location[1]); - this.#location[0] = location[0]; - this.#location[1] = location[1]; + this.#location = [...location]; return this.#location } } +/** + * @typedef {import("./IPointing.js").Options & { + * listenOnFocus?: Boolean, + * strictTarget?: Boolean, + * }} Options + */ + class MouseWheel extends IPointing { - static #ignoreEvent = - /** @param {MouseWheel} self */ - self => { } + /** @param {MouseWheel} self */ + static #ignoreEvent = self => { } #variation = 0 get variation() { @@ -5652,7 +6696,7 @@ class MouseWheel extends IPointing { /** * @param {HTMLElement} target * @param {Blueprint} blueprint - * @param {Object} options + * @param {Options} options */ constructor( target, @@ -5713,6 +6757,12 @@ class Zoom extends MouseWheel { } } +/** + * @typedef {import("./KeyboardShortcut.js").Options & { + * activationKeys?: String | KeyBindingEntity | (String | KeyBindingEntity)[], + * }} Options + */ + class KeyboardEnableZoom extends KeyboardShortcut { /** @type {Zoom} */ @@ -5721,7 +6771,7 @@ class KeyboardEnableZoom extends KeyboardShortcut { /** * @param {HTMLElement} target * @param {Blueprint} blueprint - * @param {Object} options + * @param {Options} options */ constructor(target, blueprint, options = {}) { options.activationKeys = Shortcuts.enableZoomIn; @@ -5941,7 +6991,7 @@ class IDraggableElement extends IElement { this.setLocation(this.locationX + x, this.locationY + y, acknowledge); } - /** @param {Number[]} value */ + /** @param {Coordinates} value */ acknowledgeDrag(value) { const dragEvent = new CustomEvent( /** @type {typeof IDraggableElement} */(this.constructor).dragGeneralEventName, @@ -5980,6 +7030,21 @@ class IDraggableElement extends IElement { } } +/** + * @typedef {import("./IPointing.js").Options & { + * clickButton?: Number, + * consumeEvent?: Boolean, + * draggableElement?: HTMLElement, + * exitAnyButton?: Boolean, + * moveEverywhere?: Boolean, + * movementSpace?: HTMLElement, + * repositionOnClick?: Boolean, + * scrollGraphEdge?: Boolean, + * strictTarget?: Boolean, + * stepSize?: Number, + * }} Options + */ + /** * @template {IElement} T * @extends {IPointing} @@ -6037,6 +7102,7 @@ class IMouseClickDrag extends IPointing { this.lastLocation = Utility.snapToGrid(this.clickedPosition[0], this.clickedPosition[1], this.stepSize); this.startDrag(this.location); this.started = true; + this.#mouseMoveHandler(e); } /** @param {MouseEvent} e */ @@ -6102,16 +7168,16 @@ class IMouseClickDrag extends IPointing { #movementListenedElement #draggableElement - clickedOffset = [0, 0] - clickedPosition = [0, 0] - lastLocation = [0, 0] + clickedOffset = /** @type {Coordinates} */([0, 0]) + clickedPosition = /** @type {Coordinates} */([0, 0]) + lastLocation = /** @type {Coordinates} */([0, 0]) started = false stepSize = 1 /** * @param {T} target * @param {Blueprint} blueprint - * @param {Object} options + * @param {Options} options */ constructor(target, blueprint, options = {}) { options.clickButton ??= Configuration.mouseClickButton; @@ -6124,7 +7190,7 @@ class IMouseClickDrag extends IPointing { options.scrollGraphEdge ??= false; options.strictTarget ??= false; super(target, blueprint, options); - this.stepSize = parseInt(options?.stepSize ?? Configuration.gridSize); + this.stepSize = Number(options.stepSize ?? Configuration.gridSize); this.#movementListenedElement = this.options.moveEverywhere ? document.documentElement : this.movementSpace; this.#draggableElement = /** @type {HTMLElement} */(this.options.draggableElement); @@ -6177,6 +7243,10 @@ class MouseScrollGraph extends IMouseClickDrag { this.blueprint.scrolling = true; } + /** + * @param {Coordinates} location + * @param {Coordinates} movement + */ dragTo(location, movement) { this.blueprint.scrollDelta(-movement[0], -movement[1]); } @@ -6186,17 +7256,22 @@ class MouseScrollGraph extends IMouseClickDrag { } } +/** + * @typedef {import("./IPointing.js").Options & { + * listenOnFocus?: Boolean, + * }} Options + */ + class MouseTracking extends IPointing { /** @type {IPointing} */ #mouseTracker = null /** @param {MouseEvent} e */ - #mousemoveHandler= e => { + #mousemoveHandler = e => { e.preventDefault(); this.setLocationFromEvent(e); - this.blueprint.mousePosition[0] = this.location[0]; - this.blueprint.mousePosition[1] = this.location[1]; + this.blueprint.mousePosition = [...this.location]; } /** @param {CustomEvent} e */ @@ -6217,6 +7292,11 @@ class MouseTracking extends IPointing { } } + /** + * @param {Element} target + * @param {Blueprint} blueprint + * @param {Options} options + */ constructor(target, blueprint, options = {}) { options.listenOnFocus = true; super(target, blueprint, options); @@ -6271,6 +7351,13 @@ class ElementFactory { } } +/** + * @typedef {import("../IInput.js").Options & { + * listenOnFocus?: Boolean, + * unlistenOnTextEdit?: Boolean, + * }} Options + */ + class Paste extends IInput { static #serializer = new ObjectSerializer() @@ -6278,6 +7365,11 @@ class Paste extends IInput { /** @type {(e: ClipboardEvent) => void} */ #pasteHandle + /** + * @param {Element} target + * @param {Blueprint} blueprint + * @param {Options} options + */ constructor(target, blueprint, options = {}) { options.listenOnFocus ??= true; options.unlistenOnTextEdit ??= true; // No nodes paste if inside a text field, just text (default behavior) @@ -6323,6 +7415,12 @@ class Paste extends IInput { } } +/** + * @typedef {import("./IMouseClickDrag.js").Options & { + * scrollGraphEdge?: Boolean, + * }} Options + */ + class Select extends IMouseClickDrag { constructor(target, blueprint, options = {}) { @@ -6335,6 +7433,10 @@ class Select extends IMouseClickDrag { this.selectorElement.beginSelect(this.clickedPosition); } + /** + * @param {Coordinates} location + * @param {Coordinates} movement + */ dragTo(location, movement) { this.selectorElement.selectTo(location); } @@ -6352,15 +7454,25 @@ class Select extends IMouseClickDrag { } } +/** + * @typedef {import("../IInput.js").Options & { + * listenOnFocus?: Boolean, + * }} Options + */ + class Unfocus extends IInput { /** @param {MouseEvent} e */ #clickHandler = e => this.clickedSomewhere(/** @type {HTMLElement} */(e.target)) + /** + * @param {HTMLElement} target + * @param {Blueprint} blueprint + * @param {Options} options + */ constructor(target, blueprint, options = {}) { options.listenOnFocus = true; super(target, blueprint, options); - if (this.blueprint.focus) { document.addEventListener("click", this.#clickHandler); } @@ -6700,7 +7812,7 @@ class IFromToPositionedElement extends IElement { this.toY = 0; } - /** @param {Number[]} param0 */ + /** @param {Coordinates} param0 */ setBothLocations([x, y]) { this.fromX = x; this.fromY = y; @@ -6790,6 +7902,11 @@ class KnotEntity extends ObjectEntity { } } +/** + * @typedef {import("./IMouseClickDrag.js").Options & { +* }} Options +*/ + /** * @template {Element} T * @extends {IPointing} @@ -6848,7 +7965,7 @@ class MouseClick extends IPointing { /** * @param {T} target * @param {Blueprint} blueprint - * @param {Object} options + * @param {Options} options */ constructor( target, @@ -6888,13 +8005,20 @@ class MouseClick extends IPointing { } } +/** + * @typedef {import("./IPointing.js").Options & { + * consumeEvent?: Boolean, + * strictTarget?: Boolean, +* }} Options +*/ + /** * @template {HTMLElement} T * @extends {IPointing} */ class MouseDbClick extends IPointing { - /** @param {Number[]} location */ + /** @param {Coordinates} location */ static ignoreDbClick = location => { } /** @param {MouseEvent} e */ @@ -6904,8 +8028,7 @@ class MouseDbClick extends IPointing { e.stopImmediatePropagation(); // Captured, don't call anyone else } this.clickedPosition = this.setLocationFromEvent(e); - this.blueprint.mousePosition[0] = this.clickedPosition[0]; - this.blueprint.mousePosition[1] = this.clickedPosition[1]; + this.blueprint.mousePosition = [...this.clickedPosition]; this.dbclicked(this.clickedPosition); } } @@ -6918,8 +8041,13 @@ class MouseDbClick extends IPointing { this.#onDbClick = value; } - clickedPosition = [0, 0] + clickedPosition = /** @type {Coordinates} */([0, 0]) + /** + * @param {T} target + * @param {Blueprint} blueprint + * @param {Options} options + */ constructor(target, blueprint, options = {}, onDbClick = MouseDbClick.ignoreDbClick) { options.consumeEvent ??= true; options.strictTarget ??= false; @@ -6937,6 +8065,7 @@ class MouseDbClick extends IPointing { } /* Subclasses will override the following method */ + /** @param {Coordinates} location */ dbclicked(location) { this.onDbClick(location); } @@ -6951,7 +8080,7 @@ class LinkTemplate extends IFromToPositionedTemplate { * y'(p[0]) = m => -a / p[0]^2 = m => a = -m * p[0]^2. Now, in order to determine q we can use the starting * function: p[1] = a / p[0] + q => q = p[1] - a / p[0] * @param {Number} m slope - * @param {Number[]} p reference point + * @param {Coordinates} p reference point */ static decreasingValue(m, p) { const a = -m * p[0] ** 2; @@ -6992,7 +8121,7 @@ class LinkTemplate extends IFromToPositionedTemplate { #uniqueId = `ueb-id-${Math.floor(Math.random() * 1E12)}` - /** @param {[Number, Number]} location */ + /** @param {Coordinates} location */ #createKnot = location => { const knotEntity = new KnotEntity({}, this.element.source.entity); const knot = /** @type {NodeElementConstructor} */(ElementFactory.getConstructor("ueb-node")) @@ -7012,6 +8141,7 @@ class LinkTemplate extends IFromToPositionedTemplate { } createInputObjects() { + /** @type {HTMLElement} */ const linkArea = this.element.querySelector(".ueb-link-area"); return [ ...super.createInputObjects(), @@ -7019,7 +8149,7 @@ class LinkTemplate extends IFromToPositionedTemplate { linkArea, this.blueprint, undefined, - /** @param {[Number, Number]} location */ + /** @param {Coordinates} location */ location => { location[0] += Configuration.knotOffset[0]; location[1] += Configuration.knotOffset[1]; @@ -7299,7 +8429,7 @@ class LinkElement extends IFromToPositionedElement { this.destination = null; } - /** @param {Number[]?} location */ + /** @param {Coordinates} location */ setSourceLocation(location = null, canPostpone = true) { if (location == null) { const self = this; @@ -7315,7 +8445,7 @@ class LinkElement extends IFromToPositionedElement { this.fromY = y; } - /** @param {Number[]?} location */ + /** @param {Coordinates} location */ setDestinationLocation(location = null, canPostpone = true) { if (location == null) { const self = this; @@ -7424,13 +8554,15 @@ class LinkElement extends IFromToPositionedElement { } } +/** @typedef {import("./IMouseClickDrag.js").Options} Options */ + /** * @template {IDraggableElement} T * @extends {IMouseClickDrag} */ class MouseMoveDraggable extends IMouseClickDrag { - /** @param {[Number, Number]} location */ + /** @param {Coordinates} location */ clicked(location) { if (this.options.repositionOnClick) { this.target.setLocation(...(this.stepSize > 1 @@ -7442,8 +8574,8 @@ class MouseMoveDraggable extends IMouseClickDrag { } /** - * @param {Number[]} location - * @param {Number[]} offset + * @param {Coordinates} location + * @param {Coordinates} offset */ dragTo(location, offset) { const targetLocation = [ @@ -7472,14 +8604,23 @@ class MouseMoveDraggable extends IMouseClickDrag { } /** - * @param {Number[]} location - * @param {Number[]} offset + * @param {Coordinates} location + * @param {Coordinates} offset */ dragAction(location, offset) { this.target.setLocation(location[0] - this.clickedOffset[0], location[1] - this.clickedOffset[1]); } } +/** + * @typedef {import("./MouseMoveDraggable.js").Options & { + * onClicked?: () => void, + * onStartDrag?: () => void, + * onDrag?: (location: Coordinates, movement: Coordinates) => void, + * onEndDrag?: () => void, +* }} Options +*/ + class MouseClickDrag extends MouseMoveDraggable { #onClicked @@ -7490,7 +8631,7 @@ class MouseClickDrag extends MouseMoveDraggable { /** * @param {HTMLElement} target * @param {Blueprint} blueprint - * @param {Object} options + * @param {Options} options */ constructor(target, blueprint, options = {}) { super(target, blueprint, options); @@ -7508,7 +8649,7 @@ class MouseClickDrag extends MouseMoveDraggable { } } - /** @param {[Number, Number]} location */ + /** @param {Coordinates} location */ clicked(location) { super.clicked(location); this.#onClicked?.(); @@ -7519,6 +8660,10 @@ class MouseClickDrag extends MouseMoveDraggable { this.#onStartDrag?.(); } + /** + * @param {Coordinates} location + * @param {Coordinates} movement + */ dragAction(location, movement) { this.#onDrag?.(location, movement); } @@ -7535,8 +8680,9 @@ class MouseClickDrag extends MouseMoveDraggable { */ class IDraggableTemplate extends ITemplate { + /** @returns {HTMLElement} */ getDraggableElement() { - return /** @type {Element} */(this.element) + return this.element } createDraggableObject() { @@ -7662,8 +8808,9 @@ class MouseMoveNodes extends MouseMoveDraggable { */ class ISelectableDraggableTemplate extends IDraggablePositionedTemplate { + /** @returns {HTMLElement} */ getDraggableElement() { - return /** @type {Element} */(this.element) + return this.element } createDraggableObject() { @@ -7733,7 +8880,7 @@ class NodeTemplate extends ISelectableDraggableTemplate { /** @param {NodeElement} element */ initialize(element) { super.initialize(element); - this.element.classList.add(.../** @type {NodeTemplateConstructor} */(this.constructor).nodeStyleClasses); + this.element.classList.add(.../** @type {typeof NodeTemplate} */(this.constructor).nodeStyleClasses); this.element.style.setProperty("--ueb-node-color", this.getColor().cssText); this.pinInserter = this.element.entity.additionalPinInserter(); if (this.pinInserter) { @@ -8025,6 +9172,7 @@ class CommentNodeTemplate extends IResizeableTemplate { super.initialize(element); // Keep it at the end because it calls this.getColor() where this.#color must be initialized } + /** @returns {HTMLElement} */ getDraggableElement() { return this.element.querySelector(".ueb-node-top") } @@ -8107,6 +9255,12 @@ class CommentNodeTemplate extends IResizeableTemplate { } } +/** + * @typedef {import("./IMouseClickDrag.js").Options & { + * scrollGraphEdge?: Boolean, +* }} Options +*/ + /** @extends IMouseClickDrag */ class MouseCreateLink extends IMouseClickDrag { @@ -8174,7 +9328,7 @@ class MouseCreateLink extends IMouseClickDrag { /** * @param {PinElement} target * @param {Blueprint} blueprint - * @param {Object} options + * @param {Options} options */ constructor(target, blueprint, options = {}) { options.scrollGraphEdge ??= true; @@ -8309,12 +9463,12 @@ class VariableOperationNodeTemplate extends VariableManagementNodeTemplate { } /** - * @template {AnyValue} T + * @template {TerminalAttribute} T * @typedef {import("../../element/PinElement.js").default} PinElement */ /** - * @template {AnyValue} T + * @template {TerminalAttribute} T * @extends ITemplate> */ class PinTemplate extends ITemplate { @@ -8480,7 +9634,7 @@ class PinTemplate extends ITemplate { } /** - * @template {AnyValue} T + * @template {TerminalAttribute} T * @extends PinTemplate */ class MinimalPinTemplate extends PinTemplate { @@ -9114,7 +10268,9 @@ class Blueprint extends IElement { nodes = [] /** @type {LinkElement[]}" */ links = [] - /** @type {Number[]} */ + /** @type {Map} */ + nodesNames = new Map() + /** @type {Coordinates} */ mousePosition = [0, 0] waitingExpandUpdate = false @@ -9552,7 +10708,7 @@ class IDraggableControlTemplate extends IDraggableTemplate { /** * @param {Number} x * @param {Number} y - * @returns {[Number, Number]} + * @returns {Coordinates} */ adjustLocation(x, y) { this.locationChangeCallback?.(x, y); @@ -9566,7 +10722,7 @@ class ColorHandlerTemplate extends IDraggableControlTemplate { /** * @param {Number} x * @param {Number} y - * @returns {[Number, Number]} + * @returns {Coordinates} */ adjustLocation(x, y) { const radius = Math.round(this.movementSpaceSize[0] / 2); @@ -9628,7 +10784,7 @@ class ColorSliderTemplate extends IDraggableControlTemplate { /** * @param {Number} x * @param {Number} y - * @return {[Number, Number]} + * @return {Coordinates} */ adjustLocation(x, y) { x = Utility.clamp(x, 0, this.movementSpaceSize[0]); @@ -9912,7 +11068,7 @@ class BoolPinTemplate extends PinTemplate { } /** - * @template {AnyValue} T + * @template {TerminalAttribute} T * @extends PinTemplate */ class IInputPinTemplate extends PinTemplate { @@ -10119,7 +11275,7 @@ class ExecPinTemplate extends PinTemplate { } /** - * @template {AnyValue} T + * @template {TerminalAttribute} T * @extends IInputPinTemplate */ class INumericPinTemplate extends IInputPinTemplate { @@ -10850,7 +12006,7 @@ class VectorPinTemplate extends INumericPinTemplate { } /** - * @template {AnyValue} T + * @template {TerminalAttribute} T * @extends {IElement, PinTemplate>} */ class PinElement extends IElement { @@ -10877,9 +12033,9 @@ class PinElement extends IElement { type: GuidEntity, converter: { fromAttribute: (value, type) => value - ? /** @type {Success} */(GuidEntity.grammar.parse(value)).value + ? GuidEntity.grammar.parse(value) : null, - toAttribute: (value, type) => value?.toString(), + toAttribute: (value, type) => /** @type {String} */(value?.toString()), }, attribute: "data-id", reflect: true, @@ -10898,7 +12054,7 @@ class PinElement extends IElement { type: LinearColorEntity, converter: { fromAttribute: (value, type) => value - ? /** @type {Success} */(LinearColorEntity.getLinearColorFromAnyFormat().parse(value)).value + ? LinearColorEntity.getLinearColorFromAnyFormat().parse(value) : null, toAttribute: (value, type) => value ? Utility.printLinearColor(value) : null, }, @@ -11224,7 +12380,6 @@ class OrderedIndexArray { } /** - * @typedef {import("../element/NodeElement.js").default} NodeElement * @typedef {typeof import("../Blueprint.js").default.nodeBoundariesSupplier} BoundariesFunction * @typedef {typeof import("../Blueprint.js").default.nodeSelectToggleFunction} SelectionFunction * @typedef {{ @@ -11238,7 +12393,7 @@ class OrderedIndexArray { class FastSelectionModel { /** - * @param {Number[]} initialPosition + * @param {Coordinates} initialPosition * @param {NodeElement[]} rectangles * @param {BoundariesFunction} boundariesFunc * @param {SelectionFunction} selectFunc @@ -11406,7 +12561,7 @@ class SelectorElement extends IFromToPositionedElement { // Initialized in the constructor, this method does nothing } - /** @param {Number[]} initialPosition */ + /** @param {Coordinates} initialPosition */ beginSelect(initialPosition) { const blueprintConstructor = /** @type {BlueprintConstructor} */(this.blueprint.constructor); this.blueprint.selecting = true; @@ -11419,7 +12574,7 @@ class SelectorElement extends IFromToPositionedElement { ); } - /** @param {Number[]} finalPosition */ + /** @param {Coordinates} finalPosition */ selectTo(finalPosition) { this.selectionModel.selectTo(finalPosition); this.toX = finalPosition[0]; @@ -11508,7 +12663,7 @@ function defineElements() { } /** - * @template {SimpleValueType} T + * @template {AttributeConstructor} T * @extends {Serializer} */ class CustomSerializer extends Serializer { @@ -11571,7 +12726,7 @@ class TerminalTypeEntity extends IEntity { } /** - * @template {SimpleValueType} T + * @template {AttributeConstructor} T * @extends {Serializer} */ class ToStringSerializer extends Serializer { @@ -11607,31 +12762,29 @@ class UnknownKeysEntity extends IEntity { static grammar = this.createGrammar() static createGrammar() { - return Parsimmon.seq( + return Parsernostrum.seq( // Lookbehind - Grammar.regexMap( + Parsernostrum.reg( new RegExp(`(${Grammar.Regex.Path.source}|${Grammar.Regex.Symbol.source}\\s*)?\\(\\s*`), - result => result[1] ?? "" + 1 ), - Grammar.attributeName - .skip(Grammar.equalSeparation) + Parsernostrum.seq(Grammar.attributeName, Grammar.equalSeparation).map(([attribute, equal]) => attribute) .chain(attributeName => - Grammar.unknownValue - .map(attributeValue => - values => values[attributeName] = attributeValue - ) + Grammar.unknownValue.map(attributeValue => + values => values[attributeName] = attributeValue + ) ) - .sepBy1(Grammar.commaSeparation), - Parsimmon.regex(/\s*(?:,\s*)?\)/), - ) - .map(([lookbehind, attributes, _2]) => { - let values = {}; - if (lookbehind.length) { - values.lookbehind = lookbehind; - } - attributes.forEach(attributeSetter => attributeSetter(values)); - return new this(values) - }) + .sepBy(Grammar.commaSeparation), + Parsernostrum.reg(/\s*(?:,\s*)?\)/), + ).map(([lookbehind, attributes, _2]) => { + lookbehind ??= ""; + let values = {}; + if (lookbehind.length) { + values.lookbehind = lookbehind; + } + attributes.forEach(attributeSetter => attributeSetter(values)); + return new this(values) + }) } constructor(values) { @@ -11641,7 +12794,7 @@ class UnknownKeysEntity extends IEntity { } Grammar.unknownValue = - Parsimmon.alt( + Parsernostrum.alt( // Remember to keep the order, otherwise parsing might fail Grammar.boolean, GuidEntity.createGrammar(), diff --git a/dist/ueblueprint.min.js b/dist/ueblueprint.min.js index 0d39989..fa17a0d 100644 --- a/dist/ueblueprint.min.js +++ b/dist/ueblueprint.min.js @@ -3,31 +3,31 @@ * Copyright 2019 Google LLC * SPDX-License-Identifier: BSD-3-Clause */ -const e=window,t=e.ShadowRoot&&(void 0===e.ShadyCSS||e.ShadyCSS.nativeShadow)&&"adoptedStyleSheets"in Document.prototype&&"replace"in CSSStyleSheet.prototype,i=Symbol(),n=new WeakMap;class r{constructor(e,t,n){if(this._$cssResult$=!0,n!==i)throw Error("CSSResult is not constructable. Use `unsafeCSS` or `css` instead.");this.cssText=e,this.t=t}get styleSheet(){let e=this.o;const i=this.t;if(t&&void 0===e){const t=void 0!==i&&1===i.length;t&&(e=n.get(i)),void 0===e&&((this.o=e=new CSSStyleSheet).replaceSync(this.cssText),t&&n.set(i,e))}return e}toString(){return this.cssText}}const s=(e,...t)=>{const n=1===e.length?e[0]:t.reduce(((t,i,n)=>t+(e=>{if(!0===e._$cssResult$)return e.cssText;if("number"==typeof e)return e;throw Error("Value passed to 'css' function must be a 'css' function result: "+e+". Use 'unsafeCSS' to pass non-literal values, but take care to ensure page security.")})(i)+e[n+1]),e[0]);return new r(n,e,i)},a=t?e=>e:e=>e instanceof CSSStyleSheet?(e=>{let t="";for(const i of e.cssRules)t+=i.cssText;return(e=>new r("string"==typeof e?e:e+"",void 0,i))(t)})(e):e +const e=window,t=e.ShadowRoot&&(void 0===e.ShadyCSS||e.ShadyCSS.nativeShadow)&&"adoptedStyleSheets"in Document.prototype&&"replace"in CSSStyleSheet.prototype,i=Symbol(),s=new WeakMap;class r{constructor(e,t,s){if(this._$cssResult$=!0,s!==i)throw Error("CSSResult is not constructable. Use `unsafeCSS` or `css` instead.");this.cssText=e,this.t=t}get styleSheet(){let e=this.o;const i=this.t;if(t&&void 0===e){const t=void 0!==i&&1===i.length;t&&(e=s.get(i)),void 0===e&&((this.o=e=new CSSStyleSheet).replaceSync(this.cssText),t&&s.set(i,e))}return e}toString(){return this.cssText}}const n=(e,...t)=>{const s=1===e.length?e[0]:t.reduce(((t,i,s)=>t+(e=>{if(!0===e._$cssResult$)return e.cssText;if("number"==typeof e)return e;throw Error("Value passed to 'css' function must be a 'css' function result: "+e+". Use 'unsafeCSS' to pass non-literal values, but take care to ensure page security.")})(i)+e[s+1]),e[0]);return new r(s,e,i)},a=t?e=>e:e=>e instanceof CSSStyleSheet?(e=>{let t="";for(const i of e.cssRules)t+=i.cssText;return(e=>new r("string"==typeof e?e:e+"",void 0,i))(t)})(e):e /** * @license * Copyright 2017 Google LLC * SPDX-License-Identifier: BSD-3-Clause - */;var o;const l=window,u=l.trustedTypes,c=u?u.emptyScript:"",h=l.reactiveElementPolyfillSupport,p={toAttribute(e,t){switch(t){case Boolean:e=e?c:null;break;case Object:case Array:e=null==e?e:JSON.stringify(e)}return e},fromAttribute(e,t){let i=e;switch(t){case Boolean:i=null!==e;break;case Number:i=null===e?null:Number(e);break;case Object:case Array:try{i=JSON.parse(e)}catch(e){i=null}}return i}},d=(e,t)=>t!==e&&(t==t||e==e),m={attribute:!0,type:String,converter:p,reflect:!1,hasChanged:d},g="finalized";class b extends HTMLElement{constructor(){super(),this._$Ei=new Map,this.isUpdatePending=!1,this.hasUpdated=!1,this._$El=null,this._$Eu()}static addInitializer(e){var t;this.finalize(),(null!==(t=this.h)&&void 0!==t?t:this.h=[]).push(e)}static get observedAttributes(){this.finalize();const e=[];return this.elementProperties.forEach(((t,i)=>{const n=this._$Ep(i,t);void 0!==n&&(this._$Ev.set(n,i),e.push(n))})),e}static createProperty(e,t=m){if(t.state&&(t.attribute=!1),this.finalize(),this.elementProperties.set(e,t),!t.noAccessor&&!this.prototype.hasOwnProperty(e)){const i="symbol"==typeof e?Symbol():"__"+e,n=this.getPropertyDescriptor(e,i,t);void 0!==n&&Object.defineProperty(this.prototype,e,n)}}static getPropertyDescriptor(e,t,i){return{get(){return this[t]},set(n){const r=this[e];this[t]=n,this.requestUpdate(e,r,i)},configurable:!0,enumerable:!0}}static getPropertyOptions(e){return this.elementProperties.get(e)||m}static finalize(){if(this.hasOwnProperty(g))return!1;this[g]=!0;const e=Object.getPrototypeOf(this);if(e.finalize(),void 0!==e.h&&(this.h=[...e.h]),this.elementProperties=new Map(e.elementProperties),this._$Ev=new Map,this.hasOwnProperty("properties")){const e=this.properties,t=[...Object.getOwnPropertyNames(e),...Object.getOwnPropertySymbols(e)];for(const i of t)this.createProperty(i,e[i])}return this.elementStyles=this.finalizeStyles(this.styles),!0}static finalizeStyles(e){const t=[];if(Array.isArray(e)){const i=new Set(e.flat(1/0).reverse());for(const e of i)t.unshift(a(e))}else void 0!==e&&t.push(a(e));return t}static _$Ep(e,t){const i=t.attribute;return!1===i?void 0:"string"==typeof i?i:"string"==typeof e?e.toLowerCase():void 0}_$Eu(){var e;this._$E_=new Promise((e=>this.enableUpdating=e)),this._$AL=new Map,this._$Eg(),this.requestUpdate(),null===(e=this.constructor.h)||void 0===e||e.forEach((e=>e(this)))}addController(e){var t,i;(null!==(t=this._$ES)&&void 0!==t?t:this._$ES=[]).push(e),void 0!==this.renderRoot&&this.isConnected&&(null===(i=e.hostConnected)||void 0===i||i.call(e))}removeController(e){var t;null===(t=this._$ES)||void 0===t||t.splice(this._$ES.indexOf(e)>>>0,1)}_$Eg(){this.constructor.elementProperties.forEach(((e,t)=>{this.hasOwnProperty(t)&&(this._$Ei.set(t,this[t]),delete this[t])}))}createRenderRoot(){var i;const n=null!==(i=this.shadowRoot)&&void 0!==i?i:this.attachShadow(this.constructor.shadowRootOptions);return((i,n)=>{t?i.adoptedStyleSheets=n.map((e=>e instanceof CSSStyleSheet?e:e.styleSheet)):n.forEach((t=>{const n=document.createElement("style"),r=e.litNonce;void 0!==r&&n.setAttribute("nonce",r),n.textContent=t.cssText,i.appendChild(n)}))})(n,this.constructor.elementStyles),n}connectedCallback(){var e;void 0===this.renderRoot&&(this.renderRoot=this.createRenderRoot()),this.enableUpdating(!0),null===(e=this._$ES)||void 0===e||e.forEach((e=>{var t;return null===(t=e.hostConnected)||void 0===t?void 0:t.call(e)}))}enableUpdating(e){}disconnectedCallback(){var e;null===(e=this._$ES)||void 0===e||e.forEach((e=>{var t;return null===(t=e.hostDisconnected)||void 0===t?void 0:t.call(e)}))}attributeChangedCallback(e,t,i){this._$AK(e,i)}_$EO(e,t,i=m){var n;const r=this.constructor._$Ep(e,i);if(void 0!==r&&!0===i.reflect){const s=(void 0!==(null===(n=i.converter)||void 0===n?void 0:n.toAttribute)?i.converter:p).toAttribute(t,i.type);this._$El=e,null==s?this.removeAttribute(r):this.setAttribute(r,s),this._$El=null}}_$AK(e,t){var i;const n=this.constructor,r=n._$Ev.get(e);if(void 0!==r&&this._$El!==r){const e=n.getPropertyOptions(r),s="function"==typeof e.converter?{fromAttribute:e.converter}:void 0!==(null===(i=e.converter)||void 0===i?void 0:i.fromAttribute)?e.converter:p;this._$El=r,this[r]=s.fromAttribute(t,e.type),this._$El=null}}requestUpdate(e,t,i){let n=!0;void 0!==e&&(((i=i||this.constructor.getPropertyOptions(e)).hasChanged||d)(this[e],t)?(this._$AL.has(e)||this._$AL.set(e,t),!0===i.reflect&&this._$El!==e&&(void 0===this._$EC&&(this._$EC=new Map),this._$EC.set(e,i))):n=!1),!this.isUpdatePending&&n&&(this._$E_=this._$Ej())}async _$Ej(){this.isUpdatePending=!0;try{await this._$E_}catch(e){Promise.reject(e)}const e=this.scheduleUpdate();return null!=e&&await e,!this.isUpdatePending}scheduleUpdate(){return this.performUpdate()}performUpdate(){var e;if(!this.isUpdatePending)return;this.hasUpdated,this._$Ei&&(this._$Ei.forEach(((e,t)=>this[t]=e)),this._$Ei=void 0);let t=!1;const i=this._$AL;try{t=this.shouldUpdate(i),t?(this.willUpdate(i),null===(e=this._$ES)||void 0===e||e.forEach((e=>{var t;return null===(t=e.hostUpdate)||void 0===t?void 0:t.call(e)})),this.update(i)):this._$Ek()}catch(e){throw t=!1,this._$Ek(),e}t&&this._$AE(i)}willUpdate(e){}_$AE(e){var t;null===(t=this._$ES)||void 0===t||t.forEach((e=>{var t;return null===(t=e.hostUpdated)||void 0===t?void 0:t.call(e)})),this.hasUpdated||(this.hasUpdated=!0,this.firstUpdated(e)),this.updated(e)}_$Ek(){this._$AL=new Map,this.isUpdatePending=!1}get updateComplete(){return this.getUpdateComplete()}getUpdateComplete(){return this._$E_}shouldUpdate(e){return!0}update(e){void 0!==this._$EC&&(this._$EC.forEach(((e,t)=>this._$EO(t,this[t],e))),this._$EC=void 0),this._$Ek()}updated(e){}firstUpdated(e){}} + */;var o;const l=window,c=l.trustedTypes,u=c?c.emptyScript:"",h=l.reactiveElementPolyfillSupport,p={toAttribute(e,t){switch(t){case Boolean:e=e?u:null;break;case Object:case Array:e=null==e?e:JSON.stringify(e)}return e},fromAttribute(e,t){let i=e;switch(t){case Boolean:i=null!==e;break;case Number:i=null===e?null:Number(e);break;case Object:case Array:try{i=JSON.parse(e)}catch(e){i=null}}return i}},d=(e,t)=>t!==e&&(t==t||e==e),m={attribute:!0,type:String,converter:p,reflect:!1,hasChanged:d},g="finalized";class b extends HTMLElement{constructor(){super(),this._$Ei=new Map,this.isUpdatePending=!1,this.hasUpdated=!1,this._$El=null,this._$Eu()}static addInitializer(e){var t;this.finalize(),(null!==(t=this.h)&&void 0!==t?t:this.h=[]).push(e)}static get observedAttributes(){this.finalize();const e=[];return this.elementProperties.forEach(((t,i)=>{const s=this._$Ep(i,t);void 0!==s&&(this._$Ev.set(s,i),e.push(s))})),e}static createProperty(e,t=m){if(t.state&&(t.attribute=!1),this.finalize(),this.elementProperties.set(e,t),!t.noAccessor&&!this.prototype.hasOwnProperty(e)){const i="symbol"==typeof e?Symbol():"__"+e,s=this.getPropertyDescriptor(e,i,t);void 0!==s&&Object.defineProperty(this.prototype,e,s)}}static getPropertyDescriptor(e,t,i){return{get(){return this[t]},set(s){const r=this[e];this[t]=s,this.requestUpdate(e,r,i)},configurable:!0,enumerable:!0}}static getPropertyOptions(e){return this.elementProperties.get(e)||m}static finalize(){if(this.hasOwnProperty(g))return!1;this[g]=!0;const e=Object.getPrototypeOf(this);if(e.finalize(),void 0!==e.h&&(this.h=[...e.h]),this.elementProperties=new Map(e.elementProperties),this._$Ev=new Map,this.hasOwnProperty("properties")){const e=this.properties,t=[...Object.getOwnPropertyNames(e),...Object.getOwnPropertySymbols(e)];for(const i of t)this.createProperty(i,e[i])}return this.elementStyles=this.finalizeStyles(this.styles),!0}static finalizeStyles(e){const t=[];if(Array.isArray(e)){const i=new Set(e.flat(1/0).reverse());for(const e of i)t.unshift(a(e))}else void 0!==e&&t.push(a(e));return t}static _$Ep(e,t){const i=t.attribute;return!1===i?void 0:"string"==typeof i?i:"string"==typeof e?e.toLowerCase():void 0}_$Eu(){var e;this._$E_=new Promise((e=>this.enableUpdating=e)),this._$AL=new Map,this._$Eg(),this.requestUpdate(),null===(e=this.constructor.h)||void 0===e||e.forEach((e=>e(this)))}addController(e){var t,i;(null!==(t=this._$ES)&&void 0!==t?t:this._$ES=[]).push(e),void 0!==this.renderRoot&&this.isConnected&&(null===(i=e.hostConnected)||void 0===i||i.call(e))}removeController(e){var t;null===(t=this._$ES)||void 0===t||t.splice(this._$ES.indexOf(e)>>>0,1)}_$Eg(){this.constructor.elementProperties.forEach(((e,t)=>{this.hasOwnProperty(t)&&(this._$Ei.set(t,this[t]),delete this[t])}))}createRenderRoot(){var i;const s=null!==(i=this.shadowRoot)&&void 0!==i?i:this.attachShadow(this.constructor.shadowRootOptions);return((i,s)=>{t?i.adoptedStyleSheets=s.map((e=>e instanceof CSSStyleSheet?e:e.styleSheet)):s.forEach((t=>{const s=document.createElement("style"),r=e.litNonce;void 0!==r&&s.setAttribute("nonce",r),s.textContent=t.cssText,i.appendChild(s)}))})(s,this.constructor.elementStyles),s}connectedCallback(){var e;void 0===this.renderRoot&&(this.renderRoot=this.createRenderRoot()),this.enableUpdating(!0),null===(e=this._$ES)||void 0===e||e.forEach((e=>{var t;return null===(t=e.hostConnected)||void 0===t?void 0:t.call(e)}))}enableUpdating(e){}disconnectedCallback(){var e;null===(e=this._$ES)||void 0===e||e.forEach((e=>{var t;return null===(t=e.hostDisconnected)||void 0===t?void 0:t.call(e)}))}attributeChangedCallback(e,t,i){this._$AK(e,i)}_$EO(e,t,i=m){var s;const r=this.constructor._$Ep(e,i);if(void 0!==r&&!0===i.reflect){const n=(void 0!==(null===(s=i.converter)||void 0===s?void 0:s.toAttribute)?i.converter:p).toAttribute(t,i.type);this._$El=e,null==n?this.removeAttribute(r):this.setAttribute(r,n),this._$El=null}}_$AK(e,t){var i;const s=this.constructor,r=s._$Ev.get(e);if(void 0!==r&&this._$El!==r){const e=s.getPropertyOptions(r),n="function"==typeof e.converter?{fromAttribute:e.converter}:void 0!==(null===(i=e.converter)||void 0===i?void 0:i.fromAttribute)?e.converter:p;this._$El=r,this[r]=n.fromAttribute(t,e.type),this._$El=null}}requestUpdate(e,t,i){let s=!0;void 0!==e&&(((i=i||this.constructor.getPropertyOptions(e)).hasChanged||d)(this[e],t)?(this._$AL.has(e)||this._$AL.set(e,t),!0===i.reflect&&this._$El!==e&&(void 0===this._$EC&&(this._$EC=new Map),this._$EC.set(e,i))):s=!1),!this.isUpdatePending&&s&&(this._$E_=this._$Ej())}async _$Ej(){this.isUpdatePending=!0;try{await this._$E_}catch(e){Promise.reject(e)}const e=this.scheduleUpdate();return null!=e&&await e,!this.isUpdatePending}scheduleUpdate(){return this.performUpdate()}performUpdate(){var e;if(!this.isUpdatePending)return;this.hasUpdated,this._$Ei&&(this._$Ei.forEach(((e,t)=>this[t]=e)),this._$Ei=void 0);let t=!1;const i=this._$AL;try{t=this.shouldUpdate(i),t?(this.willUpdate(i),null===(e=this._$ES)||void 0===e||e.forEach((e=>{var t;return null===(t=e.hostUpdate)||void 0===t?void 0:t.call(e)})),this.update(i)):this._$Ek()}catch(e){throw t=!1,this._$Ek(),e}t&&this._$AE(i)}willUpdate(e){}_$AE(e){var t;null===(t=this._$ES)||void 0===t||t.forEach((e=>{var t;return null===(t=e.hostUpdated)||void 0===t?void 0:t.call(e)})),this.hasUpdated||(this.hasUpdated=!0,this.firstUpdated(e)),this.updated(e)}_$Ek(){this._$AL=new Map,this.isUpdatePending=!1}get updateComplete(){return this.getUpdateComplete()}getUpdateComplete(){return this._$E_}shouldUpdate(e){return!0}update(e){void 0!==this._$EC&&(this._$EC.forEach(((e,t)=>this._$EO(t,this[t],e))),this._$EC=void 0),this._$Ek()}updated(e){}firstUpdated(e){}} /** * @license * Copyright 2017 Google LLC * SPDX-License-Identifier: BSD-3-Clause */ -var f;b[g]=!0,b.elementProperties=new Map,b.elementStyles=[],b.shadowRootOptions={mode:"open"},null==h||h({ReactiveElement:b}),(null!==(o=l.reactiveElementVersions)&&void 0!==o?o:l.reactiveElementVersions=[]).push("1.6.3");const v=window,y=v.trustedTypes,w=y?y.createPolicy("lit-html",{createHTML:e=>e}):void 0,E="$lit$",S=`lit$${(Math.random()+"").slice(9)}$`,C="?"+S,x=`<${C}>`,P=document,N=()=>P.createComment(""),k=e=>null===e||"object"!=typeof e&&"function"!=typeof e,L=Array.isArray,A="[ \t\n\f\r]",M=/<(?:(!--|\/[^a-zA-Z])|(\/?[a-zA-Z][^>\s]*)|(\/?$))/g,T=/-->/g,B=/>/g,I=RegExp(`>|${A}(?:([^\\s"'>=/]+)(${A}*=${A}*(?:[^ \t\n\f\r"'\`<>=]|("|')|))|$)`,"g"),$=/'/g,G=/"/g,H=/^(?:script|style|textarea|title)$/i,O=(e=>(t,...i)=>({_$litType$:e,strings:t,values:i}))(1),D=Symbol.for("lit-noChange"),V=Symbol.for("lit-nothing"),R=new WeakMap,z=P.createTreeWalker(P,129,null,!1);function _(e,t){if(!Array.isArray(e)||!e.hasOwnProperty("raw"))throw Error("invalid template strings array");return void 0!==w?w.createHTML(t):t}const F=(e,t)=>{const i=e.length-1,n=[];let r,s=2===t?"":"",a=M;for(let t=0;t"===l[0]?(a=null!=r?r:M,u=-1):void 0===l[1]?u=-2:(u=a.lastIndex-l[2].length,o=l[1],a=void 0===l[3]?I:'"'===l[3]?G:$):a===G||a===$?a=I:a===T||a===B?a=M:(a=I,r=void 0);const h=a===I&&e[t+1].startsWith("/>")?" ":"";s+=a===M?i+x:u>=0?(n.push(o),i.slice(0,u)+E+i.slice(u)+S+h):i+S+(-2===u?(n.push(void 0),t):h)}return[_(e,s+(e[i]||"")+(2===t?"":"")),n]};class j{constructor({strings:e,_$litType$:t},i){let n;this.parts=[];let r=0,s=0;const a=e.length-1,o=this.parts,[l,u]=F(e,t);if(this.el=j.createElement(l,i),z.currentNode=this.el.content,2===t){const e=this.el.content,t=e.firstChild;t.remove(),e.append(...t.childNodes)}for(;null!==(n=z.nextNode())&&o.length0){n.textContent=y?y.emptyScript:"";for(let i=0;iL(e)||"function"==typeof(null==e?void 0:e[Symbol.iterator]))(e)?this.T(e):this._(e)}k(e){return this._$AA.parentNode.insertBefore(e,this._$AB)}$(e){this._$AH!==e&&(this._$AR(),this._$AH=this.k(e))}_(e){this._$AH!==V&&k(this._$AH)?this._$AA.nextSibling.data=e:this.$(P.createTextNode(e)),this._$AH=e}g(e){var t;const{values:i,_$litType$:n}=e,r="number"==typeof n?this._$AC(e):(void 0===n.el&&(n.el=j.createElement(_(n.h,n.h[0]),this.options)),n);if((null===(t=this._$AH)||void 0===t?void 0:t._$AD)===r)this._$AH.v(i);else{const e=new W(r,this),t=e.u(this.options);e.v(i),this.$(t),this._$AH=e}}_$AC(e){let t=R.get(e.strings);return void 0===t&&R.set(e.strings,t=new j(e)),t}T(e){L(this._$AH)||(this._$AH=[],this._$AR());const t=this._$AH;let i,n=0;for(const r of e)n===t.length?t.push(i=new K(this.k(N()),this.k(N()),this,this.options)):i=t[n],i._$AI(r),n++;n2||""!==i[0]||""!==i[1]?(this._$AH=Array(i.length-1).fill(new String),this.strings=i):this._$AH=V}get tagName(){return this.element.tagName}get _$AU(){return this._$AM._$AU}_$AI(e,t=this,i,n){const r=this.strings;let s=!1;if(void 0===r)e=U(this,e,t,0),s=!k(e)||e!==this._$AH&&e!==D,s&&(this._$AH=e);else{const n=e;let a,o;for(e=r[0],a=0;ae}):void 0,S="$lit$",E=`lit$${(Math.random()+"").slice(9)}$`,C="?"+E,P=`<${C}>`,x=document,N=()=>x.createComment(""),k=e=>null===e||"object"!=typeof e&&"function"!=typeof e,A=Array.isArray,L="[ \t\n\f\r]",M=/<(?:(!--|\/[^a-zA-Z])|(\/?[a-zA-Z][^>\s]*)|(\/?$))/g,T=/-->/g,I=/>/g,B=RegExp(`>|${L}(?:([^\\s"'>=/]+)(${L}*=${L}*(?:[^ \t\n\f\r"'\`<>=]|("|')|))|$)`,"g"),$=/'/g,H=/"/g,G=/^(?:script|style|textarea|title)$/i,O=(e=>(t,...i)=>({_$litType$:e,strings:t,values:i}))(1),D=Symbol.for("lit-noChange"),V=Symbol.for("lit-nothing"),R=new WeakMap,z=x.createTreeWalker(x,129,null,!1);function _(e,t){if(!Array.isArray(e)||!e.hasOwnProperty("raw"))throw Error("invalid template strings array");return void 0!==w?w.createHTML(t):t}const F=(e,t)=>{const i=e.length-1,s=[];let r,n=2===t?"":"",a=M;for(let t=0;t"===l[0]?(a=null!=r?r:M,c=-1):void 0===l[1]?c=-2:(c=a.lastIndex-l[2].length,o=l[1],a=void 0===l[3]?B:'"'===l[3]?H:$):a===H||a===$?a=B:a===T||a===I?a=M:(a=B,r=void 0);const h=a===B&&e[t+1].startsWith("/>")?" ":"";n+=a===M?i+P:c>=0?(s.push(o),i.slice(0,c)+S+i.slice(c)+E+h):i+E+(-2===c?(s.push(void 0),t):h)}return[_(e,n+(e[i]||"")+(2===t?"":"")),s]};class j{constructor({strings:e,_$litType$:t},i){let s;this.parts=[];let r=0,n=0;const a=e.length-1,o=this.parts,[l,c]=F(e,t);if(this.el=j.createElement(l,i),z.currentNode=this.el.content,2===t){const e=this.el.content,t=e.firstChild;t.remove(),e.append(...t.childNodes)}for(;null!==(s=z.nextNode())&&o.length0){s.textContent=f?f.emptyScript:"";for(let i=0;iA(e)||"function"==typeof(null==e?void 0:e[Symbol.iterator]))(e)?this.T(e):this._(e)}k(e){return this._$AA.parentNode.insertBefore(e,this._$AB)}$(e){this._$AH!==e&&(this._$AR(),this._$AH=this.k(e))}_(e){this._$AH!==V&&k(this._$AH)?this._$AA.nextSibling.data=e:this.$(x.createTextNode(e)),this._$AH=e}g(e){var t;const{values:i,_$litType$:s}=e,r="number"==typeof s?this._$AC(e):(void 0===s.el&&(s.el=j.createElement(_(s.h,s.h[0]),this.options)),s);if((null===(t=this._$AH)||void 0===t?void 0:t._$AD)===r)this._$AH.v(i);else{const e=new W(r,this),t=e.u(this.options);e.v(i),this.$(t),this._$AH=e}}_$AC(e){let t=R.get(e.strings);return void 0===t&&R.set(e.strings,t=new j(e)),t}T(e){A(this._$AH)||(this._$AH=[],this._$AR());const t=this._$AH;let i,s=0;for(const r of e)s===t.length?t.push(i=new K(this.k(N()),this.k(N()),this,this.options)):i=t[s],i._$AI(r),s++;s2||""!==i[0]||""!==i[1]?(this._$AH=Array(i.length-1).fill(new String),this.strings=i):this._$AH=V}get tagName(){return this.element.tagName}get _$AU(){return this._$AM._$AU}_$AI(e,t=this,i,s){const r=this.strings;let n=!1;if(void 0===r)e=U(this,e,t,0),n=!k(e)||e!==this._$AH&&e!==D,n&&(this._$AH=e);else{const s=e;let a,o;for(e=r[0],a=0;a{var n,r;const s=null!==(n=null==i?void 0:i.renderBefore)&&void 0!==n?n:t;let a=s._$litPart$;if(void 0===a){const e=null!==(r=null==i?void 0:i.renderBefore)&&void 0!==r?r:null;s._$litPart$=a=new K(t.insertBefore(N(),e),e,void 0,null!=i?i:{})}return a._$AI(e),a})(t,this.renderRoot,this.renderOptions)}connectedCallback(){var e;super.connectedCallback(),null===(e=this._$Do)||void 0===e||e.setConnected(!0)}disconnectedCallback(){var e;super.disconnectedCallback(),null===(e=this._$Do)||void 0===e||e.setConnected(!1)}render(){return D}}ne.finalized=!0,ne._$litElement$=!0,null===(te=globalThis.litElementHydrateSupport)||void 0===te||te.call(globalThis,{LitElement:ne});const re=globalThis.litElementPolyfillSupport;null==re||re({LitElement:ne}),(null!==(ie=globalThis.litElementVersions)&&void 0!==ie?ie:globalThis.litElementVersions=[]).push("3.3.3");class se{static nodeColors={black:s``,blue:s``,darkBlue:s``,darkTurquoise:s``,gray:s``,green:s``,lime:s``,red:s``,turquoise:s``,violet:s``,yellow:s``};static alphaPattern="repeating-conic-gradient(#7c8184 0% 25%, #c2c3c4 0% 50%) 50% / 10px 10px";static colorDragEventName="ueb-color-drag";static colorPickEventName="ueb-color-pick";static colorWindowEventName="ueb-color-window";static colorWindowName="Color Picker";static defaultCommentHeight=96;static defaultCommentWidth=400;static distanceThreshold=5;static dragEventName="ueb-drag";static dragGeneralEventName="ueb-drag-general";static edgeScrollThreshold=50;static editTextEventName={begin:"ueb-edit-text-begin",end:"ueb-edit-text-end"};static expandGridSize=400;static focusEventName={begin:"blueprint-focus",end:"blueprint-unfocus"};static fontSize=s``;static gridAxisLineColor=s``;static gridExpandThreshold=.25;static gridLineColor=s``;static gridLineWidth=1;static gridSet=8;static gridSetLineColor=s``;static gridShrinkThreshold=4;static gridSize=16;static hexColorRegex=/^\s*#(?[0-9a-fA-F]{2})(?[0-9a-fA-F]{2})(?[0-9a-fA-F]{2})([0-9a-fA-F]{2})?|#(?[0-9a-fA-F])(?[0-9a-fA-F])(?[0-9a-fA-F])\s*$/;static indentation=" ";static keysSeparator=/[\.\(\)]/;static knotOffset=[-se.gridSize,-.5*se.gridSize];static lineTracePattern=/LineTrace(Single|Multi)(\w*)/;static linkCurveHeight=15;static linkCurveWidth=80;static linkMinWidth=100;static nameRegexSpaceReplacement=new RegExp("^K2(?:[Nn]ode)?_|(?<=[a-z])(?=[A-Z0-9])|(?<=[A-Z])(?{let n=100-e;return`M ${e} 0 C ${t.toFixed(3)} 0, ${i.toFixed(3)} 0, 50 50 S ${(n-t+e).toFixed(3)} 100, ${n.toFixed(3)} 100`};static maxZoom=7;static minZoom=-12;static mouseClickButton=0;static mouseRightClickButton=2;static mouseWheelZoomThreshold=80;static nodeDragEventName="ueb-node-drag";static nodeDragGeneralEventName="ueb-node-drag-general";static nodeTitle=(e,t)=>`${e}_${t}`;static nodeRadius=8;static nodeReflowEventName="ueb-node-reflow";static paths={actorBoundEvent:"/Script/BlueprintGraph.K2Node_ActorBoundEvent",addDelegate:"/Script/BlueprintGraph.K2Node_AddDelegate",ambientSound:"/Script/Engine.AmbientSound",asyncAction:"/Script/BlueprintGraph.K2Node_AsyncAction",blueprint:"/Script/Engine.Blueprint",blueprintGameplayTagLibrary:"/Script/GameplayTags.BlueprintGameplayTagLibrary",blueprintMapLibrary:"/Script/Engine.BlueprintMapLibrary",blueprintSetLibrary:"/Script/Engine.BlueprintSetLibrary",callArrayFunction:"/Script/BlueprintGraph.K2Node_CallArrayFunction",callDelegate:"/Script/BlueprintGraph.K2Node_CallDelegate",callFunction:"/Script/BlueprintGraph.K2Node_CallFunction",comment:"/Script/UnrealEd.EdGraphNode_Comment",commutativeAssociativeBinaryOperator:"/Script/BlueprintGraph.K2Node_CommutativeAssociativeBinaryOperator",componentBoundEvent:"/Script/BlueprintGraph.K2Node_ComponentBoundEvent",createDelegate:"/Script/BlueprintGraph.K2Node_CreateDelegate",customEvent:"/Script/BlueprintGraph.K2Node_CustomEvent",doN:"/Engine/EditorBlueprintResources/StandardMacros.StandardMacros:Do N",doOnce:"/Engine/EditorBlueprintResources/StandardMacros.StandardMacros:DoOnce",dynamicCast:"/Script/BlueprintGraph.K2Node_DynamicCast",edGraph:"/Script/Engine.EdGraph",edGraphPinDeprecated:"/Script/Engine.EdGraphPin_Deprecated",eDrawDebugTrace:"/Script/Engine.EDrawDebugTrace",eMaterialSamplerType:"/Script/Engine.EMaterialSamplerType",enum:"/Script/CoreUObject.Enum",enumLiteral:"/Script/BlueprintGraph.K2Node_EnumLiteral",eSamplerSourceMode:"/Script/Engine.ESamplerSourceMode",eSearchCase:"/Script/CoreUObject.ESearchCase",eSearchDir:"/Script/CoreUObject.ESearchDir",eSpawnActorCollisionHandlingMethod:"/Script/Engine.ESpawnActorCollisionHandlingMethod",eTextureMipValueMode:"/Script/Engine.ETextureMipValueMode",eTraceTypeQuery:"/Script/Engine.ETraceTypeQuery",event:"/Script/BlueprintGraph.K2Node_Event",executionSequence:"/Script/BlueprintGraph.K2Node_ExecutionSequence",flipflop:"/Engine/EditorBlueprintResources/StandardMacros.StandardMacros:FlipFlop",forEachElementInEnum:"/Script/BlueprintGraph.K2Node_ForEachElementInEnum",forEachLoop:"/Engine/EditorBlueprintResources/StandardMacros.StandardMacros:ForEachLoop",forEachLoopWithBreak:"/Engine/EditorBlueprintResources/StandardMacros.StandardMacros:ForEachLoopWithBreak",forLoop:"/Engine/EditorBlueprintResources/StandardMacros.StandardMacros:ForLoop",forLoopWithBreak:"/Engine/EditorBlueprintResources/StandardMacros.StandardMacros:ForLoopWithBreak",functionEntry:"/Script/BlueprintGraph.K2Node_FunctionEntry",functionResult:"/Script/BlueprintGraph.K2Node_FunctionResult",getInputAxisKeyValue:"/Script/BlueprintGraph.K2Node_GetInputAxisKeyValue",ifThenElse:"/Script/BlueprintGraph.K2Node_IfThenElse",inputAxisKeyEvent:"/Script/BlueprintGraph.K2Node_InputAxisKeyEvent",inputDebugKey:"/Script/InputBlueprintNodes.K2Node_InputDebugKey",inputKey:"/Script/BlueprintGraph.K2Node_InputKey",inputVectorAxisEvent:"/Script/BlueprintGraph.K2Node_InputVectorAxisEvent",isValid:"/Engine/EditorBlueprintResources/StandardMacros.StandardMacros:IsValid",kismetArrayLibrary:"/Script/Engine.KismetArrayLibrary",kismetMathLibrary:"/Script/Engine.KismetMathLibrary",knot:"/Script/BlueprintGraph.K2Node_Knot",linearColor:"/Script/CoreUObject.LinearColor",literal:"/Script/BlueprintGraph.K2Node_Literal",macro:"/Script/BlueprintGraph.K2Node_MacroInstance",makeArray:"/Script/BlueprintGraph.K2Node_MakeArray",makeMap:"/Script/BlueprintGraph.K2Node_MakeMap",makeSet:"/Script/BlueprintGraph.K2Node_MakeSet",makeStruct:"/Script/BlueprintGraph.K2Node_MakeStruct",materialExpressionConstant:"/Script/Engine.MaterialExpressionConstant",materialExpressionConstant2Vector:"/Script/Engine.MaterialExpressionConstant2Vector",materialExpressionConstant3Vector:"/Script/Engine.MaterialExpressionConstant3Vector",materialExpressionConstant4Vector:"/Script/Engine.MaterialExpressionConstant4Vector",materialExpressionLogarithm:"/Script/InterchangeImport.MaterialExpressionLogarithm",materialExpressionLogarithm10:"/Script/Engine.MaterialExpressionLogarithm10",materialExpressionLogarithm2:"/Script/Engine.MaterialExpressionLogarithm2",materialExpressionMaterialFunctionCall:"/Script/Engine.MaterialExpressionMaterialFunctionCall",materialExpressionSquareRoot:"/Script/Engine.MaterialExpressionSquareRoot",materialExpressionTextureCoordinate:"/Script/Engine.MaterialExpressionTextureCoordinate",materialExpressionTextureSample:"/Script/Engine.MaterialExpressionTextureSample",materialGraphNode:"/Script/UnrealEd.MaterialGraphNode",materialGraphNodeComment:"/Script/UnrealEd.MaterialGraphNode_Comment",multiGate:"/Script/BlueprintGraph.K2Node_MultiGate",pawn:"/Script/Engine.Pawn",pcgEditorGraphNode:"/Script/PCGEditor.PCGEditorGraphNode",pcgEditorGraphNodeInput:"/Script/PCGEditor.PCGEditorGraphNodeInput",pcgEditorGraphNodeOutput:"/Script/PCGEditor.PCGEditorGraphNodeOutput",pcgHiGenGridSizeSettings:"/Script/PCG.PCGHiGenGridSizeSettings",pcgSubgraphSettings:"/Script/PCG.PCGSubgraphSettings",promotableOperator:"/Script/BlueprintGraph.K2Node_PromotableOperator",reverseForEachLoop:"/Engine/EditorBlueprintResources/StandardMacros.StandardMacros:ReverseForEachLoop",rotator:"/Script/CoreUObject.Rotator",select:"/Script/BlueprintGraph.K2Node_Select",slateBlueprintLibrary:"/Script/UMG.SlateBlueprintLibrary",spawnActorFromClass:"/Script/BlueprintGraph.K2Node_SpawnActorFromClass",switchEnum:"/Script/BlueprintGraph.K2Node_SwitchEnum",switchGameplayTag:"/Script/GameplayTagsEditor.GameplayTagsK2Node_SwitchGameplayTag",switchInteger:"/Script/BlueprintGraph.K2Node_SwitchInteger",switchName:"/Script/BlueprintGraph.K2Node_SwitchName",switchString:"/Script/BlueprintGraph.K2Node_SwitchString",timeline:"/Script/BlueprintGraph.K2Node_Timeline",timeManagementBlueprintLibrary:"/Script/TimeManagement.TimeManagementBlueprintLibrary",transform:"/Script/CoreUObject.Transform",userDefinedEnum:"/Script/Engine.UserDefinedEnum",variableGet:"/Script/BlueprintGraph.K2Node_VariableGet",variableSet:"/Script/BlueprintGraph.K2Node_VariableSet",vector:"/Script/CoreUObject.Vector",vector2D:"/Script/CoreUObject.Vector2D",whileLoop:"/Engine/EditorBlueprintResources/StandardMacros.StandardMacros:WhileLoop"};static pinColor={[this.paths.rotator]:s``,[this.paths.transform]:s``,[this.paths.vector]:s``,Any:s``,"Any[]":s``,blue:s``,bool:s``,byte:s``,class:s``,default:s``,delegate:s``,enum:s``,exec:s``,green:s``,int:s``,int64:s``,interface:s``,name:s``,object:s``,Param:s``,"Param[]":s``,Point:s``,"Point[]":s``,real:s``,red:s``,string:s``,struct:s``,Surface:s``,"Surface[]":s``,text:s``,Volume:s``,"Volume[]":s``,wildcard:s``};static pinColorMaterial=s``;static pinInputWrapWidth=143;static removeEventName="ueb-element-delete";static scale={[-12]:.133333,[-11]:.166666,[-10]:.2,[-9]:.233333,[-8]:.266666,[-7]:.3,[-6]:.333333,[-5]:.375,[-4]:.5,[-3]:.675,[-2]:.75,[-1]:.875,0:1,1:1.25,2:1.375,3:1.5,4:1.675,5:1.75,6:1.875,7:2};static smoothScrollTime=1e3;static stringEscapedCharacters=/['"\\]/g;static subObjectAttributeNamePrefix="#SubObject";static subObjectAttributeNameFromEntity=(e,t=!1)=>this.subObjectAttributeNamePrefix+(!t&&e.Class?`_${e.Class}`:"")+`_${e.Name}`;static subObjectAttributeNameFromReference=(e,t=!1)=>this.subObjectAttributeNamePrefix+(t?"":"_"+e.type)+"_"+e.path;static subObjectAttributeNameFromName=e=>this.subObjectAttributeNamePrefix+"_"+e;static switchTargetPattern=/\/Script\/[\w\.\/\:]+K2Node_Switch([A-Z]\w+)+/;static trackingMouseEventName={begin:"ueb-tracking-mouse-begin",end:"ueb-tracking-mouse-end"};static unescapedBackslash=/(?<=(?:[^\\]|^)(?:\\\\)*)\\(?!\\)/;static windowApplyEventName="ueb-window-apply";static windowApplyButtonText="OK";static windowCancelEventName="ueb-window-cancel";static windowCancelButtonText="Cancel";static windowCloseEventName="ueb-window-close";static CommonEnums={[this.paths.eMaterialSamplerType]:["Color","Grayscale","Alpha","Normal","Masks","Distance Field Font","Linear Color","Linear Grayscale","Data","External","Virtual Color","Virtual Grayscale","Virtual Alpha","Virtual Normal","Virtual Mask","Virtual Linear Color","Virtual Linear Grayscal"],[this.paths.eSamplerSourceMode]:["From texture asset","Shared: Wrap","Shared: Clamp","Hidden"],[this.paths.eSpawnActorCollisionHandlingMethod]:[["Undefined","Default"],["AlwaysSpawn","Always Spawn, Ignore Collisions"],["AdjustIfPossibleButAlwaysSpawn","Try To Adjust Location, But Always Spawn"],["AdjustIfPossibleButDontSpawnIfColliding","Try To Adjust Location, Don't Spawn If Still Colliding"],["DontSpawnIfColliding","Do Not Spawn"]],[this.paths.eSearchCase]:["CaseSensitive","IgnoreCase"],[this.paths.eSearchDir]:["FromStart","FromEnd"],[this.paths.eDrawDebugTrace]:["None","ForOneFrame","ForDuration","Persistent"],[this.paths.eTextureMipValueMode]:["None (use computed mip level)","MipLevel (absolute, 0 is full resolution)","MipBias (relative to the computed mip level)","Derivative (explicit derivative to compute mip level)"],[this.paths.eTraceTypeQuery]:[["TraceTypeQuery1","Visibility"],["TraceTypeQuery2","Camera"]]};static ModifierKeys=["Ctrl","Shift","Alt","Meta"];static Keys={Backspace:"Backspace",Tab:"Tab",LeftControl:"ControlLeft",RightControl:"ControlRight",LeftShift:"ShiftLeft",RightShift:"ShiftRight",LeftAlt:"AltLeft",RightAlt:"AltRight",Enter:"Enter",Pause:"Pause",CapsLock:"CapsLock",Escape:"Escape",Space:"Space",PageUp:"PageUp",PageDown:"PageDown",End:"End",Home:"Home",ArrowLeft:"ArrowLeft",ArrowUp:"ArrowUp",ArrowRight:"ArrowRight",ArrowDown:"ArrowDown",PrintScreen:"PrintScreen",Insert:"Insert",Delete:"Delete",Zero:"Digit0",One:"Digit1",Two:"Digit2",Three:"Digit3",Four:"Digit4",Five:"Digit5",Six:"Digit6",Seven:"Digit7",Eight:"Digit8",Nine:"Digit9",A:"KeyA",B:"KeyB",C:"KeyC",D:"KeyD",E:"KeyE",F:"KeyF",G:"KeyG",H:"KeyH",I:"KeyI",K:"KeyK",L:"KeyL",M:"KeyM",N:"KeyN",O:"KeyO",P:"KeyP",Q:"KeyQ",R:"KeyR",S:"KeyS",T:"KeyT",U:"KeyU",V:"KeyV",W:"KeyW",X:"KeyX",Y:"KeyY",Z:"KeyZ",NumPadZero:"Numpad0",NumPadOne:"Numpad1",NumPadTwo:"Numpad2",NumPadThree:"Numpad3",NumPadFour:"Numpad4",NumPadFive:"Numpad5",NumPadSix:"Numpad6",NumPadSeven:"Numpad7",NumPadEight:"Numpad8",NumPadNine:"Numpad9",Multiply:"NumpadMultiply",Add:"NumpadAdd",Subtract:"NumpadSubtract",Decimal:"NumpadDecimal",Divide:"NumpadDivide",F1:"F1",F2:"F2",F3:"F3",F4:"F4",F5:"F5",F6:"F6",F7:"F7",F8:"F8",F9:"F9",F10:"F10",F11:"F11",F12:"F12",NumLock:"NumLock",ScrollLock:"ScrollLock"}}class ae{#e;get target(){return this.#e}#t;get blueprint(){return this.#t}consumeEvent=!0;options;listenHandler=()=>this.listenEvents();unlistenHandler=()=>this.unlistenEvents();constructor(e,t,i={}){i.consumeEvent??=!1,i.listenOnFocus??=!1,i.unlistenOnTextEdit??=!1,this.#e=e,this.#t=t,this.consumeEvent=i.consumeEvent,this.options=i}setup(){this.options.listenOnFocus&&(this.blueprint.addEventListener(se.focusEventName.begin,this.listenHandler),this.blueprint.addEventListener(se.focusEventName.end,this.unlistenHandler)),this.options.unlistenOnTextEdit&&(this.blueprint.addEventListener(se.editTextEventName.begin,this.unlistenHandler),this.blueprint.addEventListener(se.editTextEventName.end,this.listenHandler)),this.blueprint.focused&&this.listenEvents()}cleanup(){this.unlistenEvents(),this.blueprint.removeEventListener(se.focusEventName.begin,this.listenHandler),this.blueprint.removeEventListener(se.focusEventName.end,this.unlistenHandler),this.blueprint.removeEventListener(se.editTextEventName.begin,this.unlistenHandler),this.blueprint.removeEventListener(se.editTextEventName.end,this.listenHandler)}listenEvents(){}unlistenEvents(){}}class oe{#i;constructor(e){this.#i=e}compute(e){return this.#i(e)}}class le{static attributes={type:{ignored:!0},getter:{ignored:!0}};constructor(e,t=(()=>null)){this.type=e,this.getter=t}get(){return this.getter()}getTargetType(){const e=this.type;return e instanceof le?e.getTargetType():e}}"undefined"!=typeof globalThis?globalThis:"undefined"!=typeof window?window:"undefined"!=typeof global?global:"undefined"!=typeof self&&self;function ue(e){return e&&e.__esModule&&Object.prototype.hasOwnProperty.call(e,"default")?e.default:e}var ce={exports:{}};"undefined"!=typeof self&&self,ce.exports=function(e){var t={};function i(n){if(t[n])return t[n].exports;var r=t[n]={i:n,l:!1,exports:{}};return e[n].call(r.exports,r,r.exports,i),r.l=!0,r.exports}return i.m=e,i.c=t,i.d=function(e,t,n){i.o(e,t)||Object.defineProperty(e,t,{configurable:!1,enumerable:!0,get:n})},i.r=function(e){Object.defineProperty(e,"__esModule",{value:!0})},i.n=function(e){var t=e&&e.__esModule?function(){return e.default}:function(){return e};return i.d(t,"a",t),t},i.o=function(e,t){return Object.prototype.hasOwnProperty.call(e,t)},i.p="",i(i.s=0)}([function(e,t,i){function n(e){if(!(this instanceof n))return new n(e);this._=e}var r=n.prototype;function s(e,t){for(var i=0;i>7),buf:function(e){var t=a((function(e,t,i,n){return e.concat(i===n.length-1?Buffer.from([t,0]).readUInt16BE(0):n.readUInt16BE(i))}),[],e);return Buffer.from(o((function(e){return(e<<1&65535)>>8}),t))}(i.buf)}})),i}function u(){return"undefined"!=typeof Buffer}function c(){if(!u())throw new Error("Buffer global does not exist; please use webpack if you need to parse Buffers in the browser.")}function h(e){c();var t=a((function(e,t){return e+t}),0,e);if(t%8!=0)throw new Error("The bits ["+e.join(", ")+"] add up to "+t+" which is not an even number of bytes; the total should be divisible by 8");var i,r=t/8,s=(i=function(e){return e>48},a((function(e,t){return e||(i(t)?t:e)}),null,e));if(s)throw new Error(s+" bit range requested exceeds 48 bit (6 byte) Number max.");return new n((function(t,i){var n=r+i;return n>t.length?S(i,r.toString()+" bytes"):E(n,a((function(e,t){var i=l(t,e.buf);return{coll:e.coll.concat(i.v),buf:i.buf}}),{coll:[],buf:t.slice(i,n)},e).coll)}))}function p(e,t){return new n((function(i,n){return c(),n+t>i.length?S(n,t+" bytes for "+e):E(n+t,i.slice(n,n+t))}))}function d(e,t){if("number"!=typeof(i=t)||Math.floor(i)!==i||t<0||t>6)throw new Error(e+" requires integer length in range [0, 6].");var i}function m(e){return d("uintBE",e),p("uintBE("+e+")",e).map((function(t){return t.readUIntBE(0,e)}))}function g(e){return d("uintLE",e),p("uintLE("+e+")",e).map((function(t){return t.readUIntLE(0,e)}))}function b(e){return d("intBE",e),p("intBE("+e+")",e).map((function(t){return t.readIntBE(0,e)}))}function f(e){return d("intLE",e),p("intLE("+e+")",e).map((function(t){return t.readIntLE(0,e)}))}function v(e){return e instanceof n}function y(e){return"[object Array]"==={}.toString.call(e)}function w(e){return u()&&Buffer.isBuffer(e)}function E(e,t){return{status:!0,index:e,value:t,furthest:-1,expected:[]}}function S(e,t){return y(t)||(t=[t]),{status:!1,index:-1,value:null,furthest:e,expected:t}}function C(e,t){if(!t)return e;if(e.furthest>t.furthest)return e;var i=e.furthest===t.furthest?function(e,t){if(function(){if(void 0!==n._supportsSet)return n._supportsSet;var e="undefined"!=typeof Set;return n._supportsSet=e,e}()&&Array.from){for(var i=new Set(e),r=0;r=0;){if(a in i){n=i[a].line,0===s&&(s=i[a].lineStart);break}("\n"===e.charAt(a)||"\r"===e.charAt(a)&&"\n"!==e.charAt(a+1))&&(r++,0===s&&(s=a+1)),a--}var o=n+r,l=t-s;return i[t]={line:o,lineStart:s},{offset:t,line:o+1,column:l+1}}function N(e){if(!v(e))throw new Error("not a parser: "+e)}function k(e,t){return"string"==typeof e?e.charAt(t):e[t]}function L(e){if("number"!=typeof e)throw new Error("not a number: "+e)}function A(e){if("function"!=typeof e)throw new Error("not a function: "+e)}function M(e){if("string"!=typeof e)throw new Error("not a string: "+e)}var T=2,B=3,I=8,$=5*I,G=4*I,H=" ";function O(e,t){return new Array(t+1).join(e)}function D(e,t,i){var n=t-e.length;return n<=0?e:O(i,n)+e}function V(e,t,i,n){return{from:e-t>0?e-t:0,to:e+i>n?n:e+i}}function R(e,t){var i,n,r,s,l,u=t.index,c=u.offset,h=1;if(c===e.length)return"Got the end of the input";if(w(e)){var p=c-c%I,d=c-p,m=V(p,$,G+I,e.length),g=o((function(e){return o((function(e){return D(e.toString(16),2,"0")}),e)}),function(e,t){var i=e.length,n=[],r=0;if(i<=t)return[e.slice()];for(var s=0;s=4&&(i+=1),h=2,r=o((function(e){return e.length<=4?e.join(" "):e.slice(0,4).join(" ")+" "+e.slice(4).join(" ")}),g),(l=(8*(s.to>0?s.to-1:s.to)).toString(16).length)<2&&(l=2)}else{var b=e.split(/\r\n|[\n\r\u2028\u2029]/);i=u.column-1,n=u.line-1,s=V(n,T,B,b.length),r=b.slice(s.from,s.to),l=s.to.toString().length}var f=n-s.from;return w(e)&&(l=(8*(s.to>0?s.to-1:s.to)).toString(16).length)<2&&(l=2),a((function(t,n,r){var a,o=r===f,u=o?"> ":H;return a=w(e)?D((8*(s.from+r)).toString(16),l,"0"):D((s.from+r+1).toString(),l," "),[].concat(t,[u+a+" | "+n],o?[H+O(" ",l)+" | "+D("",i," ")+O("^",h)]:[])}),[],r).join("\n")}function z(e,t){return["\n","-- PARSING FAILED "+O("-",50),"\n\n",R(e,t),"\n\n",(i=t.expected,1===i.length?"Expected:\n\n"+i[0]:"Expected one of the following: \n\n"+i.join(", ")),"\n"].join("");var i}function _(e){return void 0!==e.flags?e.flags:[e.global?"g":"",e.ignoreCase?"i":"",e.multiline?"m":"",e.unicode?"u":"",e.sticky?"y":""].join("")}function F(){for(var e=[].slice.call(arguments),t=e.length,i=0;i=2?L(t):t=0;var i=function(e){return RegExp("^(?:"+e.source+")",_(e))}(e),r=""+e;return n((function(e,n){var s=i.exec(e.slice(n));if(s){if(0<=t&&t<=s.length){var a=s[0],o=s[t];return E(n+a.length,o)}return S(n,"valid match group (0 to "+s.length+") in "+r)}return S(n,r)}))}function X(e){return n((function(t,i){return E(i,e)}))}function Y(e){return n((function(t,i){return S(i,e)}))}function Q(e){if(v(e))return n((function(t,i){var n=e._(t,i);return n.index=i,n.value="",n}));if("string"==typeof e)return Q(q(e));if(e instanceof RegExp)return Q(Z(e));throw new Error("not a string, regexp, or parser: "+e)}function J(e){return N(e),n((function(t,i){var n=e._(t,i),r=t.slice(i,n.index);return n.status?S(i,'not "'+r+'"'):E(i,null)}))}function ee(e){return A(e),n((function(t,i){var n=k(t,i);return i=e.length?S(t,"any character/byte"):E(t+1,k(e,t))})),se=n((function(e,t){return E(e.length,e.slice(t))})),ae=n((function(e,t){return t=0})).desc(t)},n.optWhitespace=he,n.Parser=n,n.range=function(e,t){return ee((function(i){return e<=i&&i<=t})).desc(e+"-"+t)},n.regex=Z,n.regexp=Z,n.sepBy=W,n.sepBy1=K,n.seq=F,n.seqMap=j,n.seqObj=function(){for(var e,t={},i=0,r=(e=arguments,Array.prototype.slice.call(e)),s=r.length,a=0;a255)throw new Error("Value specified to byte constructor ("+e+"=0x"+e.toString(16)+") is larger in value than a single byte.");var t=(e>15?"0x":"0x0")+e.toString(16);return n((function(i,n){var r=k(i,n);return r===e?E(n+1,r):S(n,t)}))},buffer:function(e){return p("buffer",e).map((function(e){return Buffer.from(e)}))},encodedString:function(e,t){return p("string",t).map((function(t){return t.toString(e)}))},uintBE:m,uint8BE:m(1),uint16BE:m(2),uint32BE:m(4),uintLE:g,uint8LE:g(1),uint16LE:g(2),uint32LE:g(4),intBE:b,int8BE:b(1),int16BE:b(2),int32BE:b(4),intLE:f,int8LE:f(1),int16LE:f(2),int32LE:f(4),floatBE:p("floatBE",4).map((function(e){return e.readFloatBE(0)})),floatLE:p("floatLE",4).map((function(e){return e.readFloatLE(0)})),doubleBE:p("doubleBE",8).map((function(e){return e.readDoubleBE(0)})),doubleLE:p("doubleLE",8).map((function(e){return e.readDoubleLE(0)}))},e.exports=n}]);var he=ue(ce.exports);const pe=he;class de{static grammar=this.createGrammar();static createGrammar(){return pe.fail("Unimplemented createGrammar() method in "+this.name)}}class me{static#n=new Map;static registerSerializer(e,t){me.#n.set(e,t)}static getSerializer(e){return me.#n.get(e)}}class ge{#r;get values(){return this.#r}constructor(...e){this.#r=e}}class be{static booleanConverter={fromAttribute:(e,t)=>{},toAttribute:(e,t)=>!0===e?"true":!1===e?"false":""};static sigmoid(e,t=1.7){return 1/(1+e/(1-e)**-t)}static sigmoidPositive(e,t=3.7,i=1.1){return 1-Math.exp(-((e/i)**t))}static clamp(e,t=-1/0,i=1/0){return Math.min(Math.max(e,t),i)}static getScale(e){const t=e.blueprint?.getScale()??getComputedStyle(e).getPropertyValue("--ueb-scale");return""!=t?parseFloat(t):1}static minDecimals(e,t=1,i=1e-8){const n=e*10**t;return Math.abs(n%1)>i?e.toString():e.toFixed(t)}static numberFromText(e=""){switch(e=e.toLowerCase()){case"zero":return 0;case"one":return 1;case"two":return 2;case"three":return 3;case"four":return 4;case"five":return 5;case"six":return 6;case"seven":return 7;case"eight":return 8;case"nine":return 9}}static roundDecimals(e,t=1){const i=10**t;return Math.round(e*i)/i}static printNumber(e){return e==Number.POSITIVE_INFINITY?"inf":e==Number.NEGATIVE_INFINITY?"-inf":be.minDecimals(e)}static printExponential(e){if(e==Number.POSITIVE_INFINITY)return"inf";if(e==Number.NEGATIVE_INFINITY)return"-inf";const t=Math.round(e);if(t>=1e3){const i=Math.floor(Math.log10(t));return`${Math.round(e/10**(i-2))/100}e+${i<10?"0":""}${i}`}return 0==Math.floor(e)?e.toString():this.roundDecimals(e,Math.max(0,3-Math.floor(e).toString().length)).toString()}static approximatelyEqual(e,t,i=1e-8){return!(Math.abs(e-t)>i)}static convertLocation(e,t,i=!1){const n=i?1:1/be.getScale(t),r=t.getBoundingClientRect();return[Math.round((e[0]-r.x)*n),Math.round((e[1]-r.y)*n)]}static isSerialized(e,t,i=e.constructor.attributes?.[t]){return i?.constructor===Object&&i.serialized}static objectGet(e,t,i=void 0){if(void 0!==e){if(!(t instanceof Array))throw new TypeError("UEBlueprint: Expected keys to be an array");return 0!=t.length&&t[0]in e&&void 0!==e[t[0]]?1==t.length?e[t[0]]:be.objectGet(e[t[0]],t.slice(1),i):i}}static objectSet(e,t,i,n=!1,r=Object){if(!(t instanceof Array))throw new TypeError("Expected keys to be an array.");if(1==t.length){if(n||t[0]in e||void 0===e[t[0]])return e[t[0]]=i,!0}else if(t.length>0)return!n||e[t[0]]instanceof Object||(e[t[0]]=new r),be.objectSet(e[t[0]],t.slice(1),i,n,r);return!1}static equals(e,t){return e?.equals&&t?.equals?e.equals(t):(e=be.sanitize(e),t=be.sanitize(t),e?.constructor===BigInt&&t?.constructor===Number?t=BigInt(t):e?.constructor===Number&&t?.constructor===BigInt&&(e=BigInt(e)),e===t||e instanceof Array&&t instanceof Array&&(e.length===t.length&&e.every(((e,i)=>be.equals(e,t[i])))))}static getType(e){return null===e?null:e?.constructor===Object&&e?.type instanceof Function?e.type:e?.constructor}static isValueOfType(e,t,i=!1){return t instanceof le&&(t=t.getTargetType()),i&&null===e||e instanceof t||e?.constructor===t}static sanitize(e,t=e?.constructor){if(t instanceof Array&&(t=t[0]),t instanceof oe)return e;if(t instanceof ge){let i=t.values.find((t=>be.isValueOfType(e,t,!1)));i||(i=t.values[0]),t=i}return t instanceof le?e instanceof le?e:be.sanitize(e,t.getTargetType()):(t&&!be.isValueOfType(e,t,!0)&&(e=t===BigInt?BigInt(e):new t(e)),(e instanceof Boolean||e instanceof Number||e instanceof String)&&(e=e.valueOf()),e)}static snapToGrid(e,t,i){return 1===i?[e,t]:[i*Math.floor(e/i),i*Math.floor(t/i)]}static mergeArrays(e=[],t=[]){let i=[];e=[...e],t=[...t];e:for(;;){for(let n=0;n|
/g,"\n").replaceAll(/(\)/g,"")}static encodeHTMLWhitespace(e){return e.replaceAll(" "," ")}static capitalFirstLetter(e){return 0===e.length?e:e.charAt(0).toUpperCase()+e.slice(1)}static formatStringName(e=""){return e.replace(/^\s*b(?=[A-Z])/,"").replaceAll(se.nameRegexSpaceReplacement," ").trim().split(" ").map((e=>be.capitalFirstLetter(e))).join(" ")}static getIdFromReference(e){return e.replace(/(?:.+\.)?([^\.]+)$/,"$1").replaceAll(/(?<=[a-z\d])(?=[A-Z])|(?<=[a-zA-Z])(?=\d)|(?<=[A-Z]{2})(?=[A-Z][a-z])/g,"-").toLowerCase()}static getNameFromPath(e){return e.match(/[^\.\/]+$/)?.[0]??""}static printLinearColor(e){return`${Math.round(255*e.R.valueOf())}, ${Math.round(255*e.G.valueOf())}, ${Math.round(255*e.B.valueOf())}`}static getPolarCoordinates(e,t,i=!1){let n=Math.atan2(t,e);return i&&n<0&&(n=2*Math.PI+n),[Math.sqrt(e*e+t*t),n]}static getCartesianCoordinates(e,t){return[e*Math.cos(t),e*Math.sin(t)]}static range(e=0,t=0,i=(t>=e?1:-1)){return Array.from({length:Math.ceil((t-e)/i)},((t,n)=>e+n*i))}static paste(e,t){const i=new ClipboardEvent("paste",{bubbles:!0,cancelable:!0,clipboardData:new DataTransfer});i.clipboardData.setData("text",t),e.dispatchEvent(i)}static async copy(e){const t=new ClipboardEvent("copy",{bubbles:!0,cancelable:!0,clipboardData:new DataTransfer});e.dispatchEvent(t)}static animate(e,t,i,n,r=(e=>{}),s=(e=>{const t=e**3.5;return t/(t+(1-e)**3.5)})){let a;const o=l=>{void 0===a&&(a=l);let u=(l-a)/i;be.approximatelyEqual(u,1)||u>1?u=1:r(requestAnimationFrame(o));const c=e+(t-e)*s(u);n(c)};r(requestAnimationFrame(o))}}class fe extends de{static lookbehind="";static attributes={lookbehind:{ignored:!0}};static defaultAttribute={nullable:!1,ignored:!1,serialized:!1,expected:!1,inlined:!1,quoted:!1};constructor(e={},t=!1){super(),this.lookbehind;const i=this.constructor;let n=i.attributes;e.attributes&&(n={...i.attributes},be.mergeArrays(Object.keys(n),Object.keys(e.attributes)).forEach((t=>{n[t]={...fe.defaultAttribute,...n[t],...e.attributes[t]},n[t].type||(n[t].type=e[t]instanceof Array?[be.getType(e[t][0])]:be.getType(e[t]))})),fe.defineAttributes(this,n)),this.attributes;const r=Object.keys(e),s=Object.keys(n),a=be.mergeArrays(r,s);r.includes("lookbehind")&&(this.lookbehind=void 0);for(const r of a){if("attributes"==r)continue;let s=e[r],a=n[r];if(!t&&void 0!==s&&!(r in n)&&!r.startsWith(se.subObjectAttributeNamePrefix)){const e=s instanceof Array?`[${s[0]?.constructor.name}]`:s.constructor.name;console.warn(`UEBlueprint: Attribute ${r} (of type ${e}) in the serialized data is not defined in ${i.name}.attributes`)}if(!a){this[r]=s;continue}const o=a.predicate?e=>{Object.defineProperties(this,{["#"+r]:{writable:!0,enumerable:!1},[r]:{enumerable:!0,get(){return this["#"+r]},set(e){a.predicate?.(e)?this["#"+r]=e:console.warn(`UEBlueprint: Tried to assign attribute ${r} to ${i.name} not satisfying the predicate`)}}}),this[r]=e}:e=>this[r]=e;let l=a.default;l instanceof Function&&(l=l(this));let u=a.type;u instanceof oe&&(u=u.compute(this)),u instanceof Array&&(u=Array),void 0===u&&(u=be.getType(l)),void 0===s?Object.hasOwn(a,"default")&&o(l):(s?.constructor===String&&a.serialized&&u!==String&&(s=me.getSerializer(u).read(s)),o(be.sanitize(s,u)))}}static defaultValueProviderFromType(e){return e!==Boolean&&(e===Number?0:e===BigInt?0n:e===String?"":e===Array||e instanceof Array?()=>[]:e instanceof ge?this.defaultValueProviderFromType(e.values[0]):e instanceof le?()=>new le(e.type,e.key,e.getter):e instanceof oe?void 0:()=>new e)}static cleanupAttributes(e,t=""){for(const i in e){e[i]={...fe.defaultAttribute,...e[i]};const n=e[i];if(void 0!==n.type||n.default instanceof Function||(n.type=n.default instanceof Array?[be.getType(n.default[0])]:be.getType(n.default)),!n.ignored&&void 0===n.default&&void 0===n.type)throw new Error(`UEBlueprint: Expected either "type" or "value" property in ${this.name} attribute ${t}`+i);null===n.default&&(n.nullable=!0)}}static isValueOfType(e,t){return null!=e&&(e instanceof t||e.constructor===t)}static expectsAllKeys(){return!Object.values(this.attributes).filter((e=>!e.ignored)).some((e=>!e.expected))}static getAttribute(e,t){return this.getAttributes(e)[t]}static getAttributes(e){return e.attributes??e.constructor?.attributes??{}}static defineAttributes(e,t){Object.defineProperty(e,"attributes",{writable:!0,configurable:!1}),e.attributes=t}getLookbehind(){let e=this.lookbehind??this.constructor.lookbehind;return e=e instanceof ge?e.values[0]:e,e}unexpectedKeys(){return Object.keys(this).length-Object.keys(this.constructor.attributes).length}equals(e){const t=Object.keys(this),i=Object.keys(e);if(t.length!=i.length)return!1;for(const i of t){if(this[i]instanceof fe&&!this[i].equals(e[i]))return!1;if(!be.equals(this[i],e[i]))return!1}return!0}}let ve=he;class ye{static separatedBy=(e,t,i=1)=>new RegExp(e+"(?:"+t+e+")"+(1===i?"*":2===i?"+":`{${i},}`));static Regex=class{static ByteInteger=/0*(?:25[0-5]|2[0-4]\d|1?\d?\d)(?!\d|\.)/;static HexDigit=/[0-9a-fA-F]/;static InlineOptWhitespace=/[^\S\n]*/;static InlineWhitespace=/[^\S\n]+/;static InsideString=/(?:[^"\\]|\\.)*/;static InsideSingleQuotedString=/(?:[^'\\]|\\.)*/;static Integer=/[\-\+]?\d+(?!\d|\.)/;static MultilineWhitespace=/\s*\n\s*/;static Number=/[-\+]?(?:\d*\.)?\d+(?!\d|\.)/;static RealUnit=/\+?(?:0(?:\.\d+)?|1(?:\.0+)?)(?![\.\d])/;static Word=ye.separatedBy("[a-zA-Z]","_");static Symbol=/[a-zA-Z_]\w*/;static DotSeparatedSymbols=ye.separatedBy(this.Symbol.source,"\\.");static PathFragment=ye.separatedBy(this.Symbol.source,"[\\.:]");static PathSpaceFragment=ye.separatedBy(this.Symbol.source,"[\\.:\\ ]");static Path=new RegExp(`(?:\\/${this.PathFragment.source}){2,}`)};static null=ve.lazy((()=>ve.regex(/\(\s*\)/).map((()=>null))));static true=ve.lazy((()=>ve.regex(/true/i).map((()=>!0))));static false=ve.lazy((()=>ve.regex(/false/i).map((()=>!1))));static boolean=ve.lazy((()=>ye.regexMap(/(true)|false/i,(e=>!!e[1]))));static number=ve.lazy((()=>this.regexMap(new RegExp(`(${ye.Regex.Number.source})|(\\+?inf)|(-inf)`),(e=>void 0!==e[2]?Number.POSITIVE_INFINITY:void 0!==e[3]?Number.NEGATIVE_INFINITY:Number(e[1])))));static integer=ve.lazy((()=>ve.regex(ye.Regex.Integer).map(Number)));static bigInt=ve.lazy((()=>ve.regex(ye.Regex.Integer).map(BigInt)));static realUnit=ve.lazy((()=>ve.regex(ye.Regex.RealUnit).map(Number)));static naturalNumber=ve.lazy((()=>ve.regex(/\d+/).map(Number)));static byteNumber=ve.lazy((()=>ve.regex(ye.Regex.ByteInteger).map(Number)));static string=ve.lazy((()=>ye.regexMap(new RegExp(`"(${ye.Regex.InsideString.source})"`),(([e,t])=>t)).map((e=>be.unescapeString(e)))));static colorValue=this.byteNumber;static word=ve.regex(ye.Regex.Word);static pathQuotes=ye.regexMap(new RegExp("'\"("+ye.Regex.InsideString.source+")\"'|'("+ye.Regex.InsideSingleQuotedString.source+")'|\"("+ye.Regex.InsideString.source+')"'),(([e,t,i,n])=>t??i??n));static path=ye.regexMap(new RegExp("'\"("+ye.Regex.InsideString.source+")\"'|'("+ye.Regex.InsideSingleQuotedString.source+")'|\"("+ye.Regex.InsideString.source+')"|('+ye.Regex.Path.source+")"),(([e,t,i,n,r])=>t??i??n??r));static symbol=ve.regex(ye.Regex.Symbol);static symbolQuoted=ye.regexMap(new RegExp('"('+ye.Regex.Symbol.source+')"'),(([e,t])=>t));static attributeName=ve.regex(ye.Regex.DotSeparatedSymbols);static attributeNameQuoted=ye.regexMap(new RegExp('"('+ye.Regex.DotSeparatedSymbols.source+')"'),(([e,t])=>t));static guid=ve.regex(new RegExp(`${ye.Regex.HexDigit.source}{32}`));static commaSeparation=ve.regex(/\s*,\s*(?!\))/);static commaOrSpaceSeparation=ve.regex(/\s*,\s*(?!\))|\s+/);static equalSeparation=ve.regex(/\s*=\s*/);static typeReference=ve.alt(ve.regex(ye.Regex.Path),this.symbol);static hexColorChannel=ve.regex(new RegExp(ye.Regex.HexDigit.source+"{2}"));static regexMap(e,t){const i=RegExp("^(?:"+e.source+")",e.flags),n=""+e;return ve(((e,r)=>{const s=i.exec(e.slice(r));return s?ve.makeSuccess(r+s[0].length,t(s)):ve.makeFailure(r,n)}))}static grammarFor(e,t=(e?.constructor===Object?e.type:e?.constructor),i=this.unknownValue){let n=i;if(t instanceof Array){if(e?.inlined)return this.grammarFor(void 0,t[0]);n=ve.seq(ve.regex(/\(\s*/),this.grammarFor(void 0,t[0]).sepBy(this.commaSeparation),ve.regex(/\s*(?:,\s*)?\)/)).map((([e,t,i])=>t))}else if(t instanceof ge)n=t.values.map((e=>this.grammarFor(void 0,e))).reduce(((e,t)=>t&&t!==this.unknownValue&&e!==this.unknownValue?ve.alt(e,t):this.unknownValue));else{if(t instanceof le)return this.grammarFor(t.getTargetType()).map((()=>new le(t.type,t.getter)));if(e?.constructor===Object)n=this.grammarFor(void 0,t);else switch(t){case BigInt:n=this.bigInt;break;case Boolean:n=this.boolean;break;case Number:n=this.number;break;case String:n=this.string;break;default:if(t?.prototype instanceof de)return t.grammar}}return e?.constructor===Object&&(e.serialized&&t.constructor!==String&&(n=n==this.unknownValue?this.string:ve.seq(ve.string('"'),n,ve.string('"'))),e.nullable&&(n=ve.alt(n,this.null))),n}static getAttribute(e,t){let i,n;if(e instanceof ge)for(let n of e.values)if(i=this.getAttribute(n,t))return i;return e instanceof fe.constructor?(i=e.attributes[t[0]],n=i?.type):e instanceof Array&&(i=e[t[0]],n=i),t.length>1?this.getAttribute(n,t.slice(1)):i}static createAttributeGrammar(e,t=this.attributeName,i=this.equalSeparation,n=((e,t,i)=>{})){return ve.seq(t,i).chain((([t,i])=>{const r=t.split(se.keysSeparator),s=this.getAttribute(e,r);return this.grammarFor(s).map((e=>t=>{n(t,r,e),be.objectSet(t,r,e,!0)}))}))}static createEntityGrammar=(e,t=!0,i=this.commaSeparation)=>ve.seq(this.regexMap(e.lookbehind instanceof ge?new RegExp(`(${e.lookbehind.values.reduce(((e,t)=>e+"|"+t))})\\s*\\(\\s*`):e.lookbehind.constructor==String&&e.lookbehind.length?new RegExp(`(${e.lookbehind})\\s*\\(\\s*`):/()\(\s*/,(e=>e[1])),this.createAttributeGrammar(e).sepBy1(i),ve.regex(/\s*(?:,\s*)?\)/)).map((([e,t,i])=>{let n={};return t.forEach((e=>e(n))),e.length&&(n.lookbehind=e),n})).chain((i=>{let n,r=Object.keys(i);if(Object.keys(e.attributes).filter((t=>e.attributes[t].expected)).find((e=>!r.includes(e)&&(n=e))))return ve.fail("Missing key "+n);const s=Object.keys(i).filter((t=>!(t in e.attributes))).length;return!t&&s>0?ve.fail("Too many unknown keys"):ve.succeed(new e(i))}));static unknownValue}class we extends fe{static attributes={...super.attributes,value:{default:""}};static{this.cleanupAttributes(this.attributes)}static grammar=this.createGrammar();static createGrammar(){return ye.guid.map((e=>new this(e)))}static generateGuid(e=!0){let t=new Uint32Array(4);!0===e&&crypto.getRandomValues(t);let i="";return t.forEach((e=>{i+=("0".repeat(8)+e.toString(16).toUpperCase()).slice(-8)})),new we({value:i})}constructor(e){e||(e=we.generateGuid().value),e.constructor!==Object&&(e={value:e}),super(e),this.value}valueOf(){return this.value}toString(){return this.value}}class Ee extends fe{static attributes={...super.attributes,type:{default:""},path:{default:""}};static{this.cleanupAttributes(this.attributes)}static noneReferenceGrammar=he.string("None").map((()=>this.createNoneInstance()));static fullReferenceGrammar=he.seq(ye.typeReference,he.regex(ye.Regex.InlineOptWhitespace),ye.pathQuotes).map((([e,t,i])=>new this({type:e,path:i})));static typeReferenceGrammar=ye.typeReference.map((e=>new this({type:e,path:""})));static pathReferenceGrammar=ye.path.map((e=>new this({type:"",path:e})));static grammar=this.createGrammar();static createGrammar(){return he.alt(this.noneReferenceGrammar,this.fullReferenceGrammar,this.typeReferenceGrammar,this.pathReferenceGrammar)}constructor(e={}){e.constructor===String&&(e={path:e}),super(e),this.type,this.path}static createNoneInstance(){return new Ee({type:"None",path:""})}sanitize(){if(this.type&&!this.type.startsWith("/")){let e=this.type+"_Deprecated",t=Object.keys(se.paths).find((t=>{const i=be.getNameFromPath(se.paths[t]);return i===this.type||i===e}));t&&(this.type=se.paths[t])}}getName(){return be.getNameFromPath(this.path.replace(/_C$/,""))}toString(){return`${this.type}'"${this.path}"'`}}class Se extends fe{static attributes={...super.attributes,MemberParent:{type:Ee},MemberName:{type:String},MemberGuid:{type:we}};static{this.cleanupAttributes(this.attributes)}static grammar=this.createGrammar();static createGrammar(){return ye.createEntityGrammar(this)}constructor(e){super(e),this.MemberParent,this.MemberName,this.MemberGuid}}class Ce extends fe{static attributes={...super.attributes,value:{default:""}};static{this.cleanupAttributes(this.attributes)}static attributeConverter={fromAttribute:(e,t)=>new Ce(e),toAttribute:(e,t)=>e.toString()};static grammar=this.createGrammar();static createGrammar(){return ye.symbol.map((e=>new this(e)))}constructor(e){e.constructor!==Object&&(e={value:e}),super(e),this.value}valueOf(){return this.value}toString(){return this.value}}class xe extends fe{static attributes={...super.attributes,value:{default:0,predicate:e=>e%1==0&&e>1<<31&&e<-(1<<31)}};static{this.cleanupAttributes(this.attributes)}static grammar=this.createGrammar();static createGrammar(){return ye.integer.map((e=>new this(e)))}constructor(e=0){super(e.constructor===Object?e:{value:e}),this.value}valueOf(){return this.value}toString(){return this.value.toString()}}class Pe extends fe{static attributes={...super.attributes,value:{default:0}};static{this.cleanupAttributes(this.attributes)}static grammar=this.createGrammar();static createGrammar(){return ye.number.map((e=>new this(e)))}constructor(e=0){e.constructor!==Object&&(e={value:e}),super(e),this.value}valueOf(){return this.value}toString(){return this.value.toFixed(6)}}class Ne extends fe{static attributes={...super.attributes,R:{type:Pe,default:()=>new Pe,expected:!0},G:{type:Pe,default:()=>new Pe,expected:!0},B:{type:Pe,default:()=>new Pe,expected:!0},A:{type:Pe,default:()=>new Pe(1)},H:{type:Pe,default:()=>new Pe,ignored:!0},S:{type:Pe,default:()=>new Pe,ignored:!0},V:{type:Pe,default:()=>new Pe,ignored:!0}};static{this.cleanupAttributes(this.attributes)}static grammar=this.createGrammar();static linearToSRGB(e){return e<=0?0:e>=1?1:e<.0031308?12.92*e:1.055*Math.pow(e,1/2.4)-.055}static sRGBtoLinear(e){return e<=0?0:e>=1?1:e<.04045?e/12.92:Math.pow((e+.055)/1.055,2.4)}static getWhite(){return new Ne({R:1,G:1,B:1})}static createGrammar(){return ye.createEntityGrammar(this,!1)}static getLinearColorFromHexGrammar(){return ye.regexMap(new RegExp(`#(${ye.Regex.HexDigit.source}{2})(${ye.Regex.HexDigit.source}{2})(${ye.Regex.HexDigit.source}{2})(${ye.Regex.HexDigit.source}{2})?`),(e=>[e[1],e[2],e[3],e[4]??"FF"])).map((([e,t,i,n])=>new this({R:parseInt(e,16)/255,G:parseInt(t,16)/255,B:parseInt(i,16)/255,A:parseInt(n,16)/255})))}static getLinearColorRGBListGrammar(){return he.seq(ye.byteNumber,ye.commaSeparation,ye.byteNumber,ye.commaSeparation,ye.byteNumber).map((([e,t,i,n,r])=>new this({R:e/255,G:i/255,B:r/255,A:1})))}static getLinearColorRGBGrammar(){return he.seq(he.regex(/rgb\s*\(\s*/),this.getLinearColorRGBListGrammar(),he.regex(/\s*\)/)).map((([e,t,i])=>t))}static getLinearColorRGBAGrammar(){return he.seq(he.regex(/rgba\s*\(\s*/),this.getLinearColorRGBListGrammar(),he.regex(/\s*\)/)).map((([e,t,i])=>t))}static getLinearColorFromAnyFormat(){return he.alt(this.getLinearColorFromHexGrammar(),this.getLinearColorRGBAGrammar(),this.getLinearColorRGBGrammar(),this.getLinearColorRGBListGrammar())}constructor(e){e instanceof Array&&(e={R:e[0]??0,G:e[1]??0,B:e[2]??0,A:e[3]??1}),super(e),this.R,this.G,this.B,this.A,this.H,this.S,this.V,this.#s()}#s(){const e=this.R.value,t=this.G.value,i=this.B.value;if(be.approximatelyEqual(e,t)&&be.approximatelyEqual(e,i)&&be.approximatelyEqual(t,i))return this.S.value=0,void(this.V.value=e);const n=Math.max(e,t,i),r=Math.min(e,t,i),s=n-r;let a;switch(n){case r:a=0;break;case e:a=(t-i)/s+(te.toString(16).toUpperCase().padStart(2,"0"))).join("")}toSRGBAString(){return this.toSRGBA().map((e=>e.toString(16).toUpperCase().padStart(2,"0"))).join("")}toHSVA(){return[this.H.value,this.S.value,this.V.value,this.A.value]}toNumber(){return(Math.round(255*this.R.value)<<24)+(Math.round(255*this.G.value)<<16)+(Math.round(255*this.B.value)<<8)+Math.round(255*this.A.value)}setFromRGBANumber(e){this.A.value=(255&e)/255,this.B.value=(e>>8&255)/255,this.G.value=(e>>16&255)/255,this.R.value=(e>>24&255)/255,this.#s()}setFromSRGBANumber(e){this.A.value=(255&e)/255,this.B.value=Ne.sRGBtoLinear((e>>8&255)/255),this.G.value=Ne.sRGBtoLinear((e>>16&255)/255),this.R.value=Ne.sRGBtoLinear((e>>24&255)/255),this.#s()}toString(){return be.printLinearColor(this)}}class ke extends fe{static attributes={...super.attributes,MacroGraph:{type:Ee,default:()=>new Ee},GraphBlueprint:{type:Ee,default:()=>new Ee},GraphGuid:{type:we,default:()=>new we}};static{this.cleanupAttributes(this.attributes)}static grammar=this.createGrammar();static createGrammar(){return ye.createEntityGrammar(this)}constructor(e){super(e),this.MacroGraph,this.GraphBlueprint,this.GuidEntity}getMacroName(){const e=this.MacroGraph.path.search(":");return this.MacroGraph.path.substring(e+1)}}class Le extends xe{static attributes={...super.attributes,value:{...super.attributes.value,predicate:e=>e%1==0&&e>=0&&e<256}};static{this.cleanupAttributes(this.attributes)}static grammar=this.createGrammar();static createGrammar(){return ye.byteNumber.map((e=>new this(e)))}constructor(e=0){super(e)}}class Ae extends fe{static attributes={...super.attributes,value:{default:""}};static{this.cleanupAttributes(this.attributes)}static grammar=this.createGrammar();static createGrammar(){return ye.symbol.map((e=>new this(e)))}constructor(e){e.constructor!==Object&&(e={value:e}),super(e),this.value}valueOf(){return this.value}toString(){return this.value}}class Me extends Ae{static grammar=this.createGrammar();static createGrammar(){return ye.symbol.map((e=>new this(e)))}}class Te extends Me{static grammar=this.createGrammar();static createGrammar(){return he.regex(ye.Regex.InsideString).map((e=>new this(e)))}}class Be extends fe{static lookbehind="INVTEXT";static attributes={...super.attributes,value:{default:""}};static{this.cleanupAttributes(this.attributes)}static grammar=this.createGrammar();static createGrammar(){return he.alt(he.seq(he.regex(new RegExp(`${this.lookbehind}\\s*\\(`)),ye.grammarFor(this.attributes.value),he.regex(/\s*\)/)).map((([e,t,i])=>t)),he.regex(new RegExp(this.lookbehind)).map((()=>""))).map((e=>new this(e)))}constructor(e){e.constructor!==Object&&(e={value:e}),super(e),this.value}}class Ie extends fe{static lookbehind="NSLOCTEXT";static attributes={...super.attributes,namespace:{default:""},key:{default:""},value:{default:""}};static{this.cleanupAttributes(this.attributes)}static grammar=this.createGrammar();static createGrammar(){return ye.regexMap(new RegExp(String.raw`${this.lookbehind}\s*\(`+String.raw`\s*"(${ye.Regex.InsideString.source})"\s*,`+String.raw`\s*"(${ye.Regex.InsideString.source})"\s*,`+String.raw`\s*"(${ye.Regex.InsideString.source})"\s*`+String.raw`(?:,\s+)?`+String.raw`\)`,"m"),(e=>new this({namespace:be.unescapeString(e[1]),key:be.unescapeString(e[2]),value:be.unescapeString(e[3])})))}constructor(e){super(e),this.namespace,this.key,this.value}toString(){return be.capitalFirstLetter(this.value)}}class $e extends fe{static lookbehind=new ge("LOCGEN_FORMAT_NAMED","LOCGEN_FORMAT_ORDERED");static attributes={...super.attributes,value:{type:[new ge(String,Ie,Be,$e)],default:[]}};static{this.cleanupAttributes(this.attributes)}static grammar=this.createGrammar();static createGrammar(){return he.lazy((()=>he.seq(ye.regexMap(new RegExp(`(${this.lookbehind.values.reduce(((e,t)=>e+"|"+t))})\\s*`),(e=>e[1])),ye.grammarFor(this.attributes.value)).map((([e,t])=>{const i=new this({value:t});return i.lookbehind=e,i}))))}constructor(e){super(e),this.value}toString(){const e=this.value?.[0]?.toString();if(!e)return"";const t=this.value.slice(1).map((e=>e.toString()));return"LOCGEN_FORMAT_NAMED"==this.lookbehind?e.replaceAll(/\{([a-zA-Z]\w*)\}/g,((e,i)=>{const n=t.indexOf(i)+1;return n>0&&n{const n=Number(i);return ne>=-(1n<<63n)&&e<1n<<63n}};static{this.cleanupAttributes(this.attributes)}static grammar=this.createGrammar();static createGrammar(){return ye.bigInt.map((e=>new this(e)))}constructor(e=0){e.constructor!==Object&&(e={value:e}),super(e),this.value}valueOf(){return this.value}toString(){return this.value.toString()}}class He extends fe{static attributes={...super.attributes,value:{default:""}};static{this.cleanupAttributes(this.attributes)}static grammar=this.createGrammar();static createGrammar(){return ye.symbol.map((e=>new this(e)))}constructor(e){e.constructor!==Object&&(e={value:e}),super(e),this.value}valueOf(){return this.value}toString(){return this.value}}class Oe extends fe{static attributes={...super.attributes,objectName:{type:He},pinGuid:{type:we}};static{this.cleanupAttributes(this.attributes)}static grammar=this.createGrammar();static createGrammar(){return he.seq(He.createGrammar(),he.whitespace,we.createGrammar()).map((([e,t,i])=>new this({objectName:e,pinGuid:i})))}constructor(e){super(e),this.objectName,this.pinGuid}}class De extends fe{static attributes={...super.attributes,PinCategory:{default:""},PinSubCategory:{default:""},PinSubCategoryObject:{type:Ee,default:()=>Ee.createNoneInstance()},PinSubCategoryMemberReference:{type:Se,default:null},PinValueType:{type:De,default:null},ContainerType:{type:He},bIsReference:{default:!1},bIsConst:{default:!1},bIsWeakPointer:{default:!1},bIsUObjectWrapper:{default:!1},bSerializeAsSinglePrecisionFloat:{default:!1}};static{this.cleanupAttributes(this.attributes)}static grammar=this.createGrammar();static createGrammar(){return ye.createEntityGrammar(this)}constructor(e={},t=!1){super(e,t),this.PinCategory,this.PinSubCategory,this.PinSubCategoryObject,this.PinSubCategoryMemberReference,this.PinValueType,this.ContainerType,this.bIsReference,this.bIsConst,this.bIsWeakPointer,this.bIsUObjectWrapper,this.bIsUObjectWrapper,this.bSerializeAsSinglePrecisionFloat}copyTypeFrom(e){this.PinCategory=e.PinCategory,this.PinSubCategory=e.PinSubCategory,this.PinSubCategoryObject=e.PinSubCategoryObject,this.PinSubCategoryMemberReference=e.PinSubCategoryMemberReference,this.PinValueType=e.PinValueType,this.ContainerType=e.ContainerType,this.bIsReference=e.bIsReference,this.bIsConst=e.bIsConst,this.bIsWeakPointer=e.bIsWeakPointer,this.bIsUObjectWrapper=e.bIsUObjectWrapper,this.bSerializeAsSinglePrecisionFloat=e.bSerializeAsSinglePrecisionFloat}}class Ve extends fe{static attributes={...super.attributes,X:{default:0,expected:!0},Y:{default:0,expected:!0}};static{this.cleanupAttributes(this.attributes)}static grammar=this.createGrammar();static createGrammar(){return ye.createEntityGrammar(this,!1)}constructor(e){super(e),this.X,this.Y}}class Re extends Ve{static grammar=this.createGrammar();static createGrammar(){return he.alt(he.seq(he.string("X").then(ye.equalSeparation).then(ye.number),he.regex(ye.Regex.InlineWhitespace),he.string("Y").then(ye.equalSeparation).then(ye.number)).map((([e,t,i])=>new this({X:e,Y:i}))),Ve.createGrammar())}}class ze extends fe{static attributes={...super.attributes,R:{default:0,expected:!0},P:{default:0,expected:!0},Y:{default:0,expected:!0}};static{this.cleanupAttributes(this.attributes)}static grammar=this.createGrammar();static createGrammar(){return ye.createEntityGrammar(this,!1)}constructor(e){super(e),this.R,this.P,this.Y}getRoll(){return this.R}getPitch(){return this.P}getYaw(){return this.Y}}class _e extends ze{static grammar=this.createGrammar();static createGrammar(){return he.alt(he.seq(ye.number,ye.commaSeparation,ye.number,ye.commaSeparation,ye.number).map((([e,t,i,n,r])=>new this({R:r,P:e,Y:i}))),ze.createGrammar())}}class Fe extends Ve{static grammar=this.createGrammar();static createGrammar(){return he.alt(he.seq(ye.number,ye.commaSeparation,ye.number).map((([e,t,i])=>new this({X:e,Y:i}))),Ve.createGrammar())}}class je extends fe{static attributes={...super.attributes,X:{default:0,expected:!0},Y:{default:0,expected:!0},Z:{default:0,expected:!0}};static{this.cleanupAttributes(this.attributes)}static grammar=this.createGrammar();static createGrammar(){return ye.createEntityGrammar(je,!1)}constructor(e){super(e),this.X,this.Y,this.Z}}class Ue extends je{static grammar=this.createGrammar();static createGrammar(){return he.alt(he.seq(ye.number,ye.commaSeparation,ye.number,ye.commaSeparation,ye.number).map((([e,t,i,n,r])=>new this({X:e,Y:i,Z:r}))),je.createGrammar())}}class We extends fe{static#a={[se.paths.linearColor]:Ne,[se.paths.rotator]:ze,[se.paths.vector]:je,[se.paths.vector2D]:Ve,bool:Boolean,byte:Le,enum:Me,exec:String,int:xe,int64:Ge,name:String,real:Number,string:String};static#o={enum:Te,rg:Re,[se.paths.rotator]:_e,[se.paths.vector]:Ue,[se.paths.vector2D]:Fe};static lookbehind="Pin";static attributes={...super.attributes,objectEntity:{ignored:!0},pinIndex:{type:Number,ignored:!0},PinId:{type:we,default:()=>new we},PinName:{default:""},PinFriendlyName:{type:new ge(Ie,$e,String)},PinToolTip:{type:String},Direction:{type:String},PinType:{type:De,default:()=>new De,inlined:!0},LinkedTo:{type:[Oe]},SubPins:{type:[Oe]},ParentPin:{type:Oe},DefaultValue:{type:new oe((e=>e.getEntityType(!0)??String)),serialized:!0},AutogeneratedDefaultValue:{type:String},DefaultObject:{type:Ee},PersistentGuid:{type:we},bHidden:{default:!1},bNotConnectable:{default:!1},bDefaultValueIsReadOnly:{default:!1},bDefaultValueIsIgnored:{default:!1},bAdvancedView:{default:!1},bOrphanedPin:{default:!1}};static{this.cleanupAttributes(this.attributes)}static grammar=this.createGrammar();static createGrammar(){return ye.createEntityGrammar(this)}constructor(e={},t=!1){super(e,t),this.objectEntity,this.pinIndex,this.PinId,this.PinName,this.PinFriendlyName,this.PinToolTip,this.Direction,this.PinType,this.LinkedTo,this.DefaultValue,this.AutogeneratedDefaultValue,this.DefaultObject,this.PersistentGuid,this.bHidden,this.bNotConnectable,this.bDefaultValueIsReadOnly,this.bDefaultValueIsIgnored,this.bAdvancedView,this.bOrphanedPin}static fromLegacyObject(e){return new We(e,!0)}getType(){const e=this.PinType.PinCategory;if("struct"===e||"object"===e)return this.PinType.PinSubCategoryObject.path;if("optional"===e)switch(this.PinType.PinSubCategory){case"int":return"int";case"red":return"real";case"rg":return"rg";case"rgb":return se.paths.vector;case"rgba":return se.paths.linearColor}if(this.isEnum())return"enum";if(this.objectEntity?.isPcg()){const e=this.objectEntity.getPcgSubobject(),t=this.isInput()?e.InputPins?.[this.pinIndex]:e.OutputPins?.[this.pinIndex];if(t){const i=e[se.subObjectAttributeNameFromReference(t,!0)];let n=i.Properties?.AllowedTypes?.toString()??"";if(""==n&&(n=this.PinType.PinCategory??"",""==n&&(n="Any")),n)return!1!==i.Properties.bAllowMultipleData&&!1!==i.Properties.bAllowMultipleConnections&&(n+="[]"),n}}return e}getEntityType(e=!1){const t=this.getType(),i=We.#a[t],n=We.#o[t];return e&&void 0!==n?n:i}pinDisplayName(){let e,t=this.PinFriendlyName?this.PinFriendlyName.toString():be.formatStringName(this.PinName??"");return this.PinToolTip&&(e=this.PinToolTip.match(/\s*(.+?(?=\n)|.+\S)\s*/))&&e[1].toLowerCase()===t.toLowerCase()?e[1]:t}copyTypeFrom(e){this.PinType.PinCategory=e.PinType.PinCategory,this.PinType.PinSubCategory=e.PinType.PinSubCategory,this.PinType.PinSubCategoryObject=e.PinType.PinSubCategoryObject,this.PinType.PinSubCategoryMemberReference=e.PinType.PinSubCategoryMemberReference,this.PinType.PinValueType=e.PinType.PinValueType,this.PinType.ContainerType=e.PinType.ContainerType,this.PinType.bIsReference=e.PinType.bIsReference,this.PinType.bIsConst=e.PinType.bIsConst,this.PinType.bIsWeakPointer=e.PinType.bIsWeakPointer,this.PinType.bIsUObjectWrapper=e.PinType.bIsUObjectWrapper,this.PinType.bSerializeAsSinglePrecisionFloat=e.PinType.bSerializeAsSinglePrecisionFloat}getDefaultValue(e=!1){return void 0===this.DefaultValue&&e&&(this.DefaultValue=new(this.getEntityType(!0))),this.DefaultValue}isEnum(){const e=this.PinType.PinSubCategoryObject.type;return e===se.paths.enum||e===se.paths.userDefinedEnum||"enum"===e.toLowerCase()}isExecution(){return"exec"===this.PinType.PinCategory}isHidden(){return this.bHidden}isInput(){return!this.bHidden&&"EGPD_Output"!=this.Direction}isOutput(){return!this.bHidden&&"EGPD_Output"==this.Direction}isLinked(){return this.LinkedTo?.length>0??!1}linkTo(e,t){const i=this.LinkedTo?.some((i=>i.objectName.toString()==e&&i.pinGuid.valueOf()==t.PinId.valueOf()));return!i&&((this.LinkedTo??=[]).push(new Oe({objectName:e,pinGuid:t.PinId})),!0)}unlinkFrom(e,t){const i=this.LinkedTo?.findIndex((i=>i.objectName.toString()==e&&i.pinGuid.valueOf()==t.PinId.valueOf()));return i>=0&&(this.LinkedTo.splice(i,1),0===this.LinkedTo.length&&void 0===We.attributes.LinkedTo.default&&(this.LinkedTo=void 0),!0)}getSubCategory(){return this.PinType.PinSubCategoryObject.path}pinColor(){if("mask"==this.PinType.PinCategory){const e=se.pinColor[this.PinType.PinSubCategory];if(e)return e}else if("optional"==this.PinType.PinCategory)return se.pinColorMaterial;return se.pinColor[this.getType()]??se.pinColor[this.PinType.PinCategory.toLowerCase()]??se.pinColor.default}}class Ke{static arrayPin=O``;static branchNode=O``;static breakStruct=O``;static cast=O``;static close=O``;static convert=O``;static correct=O``;static delegate=O``;static doN=O``;static doOnce=O``;static enum=O``;static event=O``;static execPin=O``;static expandIcon=O``;static flipflop=O``;static forEachLoop=O``;static functionSymbol=O``;static gamepad=O``;static genericPin=O``;static keyboard=O``;static loop=O``;static macro=O``;static mapPin=O``;static makeArray=O``;static makeMap=O``;static makeSet=O``;static makeStruct=O``;static mouse=O``;static node=O``;static operationPin=O``;static pcgStackPin=O``;static pcgPin=O``;static pcgParamPin=O``;static pcgSpatialPin=O``;static plusCircle=O``;static questionMark=O``;static referencePin=O``;static reject=O``;static setPin=O``;static select=O``;static sequence=O``;static sound=O``;static spawnActor=O``;static switch=O``;static timer=O``;static touchpad=O``}class qe extends We{static lookbehind="";static grammar=this.createGrammar();static createGrammar(){return he.lazy((()=>he.seq(ye.regexMap(new RegExp(`${ye.Regex.Symbol.source}\\s*\\(\\s*`),(e=>e[1]??"")),ye.createAttributeGrammar(this).sepBy1(ye.commaSeparation),he.regex(/\s*(?:,\s*)?\)/)).map((([e,t,i])=>{let n={};return e.length&&(n.lookbehind=e),t.forEach((e=>e(n))),new this(n)}))))}constructor(e={}){super(e,!0)}}class Ze extends fe{static attributes={...super.attributes,MemberScope:{type:String},MemberName:{default:""},MemberGuid:{type:we},bSelfContext:{type:Boolean}};static{this.cleanupAttributes(this.attributes)}static grammar=this.createGrammar();static createGrammar(){return ye.createEntityGrammar(this)}constructor(e){super(e),this.MemberName,this.GuidEntity,this.bSelfContext}}class Xe extends fe{static#l={A_AccentGrave:"à",Add:"Num +",C_Cedille:"ç",Decimal:"Num .",Divide:"Num /",E_AccentAigu:"é",E_AccentGrave:"è",F1:"F1",F10:"F10",F11:"F11",F12:"F12",F2:"F2",F3:"F3",F4:"F4",F5:"F5",F6:"F6",F7:"F7",F8:"F8",F9:"F9",Gamepad_Special_Left_X:"Touchpad Button X Axis",Gamepad_Special_Left_Y:"Touchpad Button Y Axis",Mouse2D:"Mouse XY 2D-Axis",Multiply:"Num *",Section:"§",Subtract:"Num -",Tilde:"`"};static attributes={...super.attributes,Class:{type:Ee},Name:{type:String},Archetype:{type:Ee},ExportPath:{type:Ee},ObjectRef:{type:Ee},BlueprintElementType:{type:Ee},BlueprintElementInstance:{type:Ee},PinTags:{type:[null],inlined:!0},PinNames:{type:[String],inlined:!0},AxisKey:{type:Ae},InputAxisKey:{type:Ae},NumAdditionalInputs:{type:Number},bIsPureFunc:{type:Boolean},bIsConstFunc:{type:Boolean},bIsCaseSensitive:{type:Boolean},VariableReference:{type:Ze},SelfContextInfo:{type:Ae},DelegatePropertyName:{type:String},DelegateOwnerClass:{type:Ee},ComponentPropertyName:{type:String},EventReference:{type:Se},FunctionReference:{type:Se},CustomFunctionName:{type:String},TargetType:{type:Ee},MacroGraphReference:{type:ke},Enum:{type:Ee},EnumEntries:{type:[String],inlined:!0},InputKey:{type:Ae},MaterialFunction:{type:Ee},bOverrideFunction:{type:Boolean},bInternalEvent:{type:Boolean},bConsumeInput:{type:Boolean},bExecuteWhenPaused:{type:Boolean},bOverrideParentBinding:{type:Boolean},bControl:{type:Boolean},bAlt:{type:Boolean},bShift:{type:Boolean},bCommand:{type:Boolean},CommentColor:{type:Ne},bCommentBubbleVisible_InDetailsPanel:{type:Boolean},bColorCommentBubble:{type:Boolean},ProxyFactoryFunctionName:{type:String},ProxyFactoryClass:{type:Ee},ProxyClass:{type:Ee},R:{type:Number},G:{type:Number},StructType:{type:Ee},MaterialExpression:{type:Ee},MaterialExpressionComment:{type:Ee},MoveMode:{type:Ae},TimelineName:{type:String},TimelineGuid:{type:we},SizeX:{type:new le(xe)},SizeY:{type:new le(xe)},Text:{type:new le(String)},MaterialExpressionEditorX:{type:new le(xe)},MaterialExpressionEditorY:{type:new le(xe)},NodeTitle:{type:String},NodeTitleColor:{type:Ne},PositionX:{type:new le(xe)},PositionY:{type:new le(xe)},Node:{type:new le(Ee)},PCGNode:{type:Ee},HiGenGridSize:{type:Ae},Operation:{type:Ae},NodePosX:{type:xe},NodePosY:{type:xe},NodeWidth:{type:xe},NodeHeight:{type:xe},Graph:{type:Ee},SubgraphInstance:{type:String},SettingsInterface:{type:Ee},InputPins:{type:[Ee],inlined:!0},OutputPins:{type:[Ee],inlined:!0},bExposeToLibrary:{type:Boolean},bCanRenameNode:{type:Boolean},bCommentBubblePinned:{type:Boolean},bCommentBubbleVisible:{type:Boolean},NodeComment:{type:String},AdvancedPinDisplay:{type:Ce},EnabledState:{type:Ce},NodeGuid:{type:we},ErrorType:{type:xe},ErrorMsg:{type:String},CustomProperties:{type:[new ge(We,qe)]}};static{this.cleanupAttributes(this.attributes)}static nameRegex=/^(\w+?)(?:_(\d+))?$/;static sequencerScriptingNameRegex=/\/Script\/SequencerScripting\.MovieSceneScripting(.+)Channel/;static customPropertyGrammar=he.seq(he.regex(/CustomProperties\s+/),ye.grammarFor(void 0,this.attributes.CustomProperties.type[0])).map((([e,t])=>e=>{e.CustomProperties||(e.CustomProperties=[]),e.CustomProperties.push(t)}));static inlinedArrayEntryGrammar=he.seq(he.alt(ye.symbolQuoted.map((e=>[e,!0])),ye.symbol.map((e=>[e,!1]))),ye.regexMap(new RegExp("\\s*\\(\\s*(\\d+)\\s*\\)\\s*\\=\\s*"),(e=>Number(e[1])))).chain((([[e,t],i])=>ye.grammarFor(this.attributes[e]).map((n=>r=>{(r[e]??=[])[i]=n,be.objectSet(r,["attributes",e,"quoted"],t,!0),this.attributes[e]?.inlined||(r.attributes||fe.defineAttributes(r,{}),be.objectSet(r,["attributes",e,"inlined"],!0,!0))}))));static grammar=this.createGrammar();static createSubObjectGrammar(){return he.lazy((()=>this.createGrammar().map((e=>t=>t[se.subObjectAttributeNameFromEntity(e)]=e))))}static createGrammar(){return he.seq(he.regex(/Begin\s+Object/),he.seq(he.whitespace,he.alt(this.customPropertyGrammar,ye.createAttributeGrammar(this),ye.createAttributeGrammar(this,ye.attributeNameQuoted,void 0,((e,t,i)=>be.objectSet(e,["attributes",...t,"quoted"],!0,!0))),this.inlinedArrayEntryGrammar,this.createSubObjectGrammar())).map((([e,t])=>t)).many(),he.regex(/\s+End\s+Object/)).map((([e,t,i])=>{const n={};return t.forEach((e=>e(n))),new this(n)}))}static keyName(e){let t=Xe.#l[e];if(t)return t;if(t=be.numberFromText(e)?.toString(),t)return t;const i=e.match(/NumPad([a-zA-Z]+)/);return i&&(t=be.numberFromText(i[1]).toString(),t)?"Num "+t:void 0}static getMultipleObjectsGrammar(){return he.seq(he.optWhitespace,this.createGrammar(),he.seq(he.whitespace,this.createGrammar()).map((([e,t])=>t)).many(),he.optWhitespace).map((([e,t,i,n])=>[t,...i]))}constructor(e={},t=!1){let i=Object.keys(e);if(i.some((e=>e.startsWith(se.subObjectAttributeNamePrefix)))){let t=i.filter((e=>e.startsWith(se.subObjectAttributeNamePrefix))).reduce(((t,i)=>(t[i]=e[i],t)),{});e={...t,...e}}super(e,t),this.Class,this.Name,this.Archetype,this.ExportPath,this.ObjectRef,this.BlueprintElementType,this.BlueprintElementInstance,this.PinTags,this.PinNames,this.AxisKey,this.InputAxisKey,this.NumAdditionalInputs,this.bIsPureFunc,this.bIsConstFunc,this.bIsCaseSensitive,this.VariableReference,this.SelfContextInfo,this.DelegatePropertyName,this.DelegateOwnerClass,this.ComponentPropertyName,this.EventReference,this.FunctionReference,this.CustomFunctionName,this.TargetType,this.MacroGraphReference,this.Enum,this.EnumEntries,this.InputKey,this.MaterialFunction,this.bOverrideFunction,this.bInternalEvent,this.bConsumeInput,this.bExecuteWhenPaused,this.bOverrideParentBinding,this.bControl,this.bAlt,this.bShift,this.bCommand,this.CommentColor,this.bCommentBubbleVisible_InDetailsPanel,this.bColorCommentBubble,this.ProxyFactoryFunctionName,this.ProxyFactoryClass,this.ProxyClass,this.R,this.G,this.StructType,this.MaterialExpression,this.MaterialExpressionComment,this.MoveMode,this.TimelineName,this.TimelineGuid,this.SizeX,this.SizeY,this.Text,this.MaterialExpressionEditorX,this.MaterialExpressionEditorY,this.NodeTitle,this.NodeTitleColor,this.PositionX,this.PositionY,this.Node,this.PCGNode,this.HiGenGridSize,this.Operation,this.NodePosX,this.NodePosY,this.NodeWidth,this.NodeHeight,this.Graph,this.SubgraphInstance,this.SettingsInterface,this.InputPins,this.OutputPins,this.bExposeToLibrary,this.bCanRenameNode,this.bCommentBubblePinned,this.bCommentBubbleVisible,this.Text,this.NodeComment,this.AdvancedPinDisplay,this.EnabledState,this.NodeGuid,this.ErrorType,this.ErrorMsg,this.CustomProperties,this.Pins instanceof Array&&(this.Pins.forEach((e=>{const t=this[se.subObjectAttributeNameFromReference(e,!0)];if(t){const e=We.fromLegacyObject(t);e.LinkedTo=[],this.getCustomproperties(!0).push(e)}})),delete this.Pins),this.Class?.sanitize(),this.MacroGraphReference&&(this.MacroGraphReference.MacroGraph?.sanitize(),this.MacroGraphReference.GraphBlueprint?.sanitize());const n=this.getMaterialSubobject();if(n){const e=n;e.SizeX&&(e.SizeX.getter=()=>this.NodeWidth),e.SizeY&&(e.SizeY.getter=()=>this.NodeHeight),e.Text&&(e.Text.getter=()=>this.NodeComment),e.MaterialExpressionEditorX&&(e.MaterialExpressionEditorX.getter=()=>this.NodePosX),e.MaterialExpressionEditorY&&(e.MaterialExpressionEditorY.getter=()=>this.NodePosY)}const r=this.getPcgSubobject();r&&(r.PositionX&&(r.PositionX.getter=()=>this.NodePosX),r.PositionY&&(r.PositionY.getter=()=>this.NodePosY),Object.keys(this).filter((e=>e.startsWith(se.subObjectAttributeNamePrefix))).map((e=>this[e])).forEach((e=>{null!=e.Node&&e.Node.path})));let s=0,a=0;this.CustomProperties?.forEach(((e,t)=>{e.objectEntity=this,e.pinIndex=e.isInput()?s++:e.isOutput()?a++:t}))}getClass(){return(this.Class?.path?this.Class.path:this.Class?.type)??(this.ExportPath?.path?this.ExportPath.path:this.ExportPath?.type)??""}getType(){let e=this.getClass();return this.MacroGraphReference?.MacroGraph?.path?this.MacroGraphReference.MacroGraph.path:this.MaterialExpression?this.MaterialExpression.type:e}getObjectName(e=!1){return e?this.getNameAndCounter()[0]:this.Name}getNameAndCounter(){const e=this.getObjectName(!1).match(Xe.nameRegex);let t="",i=null;return e?(e.length>1&&(t=e[1]),e.length>2&&(i=parseInt(e[2])),[t,i]):["",0]}getCounter(){return this.getNameAndCounter()[1]}getNodeWidth(){return this.NodeWidth??this.isComment()?se.defaultCommentWidth:void 0}setNodeWidth(e){this.NodeWidth||(this.NodeWidth=new xe),this.NodeWidth.value=e}getNodeHeight(){return this.NodeHeight??this.isComment()?se.defaultCommentHeight:void 0}setNodeHeight(e){this.NodeHeight||(this.NodeHeight=new xe),this.NodeHeight.value=e}getNodePosX(){return this.NodePosX?.value??0}setNodePosX(e){this.NodePosX||(this.NodePosX=new xe),this.NodePosX.value=Math.round(e)}getNodePosY(){return this.NodePosY?.value??0}setNodePosY(e){this.NodePosY||(this.NodePosY=new xe),this.NodePosY.value=Math.round(e)}getCustomproperties(e=!1){return e&&!this.CustomProperties&&(this.CustomProperties=[]),this.CustomProperties??[]}getPinEntities(){return this.getCustomproperties().filter((e=>e.constructor===We))}switchTarget(){const e=this.getClass().match(se.switchTargetPattern);if(e)return e[1]}isEvent(){switch(this.getClass()){case se.paths.actorBoundEvent:case se.paths.componentBoundEvent:case se.paths.customEvent:case se.paths.event:case se.paths.inputAxisKeyEvent:case se.paths.inputVectorAxisEvent:return!0}return!1}isComment(){switch(this.getClass()){case se.paths.comment:case se.paths.materialGraphNodeComment:return!0}return!1}isMaterial(){return this.getClass()===se.paths.materialGraphNode}getMaterialSubobject(){const e=this.MaterialExpression??this.MaterialExpressionComment;return e?this[se.subObjectAttributeNameFromReference(e,!0)]:null}isPcg(){return this.getClass()===se.paths.pcgEditorGraphNode||this.getPcgSubobject()}getPcgSubobject(){const e=this.PCGNode;return e?this[se.subObjectAttributeNameFromReference(e,!0)]:null}getSettingsObject(){const e=this.SettingsInterface;return e?this[se.subObjectAttributeNameFromReference(e,!0)]:null}getSubgraphObject(){const e=this.SubgraphInstance;return e?this[se.subObjectAttributeNameFromName(e)]:null}isDevelopmentOnly(){const e=this.getClass();return"DevelopmentOnly"===this.EnabledState?.toString()||e.includes("Debug",Math.max(0,e.lastIndexOf(".")))}getHIDAttribute(){return this.InputKey??this.AxisKey??this.InputAxisKey}getDelegatePin(){return this.getCustomproperties().find((e=>"delegate"===e.PinType.PinCategory))}nodeDisplayName(){let e;switch(this.getType()){case se.paths.asyncAction:if(this.ProxyFactoryFunctionName)return be.formatStringName(this.ProxyFactoryFunctionName);case se.paths.actorBoundEvent:case se.paths.componentBoundEvent:return`${be.formatStringName(this.DelegatePropertyName)} (${this.ComponentPropertyName??"Unknown"})`;case se.paths.createDelegate:return"Create Event";case se.paths.customEvent:if(this.CustomFunctionName)return this.CustomFunctionName;case se.paths.dynamicCast:return this.TargetType?`Cast To ${this.TargetType?.getName()}`:"Bad cast node";case se.paths.enumLiteral:return`Literal enum ${this.Enum?.getName()}`;case se.paths.event:return`Event ${(this.EventReference?.MemberName??"").replace(/^Receive/,"")}`;case se.paths.executionSequence:return"Sequence";case se.paths.forEachElementInEnum:return`For Each ${this.Enum?.getName()}`;case se.paths.forEachLoopWithBreak:return"For Each Loop with Break";case se.paths.functionEntry:return"UserConstructionScript"===this.FunctionReference?.MemberName?"Construction Script":this.FunctionReference?.MemberName;case se.paths.functionResult:return"Return Node";case se.paths.ifThenElse:return"Branch";case se.paths.makeStruct:if(this.StructType)return`Make ${this.StructType.getName()}`;case se.paths.materialExpressionConstant:e??=[this.getCustomproperties().find((e=>"Value"==e.PinName))?.DefaultValue];case se.paths.materialExpressionConstant2Vector:e??=[this.getCustomproperties().find((e=>"X"==e.PinName))?.DefaultValue,this.getCustomproperties().find((e=>"Y"==e.PinName))?.DefaultValue];case se.paths.materialExpressionConstant3Vector:if(!e){const t=this.getCustomproperties().find((e=>"Constant"==e.PinName))?.DefaultValue;e=[t.X,t.Y,t.Z]}case se.paths.materialExpressionConstant4Vector:if(!e){const t=this.getCustomproperties().find((e=>"Constant"==e.PinName))?.DefaultValue;e=[t.R,t.G,t.B,t.A].map((e=>e.valueOf()))}if(e.length>0)return e.map((e=>be.printExponential(e))).reduce(((e,t)=>e+","+t));break;case se.paths.materialExpressionLogarithm:return"Ln";case se.paths.materialExpressionLogarithm10:return"Log10";case se.paths.materialExpressionLogarithm2:return"Log2";case se.paths.materialExpressionMaterialFunctionCall:const t=this.getMaterialSubobject()?.MaterialFunction;if(t)return t.getName();break;case se.paths.materialExpressionSquareRoot:return"Sqrt";case se.paths.pcgEditorGraphNodeInput:return"Input";case se.paths.pcgEditorGraphNodeOutput:return"Output";case se.paths.spawnActorFromClass:return`SpawnActor ${be.formatStringName(this.getCustomproperties().find((e=>"class"==e.getType()))?.DefaultObject?.getName()??"NONE")}`;case se.paths.switchEnum:return`Switch on ${this.Enum?.getName()??"Enum"}`;case se.paths.switchInteger:return"Switch on Int";case se.paths.variableGet:return"";case se.paths.variableSet:return"SET"}let t=this.switchTarget();if(t)return"E"!==t[0]&&(t=be.formatStringName(t)),`Switch on ${t}`;if(this.isComment())return this.NodeComment;const i=this.getHIDAttribute();if(i){const e=i.toString();let t=Xe.keyName(e)??be.formatStringName(e);return this.getClass()===se.paths.inputDebugKey?t="Debug Key "+t:this.getClass()===se.paths.getInputAxisKeyValue&&(t="Get "+t),t}if(this.getClass()===se.paths.macro)return be.formatStringName(this.MacroGraphReference?.getMacroName());if(this.isMaterial()&&this.getMaterialSubobject()){let e=this.getMaterialSubobject().nodeDisplayName();return e=e.match(/Material Expression (.+)/)?.[1]??e,e}if(this.isPcg()&&this.getPcgSubobject()){let e=this.getPcgSubobject();return e.NodeTitle?e.NodeTitle:e.nodeDisplayName()}const n=this.getSubgraphObject();if(n)return n.Graph.getName();const r=this.getSettingsObject();if(r){if(r.ExportPath.type===se.paths.pcgHiGenGridSizeSettings)return`Grid Size: ${r.HiGenGridSize?.toString().match(/\d+/)?.[0]?.concat("00")??r.HiGenGridSize?.toString().match(/^\w+$/)?.[0]??"256"}`;if(r.BlueprintElementInstance)return be.formatStringName(r.BlueprintElementType.getName());if(r.Operation){const e=r.Name.match(/PCGMetadata(\w+)Settings_\d+/);if(e)return be.formatStringName(e[1]+": "+r.Operation)}const e=r.getSubgraphObject();if(e&&e.Graph)return e.Graph.getName()}let s=this.FunctionReference?.MemberName;if(s){const e=this.FunctionReference.MemberParent?.path??"";switch(s){case"AddKey":let t=e.match(Xe.sequencerScriptingNameRegex);if(t)return`Add Key (${be.formatStringName(t[1])})`;case"Concat_StrStr":return"Append"}const t=s.match(se.lineTracePattern);if(t)return"Line Trace"+("Multi"===t[1]?" Multi ":" ")+(""===t[2]?"By Channel":be.formatStringName(t[2]));switch(e){case se.paths.blueprintGameplayTagLibrary:case se.paths.kismetMathLibrary:case se.paths.slateBlueprintLibrary:case se.paths.timeManagementBlueprintLibrary:const e=s.match(/[BF]([A-Z]\w+)/);switch(e&&(s=e[1]),s){case"Abs":return"ABS";case"BooleanAND":return"AND";case"BooleanNAND":return"NAND";case"BooleanOR":return"OR";case"Exp":return"e";case"LineTraceSingle":return"Line Trace By Channel";case"Max":case"MaxInt64":return"MAX";case"Min":case"MinInt64":return"MIN";case"Not_PreBool":return"NOT";case"Sin":return"SIN";case"Sqrt":return"SQRT";case"Square":return"^2";case"CrossProduct2D":return"cross";case"Vector4_CrossProduct3":return"cross3";case"DotProduct2D":case"Vector4_DotProduct":return"dot";case"Vector4_DotProduct3":return"dot3"}if(s.startsWith("Add_"))return"+";if(s.startsWith("And_"))return"&";if(s.startsWith("Conv_"))return"";if(s.startsWith("Cross_"))return"cross";if(s.startsWith("Divide_"))return String.fromCharCode(247);if(s.startsWith("Dot_"))return"dot";if(s.startsWith("EqualEqual_"))return"==";if(s.startsWith("Greater_"))return">";if(s.startsWith("GreaterEqual_"))return">=";if(s.startsWith("Less_"))return"<";if(s.startsWith("LessEqual_"))return"<=";if(s.startsWith("Multiply_"))return String.fromCharCode(10799);if(s.startsWith("Not_"))return"~";if(s.startsWith("NotEqual_"))return"!=";if(s.startsWith("Or_"))return"|";if(s.startsWith("Percent_"))return"%";if(s.startsWith("Subtract_"))return"-";if(s.startsWith("Xor_"))return"^";break;case se.paths.blueprintSetLibrary:{const e=s.match(/Set_(\w+)/);if(e)return be.formatStringName(e[1]).toUpperCase()}break;case se.paths.blueprintMapLibrary:{const e=s.match(/Map_(\w+)/);if(e)return be.formatStringName(e[1]).toUpperCase()}break;case se.paths.kismetArrayLibrary:{const e=s.match(/Array_(\w+)/);if(e)return e[1].toUpperCase()}}return be.formatStringName(s)}return this.ObjectRef?this.ObjectRef.getName():be.formatStringName(this.getNameAndCounter()[0])}nodeColor(){switch(this.getType()){case se.paths.materialExpressionConstant2Vector:case se.paths.materialExpressionConstant3Vector:case se.paths.materialExpressionConstant4Vector:return se.nodeColors.yellow;case se.paths.makeStruct:return se.nodeColors.darkBlue;case se.paths.materialExpressionMaterialFunctionCall:return se.nodeColors.blue;case se.paths.materialExpressionTextureSample:return se.nodeColors.darkTurquoise;case se.paths.materialExpressionTextureCoordinate:case se.paths.pcgEditorGraphNodeInput:case se.paths.pcgEditorGraphNodeOutput:return se.nodeColors.red}switch(this.getClass()){case se.paths.callFunction:return this.bIsPureFunc?se.nodeColors.green:se.nodeColors.blue;case se.paths.dynamicCast:return se.nodeColors.turquoise;case se.paths.inputDebugKey:case se.paths.inputKey:return se.nodeColors.red;case se.paths.createDelegate:case se.paths.enumLiteral:case se.paths.makeArray:case se.paths.makeMap:case se.paths.materialGraphNode:case se.paths.select:return se.nodeColors.green;case se.paths.executionSequence:case se.paths.ifThenElse:case se.paths.macro:case se.paths.multiGate:return se.nodeColors.gray;case se.paths.functionEntry:case se.paths.functionResult:return se.nodeColors.violet;case se.paths.timeline:return se.nodeColors.yellow}if(this.switchTarget())return se.nodeColors.lime;if(this.isEvent())return se.nodeColors.red;if(this.isComment())return(this.CommentColor?this.CommentColor:Ne.getWhite()).toDimmedColor().toCSSRGBValues();const e=this.getPcgSubobject();return e&&e.NodeTitleColor?e.NodeTitleColor.toDimmedColor(.1).toCSSRGBValues():this.bIsPureFunc?se.nodeColors.green:se.nodeColors.blue}nodeIcon(){if(this.isMaterial()||this.isPcg())return;switch(this.getType()){case se.paths.addDelegate:case se.paths.asyncAction:case se.paths.callDelegate:case se.paths.createDelegate:case se.paths.functionEntry:case se.paths.functionResult:return Ke.node;case se.paths.customEvent:return Ke.event;case se.paths.doN:return Ke.doN;case se.paths.doOnce:return Ke.doOnce;case se.paths.dynamicCast:return Ke.cast;case se.paths.enumLiteral:return Ke.enum;case se.paths.event:return Ke.event;case se.paths.executionSequence:case se.paths.multiGate:return Ke.sequence;case se.paths.flipflop:return Ke.flipflop;case se.paths.forEachElementInEnum:case se.paths.forLoop:case se.paths.forLoopWithBreak:case se.paths.whileLoop:return Ke.loop;case se.paths.forEachLoop:case se.paths.forEachLoopWithBreak:return Ke.forEachLoop;case se.paths.ifThenElse:return Ke.branchNode;case se.paths.isValid:return Ke.questionMark;case se.paths.makeArray:return Ke.makeArray;case se.paths.makeMap:return Ke.makeMap;case se.paths.makeSet:return Ke.makeSet;case se.paths.makeStruct:return Ke.makeStruct;case se.paths.select:return Ke.select;case se.paths.spawnActorFromClass:return Ke.spawnActor;case se.paths.timeline:return Ke.timer}if(this.switchTarget())return Ke.switch;if(this.nodeDisplayName().startsWith("Break"))return Ke.breakStruct;if(this.getClass()===se.paths.macro)return Ke.macro;const e=this.getHIDAttribute()?.toString();return e?e.includes("Mouse")?Ke.mouse:e.includes("Gamepad_Special")?Ke.keyboard:e.includes("Gamepad")||e.includes("Steam")?Ke.gamepad:e.includes("Touch")?Ke.touchpad:Ke.keyboard:this.getDelegatePin()?Ke.event:this.ObjectRef?.type===se.paths.ambientSound?Ke.sound:Ke.functionSymbol}additionalPinInserter(){let e,t,i;switch(this.getType()){case se.paths.commutativeAssociativeBinaryOperator:case se.paths.promotableOperator:switch(this.FunctionReference?.MemberName){default:if(!(this.FunctionReference?.MemberName?.startsWith("Add_")||this.FunctionReference?.MemberName?.startsWith("Subtract_")||this.FunctionReference?.MemberName?.startsWith("Multiply_")||this.FunctionReference?.MemberName?.startsWith("Divide_")))break;case"And_Int64Int64":case"And_IntInt":case"BMax":case"BMin":case"BooleanAND":case"BooleanNAND":case"BooleanOR":case"Concat_StrStr":case"FMax":case"FMin":case"Max":case"MaxInt64":case"Min":case"MinInt64":case"Or_Int64Int64":case"Or_IntInt":e??=()=>this.getPinEntities().filter((e=>e.isInput())),t??=e=>e.PinName.match(/^\s*([A-Z])\s*$/)?.[1]?.charCodeAt(0)-"A".charCodeAt(0),i??=(t,i=-1,n=-1)=>{const r=String.fromCharCode(t>=0?t:n+"A".charCodeAt(0)+1);return this.NumAdditionalInputs=e().length-1,r}}break;case se.paths.multiGate:e??=()=>this.getPinEntities().filter((e=>e.isOutput())),t??=e=>Number(e.PinName.match(/^\s*Out[_\s]+(\d+)\s*$/i)?.[1]),i??=(e,t=-1,i=-1)=>`Out ${e>=0?e:t>0?"Out 0":i+1}`;break;case se.paths.switchInteger:e??=()=>this.getPinEntities().filter((e=>e.isOutput())),t??=e=>Number(e.PinName.match(/^\s*(\d+)\s*$/)?.[1]),i??=(e,t=-1,i=-1)=>(e<0?i+1:e).toString();break;case se.paths.switchGameplayTag:i??=(e,t=-1,i=-1)=>{const n=`Case_${e>=0?e:t>0?"0":i+1}`;return this.PinNames??=[],this.PinNames.push(n),delete this.PinTags[this.PinTags.length-1],this.PinTags[this.PinTags.length]=null,n};case se.paths.switchName:case se.paths.switchString:e??=()=>this.getPinEntities().filter((e=>e.isOutput())),t??=e=>Number(e.PinName.match(/^\s*Case[_\s]+(\d+)\s*$/i)?.[1]),i??=(e,t=-1,i=-1)=>{const n=`Case_${e>=0?e:t>0?"0":i+1}`;return this.PinNames??=[],this.PinNames.push(n),n}}if(e)return()=>{let n=Number.MAX_SAFE_INTEGER,r=Number.MIN_SAFE_INTEGER,s=[];const a=e().reduce(((e,i)=>{const a=t(i);if(isNaN(a)){if(void 0===e)return i}else if(s.push(a),n=Math.min(a,n),a>r)return r=a,i;return e}),void 0);if(n!==Number.MAX_SAFE_INTEGER&&r!==Number.MIN_SAFE_INTEGER||(n=void 0,r=void 0),!a)return null;s.sort(((e,t)=>e{const t=e-o>1;return o=e,t}));const u=new We(a);return u.PinId=we.generateGuid(),u.PinName=i(l,n,r),u.PinToolTip=void 0,this.CustomProperties.push(u),u}}}class Ye{static same=e=>e;static notWrapped=(e,t)=>t;static bracketsWrapped=(e,t)=>`(${t})`;constructor(e,t=((e,t)=>t),i=",",n=!1,r="=",s=Ye.same){this.entityType=e,this.wrap=t,this.attributeSeparator=i,this.trailingSeparator=n,this.attributeValueConjunctionSign=r,this.attributeKeyPrinter=s}read(e){return this.doRead(e.trim())}write(e,t=!1){return this.doWrite(e,t)}doRead(e){const t=ye.grammarFor(void 0,this.entityType).parse(e);if(!t.status)throw new Error(`Error when trying to parse the entity ${this.entityType.prototype.constructor.name}.`);return t.value}doWrite(e,t=!1,i="",n=this.wrap,r=this.attributeSeparator,s=this.trailingSeparator,a=this.attributeValueConjunctionSign,o=this.attributeKeyPrinter){let l="";const u=fe.getAttributes(e),c=Object.keys(e);let h=!0;for(const n of c){const s=e[n];if(void 0!==s&&this.showProperty(e,n)){let c=e instanceof Array?`(${n})`:n;u[n]?.quoted&&(c=`"${c}"`);const p=be.isSerialized(e,n);if(h?h=!1:l+=r,u[n]?.inlined){l+=this.doWrite(s,t,i,Ye.notWrapped,r,!1,a,u[n].type instanceof Array?e=>o(`${c}${e}`):e=>o(`${c}.${e}`));continue}const d=o(c),m=r.includes("\n")?i:"";l+=(d.length?m+d+this.attributeValueConjunctionSign:"")+(p?`"${this.doWriteValue(s,!0,i)}"`:this.doWriteValue(s,t,i))}}return s&&l.length&&(l+=r),n(e,l)}doWriteValue(e,t,i=""){const n=be.getType(e),r=me.getSerializer(n);if(!r)throw new Error(`Unknown value type "${n.name}", a serializer must be registered in the SerializerFactory class, check initializeSerializerFactory.js`);return r.doWrite(e,t,i)}showProperty(e,t){const i=this.entityType.attributes[t];return i?.constructor!==Object||!i.ignored}}class Qe extends Ye{constructor(e=Xe){super(e,void 0,"\n",!0,void 0,Ye.same)}showProperty(e,t){switch(t){case"Class":case"Name":case"Archetype":case"ExportPath":case"CustomProperties":return!1}return super.showProperty(e,t)}write(e,t=!1){return this.doWrite(e,t)+"\n"}doRead(e){const t=ye.grammarFor(void 0,this.entityType).parse(e);if(!t.status)throw new Error("Error when trying to parse the object.");return t.value}readMultiple(e){const t=Xe.getMultipleObjectsGrammar().parse(e);if(!t.status)throw new Error("Error when trying to parse the object.");return t.value}doWrite(e,t,i="",n=this.wrap,r=this.attributeSeparator,s=this.trailingSeparator,a=this.attributeValueConjunctionSign,o=this.attributeKeyPrinter){const l=i+se.indentation;if(!(e instanceof Xe))return super.doWrite(e,t,i,n,r,s,a,(t=>e[t]instanceof Xe?"":o(t)));return i+"Begin Object"+(e.Class?.type||e.Class?.path?` Class=${this.doWriteValue(e.Class,t)}`:"")+(e.Name?` Name=${this.doWriteValue(e.Name,t)}`:"")+(e.Archetype?` Archetype=${this.doWriteValue(e.Archetype,t)}`:"")+(e.ExportPath?.type||e.ExportPath?.path?` ExportPath=${this.doWriteValue(e.ExportPath,t)}`:"")+"\n"+super.doWrite(e,t,l,n,r,!0,a,(t=>e[t]instanceof Xe?"":o(t)))+e.getCustomproperties().map((e=>l+o("CustomProperties ")+me.getSerializer(We).doWrite(e,t)+this.attributeSeparator)).join("")+i+"End Object"}}class Je extends ae{static#u=new Qe;#c;constructor(e,t,i={}){i.listenOnFocus??=!0,i.unlistenOnTextEdit??=!0,super(e,t,i);let n=this;this.#c=()=>n.copied()}listenEvents(){window.addEventListener("copy",this.#c)}unlistenEvents(){window.removeEventListener("copy",this.#c)}getSerializedText(){return this.blueprint.getNodes(!0).map((e=>Je.#u.write(e.entity,!1))).join("")}copied(){const e=this.getSerializedText();return navigator.clipboard.writeText(e),e}}class et extends ae{static#u=new Qe;#h;constructor(e,t,i={}){i.listenOnFocus??=!0,i.unlistenOnTextEdit??=!0,super(e,t,i);let n=this;this.#h=()=>n.cut()}listenEvents(){window.addEventListener("cut",this.#h)}unlistenEvents(){window.removeEventListener("cut",this.#h)}getSerializedText(){return this.blueprint.getNodes(!0).map((e=>et.#u.write(e.entity,!1))).join("")}cut(){this.blueprint.template.getCopyInputObject().copied(),this.blueprint.removeGraphElement(...this.blueprint.getNodes(!0))}}class tt{element;get blueprint(){return this.element.blueprint}#p=[];get inputObjects(){return this.#p}initialize(e){this.element=e}createInputObjects(){return[]}setup(){this.#p.forEach((e=>e.setup()))}cleanup(){this.#p.forEach((e=>e.cleanup()))}willUpdate(e){}update(e){}render(){return O``}firstUpdated(e){}updated(e){}inputSetup(){this.#p=this.createInputObjects()}}class it extends fe{static attributes={...super.attributes,ActionName:{default:""},bShift:{default:!1},bCtrl:{default:!1},bAlt:{default:!1},bCmd:{default:!1},Key:{type:Ce}};static{this.cleanupAttributes(this.attributes)}static grammar=this.createGrammar();static createGrammar(){return he.alt(Ce.grammar.map((e=>new this({Key:e}))),ye.createEntityGrammar(this))}constructor(e={}){super(e,!0),this.ActionName,this.bShift,this.bCtrl,this.bAlt,this.bCmd,this.Key}}class nt extends ae{static#d=e=>{};#m;pressedKey="";constructor(e,t,i={},n=nt.#d,r=nt.#d){i.activationKeys??=[],i.consumeEvent??=!0,i.listenOnFocus??=!0,i.unlistenOnTextEdit??=!0,i.activationKeys instanceof Array||(i.activationKeys=[i.activationKeys]),i.activationKeys=i.activationKeys.map((e=>{if(e instanceof it)return e;if("string"==typeof e){const t=it.createGrammar().parse(e);if(t.status)return t.value}throw new Error("Unexpected key value")})),super(e,t,i),this.onKeyDown=n,this.onKeyUp=r,this.#m=this.options.activationKeys??[];let s=this;this.keyDownHandler=e=>{s.#m.some((t=>(e=>e.bShift||"LeftShift"==e.Key||"RightShift"==e.Key)(t)==e.shiftKey&&(e=>e.bCtrl||"LeftControl"==e.Key||"RightControl"==e.Key)(t)==e.ctrlKey&&(e=>e.bAlt||"LeftAlt"==e.Key||"RightAlt"==e.Key)(t)==e.altKey&&se.Keys[t.Key.value]==e.code))&&(this.consumeEvent&&(e.preventDefault(),e.stopImmediatePropagation()),this.pressedKey=e.code,s.fire(),document.removeEventListener("keydown",s.keyDownHandler),document.addEventListener("keyup",s.keyUpHandler))},this.keyUpHandler=e=>{s.#m.some((t=>t.bShift&&"Shift"==e.key||t.bCtrl&&"Control"==e.key||t.bAlt&&"Alt"==e.key||t.bCmd&&"Meta"==e.key||se.Keys[t.Key.value]==e.code))&&(this.consumeEvent&&e.stopImmediatePropagation(),s.unfire(),this.pressedKey="",document.removeEventListener("keyup",this.keyUpHandler),document.addEventListener("keydown",this.keyDownHandler))}}listenEvents(){document.addEventListener("keydown",this.keyDownHandler)}unlistenEvents(){document.removeEventListener("keydown",this.keyDownHandler)}fire(){this.onKeyDown(this)}unfire(){this.onKeyUp(this)}}class rt{static deleteNodes="Delete";static duplicateNodes="(bCtrl=True,Key=D)";static enableLinkDelete="LeftAlt";static enableZoomIn=["LeftControl","RightControl"];static selectAllNodes="(bCtrl=True,Key=A)"}class st extends ae{#g=[0,0];get location(){return this.#g}#b;get enablerKey(){return this.#b}#f=!0;get enablerActivated(){return this.#f}constructor(e,t,i={}){i.ignoreTranslateCompensate??=!1,i.ignoreScale??=!1,i.movementSpace??=t.getGridDOMElement()??document.documentElement,super(e,t,i),this.movementSpace=i.movementSpace,i.enablerKey&&(this.#b=i.enablerKey,this.#b.onKeyDown=()=>this.#f=!0,this.#b.onKeyUp=()=>this.#f=!1,this.#b.consumeEvent=!1,this.#b.listenEvents(),this.#f=!1)}setLocationFromEvent(e){let t=be.convertLocation([e.clientX,e.clientY],this.movementSpace,this.options.ignoreScale);return t=this.options.ignoreTranslateCompensate?t:this.blueprint.compensateTranslation(t[0],t[1]),this.#g[0]=t[0],this.#g[1]=t[1],this.#g}}class at extends st{static#d=e=>{};#v=0;get variation(){return this.#v}#y=e=>{this.enablerKey&&!this.enablerActivated||(e.preventDefault(),this.#v=e.deltaY,this.setLocationFromEvent(e),this.wheel())};#w=e=>e.preventDefault();constructor(e,t,i={},n=at.#d){i.listenOnFocus=!0,i.strictTarget??=!1,super(e,t,i),this.strictTarget=i.strictTarget,this.onWheel=n}listenEvents(){this.movementSpace.addEventListener("wheel",this.#y,!1),this.movementSpace.parentElement?.addEventListener("wheel",this.#w)}unlistenEvents(){this.movementSpace.removeEventListener("wheel",this.#y,!1),this.movementSpace.parentElement?.removeEventListener("wheel",this.#w)}wheel(){this.onWheel(this)}}class ot extends at{#E=0;#S=!1;get enableZoonIn(){return this.#S}set enableZoonIn(e){e!=this.#S&&(this.#S=e)}wheel(){if(this.#E+=-this.variation,Math.abs(this.#E)0||(e+=Math.sign(this.#E),this.blueprint.setZoom(e,this.location),this.#E=0)}}class lt extends nt{#C;constructor(e,t,i={}){i.activationKeys=rt.enableZoomIn,super(e,t,i)}fire(){this.#C=this.blueprint.template.getZoomInputObject(),this.#C.enableZoonIn=!0}unfire(){this.#C.enableZoonIn=!1}}class ut extends ne{#t;get blueprint(){return this.#t}set blueprint(e){this.#t=e}#x;get entity(){return this.#x}set entity(e){this.#x=e}#P;get template(){return this.#P}isInitialized=!1;isSetup=!1;inputObjects=[];initialize(e,t){this.requestUpdate(),this.#x=e,this.#P=t,this.#P.initialize(this),this.isConnected&&this.updateComplete.then((()=>this.setup())),this.isInitialized=!0}connectedCallback(){super.connectedCallback(),this.blueprint=this.closest("ueb-blueprint"),this.isInitialized&&(this.requestUpdate(),this.updateComplete.then((()=>this.setup())))}disconnectedCallback(){super.disconnectedCallback(),this.isSetup&&this.updateComplete.then((()=>this.cleanup())),this.acknowledgeDelete()}createRenderRoot(){return this}setup(){this.template.setup(),this.isSetup=!0}cleanup(){this.template.cleanup(),this.isSetup=!1}willUpdate(e){super.willUpdate(e),this.template.willUpdate(e)}update(e){super.update(e),this.template.update(e)}render(){return this.template.render()}firstUpdated(e){super.firstUpdated(e),this.template.firstUpdated(e),this.template.inputSetup()}updated(e){super.updated(e),this.template.updated(e)}acknowledgeDelete(){let e=new CustomEvent(se.removeEventName);this.dispatchEvent(e)}isSameGraph(e){return this.blueprint&&this.blueprint==e?.blueprint}}class ct extends ut{static properties={...super.properties,locationX:{type:Number,attribute:!1},locationY:{type:Number,attribute:!1},sizeX:{type:Number,attribute:!1},sizeY:{type:Number,attribute:!1}};static dragEventName=se.dragEventName;static dragGeneralEventName=se.dragGeneralEventName;constructor(){super(),this.locationX=0,this.locationY=0,this.sizeX=0,this.sizeY=0}computeSizes(){const e=this.getBoundingClientRect();this.sizeX=this.blueprint.scaleCorrect(e.width),this.sizeY=this.blueprint.scaleCorrect(e.height)}firstUpdated(e){super.firstUpdated(e),this.computeSizes()}setLocation(e,t,i=!0){const n=e-this.locationX,r=t-this.locationY;if(this.locationX=e,this.locationY=t,this.blueprint&&i){const e=new CustomEvent(this.constructor.dragEventName,{detail:{value:[n,r]},bubbles:!1,cancelable:!0});this.dispatchEvent(e)}}addLocation(e,t,i=!0){this.setLocation(this.locationX+e,this.locationY+t,i)}acknowledgeDrag(e){const t=new CustomEvent(this.constructor.dragGeneralEventName,{detail:{value:e},bubbles:!0,cancelable:!0});this.dispatchEvent(t)}snapToGrid(){const e=be.snapToGrid(this.locationX,this.locationY,se.gridSize);this.locationX==e[0]&&this.locationY==e[1]||this.setLocation(e[0],e[1])}topBoundary(e=!1){return this.template.topBoundary(e)}rightBoundary(e=!1){return this.template.rightBoundary(e)}bottomBoundary(e=!1){return this.template.bottomBoundary(e)}leftBoundary(e=!1){return this.template.leftBoundary(e)}}class ht extends st{#N=e=>{if(this.blueprint.setFocused(!0),e.button===this.options.clickButton)this.options.strictTarget&&e.target!=e.currentTarget||(this.consumeEvent&&e.stopImmediatePropagation(),this.#k.addEventListener("mousemove",this.#L),document.addEventListener("mouseup",this.#A),this.setLocationFromEvent(e),this.clickedPosition[0]=this.location[0],this.clickedPosition[1]=this.location[1],this.blueprint.mousePosition[0]=this.location[0],this.blueprint.mousePosition[1]=this.location[1],this.target instanceof ct&&(this.clickedOffset=[this.clickedPosition[0]-this.target.locationX,this.clickedPosition[1]-this.target.locationY]),this.clicked(this.clickedPosition));else this.options.exitAnyButton||this.#A(e)};#L=e=>{this.consumeEvent&&e.stopImmediatePropagation(),this.#k.removeEventListener("mousemove",this.#L),this.#k.addEventListener("mousemove",this.#M);const t=this.getEvent(se.trackingMouseEventName.begin);this.#T=0==this.target.dispatchEvent(t),this.setLocationFromEvent(e),this.lastLocation=be.snapToGrid(this.clickedPosition[0],this.clickedPosition[1],this.stepSize),this.startDrag(this.location),this.started=!0};#M=e=>{this.consumeEvent&&e.stopImmediatePropagation();const t=this.setLocationFromEvent(e),i=[e.movementX,e.movementY];if(this.dragTo(t,i),this.#T&&(this.blueprint.mousePosition=t),this.options.scrollGraphEdge){const e=Math.sqrt(i[0]*i[0]+i[1]*i[1]),n=this.blueprint.scaleCorrect(se.edgeScrollThreshold),r=this.blueprint.template.gridLeftVisibilityBoundary()+n,s=this.blueprint.template.gridRightVisibilityBoundary()-n;let a=0;t[0]s&&(a=t[0]-s);const o=this.blueprint.template.gridTopVisibilityBoundary()+n,l=this.blueprint.template.gridBottomVisibilityBoundary()-n;let u=0;t[1]l&&(u=t[1]-l),a=be.clamp(this.blueprint.scaleCorrectReverse(a)**3*e*.6,-20,20),u=be.clamp(this.blueprint.scaleCorrectReverse(u)**3*e*.6,-20,20),this.blueprint.scrollDelta(a,u)}};#A=e=>{if(!this.options.exitAnyButton||e.button==this.options.clickButton){if(this.consumeEvent&&e.stopImmediatePropagation(),this.#k.removeEventListener("mousemove",this.#L),this.#k.removeEventListener("mousemove",this.#M),document.removeEventListener("mouseup",this.#A),this.started&&this.endDrag(),this.unclicked(),this.#T){const e=this.getEvent(se.trackingMouseEventName.end);this.target.dispatchEvent(e),this.#T=!1}this.started=!1}};#T=!1;#k;#B;clickedOffset=[0,0];clickedPosition=[0,0];lastLocation=[0,0];started=!1;stepSize=1;constructor(e,t,i={}){i.clickButton??=se.mouseClickButton,i.consumeEvent??=!0,i.draggableElement??=e,i.exitAnyButton??=!0,i.moveEverywhere??=!1,i.movementSpace??=t?.getGridDOMElement(),i.repositionOnClick??=!1,i.scrollGraphEdge??=!1,i.strictTarget??=!1,super(e,t,i),this.stepSize=parseInt(i?.stepSize??se.gridSize),this.#k=this.options.moveEverywhere?document.documentElement:this.movementSpace,this.#B=this.options.draggableElement,this.listenEvents()}listenEvents(){super.listenEvents(),this.#B.addEventListener("mousedown",this.#N),this.options.clickButton===se.mouseRightClickButton&&this.#B.addEventListener("contextmenu",(e=>e.preventDefault()))}unlistenEvents(){super.unlistenEvents(),this.#B.removeEventListener("mousedown",this.#N)}getEvent(e){return new CustomEvent(e,{detail:{tracker:this},bubbles:!0,cancelable:!0})}clicked(e){}startDrag(e){}dragTo(e,t){}endDrag(){}unclicked(e){}}class pt extends ht{startDrag(){this.blueprint.scrolling=!0}dragTo(e,t){this.blueprint.scrollDelta(-t[0],-t[1])}endDrag(){this.blueprint.scrolling=!1}}class dt extends st{#I=null;#$=e=>{e.preventDefault(),this.setLocationFromEvent(e),this.blueprint.mousePosition[0]=this.location[0],this.blueprint.mousePosition[1]=this.location[1]};#G=e=>{this.#I||(e.preventDefault(),this.#I=e.detail.tracker,this.unlistenMouseMove())};#H=e=>{this.#I==e.detail.tracker&&(e.preventDefault(),this.#I=null,this.listenMouseMove())};constructor(e,t,i={}){i.listenOnFocus=!0,super(e,t,i)}listenMouseMove(){this.target.addEventListener("mousemove",this.#$)}unlistenMouseMove(){this.target.removeEventListener("mousemove",this.#$)}listenEvents(){this.listenMouseMove(),this.blueprint.addEventListener(se.trackingMouseEventName.begin,this.#G),this.blueprint.addEventListener(se.trackingMouseEventName.end,this.#H)}unlistenEvents(){this.unlistenMouseMove(),this.blueprint.removeEventListener(se.trackingMouseEventName.begin,this.#G),this.blueprint.removeEventListener(se.trackingMouseEventName.end,this.#H)}}class mt{static#O=new Map;static registerElement(e,t){mt.#O.set(e,t)}static getConstructor(e){return mt.#O.get(e)}}class gt extends ae{static#u=new Qe;#D;constructor(e,t,i={}){i.listenOnFocus??=!0,i.unlistenOnTextEdit??=!0,super(e,t,i);let n=this;this.#D=e=>n.pasted(e.clipboardData.getData("Text"))}listenEvents(){window.addEventListener("paste",this.#D)}unlistenEvents(){window.removeEventListener("paste",this.#D)}pasted(e){let t=0,i=0,n=0,r=gt.#u.readMultiple(e).map((e=>{let r=mt.getConstructor("ueb-node").newObject(e);return t+=r.locationY,i+=r.locationX,++n,r}));t/=n,i/=n,r.length>0&&this.blueprint.unselectAll();let s=this.blueprint.mousePosition;return r.forEach((e=>{e.addLocation(s[0]-i,s[1]-t),e.snapToGrid(),e.setSelected(!0)})),this.blueprint.addGraphElement(...r),!0}}class bt extends ht{constructor(e,t,i={}){i.scrollGraphEdge??=!0,super(e,t,i),this.selectorElement=this.blueprint.template.selectorElement}startDrag(){this.selectorElement.beginSelect(this.clickedPosition)}dragTo(e,t){this.selectorElement.selectTo(e)}endDrag(){this.started&&this.selectorElement.endSelect()}unclicked(){this.started||this.blueprint.unselectAll()}}class ft extends ae{#V=e=>this.clickedSomewhere(e.target);constructor(e,t,i={}){i.listenOnFocus=!0,super(e,t,i),this.blueprint.focus&&document.addEventListener("click",this.#V)}clickedSomewhere(e){e.closest("ueb-blueprint")||this.blueprint.setFocused(!1)}listenEvents(){document.addEventListener("click",this.#V)}unlistenEvents(){document.removeEventListener("click",this.#V)}}class vt extends tt{static styleVariables={"--ueb-font-size":`${se.fontSize}`,"--ueb-grid-axis-line-color":`${se.gridAxisLineColor}`,"--ueb-grid-expand":`${se.expandGridSize}px`,"--ueb-grid-line-color":`${se.gridLineColor}`,"--ueb-grid-line-width":`${se.gridLineWidth}px`,"--ueb-grid-set-line-color":`${se.gridSetLineColor}`,"--ueb-grid-set":`${se.gridSet}`,"--ueb-grid-size":`${se.gridSize}px`,"--ueb-link-min-width":`${se.linkMinWidth}`,"--ueb-node-radius":`${se.nodeRadius}px`};#R=new ResizeObserver((e=>{const t=e.find((e=>e.target===this.viewportElement))?.devicePixelContentBoxSize?.[0];t&&(this.viewportSize[0]=t.inlineSize,this.viewportSize[1]=t.blockSize)}));#z;#_;#C;headerElement;overlayElement;viewportElement;selectorElement;gridElement;linksContainerElement;nodesContainerElement;viewportSize=[0,0];#F(){}initialize(e){super.initialize(e),this.element.style.cssText=Object.entries(vt.styleVariables).map((([e,t])=>`${e}:${t};`)).join("");const t=this.element.querySelector(":scope > template")?.content.textContent;t&&(this.element.requestUpdate(),this.element.updateComplete.then((()=>{this.blueprint.mousePosition=[Math.round(this.viewportSize[0]/2),Math.round(this.viewportSize[1]/2)],this.getPasteInputObject().pasted(t),this.blueprint.unselectAll()})))}setup(){super.setup(),this.#R.observe(this.viewportElement,{box:"device-pixel-content-box"});const e=this.viewportElement.getBoundingClientRect();this.viewportSize[0]=e.width,this.viewportSize[1]=e.height,this.blueprint.nodes.length>0&&(this.blueprint.requestUpdate(),this.blueprint.updateComplete.then((()=>this.centerContentInViewport())))}cleanup(){super.cleanup(),this.#R.unobserve(this.viewportElement)}createInputObjects(){const e=this.element.getGridDOMElement();return this.#z=new Je(e,this.blueprint),this.#_=new gt(e,this.blueprint),this.#C=new ot(e,this.blueprint),[...super.createInputObjects(),this.#z,this.#_,this.#C,new et(e,this.blueprint),new nt(e,this.blueprint,{activationKeys:rt.duplicateNodes},(()=>this.blueprint.template.getPasteInputObject().pasted(this.blueprint.template.getCopyInputObject().copied()))),new nt(e,this.blueprint,{activationKeys:rt.deleteNodes},(()=>this.blueprint.removeGraphElement(...this.blueprint.getNodes(!0)))),new nt(e,this.blueprint,{activationKeys:rt.selectAllNodes},(()=>this.blueprint.selectAll())),new bt(e,this.blueprint,{clickButton:se.mouseClickButton,exitAnyButton:!0,moveEverywhere:!0}),new pt(e,this.blueprint,{clickButton:se.mouseRightClickButton,exitAnyButton:!1,moveEverywhere:!0}),new ft(e,this.blueprint),new dt(e,this.blueprint),new lt(e,this.blueprint)]}render(){return O`

Zoom ${0==this.blueprint.zoom?"1:1":(this.blueprint.zoom>0?"+":"")+this.blueprint.zoom}
`}firstUpdated(e){super.firstUpdated(e),this.headerElement=this.blueprint.querySelector(".ueb-viewport-header"),this.overlayElement=this.blueprint.querySelector(".ueb-viewport-overlay"),this.viewportElement=this.blueprint.querySelector(".ueb-viewport-body"),this.selectorElement=this.blueprint.querySelector("ueb-selector"),this.gridElement=this.viewportElement.querySelector(".ueb-grid"),this.linksContainerElement=this.blueprint.querySelector("[data-links]"),this.linksContainerElement.append(...this.blueprint.getLinks()),this.nodesContainerElement=this.blueprint.querySelector("[data-nodes]"),this.nodesContainerElement.append(...this.blueprint.getNodes()),this.viewportElement.scroll(se.expandGridSize,se.expandGridSize)}willUpdate(e){super.willUpdate(e),this.headerElement&&e.has("zoom")&&(this.headerElement.classList.add("ueb-zoom-changed"),this.headerElement.addEventListener("animationend",(()=>this.headerElement.classList.remove("ueb-zoom-changed"))))}updated(e){if(super.updated(e),(e.has("scrollX")||e.has("scrollY"))&&this.viewportElement.scroll(this.blueprint.scrollX,this.blueprint.scrollY),e.has("zoom")){this.blueprint.style.setProperty("--ueb-scale",this.blueprint.getScale());const t=e.get("zoom"),i=Math.min(t,this.blueprint.zoom),n=Math.max(t,this.blueprint.zoom),r=be.range(i,n),s=e=>`ueb-zoom-${e}`;te<0)).map(s)),this.blueprint.classList.add(...r.filter((e=>e>0)).map(s))):(this.blueprint.classList.remove(...r.filter((e=>e>0)).map(s)),this.blueprint.classList.add(...r.filter((e=>e<0)).map(s)))}}getCommentNodes(e=!1){return this.blueprint.querySelectorAll(`ueb-node[data-type="${se.paths.comment}"]${e?'[data-selected="true"]':""}, ueb-node[data-type="${se.paths.materialGraphNodeComment}"]${e?'[data-selected="true"]':""}`)}getPin(e){return this.blueprint.querySelector(`ueb-node[data-title="${e.objectName}"] ueb-pin[data-id="${e.pinGuid}"]`)}getCopyInputObject(){return this.#z}getPasteInputObject(){return this.#_}getZoomInputObject(){return this.#C}isPointVisible(e,t){return!1}gridTopVisibilityBoundary(){return this.blueprint.scaleCorrect(this.blueprint.scrollY)-this.blueprint.translateY}gridRightVisibilityBoundary(){return this.gridLeftVisibilityBoundary()+this.blueprint.scaleCorrect(this.viewportSize[0])}gridBottomVisibilityBoundary(){return this.gridTopVisibilityBoundary()+this.blueprint.scaleCorrect(this.viewportSize[1])}gridLeftVisibilityBoundary(){return this.blueprint.scaleCorrect(this.blueprint.scrollX)-this.blueprint.translateX}centerViewport(e=0,t=0,i=!0){const n=this.gridLeftVisibilityBoundary()+this.blueprint.scaleCorrect(this.viewportSize[0]/2),r=this.gridTopVisibilityBoundary()+this.blueprint.scaleCorrect(this.viewportSize[1]/2);this.blueprint.scrollDelta(this.blueprint.scaleCorrectReverse(e-n),this.blueprint.scaleCorrectReverse(t-r),i)}centerContentInViewport(e=!0){let t=0,i=0,n=Number.MAX_SAFE_INTEGER,r=Number.MIN_SAFE_INTEGER,s=Number.MAX_SAFE_INTEGER,a=Number.MIN_SAFE_INTEGER;const o=this.blueprint.getNodes();for(const e of o)t+=e.leftBoundary()+e.rightBoundary(),i+=e.topBoundary()+e.bottomBoundary(),n=Math.min(n,e.leftBoundary()),r=Math.max(r,e.rightBoundary()),s=Math.min(s,e.topBoundary()),a=Math.max(a,e.bottomBoundary());t=Math.round(r-n<=this.viewportSize[0]?(r+n)/2:t/(2*o.length)),i=Math.round(a-s<=this.viewportSize[1]?(a+s)/2:i/(2*o.length)),this.centerViewport(t,i,e)}}class yt extends ut{static properties={...super.properties,fromX:{type:Number,attribute:!1},fromY:{type:Number,attribute:!1},toX:{type:Number,attribute:!1},toY:{type:Number,attribute:!1}};constructor(){super(),this.fromX=0,this.fromY=0,this.toX=0,this.toY=0}setBothLocations([e,t]){this.fromX=e,this.fromY=t,this.toX=e,this.toY=t}addSourceLocation(e,t){this.fromX+=e,this.fromY+=t}addDestinationLocation(e,t){this.toX+=e,this.toY+=t}}class wt extends tt{update(e){super.update(e);const[t,i,n,r]=[Math.round(this.element.fromX),Math.round(this.element.fromY),Math.round(this.element.toX),Math.round(this.element.toY)],[s,a,o,l]=[Math.min(t,n),Math.min(i,r),Math.abs(t-n),Math.abs(i-r)];(e.has("fromX")||e.has("toX"))&&(this.element.style.left=`${s}px`,this.element.style.width=`${o}px`),(e.has("fromY")||e.has("toY"))&&(this.element.style.top=`${a}px`,this.element.style.height=`${l}px`)}}class Et extends Xe{constructor(e={},t=void 0){e.Class=new Ee(se.paths.knot),e.Name="K2Node_Knot";const i=new We({PinName:"InputPin"},!0),n=new We({PinName:"OutputPin",Direction:"EGPD_Output"},!0);t&&(i.copyTypeFrom(t),n.copyTypeFrom(t)),e.CustomProperties=[i,n],super(e,!0)}}class St extends st{static#d=e=>{};#N=e=>{if(this.blueprint.setFocused(!0),!this.enablerKey||this.enablerActivated)if(e.button===this.options.clickButton)this.options.strictTarget&&e.target!==e.currentTarget||(this.consumeEvent&&e.stopImmediatePropagation(),document.addEventListener("mouseup",this.#A),this.setLocationFromEvent(e),this.clickedPosition[0]=this.location[0],this.clickedPosition[1]=this.location[1],this.blueprint.mousePosition[0]=this.location[0],this.blueprint.mousePosition[1]=this.location[1],this.clicked(this.clickedPosition));else this.options.exitAnyButton||this.#A(e)};#A=e=>{this.options.exitAnyButton&&e.button!=this.options.clickButton||(this.consumeEvent&&e.stopImmediatePropagation(),document.removeEventListener("mouseup",this.#A),this.unclicked())};clickedPosition=[0,0];constructor(e,t,i={},n=St.#d,r=St.#d){i.clickButton??=se.mouseClickButton,i.consumeEvent??=!0,i.exitAnyButton??=!0,i.strictTarget??=!1,super(e,t,i),this.onClick=n,this.onUnclick=r,this.listenEvents()}listenEvents(){this.target.addEventListener("mousedown",this.#N),this.options.clickButton===se.mouseRightClickButton&&this.target.addEventListener("contextmenu",(e=>e.preventDefault()))}unlistenEvents(){this.target.removeEventListener("mousedown",this.#N)}clicked(e){this.onClick(this)}unclicked(e){this.onUnclick(this)}}class Ct extends st{static ignoreDbClick=e=>{};#j=e=>{this.options.strictTarget&&e.target!==e.currentTarget||(this.consumeEvent&&e.stopImmediatePropagation(),this.clickedPosition=this.setLocationFromEvent(e),this.blueprint.mousePosition[0]=this.clickedPosition[0],this.blueprint.mousePosition[1]=this.clickedPosition[1],this.dbclicked(this.clickedPosition))};#U;get onDbClick(){return this.#U}set onDbClick(e){this.#U=e}clickedPosition=[0,0];constructor(e,t,i={},n=Ct.ignoreDbClick){i.consumeEvent??=!0,i.strictTarget??=!1,super(e,t,i),this.#U=n,this.listenEvents()}listenEvents(){this.target.addEventListener("dblclick",this.#j)}unlistenEvents(){this.target.removeEventListener("dblclick",this.#j)}dbclicked(e){this.onDbClick(e)}}class xt extends wt{static decreasingValue(e,t){const i=-e*t[0]**2,n=t[1]-i/t[0];return e=>i/e+n}static clampedLine(e,t){if(e[0]>t[0]){const i=e;e=t,t=i}const i=(t[1]-e[1])/(t[0]-e[0]),n=e[1]-i*e[0];return r=>rt[0]?t[1]:i*r+n}static c1DecreasingValue=xt.decreasingValue(-.15,[100,15]);static c2DecreasingValue=xt.decreasingValue(-.05,[500,130]);static c2Clamped=xt.clampedLine([0,80],[200,40]);#W=`ueb-id-${Math.floor(1e12*Math.random())}`;#K=e=>{const t=new Et({},this.element.source.entity),i=mt.getConstructor("ueb-node").newObject(t);i.setLocation(...this.blueprint.snapToGrid(...e));const n=i.template;this.blueprint.addGraphElement(i);const r=this.element.getInputPin(),s=this.element.getOutputPin();this.element.source=null,this.element.destination=null;const a=mt.getConstructor("ueb-link").newObject(s,n.inputPin);this.blueprint.addGraphElement(a),this.element.source=n.outputPin,this.element.destination=r};createInputObjects(){const e=this.element.querySelector(".ueb-link-area");return[...super.createInputObjects(),new Ct(e,this.blueprint,void 0,(e=>{e[0]+=se.knotOffset[0],e[1]+=se.knotOffset[1],e=be.snapToGrid(e[0],e[1],se.gridSize),this.#K(e)})),new St(e,this.blueprint,{enablerKey:new nt(this.blueprint,this.blueprint,{activationKeys:rt.enableLinkDelete})},(()=>this.blueprint.removeGraphElement(this.element)))]}willUpdate(e){super.willUpdate(e);const t=this.element.source,i=this.element.destination;if(e.has("fromX")||e.has("toX")){const e=this.element.fromX,n=this.element.toX,r=t?.nodeElement.getType()==se.paths.knot,s=i?.nodeElement.getType()==se.paths.knot;!r||i&&!s||(t?.isInput()&&n>e+se.distanceThreshold?this.element.source=t.nodeElement.template.outputPin:t?.isOutput()&&ne+se.distanceThreshold&&(this.element.destination=i.nodeElement.template.inputPin))}const n=Math.max(Math.abs(this.element.fromX-this.element.toX),1),r=Math.max(Math.abs(this.element.fromY-this.element.toY),1),s=Math.max(n,se.linkMinWidth),a=n/s,o=this.element.originatesFromInput?this.element.fromXthis.element.toY?1:0)),this.element.style.setProperty("--ueb-start-percentage",`${Math.round(this.element.startPercentage)}%`),this.element.style.setProperty("--ueb-link-start",`${Math.round(this.element.startPixels)}`)}render(){return O` ${this.element.linkMessageIcon||this.element.linkMessageText?O``:V}`}}class Pt extends yt{static properties={...super.properties,dragging:{type:Boolean,attribute:"data-dragging",converter:be.booleanConverter,reflect:!0},originatesFromInput:{type:Boolean,attribute:!1},svgPathD:{type:String,attribute:!1},linkMessageIcon:{type:String,attribute:!1},linkMessageText:{type:String,attribute:!1}};#q;get source(){return this.#q}set source(e){this.#Z(e,!1)}#X;get destination(){return this.#X}set destination(e){this.#Z(e,!0)}#Y=()=>this.remove();#Q=e=>this.addSourceLocation(...e.detail.value);#J=e=>this.addDestinationLocation(...e.detail.value);#ee=e=>this.setSourceLocation();#te=e=>this.setDestinationLocation();linkMessageIcon=V;linkMessageText=V;pathElement;constructor(){super(),this.dragging=!1,this.originatesFromInput=!1,this.startPercentage=0,this.svgPathD="",this.startPixels=0}static newObject(e,t){const i=new Pt;return i.initialize(e,t),i}initialize(e,t){super.initialize({},new xt),e&&(this.source=e,t||(this.toX=this.fromX,this.toY=this.fromY)),t&&(this.destination=t,e||(this.fromX=this.toX,this.fromY=this.toY))}#Z(e,t){const i=()=>t?this.destination:this.source;if(i()!=e){if(i()){const e=i().getNodeElement();e.removeEventListener(se.removeEventName,this.#Y),e.removeEventListener(se.nodeDragEventName,t?this.#J:this.#Q),e.removeEventListener(se.nodeReflowEventName,t?this.#te:this.#ee),this.#ie()}if(t?this.#X=e:this.#q=e,i()){const e=i().getNodeElement();e.addEventListener(se.removeEventName,this.#Y),e.addEventListener(se.nodeDragEventName,t?this.#J:this.#Q),e.addEventListener(se.nodeReflowEventName,t?this.#te:this.#ee),t?this.setDestinationLocation():(this.setSourceLocation(),this.originatesFromInput=this.source.isInput()),this.#ne()}}}#ne(){this.source&&this.destination&&(this.source.linkTo(this.destination),this.destination.linkTo(this.source))}#ie(){this.source&&this.destination&&(this.source.unlinkFrom(this.destination,!1),this.destination.unlinkFrom(this.source,!1))}cleanup(){super.cleanup(),this.#ie(),this.source=null,this.destination=null}setSourceLocation(e=null,t=!0){if(null==e){const i=this;if(t&&(!this.hasUpdated||!this.source.hasUpdated))return void Promise.all([this.updateComplete,this.source.updateComplete]).then((()=>i.setSourceLocation(null,!1)));e=this.source.template.getLinkLocation()}const[i,n]=e;this.fromX=i,this.fromY=n}setDestinationLocation(e=null,t=!0){if(null==e){const i=this;if(t&&(!this.hasUpdated||!this.destination.hasUpdated))return void Promise.all([this.updateComplete,this.destination.updateComplete]).then((()=>i.setDestinationLocation(null,!1)));e=this.destination.template.getLinkLocation()}this.toX=e[0],this.toY=e[1]}getInputPin(){return this.source?.isInput()?this.source:this.destination}setInputPin(e){this.source?.isInput()&&(this.source=e),this.destination=e}getOutputPin(){return this.destination?.isOutput()?this.destination:this.source}setOutputPin(e){this.destination?.isOutput()&&(this.destination=e),this.source=e}startDragging(){this.dragging=!0}finishDragging(){this.dragging=!1}removeMessage(){this.linkMessageIcon=V,this.linkMessageText=V}setMessageConvertType(){this.linkMessageIcon=Ke.convert,this.linkMessageText=O`Convert ${this.source.pinType} to ${this.destination.pinType}.`}setMessageCorrect(){this.linkMessageIcon=Ke.correct,this.linkMessageText=V}setMessageReplace(){this.linkMessageIcon=Ke.correct,this.linkMessageText=V}setMessageDirectionsIncompatible(){this.linkMessageIcon=Ke.reject,this.linkMessageText=O`Directions are not compatbile.`}setMessagePlaceNode(){this.linkMessageIcon=V,this.linkMessageText=O`Place a new node.`}setMessageReplaceLink(){this.linkMessageIcon=Ke.correct,this.linkMessageText=O`Replace existing input connections.`}setMessageReplaceOutputLink(){this.linkMessageIcon=Ke.correct,this.linkMessageText=O`Replace existing output connections.`}setMessageSameNode(){this.linkMessageIcon=Ke.reject,this.linkMessageText=O`Both are on the same node.`}setMessageTypesIncompatible(e,t){this.linkMessageIcon=Ke.reject,this.linkMessageText=O`${be.capitalFirstLetter(e.pinType)} is not compatible with ${be.capitalFirstLetter(t.pinType)}.`}}class Nt extends ht{clicked(e){this.options.repositionOnClick&&(this.target.setLocation(...this.stepSize>1?be.snapToGrid(e[0],e[1],this.stepSize):e),this.clickedOffset=[0,0])}dragTo(e,t){const i=[this.target.locationX??this.lastLocation[0],this.target.locationY??this.lastLocation[1]],[n,r]=this.stepSize>1?[be.snapToGrid(e[0],e[1],this.stepSize),be.snapToGrid(i[0],i[1],this.stepSize)]:[e,i];0==(t=[n[0]-this.lastLocation[0],n[1]-this.lastLocation[1]])[0]&&0==t[1]||(t[0]+=r[0]-i[0],t[1]+=r[1]-i[1],this.dragAction(n,t),this.lastLocation=n)}dragAction(e,t){this.target.setLocation(e[0]-this.clickedOffset[0],e[1]-this.clickedOffset[1])}}class kt extends Nt{#re;#se;#ae;#oe;constructor(e,t,i={}){super(e,t,i),i.onClicked&&(this.#re=i.onClicked),i.onStartDrag&&(this.#se=i.onStartDrag),i.onDrag&&(this.#ae=i.onDrag),i.onEndDrag&&(this.#oe=i.onEndDrag)}clicked(e){super.clicked(e),this.#re?.()}startDrag(){super.startDrag(),this.#se?.()}dragAction(e,t){this.#ae?.(e,t)}endDrag(){super.endDrag(),this.#oe?.()}}class Lt extends tt{getDraggableElement(){return this.element}createDraggableObject(){return new Nt(this.element,this.blueprint,{draggableElement:this.getDraggableElement()})}createInputObjects(){return[...super.createInputObjects(),this.createDraggableObject(),new nt(this.element,this.blueprint,{activationKeys:[se.Keys.ArrowUp,se.Keys.ArrowRight,se.Keys.ArrowDown,se.Keys.ArrowLeft]},(e=>e.target.acknowledgeDrag([e.pressedKey===se.Keys.ArrowLeft?-se.gridSize:e.pressedKey===se.Keys.ArrowRight?se.gridSize:0,e.pressedKey===se.Keys.ArrowUp?-se.gridSize:e.pressedKey===se.Keys.ArrowDown?se.gridSize:0])))]}topBoundary(e=!1){return this.element.locationY}rightBoundary(e=!1){return this.element.locationX+this.element.sizeX}bottomBoundary(e=!1){return this.element.locationY+this.element.sizeY}leftBoundary(e=!1){return this.element.locationX}centerInViewport(){const e=Math.min(this.blueprint.template.viewportSize[0]/10,this.blueprint.template.viewportSize[1]/10),t=this.leftBoundary()-this.blueprint.template.gridLeftVisibilityBoundary(),i=this.blueprint.template.gridRightVisibilityBoundary()-this.rightBoundary();let n=Math.max((t+i)/2,e);const r=this.topBoundary()-this.blueprint.template.gridTopVisibilityBoundary(),s=this.blueprint.template.gridBottomVisibilityBoundary()-this.bottomBoundary();let a=Math.max((r+s)/2,e);this.blueprint.scrollDelta(t-n,r-a,!0)}}class At extends Lt{update(e){super.update(e),e.has("locationX")&&(this.element.style.left=`${this.element.locationX}px`),e.has("locationY")&&(this.element.style.top=`${this.element.locationY}px`)}}class Mt extends Nt{startDrag(){this.target.selected||(this.blueprint.unselectAll(),this.target.setSelected(!0))}dragAction(e,t){this.target.acknowledgeDrag(t)}unclicked(){this.started?(this.blueprint.getNodes(!0).forEach((e=>e.boundComments.filter((t=>!e.isInsideComment(t))).forEach((t=>e.unbindFromComment(t))))),this.blueprint.getCommentNodes().forEach((e=>e.template.manageNodesBind()))):(this.blueprint.unselectAll(),this.target.setSelected(!0))}}class Tt extends At{getDraggableElement(){return this.element}createDraggableObject(){return new Mt(this.element,this.blueprint,{draggableElement:this.getDraggableElement(),scrollGraphEdge:!0})}firstUpdated(e){super.firstUpdated(e),this.element.selected&&!this.element.listeningDrag&&this.element.setSelected(!0)}}class Bt extends Tt{static nodeStyleClasses=["ueb-node-style-default"];#le=!1;pinInserter;inputContainer;outputContainer;pinElement;addPinHandler=()=>{const e=this.pinInserter?.();e&&(this.defaultPin&&this.defaultPin.isInput()===e.isInput()?this.defaultPin.before(this.createPinElement(e)):(e.isInput()?this.inputContainer:this.outputContainer).appendChild(this.createPinElement(e)),this.element.acknowledgeReflow())};toggleAdvancedDisplayHandler=()=>{this.element.toggleShowAdvancedPinDisplay(),this.element.requestUpdate(),this.element.updateComplete.then((()=>this.element.acknowledgeReflow()))};createPinElement(e){const t=mt.getConstructor("ueb-pin").newObject(e,void 0,this.element);return this.pinInserter&&!this.defaultPin&&"Default"===t.getPinName()&&(this.defaultPin=t,this.defaultPin.classList.add("ueb-node-variadic-default")),t}initialize(e){super.initialize(e),this.element.classList.add(...this.constructor.nodeStyleClasses),this.element.style.setProperty("--ueb-node-color",this.getColor().cssText),this.pinInserter=this.element.entity.additionalPinInserter(),this.pinInserter&&this.element.classList.add("ueb-node-is-variadic")}getColor(){return this.element.entity.nodeColor()}render(){return O`
${this.renderTop()}
${this.pinInserter?O`
Add pin ${Ke.plusCircle}
`:V} ${this.element.entity.isDevelopmentOnly()?O`
Development Only
`:V} ${this.element.advancedPinDisplay?O`
${Ke.expandIcon}
`:V}
`}renderNodeIcon(){return this.element.entity.nodeIcon()}renderNodeName(){return this.element.getNodeDisplayName()}renderTop(){const e=this.renderNodeIcon(),t=this.renderNodeName();return O`
${e?O`
${e}
`:V} ${t?O`
${t} ${this.#le&&this.getTargetType().length>0?O`
Target is ${be.formatStringName(this.getTargetType())}
`:V}
`:V}
`}firstUpdated(e){super.firstUpdated(e),this.inputContainer=this.element.querySelector(".ueb-node-inputs"),this.outputContainer=this.element.querySelector(".ueb-node-outputs"),this.setupPins(),this.element.updateComplete.then((()=>this.element.acknowledgeReflow()))}setupPins(){this.element.nodeNameElement=this.element.querySelector(".ueb-node-name-text");let e=!1,t=!1;for(const i of this.element.getPinElements())i!==this.defaultPin&&(i.isInput()?(this.inputContainer.appendChild(i),e=!0):i.isOutput()&&(this.outputContainer.appendChild(i),t=!0));this.defaultPin&&(this.defaultPin.isInput()?this.inputContainer:this.outputContainer).appendChild(this.defaultPin),e&&this.element.classList.add("ueb-node-has-inputs"),t&&this.element.classList.add("ueb-node-has-outputs")}createPinElements(){return this.element.getPinEntities().filter((e=>!e.isHidden())).map((e=>(this.#le=this.#le||"self"===e.PinName&&"Target"===e.pinDisplayName(),this.createPinElement(e))))}getTargetType(){return this.element.entity.FunctionReference?.MemberParent?.getName()??"Untitled"}getPinElements(e){return e.querySelectorAll("ueb-pin")}linksChanged(){}}class It extends Bt{#ue=document.createElement("div");#ce=document.createElement("div");#he=document.createElement("div");#pe=document.createElement("div");#de=document.createElement("div");#me=document.createElement("div");#ge=document.createElement("div");#be=document.createElement("div");initialize(e){super.initialize(e),this.element.classList.add("ueb-resizeable"),this.#ue.classList.add("ueb-resizeable-top"),this.#ce.classList.add("ueb-resizeable-right"),this.#he.classList.add("ueb-resizeable-bottom"),this.#pe.classList.add("ueb-resizeable-left"),this.#de.classList.add("ueb-resizeable-top-right"),this.#me.classList.add("ueb-resizeable-bottom-right"),this.#ge.classList.add("ueb-resizeable-bottom-left"),this.#be.classList.add("ueb-resizeable-top-left")}update(e){super.update(e),this.element.sizeX>=0&&e.has("sizeX")&&(this.element.style.width=`${this.element.sizeX}px`),this.element.sizeY>=0&&e.has("sizeY")&&(this.element.style.height=`${this.element.sizeY}px`)}firstUpdated(e){super.firstUpdated(e),this.element.append(this.#ue,this.#ce,this.#he,this.#pe,this.#de,this.#me,this.#ge,this.#be)}createInputObjects(){return[...super.createInputObjects(),new kt(this.#ue,this.blueprint,{onDrag:(e,t)=>{t[1]=e[1]-this.element.topBoundary(),this.setSizeY(this.element.sizeY-t[1])&&this.element.addLocation(0,t[1],!1)},onEndDrag:()=>this.endResize()}),new kt(this.#ce,this.blueprint,{onDrag:(e,t)=>{t[0]=e[0]-this.element.rightBoundary(),this.setSizeX(this.element.sizeX+t[0])},onEndDrag:()=>this.endResize()}),new kt(this.#he,this.blueprint,{onDrag:(e,t)=>{t[1]=e[1]-this.element.bottomBoundary(),this.setSizeY(this.element.sizeY+t[1])},onEndDrag:()=>this.endResize()}),new kt(this.#pe,this.blueprint,{onDrag:(e,t)=>{t[0]=e[0]-this.element.leftBoundary(),this.setSizeX(this.element.sizeX-t[0])&&this.element.addLocation(t[0],0,!1)},onEndDrag:()=>this.endResize()}),new kt(this.#de,this.blueprint,{onDrag:(e,t)=>{t[0]=e[0]-this.element.rightBoundary(),t[1]=e[1]-this.element.topBoundary(),this.setSizeX(this.element.sizeX+t[0]),this.setSizeY(this.element.sizeY-t[1])&&this.element.addLocation(0,t[1],!1)},onEndDrag:()=>this.endResize()}),new kt(this.#me,this.blueprint,{onDrag:(e,t)=>{t[0]=e[0]-this.element.rightBoundary(),t[1]=e[1]-this.element.bottomBoundary(),this.setSizeX(this.element.sizeX+t[0]),this.setSizeY(this.element.sizeY+t[1])},onEndDrag:()=>this.endResize()}),new kt(this.#ge,this.blueprint,{onDrag:(e,t)=>{t[0]=e[0]-this.element.leftBoundary(),t[1]=e[1]-this.element.bottomBoundary(),this.setSizeX(this.element.sizeX-t[0])&&this.element.addLocation(t[0],0,!1),this.setSizeY(this.element.sizeY+t[1])},onEndDrag:()=>this.endResize()}),new kt(this.#be,this.blueprint,{onDrag:(e,t)=>{t[0]=e[0]-this.element.leftBoundary(),t[1]=e[1]-this.element.topBoundary(),this.setSizeX(this.element.sizeX-t[0])&&this.element.addLocation(t[0],0,!1),this.setSizeY(this.element.sizeY-t[1])&&this.element.addLocation(0,t[1],!1)},onEndDrag:()=>this.endResize()})]}setSizeX(e){return this.element.setNodeWidth(e),!0}setSizeY(e){return this.element.setNodeHeight(e),!0}endResize(){}}class $t extends It{#fe=0;initialize(e){super.initialize(e),e.classList.add("ueb-node-style-comment","ueb-node-resizeable"),e.sizeX=25*se.gridSize,e.sizeY=6*se.gridSize,super.initialize(e)}getDraggableElement(){return this.element.querySelector(".ueb-node-top")}render(){return O`
`}firstUpdated(e){super.firstUpdated(e);const t=this.getDraggableElement().getBoundingClientRect();this.#fe=t.height}manageNodesBind(){let e=this.blueprint.getNodes();for(let t of e)t.topBoundary()>=this.element.topBoundary()&&t.rightBoundary()<=this.element.rightBoundary()&&t.bottomBoundary()<=this.element.bottomBoundary()&&t.leftBoundary()>=this.element.leftBoundary()?t.bindToComment(this.element):t.unbindFromComment(this.element)}setSizeX(e){return(e=Math.round(e))>=2*se.gridSize&&(this.element.setNodeWidth(e),!0)}setSizeY(e){return(e=Math.round(e))>=2*se.gridSize&&(this.element.setNodeHeight(e),!0)}endResize(){this.manageNodesBind()}topBoundary(e=!1){return this.element.locationY}rightBoundary(e=!1){return this.element.locationX+this.element.sizeX}bottomBoundary(e=!1){return e?this.element.locationY+this.#fe:super.bottomBoundary()}leftBoundary(e=!1){return this.element.locationX}}class Gt extends ht{#ve;#ye=null;#we=e=>{if(!this.enteredPin){this.linkValid=!1,this.enteredPin=e.target;const t=this.link.source??this.target,i=this.enteredPin,n=t.isOutput()?t:i;t.nodeElement.getType()===se.paths.knot||i.nodeElement.getType()===se.paths.knot?(this.link.setMessageCorrect(),this.linkValid=!0):t.getNodeElement()===i.getNodeElement()?this.link.setMessageSameNode():t.isOutput()===i.isOutput()?this.link.setMessageDirectionsIncompatible():this.blueprint.getLinks(t,i).length?(this.link.setMessageReplaceLink(),this.linkValid=!0):"exec"===n.entity.getType()&&n.isLinked?(this.link.setMessageReplaceOutputLink(),this.linkValid=!0):"object"==t.entity.PinType.PinCategory&&"object"==i.entity.PinType.PinCategory||t.pinType==i.pinType?(this.link.setMessageCorrect(),this.linkValid=!0):(this.link.setMessageTypesIncompatible(t,i),this.linkValid=!1)}};#Ee=e=>{this.enteredPin==e.target&&(this.enteredPin=null,this.linkValid=!1,this.link?.setMessagePlaceNode())};link;enteredPin;linkValid=!1;constructor(e,t,i={}){i.scrollGraphEdge??=!0,super(e,t,i)}startDrag(e){this.target.nodeElement.getType()==se.paths.knot&&(this.#ye=this.target),this.link=mt.getConstructor("ueb-link").newObject(this.target,null),this.blueprint.template.linksContainerElement.prepend(this.link),this.link.setMessagePlaceNode(),this.#ve=this.blueprint.querySelectorAll("ueb-pin"),this.#ve.forEach((e=>{e!=this.target&&(e.addEventListener("mouseenter",this.#we),e.addEventListener("mouseleave",this.#Ee))})),this.link.startDragging(),this.link.setDestinationLocation(e)}dragTo(e,t){this.link.setDestinationLocation(e)}endDrag(){if(this.#ve.forEach((e=>{e.removeEventListener("mouseenter",this.#we),e.removeEventListener("mouseleave",this.#Ee)})),this.#ve=null,this.enteredPin&&this.linkValid){if(this.#ye){const e=this.#ye!==this.link.source?this.link.source:this.enteredPin;if(this.#ye.isInput()&&e.isInput()||this.#ye.isOutput()&&e.isOutput()){const e=this.#ye.template.getOppositePin();this.#ye===this.link.source?this.link.source=e:this.enteredPin=e}}else this.enteredPin.nodeElement.getType()===se.paths.knot&&(this.enteredPin=this.enteredPin.template.getOppositePin());this.link.source.getLinks().find((e=>e.equals(this.enteredPin.createPinReference())))?this.link.remove():(this.blueprint.addGraphElement(this.link),this.link.destination=this.enteredPin)}else this.link.remove();this.enteredPin=null,this.link.removeMessage(),this.link.finishDragging(),this.link=null}}class Ht extends Bt{#Se=!1;#Ce=!1;#xe="";static nodeStyleClasses=["ueb-node-style-glass"];initialize(e){super.initialize(e),this.#xe=this.element.getNodeDisplayName()}render(){return O`
${this.#xe?O`
${this.#xe}
`:V} ${this.#Se?O`
`:V} ${this.#Ce?O`
`:V} ${this.pinInserter?O`
Add pin ${Ke.plusCircle}
`:V}
`}createPinElements(){return this.element.getPinEntities().filter((e=>!e.isHidden())).map((e=>{this.#Se||=e.isInput(),this.#Ce||=e.isOutput();return mt.getConstructor("ueb-pin").newObject(e,void 0,this.element)}))}}class Ot extends Ht{static nodeStyleClasses=[...super.nodeStyleClasses,"ueb-node-style-conversion"]}class Dt extends Ht{static nodeStyleClasses=[...super.nodeStyleClasses,"ueb-node-style-operation"]}class Vt extends tt{static canWrapInput=!0;#Pe;get iconElement(){return this.#Pe}#Ne;get wrapperElement(){return this.#Ne}isNameRendered=!0;initialize(e){if(super.initialize(e),this.element.nodeElement){const e=this.element.nodeElement.template;this.isNameRendered=!(e instanceof Ot||e instanceof Dt)}}setup(){super.setup(),this.element.nodeElement=this.element.closest("ueb-node");const e=this.element.nodeElement.template;(e instanceof Ot||e instanceof Dt)&&(this.isNameRendered=!1,this.element.requestUpdate())}createInputObjects(){return[new Gt(this.element,this.blueprint,{moveEverywhere:!0,draggableElement:this.getClickableElement()})]}render(){const e=O`
${this.renderIcon()}
`,t=O`
${this.isNameRendered?this.renderName():V} ${this.isInputRendered()?this.renderInput():O``}
`;return O`
${this.element.isInput()?O`${e}${t}`:O`${t}${e}`}
`}renderIcon(){if(this.element.nodeElement.entity.isPcg())switch(this.element.entity.getType()){case"Any":return Ke.pcgPin;case"Param":case"Param[]":return Ke.pcgParamPin;case"Spatial":case"Spatial[]":return Ke.pcgSpatialPin;case"Any[]":case"Point[]":case"Surface[]":case"Volume[]":if(this.element.isOutput())return Ke.pcgPin;case"Point":case"Surface":case"Volume":return Ke.pcgStackPin}switch(this.element.entity.PinType?.ContainerType?.toString()){case"Array":return Ke.arrayPin;case"Set":return Ke.setPin;case"Map":return Ke.mapPin}return"delegate"===this.element.entity.PinType?.PinCategory?.toLocaleLowerCase()?Ke.delegate:this.element.nodeElement?.template instanceof Dt?Ke.operationPin:Ke.genericPin}renderName(){let e=this.element.getPinDisplayName();const t=this.element.nodeElement,i=this.element.getPinName();return t.getType()==se.paths.makeStruct&&i==t.entity.StructType.getName()&&(e=i),O`${e}`}isInputRendered(){return this.element.isInput()&&!this.element.entity.bDefaultValueIsIgnored&&!this.element.entity.PinType.bIsReference}renderInput(){return O``}updated(e){if(super.updated(e),this.element.isInput()&&e.has("isLinked")){const e=this.element.nodeElement;this.element.requestUpdate(),this.element.updateComplete.then((()=>e.acknowledgeReflow()))}}firstUpdated(e){super.firstUpdated(e),this.element.style.setProperty("--ueb-pin-color-rgb",this.element.entity.pinColor().cssText),this.#Pe=this.element.querySelector(".ueb-pin-icon svg")??this.element,this.#Ne=this.element.querySelector(".ueb-pin-wrapper")}getLinkLocation(){const e=this.iconElement.getBoundingClientRect(),t=[this.element.isInput()?e.left:e.right+1,(e.top+e.bottom)/2],i=be.convertLocation(t,this.blueprint.template.gridElement);return this.blueprint.compensateTranslation(i[0],i[1])}getClickableElement(){return this.#Ne??this.element}}class Rt extends Vt{render(){return O`
${this.renderIcon()}
`}}class zt extends Bt{static nodeStyleClasses=[...super.nodeStyleClasses,"ueb-node-style-event"];firstUpdated(e){super.firstUpdated(e),this.element.querySelector(".ueb-node-top").appendChild(this.createDelegatePinElement())}renderTop(){const e=this.renderNodeIcon(),t=this.renderNodeName(),i=this.element.getType()===se.paths.customEvent&&(this.element.entity.CustomFunctionName||this.element.entity.FunctionReference.MemberParent);return O`
${e?O`
${e}
`:V} ${t?O`
${t} ${i?O`
Custom Event
`:V}
`:V}
`}createDelegatePinElement(){const e=mt.getConstructor("ueb-pin").newObject(this.element.getPinEntities().find((e=>!e.isHidden()&&"delegate"===e.PinType.PinCategory)),new Rt,this.element);return e.template.isNameRendered=!1,e}createPinElements(){return this.element.getPinEntities().filter((e=>!e.isHidden()&&"delegate"!==e.PinType.PinCategory)).map((e=>mt.getConstructor("ueb-pin").newObject(e,void 0,this.element)))}}class _t extends ct{static properties={...super.properties,selected:{type:Boolean,attribute:"data-selected",reflect:!0,converter:be.booleanConverter}};dragHandler=e=>this.addLocation(...e.detail.value);constructor(){super(),this.selected=!1,this.listeningDrag=!1}setup(){super.setup(),this.setSelected(this.selected)}cleanup(){super.cleanup(),this.blueprint.removeEventListener(se.nodeDragGeneralEventName,this.dragHandler)}setSelected(e=!0){this.selected=e,this.blueprint&&(this.selected?(this.listeningDrag=!0,this.blueprint.addEventListener(se.nodeDragGeneralEventName,this.dragHandler)):(this.blueprint.removeEventListener(se.nodeDragGeneralEventName,this.dragHandler),this.listeningDrag=!1))}}class Ft extends Rt{render(){return this.element.isOutput()?super.render():O``}getOppositePin(){const e=this.element.nodeElement.template;return this.element.isOutput()?e.inputPin:e.outputPin}getLinkLocation(){const e=(this.element.isInput()?this.element.nodeElement.template.outputPin.template:this).iconElement.getBoundingClientRect(),t=[this.element.isInput()?e.left:e.right+1,(e.top+e.bottom)/2],i=be.convertLocation(t,this.blueprint.template.gridElement);return this.blueprint.compensateTranslation(i[0],i[1])}}class jt extends Bt{static#ke=new Set;#Le=null;#Ae;get inputPin(){return this.#Ae}#Me;get outputPin(){return this.#Me}initialize(e){super.initialize(e),this.element.classList.add("ueb-node-style-minimal")}findDirectionaPin(e){if(e.nodeElement.getType()!==se.paths.knot||jt.#ke.has(e))return jt.#ke.clear(),!0;jt.#ke.add(e);for(let t of e.getLinks().map((e=>this.blueprint.getPin(e))))if(this.findDirectionaPin(t))return!0;return!1}render(){return O`
`}setupPins(){this.element.getPinElements().forEach((e=>this.element.querySelector(".ueb-node-border").appendChild(e)))}getPinElements(e){return e.querySelectorAll("ueb-pin")}createPinElements(){const e=this.element.getPinEntities().filter((e=>!e.isHidden())),t=e[e[0].isInput()?0:1],i=e[e[0].isOutput()?0:1],n=mt.getConstructor("ueb-pin");return[this.#Ae=n.newObject(t,new Ft,this.element),this.#Me=n.newObject(i,new Ft,this.element)]}linksChanged(){}}class Ut extends Ht{initialize(e){super.initialize(e),e.getType()===se.paths.variableGet?this.element.classList.add("ueb-node-style-getter"):e.getType()===se.paths.variableSet&&this.element.classList.add("ueb-node-style-setter")}setupPins(){super.setupPins();let e=this.element.getPinElements().find((e=>!e.entity.isHidden()&&!e.entity.isExecution()));this.element.style.setProperty("--ueb-node-color",e.getColor().cssText)}}class Wt extends _t{static properties={..._t.properties,typePath:{type:String,attribute:"data-type",reflect:!0},nodeTitle:{type:String,attribute:"data-title",reflect:!0},advancedPinDisplay:{type:String,attribute:"data-advanced-display",converter:Ce.attributeConverter,reflect:!0},enabledState:{type:String,attribute:"data-enabled-state",reflect:!0},nodeDisplayName:{type:String,attribute:!1},pureFunction:{type:Boolean,converter:be.booleanConverter,attribute:"data-pure-function",reflect:!0}};static dragEventName=se.nodeDragEventName;static dragGeneralEventName=se.nodeDragGeneralEventName;get blueprint(){return super.blueprint}set blueprint(e){super.blueprint=e,this.#Te.forEach((t=>t.blueprint=e))}#Be;get nodeNameElement(){return this.#Be}set nodeNameElement(e){this.#Be=e}#Te=[];boundComments=[];#Ie=!1;#$e=e=>{this.selected||this.#Ie||(this.#Ie=!0,this.requestUpdate(),this.updateComplete.then((()=>this.#Ie=!1)),this.addLocation(...e.detail.value))};static getTypeTemplate(e){if(e.getClass()===se.paths.callFunction||e.getClass()===se.paths.commutativeAssociativeBinaryOperator||e.getClass()===se.paths.callArrayFunction){const t=e.FunctionReference?.MemberParent?.path??"",i=e.FunctionReference?.MemberName;if(i&&(t===se.paths.kismetMathLibrary||t===se.paths.kismetArrayLibrary)){if(i.startsWith("Conv_"))return Ot;if(i.startsWith("And_")||i.startsWith("Boolean")||i.startsWith("Cross_")||i.startsWith("Dot_")||i.startsWith("Not_")||i.startsWith("Or_")||i.startsWith("Percent_")||i.startsWith("Xor_"))return Dt;switch(i){case"Abs":case"Array_Add":case"Array_AddUnique":case"Array_Identical":case"BMax":case"BMin":case"CrossProduct2D":case"DotProduct2D":case"Exp":case"FMax":case"FMin":case"GetPI":case"Max":case"MaxInt64":case"Min":case"MinInt64":case"Sqrt":case"Square":case"Vector4_CrossProduct3":case"Vector4_DotProduct":case"Vector4_DotProduct3":case"Acos":case"Asin":case"Cos":case"DegAcos":case"DegCos":case"DegSin":case"DegTan":case"Sin":case"Tan":return Dt}}if(t===se.paths.blueprintSetLibrary)return Dt;if(t===se.paths.blueprintMapLibrary)return Dt}switch(e.getClass()){case se.paths.comment:case se.paths.materialGraphNodeComment:return $t;case se.paths.createDelegate:return Bt;case se.paths.promotableOperator:return Dt;case se.paths.knot:return jt;case se.paths.literal:case se.paths.variableGet:case se.paths.variableSet:return Ut}return e.isEvent()?zt:Bt}static fromSerializedObject(e){e=e.trim();let t=me.getSerializer(Xe).read(e);return Wt.newObject(t)}static newObject(e=new Xe,t=new(Wt.getTypeTemplate(e))){const i=new Wt;return i.initialize(e,t),i}initialize(e=new Xe,t=new(Wt.getTypeTemplate(e))){super.initialize(e,t),this.#Te=this.template.createPinElements(),this.typePath=this.entity.getType(),this.nodeTitle=this.entity.getObjectName(),this.advancedPinDisplay=this.entity.AdvancedPinDisplay?.toString(),this.enabledState=this.entity.EnabledState,this.nodeDisplayName=this.getNodeDisplayName(),this.pureFunction=this.entity.bIsPureFunc,this.dragLinkObjects=[],super.setLocation(this.entity.getNodePosX(),this.entity.getNodePosY()),this.entity.NodeWidth&&this.entity.NodeHeight?(this.sizeX=this.entity.NodeWidth.value,this.sizeY=this.entity.NodeHeight.value):this.updateComplete.then((()=>this.computeSizes()))}async getUpdateComplete(){let e=await super.getUpdateComplete();for(const t of this.getPinElements())e&&=await t.updateComplete;return e}bindToComment(e){e==this||this.boundComments.includes(e)||(e.addEventListener(se.nodeDragEventName,this.#$e),this.boundComments.push(e))}unbindFromComment(e){const t=this.boundComments.indexOf(e);t>=0&&(e.removeEventListener(se.nodeDragEventName,this.#$e),this.boundComments[t]=this.boundComments[this.boundComments.length-1],this.boundComments.pop())}isInsideComment(e){return this.topBoundary()>=e.topBoundary()&&this.rightBoundary()<=e.rightBoundary()&&this.bottomBoundary()<=e.bottomBoundary()&&this.leftBoundary()>=e.leftBoundary()}getType(){return this.entity.getType()}getNodeName(){return this.entity.getObjectName()}getNodeDisplayName(){return this.entity.nodeDisplayName()}setNodeWidth(e){this.entity.setNodeWidth(e),this.sizeX=e,this.acknowledgeReflow()}setNodeHeight(e){this.entity.setNodeHeight(e),this.sizeY=e,this.acknowledgeReflow()}sanitizeLinks(e=[]){this.getPinElements().forEach((t=>t.sanitizeLinks(e)))}rename(e){if(this.entity.Name==e)return!1;for(let t of this.getPinElements())for(let i of t.getLinks())this.blueprint.getPin(i).redirectLink(t,new Oe({objectName:e,pinGuid:t.entity.PinId}));this.entity.Name=e,this.nodeTitle=this.entity.Name}getPinElements(){return this.#Te}getPinEntities(){return this.entity.getPinEntities()}setLocation(e=0,t=0,i=!0){this.entity.setNodePosX(e),this.entity.setNodePosY(t),super.setLocation(e,t,i)}acknowledgeReflow(){this.requestUpdate(),this.updateComplete.then((()=>this.computeSizes()));let e=new CustomEvent(se.nodeReflowEventName);this.dispatchEvent(e)}setShowAdvancedPinDisplay(e){this.entity.AdvancedPinDisplay=new Ce(e?"Shown":"Hidden"),this.advancedPinDisplay=this.entity.AdvancedPinDisplay}toggleShowAdvancedPinDisplay(){this.setShowAdvancedPinDisplay("Shown"!=this.entity.AdvancedPinDisplay?.toString())}}class Kt extends ut{static properties={selecting:{type:Boolean,attribute:"data-selecting",reflect:!0,converter:be.booleanConverter},scrolling:{type:Boolean,attribute:"data-scrolling",reflect:!0,converter:be.booleanConverter},focused:{type:Boolean,attribute:"data-focused",reflect:!0,converter:be.booleanConverter},zoom:{type:Number,attribute:"data-zoom",reflect:!0},scrollX:{type:Number,attribute:!1},scrollY:{type:Number,attribute:!1},additionalX:{type:Number,attribute:!1},additionalY:{type:Number,attribute:!1},translateX:{type:Number,attribute:!1},translateY:{type:Number,attribute:!1}};static nodeBoundariesSupplier=e=>({primaryInf:e.leftBoundary(!0),primarySup:e.rightBoundary(!0),secondaryInf:e.topBoundary(!0),secondarySup:e.bottomBoundary(!0)});static nodeSelectToggleFunction=(e,t)=>{e.setSelected(t)};#Ge=new Map;#He=0;#Oe=0;nodes=[];links=[];mousePosition=[0,0];waitingExpandUpdate=!1;constructor(){super(),this.selecting=!1,this.scrolling=!1,this.focused=!1,this.zoom=0,this.scrollX=se.expandGridSize,this.scrollY=se.expandGridSize,this.translateX=se.expandGridSize,this.translateY=se.expandGridSize,super.initialize({},new vt)}initialize(){}getGridDOMElement(){return this.template.gridElement}getScroll(){return[this.scrollX,this.scrollY]}setScroll(e,t){this.scrollX=e,this.scrollY=t}scrollDelta(e=0,t=0,i=!1,n=se.smoothScrollTime){if(i){let i=[0,0];this.#He&&cancelAnimationFrame(this.#He),this.#Oe&&cancelAnimationFrame(this.#Oe),be.animate(0,e,n,(e=>{this.scrollDelta(e-i[0],0,!1),i[0]=e}),(e=>this.#He=e)),be.animate(0,t,n,(e=>{this.scrollDelta(0,e-i[1],!1),i[1]=e}),(e=>this.#Oe=e))}else{const i=[2*se.expandGridSize,2*se.expandGridSize];let n=this.getScroll(),r=[n[0]+e,n[1]+t],s=[0,0];for(let e=0;e<2;++e)r[e]i[e]-se.gridExpandThreshold*se.expandGridSize&&(s[e]=1);0==s[0]&&0==s[1]||this.seamlessExpand(s[0],s[1]),n=this.getScroll(),r=[n[0]+e,n[1]+t],this.setScroll(r[0],r[1])}}scrollCenter(e=!1){const t=this.getScroll(),i=[this.translateX-t[0],this.translateY-t[1]],n=this.getViewportSize().map((e=>e/2)),r=[i[0]-n[0],i[1]-n[1]];this.scrollDelta(r[0],r[1],e)}getViewportSize(){return[this.template.viewportElement.clientWidth,this.template.viewportElement.clientHeight]}getScrollMax(){return[this.template.viewportElement.scrollWidth-this.template.viewportElement.clientWidth,this.template.viewportElement.scrollHeight-this.template.viewportElement.clientHeight]}snapToGrid(e,t){return be.snapToGrid(e,t,se.gridSize)}seamlessExpand(e,t){e=Math.round(e),t=Math.round(t);let i=this.getScale();[e,t]=[-e*se.expandGridSize,-t*se.expandGridSize],0!=e&&(this.scrollX+=e,e/=i),0!=t&&(this.scrollY+=t,t/=i),this.translateX+=e,this.translateY+=t}progressiveSnapToGrid(e){return se.expandGridSize*Math.round(e/se.expandGridSize+.5*Math.sign(e))}getZoom(){return this.zoom}setZoom(e,t){if((e=be.clamp(e,se.minZoom,se.maxZoom))==this.zoom)return;let i=this.getScale();if(this.zoom=e,t){t[0]+=this.translateX,t[1]+=this.translateY;let e=this.getScale()/i,n=[e*t[0],e*t[1]];this.scrollDelta((n[0]-t[0])*i,(n[1]-t[1])*i)}}getScale(){return se.scale[this.getZoom()]}scaleCorrect(e){return e/this.getScale()}scaleCorrectReverse(e){return e*this.getScale()}compensateTranslation(e,t){return[e-=this.translateX,t-=this.translateY]}getNodes(e=!1,[t,i,n,r]=[Number.MIN_SAFE_INTEGER,Number.MAX_SAFE_INTEGER,Number.MAX_SAFE_INTEGER,Number.MIN_SAFE_INTEGER]){let s=this.nodes;return e&&(s=s.filter((e=>e.selected))),(t>Number.MIN_SAFE_INTEGER||iNumber.MIN_SAFE_INTEGER)&&(s=s.filter((e=>e.topBoundary()>=t&&e.rightBoundary()<=i&&e.bottomBoundary()<=n&&e.leftBoundary()>=r))),s}getCommentNodes(e=!1){let t=[...this.template.getCommentNodes(e)];return 0===t.length&&(t=this.nodes.filter((t=>t.getType()===se.paths.comment&&(!e||t.selected)))),t}getPin(e){let t=this.template.getPin(e);return t&&t.nodeElement.getNodeName()==e.objectName.toString()||(t=[...this.nodes.find((t=>e.objectName.toString()==t.getNodeName()))?.getPinElements()??[]].find((t=>e.pinGuid.toString()==t.getPinId().toString()))),t}getLinks(e=null,t=null){if(null==e!=(null==t)){const i=e??t;return this.links.filter((e=>e.source==i||e.destination==i))}return null!=e&&null!=t?this.links.filter((i=>i.source==e&&i.destination==t||i.source==t&&i.destination==e)):this.links}getLink(e,t,i=!1){return this.links.find((n=>n.source==e&&n.destination==t||!i&&n.source==t&&n.destination==e))}selectAll(){this.getNodes().forEach((e=>Kt.nodeSelectToggleFunction(e,!0)))}unselectAll(){this.getNodes().forEach((e=>Kt.nodeSelectToggleFunction(e,!1)))}addGraphElement(...e){const t=e=>{const i=e.currentTarget;i.removeEventListener(se.removeEventName,t);const n=i instanceof Wt?this.nodes:i instanceof Pt?this.links:null,r=n?.indexOf(i);if(r>=0){const e=n.pop();rt.entity.getObjectName()==e));if(n){let e=n.entity.getObjectName(!0);this.#Ge[e]=this.#Ge[e]??-1;do{++this.#Ge[e]}while(this.nodes.find((t=>t.entity.getObjectName()==se.nodeTitle(e,this.#Ge[e]))));n.rename(se.nodeTitle(e,this.#Ge[e]))}this.nodes.push(i),i.addEventListener(se.removeEventName,t),this.template.nodesContainerElement?.appendChild(i)}else i instanceof Pt&&!this.links.includes(i)&&(this.links.push(i),i.addEventListener(se.removeEventName,t),this.template.linksContainerElement&&!this.template.linksContainerElement.contains(i)&&this.template.linksContainerElement.appendChild(i));e.filter((e=>e instanceof Wt)).forEach((t=>t.sanitizeLinks(e))),e.filter((e=>e instanceof Wt&&e.getType()==se.paths.comment)).forEach((e=>e.updateComplete.then((()=>e.template.manageNodesBind()))))}removeGraphElement(...e){for(let t of e){if(t.closest("ueb-blueprint")!==this)return;t.remove()}}setFocused(e=!0){if(this.focused==e)return;let t=new CustomEvent(e?se.focusEventName.begin:se.focusEventName.end);this.focused=e,this.focused||this.unselectAll(),this.dispatchEvent(t)}acknowledgeEditText(e){const t=new CustomEvent(e?se.editTextEventName.begin:se.editTextEventName.end);this.dispatchEvent(t)}}customElements.define("ueb-blueprint",Kt);class qt extends Lt{#De;get locationChangeCallback(){return this.#De}set locationChangeCallback(e){this.#De=e}movementSpace;movementSpaceSize=[0,0];firstUpdated(e){super.firstUpdated(e),this.movementSpace=this.element.parentElement}setup(){super.setup();const e=this.movementSpace.getBoundingClientRect();this.movementSpaceSize=[e.width,e.height]}createDraggableObject(){return new Nt(this.element,this.blueprint,{draggableElement:this.movementSpace,ignoreTranslateCompensate:!0,moveEverywhere:!0,movementSpace:this.movementSpace,repositionOnClick:!0,stepSize:1})}adjustLocation(e,t){return this.locationChangeCallback?.(e,t),[e,t]}}class Zt extends qt{adjustLocation(e,t){const i=Math.round(this.movementSpaceSize[0]/2);e-=i,t=-(t-i);let[n,r]=be.getPolarCoordinates(e,t);return n=Math.min(n,i),[e,t]=be.getCartesianCoordinates(n,r),this.locationChangeCallback?.(e/i,t/i),[e=Math.round(e+i),t=Math.round(-t+i)]}}class Xt extends ct{windowElement;setup(){super.setup(),this.windowElement=this.closest("ueb-window")}setLocation(e,t){super.setLocation(...this.template.adjustLocation(e,t))}}class Yt extends Xt{constructor(){super(),super.initialize({},new Zt)}static newObject(){return new Yt}initialize(){}}class Qt extends qt{adjustLocation(e,t){return e=be.clamp(e,0,this.movementSpaceSize[0]),t=be.clamp(t,0,this.movementSpaceSize[1]),this.locationChangeCallback?.(e/this.movementSpaceSize[0],1-t/this.movementSpaceSize[1]),[e,t]}}class Jt extends Xt{constructor(){super(),super.initialize({},new Qt)}static newObject(){return new Jt}initialize(){}}class ei extends ht{constructor(e,t,i={}){i.consumeEvent=!0,super(e,t,i)}}class ti extends tt{#Ve;#Re;#ze=e=>this.element.selectedOption=e.target.selectedOptions[0].value;render(){return O` `}firstUpdated(e){super.firstUpdated(e),this.#Ve=this.element.querySelector("select:first-child"),this.#Re=this.element.querySelector("select:last-child");const t=new Event("input",{bubbles:!0});this.#Ve.dispatchEvent(t)}updated(e){super.updated(e);const t=this.#Re.getBoundingClientRect();this.element.style.setProperty("--ueb-dropdown-width",t.width+"px")}createInputObjects(){return[...super.createInputObjects(),new ei(this.element,this.blueprint)]}setSelectedValue(e){this.element.querySelector(`option[value="${e}"]`).defaultSelected=!0}getSelectedValue(){return this.#Ve.value}}class ii extends ut{static properties={...super.properties,options:{type:Object},selectedOption:{type:String}};constructor(){super(),super.initialize({},new ti),this.options=[],this.selectedOption=""}static newObject(e){return new ii}initialize(){}getValue(){return this.template.getSelectedValue()}}class ni extends tt{#_e=()=>{this.blueprint.acknowledgeEditText(!0),this.element.selectOnFocus&&getSelection().selectAllChildren(this.element)};#Fe=()=>{this.blueprint.acknowledgeEditText(!1),getSelection().removeAllRanges()};#je=e=>e.target.querySelectorAll("br").forEach((e=>e.remove()));#Ue=e=>{"Enter"!=e.code||e.shiftKey||e.target.blur()};initialize(e){super.initialize(e),this.element.classList.add("ueb-pin-input-content"),this.element.setAttribute("role","textbox"),this.element.contentEditable="true"}firstUpdated(e){super.firstUpdated(e);const t=new Event("input",{bubbles:!0});this.element.dispatchEvent(t)}createInputObjects(){return[...super.createInputObjects(),new ei(this.element,this.blueprint)]}setup(){super.setup(),this.element.addEventListener("focus",this.#_e),this.element.addEventListener("focusout",this.#Fe),this.element.singleLine&&this.element.addEventListener("input",this.#je),this.element.blurOnEnter&&this.element.addEventListener("keydown",this.#Ue)}cleanup(){super.cleanup(),this.element.removeEventListener("focus",this.#_e),this.element.removeEventListener("focusout",this.#Fe),this.element.removeEventListener("input",this.#je),this.element.removeEventListener("keydown",this.#Ue)}}class ri extends ut{static properties={...super.properties,singleLine:{type:Boolean,attribute:"data-single-line",converter:be.booleanConverter,reflect:!0},selectOnFocus:{type:Boolean,attribute:"data-select-focus",converter:be.booleanConverter,reflect:!0},blurOnEnter:{type:Boolean,attribute:"data-blur-enter",converter:be.booleanConverter,reflect:!0}};constructor(){super(),this.singleLine=!1,this.selectOnFocus=!0,this.blurOnEnter=!0,super.initialize({},new ni)}static newObject(){return new ri}initialize(){}}class si extends Vt{#We;#Ke=()=>this.element.setDefaultValue(this.#We.checked);firstUpdated(e){super.firstUpdated(e),this.#We=this.element.querySelector(".ueb-pin-input")}setup(){super.setup(),this.#We?.addEventListener("change",this.#Ke)}cleanup(){super.cleanup(),this.#We?.removeEventListener("change",this.#Ke)}createInputObjects(){return[...super.createInputObjects(),new ei(this.#We,this.blueprint)]}renderInput(){return O``}}class ai extends Vt{static singleLineInput=!1;static selectOnFocus=!0;static saveEachInputChange=!1;#qe;get inputWrapper(){return this.#qe}#Ze;static stringFromInputToUE(e){return e.replace(/(?=\n\s*)\n$/,"")}static stringFromUEToInput(e){return e.replaceAll(/(?:\r|(?<=(?:^|[^\\])(?:\\\\)*)\\r)(?=\n)/g,"").replace(/(?<=\n\s*)$/,"\n")}#Xe=()=>this.setInputs(this.getInputs(),!0);#Ye=e=>this.#Qe(e.target);#Qe(e){const t=this.blueprint.scaleCorrect(this.#qe.getBoundingClientRect().width)+this.nameWidth,i=this.element.classList.contains("ueb-pin-input-wrap");!i&&t>se.pinInputWrapWidth?this.element.classList.add("ueb-pin-input-wrap"):i&&t<=se.pinInputWrapWidth&&this.element.classList.remove("ueb-pin-input-wrap")}firstUpdated(e){super.firstUpdated(e);this.constructor.canWrapInput&&this.isInputRendered()&&(this.element.addEventListener("input",this.#Ye),this.nameWidth=this.blueprint.scaleCorrect(this.element.querySelector(".ueb-pin-name")?.getBoundingClientRect().width??0)),this.#qe=this.element.querySelector(".ueb-pin-input-wrapper"),this.#Ze=[...this.element.querySelectorAll("ueb-input")]}setup(){super.setup();const e=this.constructor;e.saveEachInputChange?this.element.addEventListener("input",this.#Xe):this.element.addEventListener("focusout",this.#Xe),e.canWrapInput&&this.isInputRendered()&&(this.element.addEventListener("input",this.#Ye),this.element.nodeElement.addEventListener(se.nodeReflowEventName,this.#Ye))}cleanup(){super.cleanup(),this.element.nodeElement.removeEventListener(se.nodeReflowEventName,this.#Ye),this.element.removeEventListener("input",this.#Ye),this.element.removeEventListener("input",this.#Xe),this.element.removeEventListener("focusout",this.#Xe)}getInput(){return this.getInputs().reduce(((e,t)=>e+t),"")}getInputs(){return this.#Ze.map((e=>be.clearHTMLWhitespace(e.innerHTML)))}setInputs(e=[],t=!0){this.#Ze.forEach(this.constructor.singleLineInput?(t,i)=>t.innerText=e[i]:(t,i)=>t.innerText=e[i].replaceAll("\n","")),t&&this.setDefaultValue(e.map((e=>ai.stringFromInputToUE(e))),e),this.element.requestUpdate(),this.element.nodeElement.acknowledgeReflow()}setDefaultValue(e=[],t=e){this.element.setDefaultValue(e.join(""))}renderInput(){const e=this.constructor,t=e.singleLineInput,i=e.selectOnFocus;return O`
`}}class oi extends ai{static saveEachInputChange=!0;#Je;#et=[];setup(){super.setup();const e=this.element.nodeElement.entity.EnumEntries;this.#et=e?.map((e=>(""===e&&(e="None"),[e,this.element.nodeElement.getPinEntities().find((t=>e===t.PinName))?.PinFriendlyName.toString()??e])))??se.CommonEnums[this.element.entity.getSubCategory()]?.map((e=>e instanceof Array?e:[e,be.formatStringName(e)]))??[];const t=this.element.getDefaultValue().toString();this.#et.find((([e,i])=>e===t))||this.#et.push([t,be.formatStringName(t)]),this.element.requestUpdate()}renderInput(){return this.element.nodeElement.entity,O``}firstUpdated(e){super.firstUpdated(e),this.#Je=this.element.querySelector("ueb-dropdown")}getInputs(){return[this.#Je.getValue()]}}class li extends Vt{renderIcon(){return Ke.execPin}renderName(){let e=this.element.entity.PinName;if(this.element.entity.PinFriendlyName)e=this.element.entity.PinFriendlyName.toString();else if("execute"===e||"then"===e)return O``;return O`${this.element.getPinDisplayName()}`}}class ui extends ai{static singleLineInput=!0;setInputs(e=[],t=!1){if(e&&0!=e.length||(e=[this.getInput()]),super.setInputs(e,!1),t){let i=[];for(const n of e){let e=parseFloat(n);isNaN(e)&&(e=0,t=!1),i.push(e)}this.setDefaultValue(i,e)}}setDefaultValue(e=[],t){this.element.setDefaultValue(e[0])}}class ci extends ui{setDefaultValue(e=[],t=e){this.element.getDefaultValue(!0).value=e[0],this.element.requestUpdate()}renderInput(){return O`
`}}class hi extends ci{setInputs(e=[],t=!1){if(e&&0!=e.length||(e=[this.getInput()]),super.setInputs(e,!1),t){if(!e[0].match(/[\-\+]?[0-9]+/))return;const t=[BigInt(e[0])];this.setDefaultValue(t,e)}}} +var te,ie;class se extends b{constructor(){super(...arguments),this.renderOptions={host:this},this._$Do=void 0}createRenderRoot(){var e,t;const i=super.createRenderRoot();return null!==(e=(t=this.renderOptions).renderBefore)&&void 0!==e||(t.renderBefore=i.firstChild),i}update(e){const t=this.render();this.hasUpdated||(this.renderOptions.isConnected=this.isConnected),super.update(e),this._$Do=((e,t,i)=>{var s,r;const n=null!==(s=null==i?void 0:i.renderBefore)&&void 0!==s?s:t;let a=n._$litPart$;if(void 0===a){const e=null!==(r=null==i?void 0:i.renderBefore)&&void 0!==r?r:null;n._$litPart$=a=new K(t.insertBefore(N(),e),e,void 0,null!=i?i:{})}return a._$AI(e),a})(t,this.renderRoot,this.renderOptions)}connectedCallback(){var e;super.connectedCallback(),null===(e=this._$Do)||void 0===e||e.setConnected(!0)}disconnectedCallback(){var e;super.disconnectedCallback(),null===(e=this._$Do)||void 0===e||e.setConnected(!1)}render(){return D}}se.finalized=!0,se._$litElement$=!0,null===(te=globalThis.litElementHydrateSupport)||void 0===te||te.call(globalThis,{LitElement:se});const re=globalThis.litElementPolyfillSupport;null==re||re({LitElement:se}),(null!==(ie=globalThis.litElementVersions)&&void 0!==ie?ie:globalThis.litElementVersions=[]).push("3.3.3");class ne{static nodeColors={black:n``,blue:n``,darkBlue:n``,darkTurquoise:n``,gray:n``,green:n``,lime:n``,red:n``,turquoise:n``,violet:n``,yellow:n``};static alphaPattern="repeating-conic-gradient(#7c8184 0% 25%, #c2c3c4 0% 50%) 50% / 10px 10px";static colorDragEventName="ueb-color-drag";static colorPickEventName="ueb-color-pick";static colorWindowEventName="ueb-color-window";static colorWindowName="Color Picker";static defaultCommentHeight=96;static defaultCommentWidth=400;static distanceThreshold=5;static dragEventName="ueb-drag";static dragGeneralEventName="ueb-drag-general";static edgeScrollThreshold=50;static editTextEventName={begin:"ueb-edit-text-begin",end:"ueb-edit-text-end"};static expandGridSize=400;static focusEventName={begin:"blueprint-focus",end:"blueprint-unfocus"};static fontSize=n``;static gridAxisLineColor=n``;static gridExpandThreshold=.25;static gridLineColor=n``;static gridLineWidth=1;static gridSet=8;static gridSetLineColor=n``;static gridShrinkThreshold=4;static gridSize=16;static hexColorRegex=/^\s*#(?[0-9a-fA-F]{2})(?[0-9a-fA-F]{2})(?[0-9a-fA-F]{2})([0-9a-fA-F]{2})?|#(?[0-9a-fA-F])(?[0-9a-fA-F])(?[0-9a-fA-F])\s*$/;static indentation=" ";static keysSeparator=/[\.\(\)]/;static knotOffset=[-ne.gridSize,-.5*ne.gridSize];static lineTracePattern=/LineTrace(Single|Multi)(\w*)/;static linkCurveHeight=15;static linkCurveWidth=80;static linkMinWidth=100;static nameRegexSpaceReplacement=new RegExp("^K2(?:[Nn]ode)?_|(?<=[a-z])(?=[A-Z0-9])|(?<=[A-Z])(?{let s=100-e;return`M ${e} 0 C ${t.toFixed(3)} 0, ${i.toFixed(3)} 0, 50 50 S ${(s-t+e).toFixed(3)} 100, ${s.toFixed(3)} 100`};static maxZoom=7;static minZoom=-12;static mouseClickButton=0;static mouseRightClickButton=2;static mouseWheelZoomThreshold=80;static nodeDragEventName="ueb-node-drag";static nodeDragGeneralEventName="ueb-node-drag-general";static nodeTitle=(e,t)=>`${e}_${t}`;static nodeRadius=8;static nodeReflowEventName="ueb-node-reflow";static paths={actorBoundEvent:"/Script/BlueprintGraph.K2Node_ActorBoundEvent",addDelegate:"/Script/BlueprintGraph.K2Node_AddDelegate",ambientSound:"/Script/Engine.AmbientSound",asyncAction:"/Script/BlueprintGraph.K2Node_AsyncAction",blueprint:"/Script/Engine.Blueprint",blueprintGameplayTagLibrary:"/Script/GameplayTags.BlueprintGameplayTagLibrary",blueprintMapLibrary:"/Script/Engine.BlueprintMapLibrary",blueprintSetLibrary:"/Script/Engine.BlueprintSetLibrary",callArrayFunction:"/Script/BlueprintGraph.K2Node_CallArrayFunction",callDelegate:"/Script/BlueprintGraph.K2Node_CallDelegate",callFunction:"/Script/BlueprintGraph.K2Node_CallFunction",comment:"/Script/UnrealEd.EdGraphNode_Comment",commutativeAssociativeBinaryOperator:"/Script/BlueprintGraph.K2Node_CommutativeAssociativeBinaryOperator",componentBoundEvent:"/Script/BlueprintGraph.K2Node_ComponentBoundEvent",createDelegate:"/Script/BlueprintGraph.K2Node_CreateDelegate",customEvent:"/Script/BlueprintGraph.K2Node_CustomEvent",doN:"/Engine/EditorBlueprintResources/StandardMacros.StandardMacros:Do N",doOnce:"/Engine/EditorBlueprintResources/StandardMacros.StandardMacros:DoOnce",dynamicCast:"/Script/BlueprintGraph.K2Node_DynamicCast",edGraph:"/Script/Engine.EdGraph",edGraphPinDeprecated:"/Script/Engine.EdGraphPin_Deprecated",eDrawDebugTrace:"/Script/Engine.EDrawDebugTrace",eMaterialSamplerType:"/Script/Engine.EMaterialSamplerType",enum:"/Script/CoreUObject.Enum",enumLiteral:"/Script/BlueprintGraph.K2Node_EnumLiteral",eSamplerSourceMode:"/Script/Engine.ESamplerSourceMode",eSearchCase:"/Script/CoreUObject.ESearchCase",eSearchDir:"/Script/CoreUObject.ESearchDir",eSpawnActorCollisionHandlingMethod:"/Script/Engine.ESpawnActorCollisionHandlingMethod",eTextureMipValueMode:"/Script/Engine.ETextureMipValueMode",eTraceTypeQuery:"/Script/Engine.ETraceTypeQuery",event:"/Script/BlueprintGraph.K2Node_Event",executionSequence:"/Script/BlueprintGraph.K2Node_ExecutionSequence",flipflop:"/Engine/EditorBlueprintResources/StandardMacros.StandardMacros:FlipFlop",forEachElementInEnum:"/Script/BlueprintGraph.K2Node_ForEachElementInEnum",forEachLoop:"/Engine/EditorBlueprintResources/StandardMacros.StandardMacros:ForEachLoop",forEachLoopWithBreak:"/Engine/EditorBlueprintResources/StandardMacros.StandardMacros:ForEachLoopWithBreak",forLoop:"/Engine/EditorBlueprintResources/StandardMacros.StandardMacros:ForLoop",forLoopWithBreak:"/Engine/EditorBlueprintResources/StandardMacros.StandardMacros:ForLoopWithBreak",functionEntry:"/Script/BlueprintGraph.K2Node_FunctionEntry",functionResult:"/Script/BlueprintGraph.K2Node_FunctionResult",gameplayTag:"/Script/GameplayTags.GameplayTag",getInputAxisKeyValue:"/Script/BlueprintGraph.K2Node_GetInputAxisKeyValue",ifThenElse:"/Script/BlueprintGraph.K2Node_IfThenElse",inputAxisKeyEvent:"/Script/BlueprintGraph.K2Node_InputAxisKeyEvent",inputDebugKey:"/Script/InputBlueprintNodes.K2Node_InputDebugKey",inputKey:"/Script/BlueprintGraph.K2Node_InputKey",inputVectorAxisEvent:"/Script/BlueprintGraph.K2Node_InputVectorAxisEvent",isValid:"/Engine/EditorBlueprintResources/StandardMacros.StandardMacros:IsValid",kismetArrayLibrary:"/Script/Engine.KismetArrayLibrary",kismetMathLibrary:"/Script/Engine.KismetMathLibrary",knot:"/Script/BlueprintGraph.K2Node_Knot",linearColor:"/Script/CoreUObject.LinearColor",literal:"/Script/BlueprintGraph.K2Node_Literal",macro:"/Script/BlueprintGraph.K2Node_MacroInstance",makeArray:"/Script/BlueprintGraph.K2Node_MakeArray",makeMap:"/Script/BlueprintGraph.K2Node_MakeMap",makeSet:"/Script/BlueprintGraph.K2Node_MakeSet",makeStruct:"/Script/BlueprintGraph.K2Node_MakeStruct",materialExpressionConstant:"/Script/Engine.MaterialExpressionConstant",materialExpressionConstant2Vector:"/Script/Engine.MaterialExpressionConstant2Vector",materialExpressionConstant3Vector:"/Script/Engine.MaterialExpressionConstant3Vector",materialExpressionConstant4Vector:"/Script/Engine.MaterialExpressionConstant4Vector",materialExpressionLogarithm:"/Script/InterchangeImport.MaterialExpressionLogarithm",materialExpressionLogarithm10:"/Script/Engine.MaterialExpressionLogarithm10",materialExpressionLogarithm2:"/Script/Engine.MaterialExpressionLogarithm2",materialExpressionMaterialFunctionCall:"/Script/Engine.MaterialExpressionMaterialFunctionCall",materialExpressionSquareRoot:"/Script/Engine.MaterialExpressionSquareRoot",materialExpressionTextureCoordinate:"/Script/Engine.MaterialExpressionTextureCoordinate",materialExpressionTextureSample:"/Script/Engine.MaterialExpressionTextureSample",materialGraphNode:"/Script/UnrealEd.MaterialGraphNode",materialGraphNodeComment:"/Script/UnrealEd.MaterialGraphNode_Comment",multiGate:"/Script/BlueprintGraph.K2Node_MultiGate",pawn:"/Script/Engine.Pawn",pcgEditorGraphNode:"/Script/PCGEditor.PCGEditorGraphNode",pcgEditorGraphNodeInput:"/Script/PCGEditor.PCGEditorGraphNodeInput",pcgEditorGraphNodeOutput:"/Script/PCGEditor.PCGEditorGraphNodeOutput",pcgHiGenGridSizeSettings:"/Script/PCG.PCGHiGenGridSizeSettings",pcgSubgraphSettings:"/Script/PCG.PCGSubgraphSettings",promotableOperator:"/Script/BlueprintGraph.K2Node_PromotableOperator",reverseForEachLoop:"/Engine/EditorBlueprintResources/StandardMacros.StandardMacros:ReverseForEachLoop",rotator:"/Script/CoreUObject.Rotator",select:"/Script/BlueprintGraph.K2Node_Select",slateBlueprintLibrary:"/Script/UMG.SlateBlueprintLibrary",spawnActorFromClass:"/Script/BlueprintGraph.K2Node_SpawnActorFromClass",switchEnum:"/Script/BlueprintGraph.K2Node_SwitchEnum",switchGameplayTag:"/Script/GameplayTagsEditor.GameplayTagsK2Node_SwitchGameplayTag",switchInteger:"/Script/BlueprintGraph.K2Node_SwitchInteger",switchName:"/Script/BlueprintGraph.K2Node_SwitchName",switchString:"/Script/BlueprintGraph.K2Node_SwitchString",timeline:"/Script/BlueprintGraph.K2Node_Timeline",timeManagementBlueprintLibrary:"/Script/TimeManagement.TimeManagementBlueprintLibrary",transform:"/Script/CoreUObject.Transform",userDefinedEnum:"/Script/Engine.UserDefinedEnum",variableGet:"/Script/BlueprintGraph.K2Node_VariableGet",variableSet:"/Script/BlueprintGraph.K2Node_VariableSet",vector:"/Script/CoreUObject.Vector",vector2D:"/Script/CoreUObject.Vector2D",whileLoop:"/Engine/EditorBlueprintResources/StandardMacros.StandardMacros:WhileLoop"};static pinColor={[this.paths.rotator]:n``,[this.paths.transform]:n``,[this.paths.vector]:n``,Any:n``,"Any[]":n``,blue:n``,bool:n``,byte:n``,class:n``,default:n``,delegate:n``,enum:n``,exec:n``,green:n``,int:n``,int64:n``,interface:n``,name:n``,object:n``,Param:n``,"Param[]":n``,Point:n``,"Point[]":n``,real:n``,red:n``,string:n``,struct:n``,Surface:n``,"Surface[]":n``,text:n``,Volume:n``,"Volume[]":n``,wildcard:n``};static pinColorMaterial=n``;static pinInputWrapWidth=143;static removeEventName="ueb-element-delete";static scale={[-12]:.133333,[-11]:.166666,[-10]:.2,[-9]:.233333,[-8]:.266666,[-7]:.3,[-6]:.333333,[-5]:.375,[-4]:.5,[-3]:.675,[-2]:.75,[-1]:.875,0:1,1:1.25,2:1.375,3:1.5,4:1.675,5:1.75,6:1.875,7:2};static smoothScrollTime=1e3;static stringEscapedCharacters=/['"\\]/g;static subObjectAttributeNamePrefix="#SubObject";static subObjectAttributeNameFromEntity=(e,t=!1)=>this.subObjectAttributeNamePrefix+(!t&&e.Class?`_${e.Class}`:"")+`_${e.Name}`;static subObjectAttributeNameFromReference=(e,t=!1)=>this.subObjectAttributeNamePrefix+(t?"":"_"+e.type)+"_"+e.path;static subObjectAttributeNameFromName=e=>this.subObjectAttributeNamePrefix+"_"+e;static switchTargetPattern=/\/Script\/[\w\.\/\:]+K2Node_Switch([A-Z]\w+)+/;static trackingMouseEventName={begin:"ueb-tracking-mouse-begin",end:"ueb-tracking-mouse-end"};static unescapedBackslash=/(?<=(?:[^\\]|^)(?:\\\\)*)\\(?!\\)/;static windowApplyEventName="ueb-window-apply";static windowApplyButtonText="OK";static windowCancelEventName="ueb-window-cancel";static windowCancelButtonText="Cancel";static windowCloseEventName="ueb-window-close";static CommonEnums={[this.paths.eMaterialSamplerType]:["Color","Grayscale","Alpha","Normal","Masks","Distance Field Font","Linear Color","Linear Grayscale","Data","External","Virtual Color","Virtual Grayscale","Virtual Alpha","Virtual Normal","Virtual Mask","Virtual Linear Color","Virtual Linear Grayscal"],[this.paths.eSamplerSourceMode]:["From texture asset","Shared: Wrap","Shared: Clamp","Hidden"],[this.paths.eSpawnActorCollisionHandlingMethod]:[["Undefined","Default"],["AlwaysSpawn","Always Spawn, Ignore Collisions"],["AdjustIfPossibleButAlwaysSpawn","Try To Adjust Location, But Always Spawn"],["AdjustIfPossibleButDontSpawnIfColliding","Try To Adjust Location, Don't Spawn If Still Colliding"],["DontSpawnIfColliding","Do Not Spawn"]],[this.paths.eSearchCase]:["CaseSensitive","IgnoreCase"],[this.paths.eSearchDir]:["FromStart","FromEnd"],[this.paths.eDrawDebugTrace]:["None","ForOneFrame","ForDuration","Persistent"],[this.paths.eTextureMipValueMode]:["None (use computed mip level)","MipLevel (absolute, 0 is full resolution)","MipBias (relative to the computed mip level)","Derivative (explicit derivative to compute mip level)"],[this.paths.eTraceTypeQuery]:[["TraceTypeQuery1","Visibility"],["TraceTypeQuery2","Camera"]]};static ModifierKeys=["Ctrl","Shift","Alt","Meta"];static Keys={Backspace:"Backspace",Tab:"Tab",LeftControl:"ControlLeft",RightControl:"ControlRight",LeftShift:"ShiftLeft",RightShift:"ShiftRight",LeftAlt:"AltLeft",RightAlt:"AltRight",Enter:"Enter",Pause:"Pause",CapsLock:"CapsLock",Escape:"Escape",Space:"Space",PageUp:"PageUp",PageDown:"PageDown",End:"End",Home:"Home",ArrowLeft:"ArrowLeft",ArrowUp:"ArrowUp",ArrowRight:"ArrowRight",ArrowDown:"ArrowDown",PrintScreen:"PrintScreen",Insert:"Insert",Delete:"Delete",Zero:"Digit0",One:"Digit1",Two:"Digit2",Three:"Digit3",Four:"Digit4",Five:"Digit5",Six:"Digit6",Seven:"Digit7",Eight:"Digit8",Nine:"Digit9",A:"KeyA",B:"KeyB",C:"KeyC",D:"KeyD",E:"KeyE",F:"KeyF",G:"KeyG",H:"KeyH",I:"KeyI",K:"KeyK",L:"KeyL",M:"KeyM",N:"KeyN",O:"KeyO",P:"KeyP",Q:"KeyQ",R:"KeyR",S:"KeyS",T:"KeyT",U:"KeyU",V:"KeyV",W:"KeyW",X:"KeyX",Y:"KeyY",Z:"KeyZ",NumPadZero:"Numpad0",NumPadOne:"Numpad1",NumPadTwo:"Numpad2",NumPadThree:"Numpad3",NumPadFour:"Numpad4",NumPadFive:"Numpad5",NumPadSix:"Numpad6",NumPadSeven:"Numpad7",NumPadEight:"Numpad8",NumPadNine:"Numpad9",Multiply:"NumpadMultiply",Add:"NumpadAdd",Subtract:"NumpadSubtract",Decimal:"NumpadDecimal",Divide:"NumpadDivide",F1:"F1",F2:"F2",F3:"F3",F4:"F4",F5:"F5",F6:"F6",F7:"F7",F8:"F8",F9:"F9",F10:"F10",F11:"F11",F12:"F12",NumLock:"NumLock",ScrollLock:"ScrollLock"}}class ae{#e;get target(){return this.#e}#t;get blueprint(){return this.#t}consumeEvent;options;listenHandler=()=>this.listenEvents();unlistenHandler=()=>this.unlistenEvents();constructor(e,t,i={}){i.consumeEvent??=!1,i.listenOnFocus??=!1,i.unlistenOnTextEdit??=!1,this.#e=e,this.#t=t,this.consumeEvent=i.consumeEvent,this.options=i}setup(){this.options.listenOnFocus&&(this.blueprint.addEventListener(ne.focusEventName.begin,this.listenHandler),this.blueprint.addEventListener(ne.focusEventName.end,this.unlistenHandler)),this.options.unlistenOnTextEdit&&(this.blueprint.addEventListener(ne.editTextEventName.begin,this.unlistenHandler),this.blueprint.addEventListener(ne.editTextEventName.end,this.listenHandler)),this.blueprint.focused&&this.listenEvents()}cleanup(){this.unlistenEvents(),this.blueprint.removeEventListener(ne.focusEventName.begin,this.listenHandler),this.blueprint.removeEventListener(ne.focusEventName.end,this.unlistenHandler),this.blueprint.removeEventListener(ne.editTextEventName.begin,this.unlistenHandler),this.blueprint.removeEventListener(ne.editTextEventName.end,this.listenHandler)}listenEvents(){}unlistenEvents(){}}class oe{#i;constructor(e){this.#i=e}compute(e){return this.#i(e)}}class le{static attributes={type:{ignored:!0},getter:{ignored:!0}};constructor(e,t=null){this.type=e,this.getter=t}get(){return this.getter()}getTargetType(){const e=this.type;return e instanceof le?e.getTargetType():e}}class ce{static makeSuccess(e,t,i=null,s=0){return{status:!0,value:t,position:e,bestParser:i,bestPosition:s}}static makeFailure(e=0,t=null,i=0){return{status:!1,value:null,position:e,bestParser:t,bestPosition:i}}static makeContext(e=null,t=""){return{parsernostrum:e,input:t,highlighted:null}}static makePathNode(e,t=0,i=null){return{parent:i,parser:e,index:t}}}class ue{static indentation=" ";static highlight="Last valid parser";Self;static appendBeforeHighlight(e,t){return e.endsWith(ue.highlight)?e=e.replace(/(?=(?:\n|^).+$)/,t):e+=t,e}static lastRowLength(e,t=0){const i=e.match(/(?:\n|(^))([^\n]*)$/),s=void 0!==i[1]?t:0;return i[2].length+s}isHighlighted(e,t){if(e.highlighted instanceof ue)return e.highlighted===this;if(!e.highlighted||!t)return!1;let i,s,r,n;e:for(i=t,r=e.highlighted;i&&r;s=i,i=i.parent,n=r,r=r.parent)if(i.parser!==r.parser||i.index!==r.index){if(!s||!n)return!1;let e,t;for(e=i,t=r;e||t;e=e?.parent,t=t?.parent){const a=e?.parser===s.parser,o=t?.parser===n.parser;if(a||o){a&&(s=e),o&&(n=t),i=s,r=n;continue e}}return!1}return!0}isVisited(e){if(!e)return!1;for(e=e.parent;null!=e;e=e.parent)if(e.parser===this)return!0;return!1}parse(e,t,i){return null}toString(e=ce.makeContext(null,""),t=0,i=null){if(this.isVisited(i))return"<...>";return this.doToString(e,t,i)}doToString(e,t,i){return`${this.constructor.name} does not implement toString()`}}class he extends ue{#s;get value(){return this.#s}constructor(e){super(),this.#s=e}parse(e,t,i){const s=t+this.#s.length,r=e.input.substring(t,s);return this.#s===r?ce.makeSuccess(s,this.#s,i,s):ce.makeFailure()}doToString(e,t,i){const s=this.value.replaceAll("\n","\\n");let r=this.value.match(/^[a-zA-Z]$/)?s:`"${s.replaceAll('"','\\"')}"`;return this.isHighlighted(e,i)&&(r+="\n"+ue.indentation.repeat(t)+"^".repeat(r.length)+" "+ue.highlight),r}}class pe extends ue{static instance=new pe;parse(e,t,i){return ce.makeSuccess(t,"",i,0)}doToString(e,t,i){return""+(this.isHighlighted(e,i)?`\n${ue.indentation.repeat(t)}^^^^^^^^^ ${ue.highlight}`:"")}}class de extends ue{static highlightRegexp=new RegExp(String.raw`(?<=[^\S\n]*\| .*\n)^(?=[^\S\n]*\^+ ${ue.highlight}(?:\n|$))`,"m");#r;get parsers(){return this.#r}constructor(...e){super(),this.#r=e}parse(e,t,i){const s=ce.makeSuccess(0,"");for(let r=0;rs.bestPosition&&(s.bestParser=n.bestParser,s.bestPosition=n.bestPosition),n.status)return s.value=n.value,s.position=n.position,s}return s.status=!1,s.value=null,s}doToString(e,t,i){const s=ue.indentation.repeat(t),r=ue.indentation.repeat(t+1);if(2===this.#r.length&&this.#r[1]instanceof pe){let s=this.#r[0].toString(e,t,{parent:i,parser:this.#r[0],index:0});return this.#r[0]instanceof he||(s="<"+s+">"),s+="?",s}let n=this.#r.map(((s,r)=>s.toString(e,t+1,{parent:i,parser:s,index:r}))).join("\n"+r+"| ");return e.highlighted&&(n=n.replace(de.highlightRegexp," ")),"ALT<\n"+(this.isHighlighted(e,i)?`${s}^^^ ${ue.highlight}\n`:"")+r+n+"\n"+s+">"}}class me extends ue{#n;get parser(){return this.#n}#a;constructor(e,t){super(),this.#n=e,this.#a=t}parse(e,t,i){const s=this.#n.parse(e,t,{parent:i,parser:this.#n,index:0});if(!s.status)return s;const r=this.#a(s.value,e.input,s.position).getParser().parse(e,s.position);return s.bestPosition>r.bestPosition&&(r.bestParser=s.bestParser,r.bestPosition=s.bestPosition),r}doToString(e,t,i){const s="chained";let r=this.#n.toString(e,t,{parent:i,parser:this.#n,index:0});return this.isHighlighted(e,i)?r+=" => "+s+"\n"+ue.indentation.repeat(t)+" ".repeat(r.match(/(?:\n|^)([^\n]+)$/)?.[1].length+4)+"^".repeat(12)+" "+ue.highlight:r=ue.appendBeforeHighlight(r," => "+s),r}}class ge extends ue{static instance=new ge;parse(e,t,i){return ce.makeFailure()}doToString(e,t,i){return""+(this.isHighlighted(e,i)?`\n${ue.indentation.repeat(t)}^^^^^^^^^ ${ue.highlight}`:"")}}class be extends ue{#n;#o;constructor(e){super(),this.#n=e}resolve(){return this.#o||(this.#o=this.#n().getParser()),this.#o}parse(e,t,i){return this.resolve(),this.#o.parse(e,t,{parent:i,parser:this.#o,index:0})}doToString(e,t,i){const s={parent:i,parser:this.#o,index:0};return this.isHighlighted(e,i)&&(e.highlighted=e.highlighted instanceof ue?this.#o:s),this.resolve().toString(e,t,s)}}class ve extends ue{#n;get parser(){return this.#n}#l;get type(){return this.#l}static Type={NEGATIVE_AHEAD:"?!",NEGATIVE_BEHIND:"?String.raw`[^${e}\\]*(?:\\.[^${e}\\]*)*`;static#d=/[-\+]?(?:\d*\.)?\d+/;static common={number:new RegExp(this.#d.source+String.raw`(?!\.)`),numberInteger:/[\-\+]?\d+(?!\.\d)/,numberNatural:/\d+/,numberExponential:new RegExp(this.#d.source+String.raw`(?:[eE][\+\-]?\d+)?(?!\.)`),numberUnit:/\+?(?:0(?:\.\d+)?|1(?:\.0+)?)(?![\.\d])/,numberByte:/0*(?:25[0-5]|2[0-4]\d|1?\d?\d)(?!\d|\.)/,whitespace:/\s+/,whitespaceOpt:/\s*/,whitespaceInline:/[^\S\n]+/,whitespaceInlineOpt:/[^\S\n]*/,whitespaceMultiline:/\s*?\n\s*/,doubleQuotedString:new RegExp(`"(${this.#p('"')})"`),singleQuotedString:new RegExp(`'(${this.#p("'")})'`),backtickQuotedString:new RegExp("`("+this.#p("`")+")`")};constructor(e,t){super(),this.#c=e,this.#u=new RegExp(`^(?:${e.source})`,e.flags),this.#h=t}parse(e,t,i){const s=this.#u.exec(e.input.substring(t));s&&(t+=s[0].length);return s?ce.makeSuccess(t,this.#h(s),i,t):ce.makeFailure()}doToString(e,t,i){let s="/"+this.#c.source+"/";const r=Object.entries(ye.common).find((([e,t])=>t.source===this.#c.source))?.[0];return r&&(s="P."+r),this.isHighlighted(e,i)&&(s+="\n"+ue.indentation.repeat(t)+"^".repeat(s.length)+" "+ue.highlight),s}}class fe extends ue{#n;get parser(){return this.#n}#m;get mapper(){return this.#m}constructor(e,t){super(),this.#n=e,this.#m=t}parse(e,t,i){const s=this.#n.parse(e,t,{parent:i,parser:this.#n,index:0});return s.status&&(s.value=this.#m(s.value)),s}doToString(e,t,i){const s={parent:i,parser:this.#n,index:0};this.isHighlighted(e,i)&&(e.highlighted=e.highlighted instanceof ue?this.#n:s);let r=this.#n.toString(e,t,s);if(this.#n instanceof ye&&Object.values(ye.common).includes(this.#n.regexp))return this.#n.regexp===ye.common.numberInteger&&this.#m===BigInt?"P.numberBigInteger":r;let n=this.#m.toString();return(n.length>60||n.includes("\n"))&&(n="(...) => { ... }"),n=` -> map<${n}>`,r=ue.appendBeforeHighlight(r,n),r}}class we extends ye{static#m=e=>e;constructor(e){super(e,we.#m)}}class Se extends ye{constructor(e,t=0){super(e,(e=>e[t]))}}class Ee extends ue{#r;get parsers(){return this.#r}constructor(...e){super(),this.#r=e}parse(e,t,i){const s=new Array(this.#r.length),r=ce.makeSuccess(t,s);for(let t=0;tr.bestPosition&&(r.bestParser=s.bestParser,r.bestPosition=s.bestPosition),!s.status){r.status=!1,r.value=null;break}r.value[t]=s.value,r.position=s.position}return r}doToString(e,t,i){const s=ue.indentation.repeat(t),r=ue.indentation.repeat(t+1);return"SEQ<\n"+(this.isHighlighted(e,i)?`${s}^^^ ${ue.highlight}\n`:"")+this.#r.map(((s,n)=>r+s.toString(e,t+1,{parent:i,parser:s,index:n}))).join("\n")+"\n"+s+">"}}class Ce extends ue{#n;get parser(){return this.#n}#g;get min(){return this.#g}#b;get max(){return this.#b}constructor(e,t=0,i=Number.POSITIVE_INFINITY){if(super(),t>i)throw new Error("Min is greater than max");this.#n=e,this.#g=t,this.#b=i}parse(e,t,i){const s=ce.makeSuccess(t,[],i);for(let t=0;ts.bestPosition&&(s.bestParser=r.bestParser,s.bestPosition=r.bestPosition),!r.status){te;static#y=([e,t])=>t;static#f=([e,t])=>[e,...t];static#w=e=>e instanceof Array?e.join(""):e;static#p=e=>String.raw`[^${e}\\]*(?:\\.[^${e}\\]*)*`;static number=this.reg(ye.common.number).map(Number);static numberInteger=this.reg(ye.common.numberInteger).map(Number);static numberBigInteger=this.reg(this.numberInteger.getParser().parser.regexp).map(BigInt);static numberNatural=this.reg(ye.common.numberNatural).map(Number);static numberExponential=this.reg(ye.common.numberExponential).map(Number);static numberUnit=this.reg(ye.common.numberUnit).map(Number);static numberByte=this.reg(ye.common.numberByte).map(Number);static whitespace=this.reg(ye.common.whitespace);static whitespaceOpt=this.reg(ye.common.whitespaceOpt);static whitespaceInline=this.reg(ye.common.whitespaceInline);static whitespaceInlineOpt=this.reg(ye.common.whitespaceInlineOpt);static whitespaceMultiline=this.reg(ye.common.whitespaceMultiline);static doubleQuotedString=this.reg(ye.common.doubleQuotedString,1);static singleQuotedString=this.reg(ye.common.singleQuotedString,1);static backtickQuotedString=this.reg(ye.common.backtickQuotedString,1);constructor(e,t=!1){this.#n=e}getParser(){return this.#n}run(e){const t=this.#n.parse(ce.makeContext(this,e),0,ce.makePathNode(this.#n));return t.position!==e.length&&(t.status=!1),t}parse(e){const t=this.run(e);if(!t.status){const i=60,s=[Math.ceil(i/2),Math.floor(i/2)],r=Pe.lineColumnFromOffset(e,t.bestPosition);let n=t.bestPosition;const a=e.replaceAll(/^(\s)+|\s{6,}|\s*?\n\s*/g,((e,i,s)=>{let r=i?"...":" ... ";return s<=t.bestPosition&&(t.bestPosition0&&(u="..."+u,c+=3),s[1]e.getParser()))));return t}static alt(...e){return new this(new de(...e.map((e=>e.getParser()))))}static lookahead(e){return new this(new ve(e.getParser(),ve.Type.POSITIVE_AHEAD))}static lazy(e){return new this(new be(e))}times(e,t=e){return new Pe(new Ce(this.#n,e,t))}many(){return this.times(0,Number.POSITIVE_INFINITY)}atLeast(e){return this.times(e,Number.POSITIVE_INFINITY)}atMost(e){return this.times(0,e)}opt(){return Pe.alt(this,Pe.success())}sepBy(e,t=!1){return Pe.seq(this,Pe.seq(e,this).map(Pe.#y).many()).map(Pe.#f)}skipSpace(){return Pe.seq(this,Pe.whitespaceOpt).map(Pe.#v)}map(e){return new Pe(new fe(this.#n,e))}chain(e){return new Pe(new me(this.#n,e))}assert(e){return this.chain(((t,i,s)=>e(t,i,s)?Pe.success().map((()=>t)):Pe.failure()))}join(e=""){return this.map(Pe.#w)}toString(e=0,t=!1,i=null){i instanceof Pe&&(i=i.getParser());const s=ce.makeContext(this,"");return s.highlighted=i,(t?"\n"+ue.indentation.repeat(e):"")+this.#n.toString(s,e,ce.makePathNode(this.#n))}}class xe{static grammar=this.createGrammar();static createGrammar(){return Pe.failure()}}class Ne{static#S=new Map;static registerSerializer(e,t){Ne.#S.set(e,t)}static getSerializer(e){return Ne.#S.get(e)}}class ke{#E;get values(){return this.#E}constructor(...e){this.#E=e}}class Ae{static booleanConverter={fromAttribute:(e,t)=>{},toAttribute:(e,t)=>!0===e?"true":!1===e?"false":""};static sigmoid(e,t=1.7){return 1/(1+e/(1-e)**-t)}static sigmoidPositive(e,t=3.7,i=1.1){return 1-Math.exp(-((e/i)**t))}static clamp(e,t=-1/0,i=1/0){return Math.min(Math.max(e,t),i)}static getScale(e){const t=e.blueprint?.getScale()??getComputedStyle(e).getPropertyValue("--ueb-scale");return""!=t?parseFloat(t):1}static minDecimals(e,t=1,i=1e-8){const s=e*10**t;return Math.abs(s%1)>i?e.toString():e.toFixed(t)}static numberFromText(e=""){switch(e=e.toLowerCase()){case"zero":return 0;case"one":return 1;case"two":return 2;case"three":return 3;case"four":return 4;case"five":return 5;case"six":return 6;case"seven":return 7;case"eight":return 8;case"nine":return 9}}static roundDecimals(e,t=1){const i=10**t;return Math.round(e*i)/i}static printNumber(e){return e==Number.POSITIVE_INFINITY?"inf":e==Number.NEGATIVE_INFINITY?"-inf":Ae.minDecimals(e)}static printExponential(e){if(e==Number.POSITIVE_INFINITY)return"inf";if(e==Number.NEGATIVE_INFINITY)return"-inf";const t=Math.round(e);if(t>=1e3){const i=Math.floor(Math.log10(t));return`${Math.round(e/10**(i-2))/100}e+${i<10?"0":""}${i}`}return 0==Math.floor(e)?e.toString():this.roundDecimals(e,Math.max(0,3-Math.floor(e).toString().length)).toString()}static approximatelyEqual(e,t,i=1e-8){return!(Math.abs(e-t)>i)}static convertLocation(e,t,i=!1){const s=i?1:1/Ae.getScale(t),r=t.getBoundingClientRect();return[Math.round((e[0]-r.x)*s),Math.round((e[1]-r.y)*s)]}static isSerialized(e,t){const i=(e.attributes??e.constructor?.attributes)?.[t];return!!i&&i.serialized}static objectGet(e,t,i=void 0){if(void 0!==e){if(!(t instanceof Array))throw new TypeError("UEBlueprint: Expected keys to be an array");return 0!=t.length&&t[0]in e&&void 0!==e[t[0]]?1==t.length?e[t[0]]:Ae.objectGet(e[t[0]],t.slice(1),i):i}}static objectSet(e,t,i,s=!1,r=Object){if(!(t instanceof Array))throw new TypeError("Expected keys to be an array.");if(1==t.length){if(s||t[0]in e||void 0===e[t[0]])return e[t[0]]=i,!0}else if(t.length>0)return!s||e[t[0]]instanceof Object||(e[t[0]]=new r),Ae.objectSet(e[t[0]],t.slice(1),i,s,r);return!1}static equals(e,t){return e?.equals&&t?.equals?e.equals(t):(e=Ae.sanitize(e),t=Ae.sanitize(t),e?.constructor===BigInt&&t?.constructor===Number?t=BigInt(t):e?.constructor===Number&&t?.constructor===BigInt&&(e=BigInt(e)),e===t||e instanceof Array&&t instanceof Array&&(e.length===t.length&&e.every(((e,i)=>Ae.equals(e,t[i])))))}static getType(e){return null===e?null:e?.constructor===Object&&e?.type instanceof Function?e.type:e?.constructor}static isValueOfType(e,t,i=!1){return t instanceof le&&(t=t.getTargetType()),i&&null===e||e instanceof t||e?.constructor===t}static sanitize(e,t=e?.constructor){if(t instanceof Array&&(t=t[0]),t instanceof oe)return e;if(t instanceof ke){let i=t.values.find((t=>Ae.isValueOfType(e,t,!1)));i||(i=t.values[0]),t=i}return t instanceof le?e instanceof le?e:Ae.sanitize(e,t.getTargetType()):(t&&!Ae.isValueOfType(e,t,!0)&&(e=t===BigInt?BigInt(e):new t(e)),(e instanceof Boolean||e instanceof Number||e instanceof String)&&(e=e.valueOf()),e)}static snapToGrid(e,t,i){return 1===i?[e,t]:[i*Math.floor(e/i),i*Math.floor(t/i)]}static mergeArrays(e=[],t=[]){let i=[];e=[...e],t=[...t];e:for(;;){for(let s=0;s|
/g,"\n").replaceAll(/(\)/g,"")}static encodeHTMLWhitespace(e){return e.replaceAll(" "," ")}static capitalFirstLetter(e){return 0===e.length?e:e.charAt(0).toUpperCase()+e.slice(1)}static formatStringName(e=""){return e.replace(/^\s*b(?=[A-Z])/,"").replaceAll(ne.nameRegexSpaceReplacement," ").trim().split(" ").map((e=>Ae.capitalFirstLetter(e))).join(" ")}static getIdFromReference(e){return e.replace(/(?:.+\.)?([^\.]+)$/,"$1").replaceAll(/(?<=[a-z\d])(?=[A-Z])|(?<=[a-zA-Z])(?=\d)|(?<=[A-Z]{2})(?=[A-Z][a-z])/g,"-").toLowerCase()}static getNameFromPath(e){return e.match(/[^\.\/]+$/)?.[0]??""}static printLinearColor(e){return`${Math.round(255*e.R.valueOf())}, ${Math.round(255*e.G.valueOf())}, ${Math.round(255*e.B.valueOf())}`}static getPolarCoordinates(e,t,i=!1){let s=Math.atan2(t,e);return i&&s<0&&(s=2*Math.PI+s),[Math.sqrt(e*e+t*t),s]}static getCartesianCoordinates(e,t){return[e*Math.cos(t),e*Math.sin(t)]}static range(e=0,t=0,i=(t>=e?1:-1)){return Array.from({length:Math.ceil((t-e)/i)},((t,s)=>e+s*i))}static paste(e,t){const i=new ClipboardEvent("paste",{bubbles:!0,cancelable:!0,clipboardData:new DataTransfer});i.clipboardData.setData("text",t),e.dispatchEvent(i)}static async copy(e){const t=new ClipboardEvent("copy",{bubbles:!0,cancelable:!0,clipboardData:new DataTransfer});e.dispatchEvent(t)}static animate(e,t,i,s,r=(e=>{}),n=(e=>{const t=e**3.5;return t/(t+(1-e)**3.5)})){let a;const o=l=>{void 0===a&&(a=l);let c=(l-a)/i;Ae.approximatelyEqual(c,1)||c>1?c=1:r(requestAnimationFrame(o));const u=e+(t-e)*n(c);s(u)};r(requestAnimationFrame(o))}}class Le extends xe{static lookbehind="";static attributes={lookbehind:{ignored:!0}};static defaultAttribute={nullable:!1,ignored:!1,serialized:!1,expected:!1,inlined:!1,quoted:!1};constructor(e={},t=!1){super(),this.lookbehind;const i=this.constructor;let s=i.attributes;e.attributes&&(s={...i.attributes},Ae.mergeArrays(Object.keys(e.attributes),Object.keys(s)).forEach((t=>{s[t]={...Le.defaultAttribute,...s[t],...e.attributes[t]},s[t].type||(s[t].type=e[t]instanceof Array?[Ae.getType(e[t][0])]:Ae.getType(e[t]))})),Le.defineAttributes(this,s)),this.attributes;const r=Object.keys(e),n=Object.keys(s),a=Ae.mergeArrays(r,n);r.includes("lookbehind")&&(this.lookbehind=void 0);for(const r of a){if("attributes"==r)continue;let n=e[r],a=s[r];if(!t&&void 0!==n&&!(r in s)&&!r.startsWith(ne.subObjectAttributeNamePrefix)){const e=n instanceof Array?`[${n[0]?.constructor.name}]`:n.constructor.name;console.warn(`UEBlueprint: Attribute ${r} (of type ${e}) in the serialized data is not defined in ${i.name}.attributes`)}if(!a){this[r]=n;continue}const o=a.predicate?e=>{Object.defineProperties(this,{["#"+r]:{writable:!0,enumerable:!1},[r]:{enumerable:!0,get(){return this["#"+r]},set(e){a.predicate?.(e)?this["#"+r]=e:console.warn(`UEBlueprint: Tried to assign attribute ${r} to ${i.name} not satisfying the predicate`)}}}),this[r]=e}:e=>this[r]=e;let l=a.default;l instanceof Function&&(l=l(this));let c=a.type;c instanceof oe&&(c=c.compute(this)),c instanceof Array&&(c=Array),void 0===c&&(c=Ae.getType(l)),void 0===n?Object.hasOwn(a,"default")&&o(l):(n?.constructor===String&&a.serialized&&c!==String&&(n=Ne.getSerializer(c).read(n)),o(Ae.sanitize(n,c)))}}static defaultValueProviderFromType(e){return e!==Boolean&&(e===Number?0:e===BigInt?0n:e===String?"":e===Array||e instanceof Array?()=>[]:e instanceof ke?this.defaultValueProviderFromType(e.values[0]):e instanceof le?()=>new le(e.type,e.getter):e instanceof oe?void 0:()=>new e)}static cleanupAttributes(e,t=""){for(const i in e){e[i]={...Le.defaultAttribute,...e[i]};const s=e[i];if(void 0!==s.type||s.default instanceof Function||(s.type=s.default instanceof Array?[Ae.getType(s.default[0])]:Ae.getType(s.default)),!s.ignored&&void 0===s.default&&void 0===s.type)throw new Error(`UEBlueprint: Expected either "type" or "value" property in ${this.name} attribute ${t}`+i);null===s.default&&(s.nullable=!0)}}static isValueOfType(e,t){return null!=e&&(e instanceof t||e.constructor===t)}static expectsAllKeys(){return!Object.values(this.attributes).filter((e=>!e.ignored)).some((e=>!e.expected))}static getAttribute(e,t){return this.getAttributes(e)[t]}static getAttributes(e){return e.attributes??e.constructor?.attributes??{}}static defineAttributes(e,t){Object.defineProperty(e,"attributes",{writable:!0,configurable:!1}),e.attributes=t}getLookbehind(){let e=this.lookbehind??this.constructor.lookbehind;return e=e instanceof ke?e.values[0]:e,e}unexpectedKeys(){return Object.keys(this).length-Object.keys(this.constructor.attributes).length}equals(e){const t=Object.keys(this),i=Object.keys(e);if(t.length!=i.length)return!1;for(const i of t){if(this[i]instanceof Le&&!this[i].equals(e[i]))return!1;if(!Ae.equals(this[i],e[i]))return!1}return!0}}class Me{static separatedBy=(e,t,i=1)=>new RegExp(e+"(?:"+t+e+")"+(1===i?"*":2===i?"+":`{${i},}`));static Regex=class{static HexDigit=/[0-9a-fA-F]/;static InsideString=/(?:[^"\\]|\\.)*/;static InsideSingleQuotedString=/(?:[^'\\]|\\.)*/;static Integer=/[\-\+]?\d+(?!\d|\.)/;static Number=/[-\+]?(?:\d*\.)?\d+(?!\d|\.)/;static RealUnit=/\+?(?:0(?:\.\d+)?|1(?:\.0+)?)(?![\.\d])/;static Word=Me.separatedBy("[a-zA-Z]","_");static Symbol=/[a-zA-Z_]\w*/;static DotSeparatedSymbols=Me.separatedBy(this.Symbol.source,"\\.");static PathFragment=Me.separatedBy(this.Symbol.source,"[\\.:]");static PathSpaceFragment=Me.separatedBy(this.Symbol.source,"[\\.:\\ ]");static Path=new RegExp(`(?:\\/${this.PathFragment.source}){2,}`)};static null=Pe.reg(/\(\s*\)/).map((()=>null));static true=Pe.reg(/true/i).map((()=>!0));static false=Pe.reg(/false/i).map((()=>!1));static boolean=Pe.regArray(/(true)|false/i).map((e=>!!e[1]));static number=Pe.regArray(new RegExp(`(${Pe.number.getParser().parser.regexp.source})|(\\+?inf)|(-inf)`)).map((([e,t,i,s])=>t?Number(t):i?Number.POSITIVE_INFINITY:Number.NEGATIVE_INFINITY));static bigInt=Pe.reg(new RegExp(Pe.number.getParser().parser.regexp.source)).map(BigInt).map((e=>void 0!==e[2]?Number.POSITIVE_INFINITY:void 0!==e[3]?Number.NEGATIVE_INFINITY:Number(e[1])));static naturalNumber=Pe.lazy((()=>Pe.reg(/\d+/).map(Number)));static string=Pe.doubleQuotedString.map((e=>Ae.unescapeString(e)));static colorValue=Pe.numberByte;static word=Pe.reg(Me.Regex.Word);static pathQuotes=Pe.regArray(new RegExp("'\"("+Me.Regex.InsideString.source+")\"'|'("+Me.Regex.InsideSingleQuotedString.source+")'|\"("+Me.Regex.InsideString.source+')"')).map((([e,t,i,s])=>t??i??s));static path=Pe.regArray(new RegExp("'\"("+Me.Regex.InsideString.source+")\"'|'("+Me.Regex.InsideSingleQuotedString.source+")'|\"("+Me.Regex.InsideString.source+')"|('+Me.Regex.Path.source+")")).map((([e,t,i,s,r])=>t??i??s??r));static symbol=Pe.reg(Me.Regex.Symbol);static symbolQuoted=Pe.reg(new RegExp('"('+Me.Regex.Symbol.source+')"'),1);static attributeName=Pe.reg(Me.Regex.DotSeparatedSymbols);static attributeNameQuoted=Pe.reg(new RegExp('"('+Me.Regex.DotSeparatedSymbols.source+')"'),1);static guid=Pe.reg(new RegExp(`${Me.Regex.HexDigit.source}{32}`));static commaSeparation=Pe.reg(/\s*,\s*(?!\))/);static commaOrSpaceSeparation=Pe.reg(/\s*,\s*(?!\))|\s+/);static equalSeparation=Pe.reg(/\s*=\s*/);static typeReference=Pe.alt(Pe.reg(Me.Regex.Path),this.symbol);static hexColorChannel=Pe.reg(new RegExp(Me.Regex.HexDigit.source+"{2}"));static grammarFor(e,t=(e?.constructor===Object?e.type:e?.constructor),i=this.unknownValue){let s=i;if(t instanceof Array){if(e?.inlined)return this.grammarFor(void 0,t[0]);s=Pe.seq(Pe.reg(/\(\s*/),this.grammarFor(void 0,t[0]).sepBy(this.commaSeparation),Pe.reg(/\s*(?:,\s*)?\)/)).map((([e,t,i])=>t))}else if(t instanceof ke)s=t.values.map((e=>this.grammarFor(void 0,e))).reduce(((e,t)=>t&&t!==this.unknownValue&&e!==this.unknownValue?Pe.alt(e,t):this.unknownValue));else{if(t instanceof le)return this.grammarFor(void 0,t.getTargetType()).map((e=>new le(t.type,(()=>e))));if(e?.constructor===Object)s=this.grammarFor(void 0,t);else switch(t){case Boolean:s=this.boolean;break;case Number:s=this.number;break;case BigInt:s=this.bigInt;break;case String:s=this.string;break;default:if(t?.prototype instanceof xe)return t.grammar}}return e?.constructor===Object&&(e.serialized&&t.constructor!==String&&(s=s==this.unknownValue?this.string:Pe.seq(Pe.str('"'),s,Pe.str('"'))),e.nullable&&(s=Pe.alt(s,this.null))),s}static getAttribute(e,t){let i,s;if(e instanceof ke)for(let s of e.values)if(i=this.getAttribute(s,t))return i;return e instanceof Le.constructor?(i=e.attributes[t[0]],s=i?.type):e instanceof Array&&(i=e[t[0]],s=i),t.length>1?this.getAttribute(s,t.slice(1)):i}static createAttributeGrammar(e,t=this.attributeName,i=this.equalSeparation,s=((e,t,i)=>{})){return Pe.seq(t,i).chain((([t,i])=>{const r=t.split(ne.keysSeparator),n=this.getAttribute(e,r);return this.grammarFor(n).map((e=>t=>{s(t,r,e),Ae.objectSet(t,r,e,!0)}))}))}static createEntityGrammar=(e,t=!0,i=this.commaSeparation)=>Pe.seq(Pe.reg(e.lookbehind instanceof ke?new RegExp(`(${e.lookbehind.values.reduce(((e,t)=>e+"|"+t))})\\s*\\(\\s*`):e.lookbehind.constructor==String&&e.lookbehind.length?new RegExp(`(${e.lookbehind})\\s*\\(\\s*`):/()\(\s*/,1),this.createAttributeGrammar(e).sepBy(i),Pe.reg(/\s*(?:,\s*)?\)/)).map((([e,t,i])=>{let s={};return t.forEach((e=>e(s))),e.length&&(s.lookbehind=e),s})).chain((i=>{let s=Object.keys(i);if(Object.keys(e.attributes).filter((t=>e.attributes[t].expected)).find((e=>!s.includes(e)&&e)))return Pe.failure();const r=Object.keys(i).filter((t=>!(t in e.attributes))).length;return!t&&r>0?Pe.failure():Pe.success().map((()=>new e(i)))}));static unknownValue}class Te extends Le{static attributes={...super.attributes,value:{default:""}};static{this.cleanupAttributes(this.attributes)}static grammar=this.createGrammar();static createGrammar(){return Me.guid.map((e=>new this(e)))}static generateGuid(e=!0){let t=new Uint32Array(4);!0===e&&crypto.getRandomValues(t);let i="";return t.forEach((e=>{i+=("0".repeat(8)+e.toString(16).toUpperCase()).slice(-8)})),new Te({value:i})}constructor(e){e||(e=Te.generateGuid().value),e.constructor!==Object&&(e={value:e}),super(e),this.value}valueOf(){return this.value}toString(){return this.value}}class Ie extends Le{static attributes={...super.attributes,type:{default:""},path:{default:""}};static{this.cleanupAttributes(this.attributes)}static noneReferenceGrammar=Pe.str("None").map((()=>this.createNoneInstance()));static fullReferenceGrammar=Pe.seq(Me.typeReference,Pe.whitespaceInlineOpt,Me.pathQuotes).map((([e,t,i])=>new this({type:e,path:i})));static typeReferenceGrammar=Me.typeReference.map((e=>new this({type:e,path:""})));static pathReferenceGrammar=Me.path.map((e=>new this({type:"",path:e})));static grammar=this.createGrammar();static createGrammar(){return Pe.alt(this.noneReferenceGrammar,this.fullReferenceGrammar,this.typeReferenceGrammar,this.pathReferenceGrammar)}constructor(e={}){e.constructor===String&&(e={path:e}),super(e),this.type,this.path}static createNoneInstance(){return new Ie({type:"None",path:""})}sanitize(){if(this.type&&!this.type.startsWith("/")){let e=this.type+"_Deprecated",t=Object.keys(ne.paths).find((t=>{const i=Ae.getNameFromPath(ne.paths[t]);return i===this.type||i===e}));t&&(this.type=ne.paths[t])}}getName(){return Ae.getNameFromPath(this.path.replace(/_C$/,""))}toString(){return`${this.type}'"${this.path}"'`}}class Be extends Le{static attributes={...super.attributes,MemberParent:{type:Ie},MemberName:{type:String},MemberGuid:{type:Te}};static{this.cleanupAttributes(this.attributes)}static grammar=this.createGrammar();static createGrammar(){return Me.createEntityGrammar(this)}constructor(e){super(e),this.MemberParent,this.MemberName,this.MemberGuid}}class $e extends Le{static attributes={...super.attributes,value:{default:""}};static{this.cleanupAttributes(this.attributes)}static attributeConverter={fromAttribute:(e,t)=>new $e(e),toAttribute:(e,t)=>e.toString()};static grammar=this.createGrammar();static createGrammar(){return Me.symbol.map((e=>new this(e)))}constructor(e){e.constructor!==Object&&(e={value:e}),super(e),this.value}valueOf(){return this.value}toString(){return this.value}}class He extends Le{static attributes={...super.attributes,value:{default:0,predicate:e=>e%1==0&&e>1<<31&&e<-(1<<31)}};static{this.cleanupAttributes(this.attributes)}static grammar=this.createGrammar();static createGrammar(){return Pe.numberInteger.map((e=>new this(e)))}constructor(e=0){-0===e&&(e=0),super(e.constructor===Object?e:{value:e}),this.value}valueOf(){return this.value}toString(){return this.value.toString()}}class Ge extends Le{static attributes={...super.attributes,value:{default:0}};static{this.cleanupAttributes(this.attributes)}static grammar=this.createGrammar();static createGrammar(){return Pe.number.map((e=>new this(e)))}constructor(e=0){e.constructor!==Object&&(e={value:e}),super(e),this.value}valueOf(){return this.value}toString(){return this.value.toFixed(6)}}class Oe extends Le{static attributes={...super.attributes,R:{type:Ge,default:()=>new Ge,expected:!0},G:{type:Ge,default:()=>new Ge,expected:!0},B:{type:Ge,default:()=>new Ge,expected:!0},A:{type:Ge,default:()=>new Ge(1)},H:{type:Ge,default:()=>new Ge,ignored:!0},S:{type:Ge,default:()=>new Ge,ignored:!0},V:{type:Ge,default:()=>new Ge,ignored:!0}};static{this.cleanupAttributes(this.attributes)}static grammar=this.createGrammar();static linearToSRGB(e){return e<=0?0:e>=1?1:e<.0031308?12.92*e:1.055*Math.pow(e,1/2.4)-.055}static sRGBtoLinear(e){return e<=0?0:e>=1?1:e<.04045?e/12.92:Math.pow((e+.055)/1.055,2.4)}static getWhite(){return new Oe({R:1,G:1,B:1})}static createGrammar(){return Me.createEntityGrammar(this,!1)}static getLinearColorFromHexGrammar(){return Pe.regArray(new RegExp("#("+Me.Regex.HexDigit.source+"{2})("+Me.Regex.HexDigit.source+"{2})("+Me.Regex.HexDigit.source+"{2})("+Me.Regex.HexDigit.source+"{2})?")).map((([e,t,i,s,r])=>new this({R:parseInt(t,16)/255,G:parseInt(i,16)/255,B:parseInt(s,16)/255,A:parseInt(r??"FF",16)/255})))}static getLinearColorRGBListGrammar(){return Pe.seq(Pe.numberByte,Me.commaSeparation,Pe.numberByte,Me.commaSeparation,Pe.numberByte).map((([e,t,i,s,r])=>new this({R:e/255,G:i/255,B:r/255,A:1})))}static getLinearColorRGBGrammar(){return Pe.seq(Pe.reg(/rgb\s*\(\s*/),this.getLinearColorRGBListGrammar(),Pe.reg(/\s*\)/)).map((([e,t,i])=>t))}static getLinearColorRGBAGrammar(){return Pe.seq(Pe.reg(/rgba\s*\(\s*/),this.getLinearColorRGBListGrammar(),Pe.reg(/\s*\)/)).map((([e,t,i])=>t))}static getLinearColorFromAnyFormat(){return Pe.alt(this.getLinearColorFromHexGrammar(),this.getLinearColorRGBAGrammar(),this.getLinearColorRGBGrammar(),this.getLinearColorRGBListGrammar())}constructor(e){e instanceof Array&&(e={R:e[0]??0,G:e[1]??0,B:e[2]??0,A:e[3]??1}),super(e),this.R,this.G,this.B,this.A,this.H,this.S,this.V,this.#C()}#C(){const e=this.R.value,t=this.G.value,i=this.B.value;if(Ae.approximatelyEqual(e,t)&&Ae.approximatelyEqual(e,i)&&Ae.approximatelyEqual(t,i))return this.S.value=0,void(this.V.value=e);const s=Math.max(e,t,i),r=Math.min(e,t,i),n=s-r;let a;switch(s){case r:a=0;break;case e:a=(t-i)/n+(te.toString(16).toUpperCase().padStart(2,"0"))).join("")}toSRGBAString(){return this.toSRGBA().map((e=>e.toString(16).toUpperCase().padStart(2,"0"))).join("")}toHSVA(){return[this.H.value,this.S.value,this.V.value,this.A.value]}toNumber(){return(Math.round(255*this.R.value)<<24)+(Math.round(255*this.G.value)<<16)+(Math.round(255*this.B.value)<<8)+Math.round(255*this.A.value)}setFromRGBANumber(e){this.A.value=(255&e)/255,this.B.value=(e>>8&255)/255,this.G.value=(e>>16&255)/255,this.R.value=(e>>24&255)/255,this.#C()}setFromSRGBANumber(e){this.A.value=(255&e)/255,this.B.value=Oe.sRGBtoLinear((e>>8&255)/255),this.G.value=Oe.sRGBtoLinear((e>>16&255)/255),this.R.value=Oe.sRGBtoLinear((e>>24&255)/255),this.#C()}toArray(){return[this.R.value,this.G.value,this.B.value,this.A.value]}toString(){return Ae.printLinearColor(this)}}class De extends Le{static attributes={...super.attributes,MacroGraph:{type:Ie,default:()=>new Ie},GraphBlueprint:{type:Ie,default:()=>new Ie},GraphGuid:{type:Te,default:()=>new Te}};static{this.cleanupAttributes(this.attributes)}static grammar=this.createGrammar();static createGrammar(){return Me.createEntityGrammar(this)}constructor(e){super(e),this.MacroGraph,this.GraphBlueprint,this.GuidEntity}getMacroName(){const e=this.MacroGraph.path.search(":");return this.MacroGraph.path.substring(e+1)}}class Ve extends He{static attributes={...super.attributes,value:{...super.attributes.value,predicate:e=>e%1==0&&e>=0&&e<256}};static{this.cleanupAttributes(this.attributes)}static grammar=this.createGrammar();static createGrammar(){return Pe.numberByte.map((e=>new this(e)))}constructor(e=0){super(e)}}class Re extends Le{static attributes={...super.attributes,value:{default:""}};static{this.cleanupAttributes(this.attributes)}static grammar=this.createGrammar();static createGrammar(){return Me.symbol.map((e=>new this(e)))}constructor(e){e.constructor!==Object&&(e={value:e}),super(e),this.value}valueOf(){return this.value}toString(){return this.value}}class ze extends Re{static grammar=this.createGrammar();static createGrammar(){return Me.symbol.map((e=>new this(e)))}}class _e extends ze{static grammar=this.createGrammar();static createGrammar(){return Pe.reg(Me.Regex.InsideString).map((e=>new this(e)))}}class Fe extends Le{static lookbehind="INVTEXT";static attributes={...super.attributes,value:{default:""}};static{this.cleanupAttributes(this.attributes)}static grammar=this.createGrammar();static createGrammar(){return Pe.alt(Pe.seq(Pe.reg(new RegExp(`${this.lookbehind}\\s*\\(`)),Me.grammarFor(this.attributes.value),Pe.reg(/\s*\)/)).map((([e,t,i])=>t)),Pe.reg(new RegExp(this.lookbehind)).map((()=>""))).map((e=>new this(e)))}constructor(e){e.constructor!==Object&&(e={value:e}),super(e),this.value}}class je extends Le{static lookbehind="NSLOCTEXT";static attributes={...super.attributes,namespace:{default:""},key:{default:""},value:{default:""}};static{this.cleanupAttributes(this.attributes)}static grammar=this.createGrammar();static createGrammar(){return Pe.regArray(new RegExp(String.raw`${this.lookbehind}\s*\(`+String.raw`\s*"(${Me.Regex.InsideString.source})"\s*,`+String.raw`\s*"(${Me.Regex.InsideString.source})"\s*,`+String.raw`\s*"(${Me.Regex.InsideString.source})"\s*`+String.raw`(?:,\s+)?`+String.raw`\)`,"m")).map((e=>new this({namespace:Ae.unescapeString(e[1]),key:Ae.unescapeString(e[2]),value:Ae.unescapeString(e[3])})))}constructor(e){super(e),this.namespace,this.key,this.value}toString(){return Ae.capitalFirstLetter(this.value)}}class Ue extends Le{static lookbehind=new ke("LOCGEN_FORMAT_NAMED","LOCGEN_FORMAT_ORDERED");static attributes={...super.attributes,value:{type:[new ke(String,je,Fe,Ue)],default:[]}};static{this.cleanupAttributes(this.attributes)}static grammar=this.createGrammar();static createGrammar(){return Pe.seq(Pe.reg(new RegExp(`(${this.lookbehind.values.reduce(((e,t)=>e+"|"+t))})\\s*`),1),Me.grammarFor(this.attributes.value)).map((([e,t])=>{const i=new this({value:t});return i.lookbehind=e,i}))}constructor(e){super(e),this.value}toString(){const e=this.value?.[0]?.toString();if(!e)return"";const t=this.value.slice(1).map((e=>e.toString()));return"LOCGEN_FORMAT_NAMED"==this.lookbehind?e.replaceAll(/\{([a-zA-Z]\w*)\}/g,((e,i)=>{const s=t.indexOf(i)+1;return s>0&&s{const s=Number(i);return se>=-(1n<<63n)&&e<1n<<63n}};static{this.cleanupAttributes(this.attributes)}static grammar=this.createGrammar();static createGrammar(){return Pe.numberBigInteger.map((e=>new this(e)))}constructor(e=0){e.constructor!==Object&&(e={value:e}),super(e),this.value}valueOf(){return this.value}toString(){return this.value.toString()}}class Ke extends Le{static attributes={...super.attributes,value:{default:""}};static{this.cleanupAttributes(this.attributes)}static grammar=this.createGrammar();static createGrammar(){return Me.symbol.map((e=>new this(e)))}constructor(e){e.constructor!==Object&&(e={value:e}),super(e),this.value}valueOf(){return this.value}toString(){return this.value}}class Ye extends Le{static attributes={...super.attributes,objectName:{type:Ke},pinGuid:{type:Te}};static{this.cleanupAttributes(this.attributes)}static grammar=this.createGrammar();static createGrammar(){return Pe.seq(Ke.createGrammar(),Pe.whitespace,Te.createGrammar()).map((([e,t,i])=>new this({objectName:e,pinGuid:i})))}constructor(e){super(e),this.objectName,this.pinGuid}}class Ze extends Le{static attributes={...super.attributes,PinCategory:{default:""},PinSubCategory:{default:""},PinSubCategoryObject:{type:Ie,default:()=>Ie.createNoneInstance()},PinSubCategoryMemberReference:{type:Be,default:null},PinValueType:{type:Ze,default:null},ContainerType:{type:Ke},bIsReference:{default:!1},bIsConst:{default:!1},bIsWeakPointer:{default:!1},bIsUObjectWrapper:{default:!1},bSerializeAsSinglePrecisionFloat:{default:!1}};static{this.cleanupAttributes(this.attributes)}static grammar=this.createGrammar();static createGrammar(){return Me.createEntityGrammar(this)}constructor(e={},t=!1){super(e,t),this.PinCategory,this.PinSubCategory,this.PinSubCategoryObject,this.PinSubCategoryMemberReference,this.PinValueType,this.ContainerType,this.bIsReference,this.bIsConst,this.bIsWeakPointer,this.bIsUObjectWrapper,this.bIsUObjectWrapper,this.bSerializeAsSinglePrecisionFloat}copyTypeFrom(e){this.PinCategory=e.PinCategory,this.PinSubCategory=e.PinSubCategory,this.PinSubCategoryObject=e.PinSubCategoryObject,this.PinSubCategoryMemberReference=e.PinSubCategoryMemberReference,this.PinValueType=e.PinValueType,this.ContainerType=e.ContainerType,this.bIsReference=e.bIsReference,this.bIsConst=e.bIsConst,this.bIsWeakPointer=e.bIsWeakPointer,this.bIsUObjectWrapper=e.bIsUObjectWrapper,this.bSerializeAsSinglePrecisionFloat=e.bSerializeAsSinglePrecisionFloat}}class Xe extends Le{static attributes={...super.attributes,X:{default:0,expected:!0},Y:{default:0,expected:!0}};static{this.cleanupAttributes(this.attributes)}static grammar=this.createGrammar();static createGrammar(){return Me.createEntityGrammar(this,!1)}constructor(e){super(e),this.X,this.Y}toArray(){return[this.X,this.Y]}}class qe extends Xe{static grammar=this.createGrammar();static createGrammar(){return Pe.alt(Pe.regArray(new RegExp(/X\s*=\s*/.source+"(?"+Pe.number.getParser().parser.regexp.source+")\\s+"+/Y\s*=\s*/.source+"(?"+Pe.number.getParser().parser.regexp.source+")")).map((({groups:{x:e,y:t}})=>new this({X:Number(e),Y:Number(t)}))),Xe.createGrammar())}}class Qe extends Le{static attributes={...super.attributes,R:{default:0,expected:!0},P:{default:0,expected:!0},Y:{default:0,expected:!0}};static{this.cleanupAttributes(this.attributes)}static grammar=this.createGrammar();static createGrammar(){return Me.createEntityGrammar(this,!1)}constructor(e){super(e),this.R,this.P,this.Y}getRoll(){return this.R}getPitch(){return this.P}getYaw(){return this.Y}}class Je extends Qe{static grammar=this.createGrammar();static createGrammar(){const e=Pe.number.getParser().parser.regexp.source;return Pe.alt(Pe.reg(new RegExp("("+e+")\\s*,\\s("+e+")\\s*,\\s("+e+")")).map((([e,t,i])=>new this({R:Number(i),P:Number(e),Y:Number(t)}))),Qe.createGrammar())}}class et extends Xe{static grammar=this.createGrammar();static createGrammar(){const e=Pe.number.getParser().parser.regexp.source;return Pe.alt(Pe.reg(new RegExp("("+e+")\\s*,\\s("+e+")")).map((([e,t])=>new this({X:Number(e),Y:Number(t)}))),Xe.createGrammar())}}class tt extends Le{static attributes={...super.attributes,X:{default:0,expected:!0},Y:{default:0,expected:!0},Z:{default:0,expected:!0}};static{this.cleanupAttributes(this.attributes)}static grammar=this.createGrammar();static createGrammar(){return Me.createEntityGrammar(tt,!1)}constructor(e){super(e),this.X,this.Y,this.Z}toArray(){return[this.X,this.Y,this.Z]}}class it extends tt{static grammar=this.createGrammar();static createGrammar(){const e=Pe.number.getParser().parser.regexp.source;return Pe.alt(Pe.regArray(new RegExp("("+e+")\\s*,\\s*("+e+")\\s*,\\s*("+e+")")).map((([e,t,i,s])=>new this({X:Number(t),Y:Number(i),Z:Number(s)}))),tt.createGrammar())}}class st extends Le{static#P={[ne.paths.linearColor]:Oe,[ne.paths.rotator]:Qe,[ne.paths.vector]:tt,[ne.paths.vector2D]:Xe,bool:Boolean,byte:Ve,enum:ze,exec:String,int:He,int64:We,name:String,real:Number,string:String};static#x={enum:_e,rg:qe,[ne.paths.rotator]:Je,[ne.paths.vector]:it,[ne.paths.vector2D]:et};static lookbehind="Pin";static attributes={...super.attributes,objectEntity:{ignored:!0},pinIndex:{type:Number,ignored:!0},PinId:{type:Te,default:()=>new Te},PinName:{default:""},PinFriendlyName:{type:new ke(je,Ue,String)},PinToolTip:{type:String},Direction:{type:String},PinType:{type:Ze,default:()=>new Ze,inlined:!0},LinkedTo:{type:[Ye]},SubPins:{type:[Ye]},ParentPin:{type:Ye},DefaultValue:{type:new oe((e=>e.getEntityType(!0)??String)),serialized:!0},AutogeneratedDefaultValue:{type:String},DefaultObject:{type:Ie},PersistentGuid:{type:Te},bHidden:{default:!1},bNotConnectable:{default:!1},bDefaultValueIsReadOnly:{default:!1},bDefaultValueIsIgnored:{default:!1},bAdvancedView:{default:!1},bOrphanedPin:{default:!1}};static{this.cleanupAttributes(this.attributes)}static grammar=this.createGrammar();static createGrammar(){return Me.createEntityGrammar(this)}constructor(e={},t=!1){super(e,t),this.objectEntity,this.pinIndex,this.PinId,this.PinName,this.PinFriendlyName,this.PinToolTip,this.Direction,this.PinType,this.LinkedTo,this.DefaultValue,this.AutogeneratedDefaultValue,this.DefaultObject,this.PersistentGuid,this.bHidden,this.bNotConnectable,this.bDefaultValueIsReadOnly,this.bDefaultValueIsIgnored,this.bAdvancedView,this.bOrphanedPin}static fromLegacyObject(e){return new st(e,!0)}getType(){const e=this.PinType.PinCategory;if("struct"===e||"object"===e)return this.PinType.PinSubCategoryObject.path;if("optional"===e)switch(this.PinType.PinSubCategory){case"int":return"int";case"red":return"real";case"rg":return"rg";case"rgb":return ne.paths.vector;case"rgba":return ne.paths.linearColor}if(this.isEnum())return"enum";if(this.objectEntity?.isPcg()){const e=this.objectEntity.getPcgSubobject(),t=this.isInput()?e.InputPins?.[this.pinIndex]:e.OutputPins?.[this.pinIndex];if(t){const i=e[ne.subObjectAttributeNameFromReference(t,!0)];let s=i.Properties?.AllowedTypes?.toString()??"";if(""==s&&(s=this.PinType.PinCategory??"",""==s&&(s="Any")),s)return!1!==i.Properties.bAllowMultipleData&&!1!==i.Properties.bAllowMultipleConnections&&(s+="[]"),s}}return e}getEntityType(e=!1){const t=this.getType(),i=st.#P[t],s=st.#x[t];return e&&void 0!==s?s:i}pinDisplayName(){let e,t=this.PinFriendlyName?this.PinFriendlyName.toString():Ae.formatStringName(this.PinName??"");return this.PinToolTip&&(e=this.PinToolTip.match(/\s*(.+?(?=\n)|.+\S)\s*/))&&e[1].toLowerCase()===t.toLowerCase()?e[1]:t}copyTypeFrom(e){this.PinType.PinCategory=e.PinType.PinCategory,this.PinType.PinSubCategory=e.PinType.PinSubCategory,this.PinType.PinSubCategoryObject=e.PinType.PinSubCategoryObject,this.PinType.PinSubCategoryMemberReference=e.PinType.PinSubCategoryMemberReference,this.PinType.PinValueType=e.PinType.PinValueType,this.PinType.ContainerType=e.PinType.ContainerType,this.PinType.bIsReference=e.PinType.bIsReference,this.PinType.bIsConst=e.PinType.bIsConst,this.PinType.bIsWeakPointer=e.PinType.bIsWeakPointer,this.PinType.bIsUObjectWrapper=e.PinType.bIsUObjectWrapper,this.PinType.bSerializeAsSinglePrecisionFloat=e.PinType.bSerializeAsSinglePrecisionFloat}getDefaultValue(e=!1){return void 0===this.DefaultValue&&e&&(this.DefaultValue=new(this.getEntityType(!0))),this.DefaultValue}isEnum(){const e=this.PinType.PinSubCategoryObject.type;return e===ne.paths.enum||e===ne.paths.userDefinedEnum||"enum"===e.toLowerCase()}isExecution(){return"exec"===this.PinType.PinCategory}isHidden(){return this.bHidden}isInput(){return!this.bHidden&&"EGPD_Output"!=this.Direction}isOutput(){return!this.bHidden&&"EGPD_Output"==this.Direction}isLinked(){return this.LinkedTo?.length>0??!1}linkTo(e,t){const i=this.LinkedTo?.some((i=>i.objectName.toString()==e&&i.pinGuid.valueOf()==t.PinId.valueOf()));return!i&&((this.LinkedTo??=[]).push(new Ye({objectName:e,pinGuid:t.PinId})),!0)}unlinkFrom(e,t){const i=this.LinkedTo?.findIndex((i=>i.objectName.toString()==e&&i.pinGuid.valueOf()==t.PinId.valueOf()));return i>=0&&(this.LinkedTo.splice(i,1),0===this.LinkedTo.length&&void 0===st.attributes.LinkedTo.default&&(this.LinkedTo=void 0),!0)}getSubCategory(){return this.PinType.PinSubCategoryObject.path}pinColor(){if("mask"==this.PinType.PinCategory){const e=ne.pinColor[this.PinType.PinSubCategory];if(e)return e}else if("optional"==this.PinType.PinCategory)return ne.pinColorMaterial;return ne.pinColor[this.getType()]??ne.pinColor[this.PinType.PinCategory.toLowerCase()]??ne.pinColor.default}}class rt{static arrayPin=O``;static branchNode=O``;static breakStruct=O``;static cast=O``;static close=O``;static convert=O``;static correct=O``;static delegate=O``;static doN=O``;static doOnce=O``;static enum=O``;static event=O``;static execPin=O``;static expandIcon=O``;static flipflop=O``;static forEachLoop=O``;static functionSymbol=O``;static gamepad=O``;static genericPin=O``;static keyboard=O``;static loop=O``;static macro=O``;static mapPin=O``;static makeArray=O``;static makeMap=O``;static makeSet=O``;static makeStruct=O``;static mouse=O``;static node=O``;static operationPin=O``;static pcgStackPin=O``;static pcgPin=O``;static pcgParamPin=O``;static pcgSpatialPin=O``;static plusCircle=O``;static questionMark=O``;static referencePin=O``;static reject=O``;static setPin=O``;static select=O``;static sequence=O``;static sound=O``;static spawnActor=O``;static switch=O``;static timer=O``;static touchpad=O``}class nt extends st{static lookbehind="";static grammar=this.createGrammar();static createGrammar(){return Pe.seq(Pe.reg(new RegExp(`${Me.Regex.Symbol.source}\\s*\\(\\s*`),1),Me.createAttributeGrammar(this).sepBy(Me.commaSeparation),Pe.reg(/\s*(?:,\s*)?\)/)).map((([e,t,i])=>{e??="";let s={};return e.length&&(s.lookbehind=e),t.forEach((e=>e(s))),new this(s)}))}constructor(e={}){super(e,!0)}}class at extends Le{static attributes={...super.attributes,MemberScope:{type:String},MemberName:{default:""},MemberGuid:{type:Te},bSelfContext:{type:Boolean}};static{this.cleanupAttributes(this.attributes)}static grammar=this.createGrammar();static createGrammar(){return Me.createEntityGrammar(this)}constructor(e){super(e),this.MemberName,this.GuidEntity,this.bSelfContext}}class ot extends Le{static#N={A_AccentGrave:"à",Add:"Num +",C_Cedille:"ç",Decimal:"Num .",Divide:"Num /",E_AccentAigu:"é",E_AccentGrave:"è",F1:"F1",F10:"F10",F11:"F11",F12:"F12",F2:"F2",F3:"F3",F4:"F4",F5:"F5",F6:"F6",F7:"F7",F8:"F8",F9:"F9",Gamepad_Special_Left_X:"Touchpad Button X Axis",Gamepad_Special_Left_Y:"Touchpad Button Y Axis",Mouse2D:"Mouse XY 2D-Axis",Multiply:"Num *",Section:"§",Subtract:"Num -",Tilde:"`"};static attributes={...super.attributes,AdvancedPinDisplay:{type:$e},Archetype:{type:Ie},AxisKey:{type:Re},bAlt:{type:Boolean},bCanRenameNode:{type:Boolean},bColorCommentBubble:{type:Boolean},bCommand:{type:Boolean},bCommentBubblePinned:{type:Boolean},bCommentBubbleVisible_InDetailsPanel:{type:Boolean},bCommentBubbleVisible:{type:Boolean},bConsumeInput:{type:Boolean},bControl:{type:Boolean},bExecuteWhenPaused:{type:Boolean},bExposeToLibrary:{type:Boolean},bInternalEvent:{type:Boolean},bIsCaseSensitive:{type:Boolean},bIsConstFunc:{type:Boolean},bIsPureFunc:{type:Boolean},BlueprintElementInstance:{type:Ie},BlueprintElementType:{type:Ie},bOverrideFunction:{type:Boolean},bOverrideParentBinding:{type:Boolean},bShift:{type:Boolean},Class:{type:Ie},CommentColor:{type:Oe},ComponentPropertyName:{type:String},CustomFunctionName:{type:String},CustomProperties:{type:[new ke(st,nt)]},DelegateOwnerClass:{type:Ie},DelegatePropertyName:{type:String},DelegateReference:{type:at},EnabledState:{type:$e},Enum:{type:Ie},EnumEntries:{type:[String],inlined:!0},ErrorMsg:{type:String},ErrorType:{type:He},EventReference:{type:Be},ExportPath:{type:Ie},FunctionReference:{type:Be},G:{type:Number},Graph:{type:Ie},HiGenGridSize:{type:Re},InputAxisKey:{type:Re},InputKey:{type:Re},InputPins:{type:[Ie],inlined:!0},MacroGraphReference:{type:De},MaterialExpression:{type:Ie},MaterialExpressionComment:{type:Ie},MaterialExpressionEditorX:{type:new le(He)},MaterialExpressionEditorY:{type:new le(He)},MaterialFunction:{type:Ie},MoveMode:{type:Re},Name:{type:String},Node:{type:new le(Ie)},NodeComment:{type:String},NodeGuid:{type:Te},NodeHeight:{type:He},NodePosX:{type:He},NodePosY:{type:He},NodeTitle:{type:String},NodeTitleColor:{type:Oe},NodeWidth:{type:He},NumAdditionalInputs:{type:Number},ObjectRef:{type:Ie},Operation:{type:Re},OutputPins:{type:[Ie],inlined:!0},PCGNode:{type:Ie},PinNames:{type:[String],inlined:!0},PinTags:{type:[null],inlined:!0},PositionX:{type:new le(He)},PositionY:{type:new le(He)},ProxyClass:{type:Ie},ProxyFactoryClass:{type:Ie},ProxyFactoryFunctionName:{type:String},R:{type:Number},SelfContextInfo:{type:Re},SettingsInterface:{type:Ie},SizeX:{type:new le(He)},SizeY:{type:new le(He)},StructType:{type:Ie},SubgraphInstance:{type:String},TargetType:{type:Ie},Text:{type:new le(String)},TimelineGuid:{type:Te},TimelineName:{type:String},VariableReference:{type:at}};static{this.cleanupAttributes(this.attributes)}static nameRegex=/^(\w+?)(?:_(\d+))?$/;static sequencerScriptingNameRegex=/\/Script\/SequencerScripting\.MovieSceneScripting(.+)Channel/;static customPropertyGrammar=Pe.seq(Pe.reg(/CustomProperties\s+/),Me.grammarFor(void 0,this.attributes.CustomProperties.type[0])).map((([e,t])=>e=>{e.CustomProperties||(e.CustomProperties=[]),e.CustomProperties.push(t)}));static inlinedArrayEntryGrammar=Pe.seq(Pe.alt(Me.symbolQuoted.map((e=>[e,!0])),Me.symbol.map((e=>[e,!1]))),Pe.reg(new RegExp("\\s*\\(\\s*(\\d+)\\s*\\)\\s*\\=\\s*"),1).map(Number)).chain((([[e,t],i])=>Me.grammarFor(this.attributes[e]).map((s=>r=>{(r[e]??=[])[i]=s,Ae.objectSet(r,["attributes",e,"quoted"],t,!0),this.attributes[e]?.inlined||(r.attributes||Le.defineAttributes(r,{}),Ae.objectSet(r,["attributes",e,"inlined"],!0,!0))}))));static grammar=this.createGrammar();static createSubObjectGrammar(){return Pe.lazy((()=>this.createGrammar())).map((e=>t=>t[ne.subObjectAttributeNameFromEntity(e)]=e))}static createGrammar(){return Pe.seq(Pe.reg(/Begin\s+Object/),Pe.seq(Pe.whitespace,Pe.alt(this.customPropertyGrammar,Me.createAttributeGrammar(this),Me.createAttributeGrammar(this,Me.attributeNameQuoted,void 0,((e,t,i)=>Ae.objectSet(e,["attributes",...t,"quoted"],!0,!0))),this.inlinedArrayEntryGrammar,this.createSubObjectGrammar())).map((([e,t])=>t)).many(),Pe.reg(/\s+End\s+Object/)).map((([e,t,i])=>{const s={};return t.forEach((e=>e(s))),new this(s)}))}static keyName(e){let t=ot.#N[e];if(t)return t;if(t=Ae.numberFromText(e)?.toString(),t)return t;const i=e.match(/NumPad([a-zA-Z]+)/);return i&&(t=Ae.numberFromText(i[1]).toString(),t)?"Num "+t:void 0}static getMultipleObjectsGrammar(){return Pe.seq(Pe.whitespaceOpt,this.createGrammar(),Pe.seq(Pe.whitespace,this.createGrammar()).map((([e,t])=>t)).many(),Pe.whitespaceOpt).map((([e,t,i,s])=>[t,...i]))}constructor(e={},t=!1){let i=Object.keys(e);if(i.some((e=>e.startsWith(ne.subObjectAttributeNamePrefix)))){let t=i.filter((e=>e.startsWith(ne.subObjectAttributeNamePrefix))).reduce(((t,i)=>(t[i]=e[i],t)),{});e={...t,...e}}super(e,t),this.CustomProperties,this.bAlt,this.bCanRenameNode,this.bColorCommentBubble,this.bCommand,this.bCommentBubblePinned,this.bCommentBubbleVisible,this.bCommentBubbleVisible_InDetailsPanel,this.bConsumeInput,this.bControl,this.bExecuteWhenPaused,this.bExposeToLibrary,this.bInternalEvent,this.bIsCaseSensitive,this.bIsConstFunc,this.bIsPureFunc,this.bOverrideFunction,this.bOverrideParentBinding,this.bShift,this.ComponentPropertyName,this.EventReference,this.FunctionReference,this.NodeGuid,this.TimelineGuid,this.AdvancedPinDisplay,this.EnabledState,this.ErrorType,this.NodeHeight,this.NodePosX,this.NodePosY,this.NodeWidth,this.CommentColor,this.NodeTitleColor,this.MacroGraphReference,this.MaterialExpressionEditorX,this.MaterialExpressionEditorY,this.SizeX,this.SizeY,this.Text,this.PositionX,this.PositionY,this.Node,this.PinTags,this.G,this.NumAdditionalInputs,this.R,this.InputPins,this.OutputPins,this.Archetype,this.BlueprintElementInstance,this.BlueprintElementType,this.Class,this.DelegateOwnerClass,this.Enum,this.ExportPath,this.Graph,this.MaterialExpression,this.MaterialExpressionComment,this.MaterialFunction,this.ObjectRef,this.PCGNode,this.ProxyClass,this.ProxyFactoryClass,this.SettingsInterface,this.StructType,this.TargetType,this.EnumEntries,this.PinNames,this.CustomFunctionName,this.DelegatePropertyName,this.ErrorMsg,this.Name,this.NodeComment,this.NodeTitle,this.Operation,this.ProxyFactoryFunctionName,this.SubgraphInstance,this.Text,this.TimelineName,this.AxisKey,this.HiGenGridSize,this.InputAxisKey,this.InputKey,this.MoveMode,this.SelfContextInfo,this.DelegateReference,this.VariableReference,this.Pins instanceof Array&&(this.Pins.forEach((e=>{const t=this[ne.subObjectAttributeNameFromReference(e,!0)];if(t){const e=st.fromLegacyObject(t);e.LinkedTo=[],this.getCustomproperties(!0).push(e)}})),delete this.Pins),this.Class?.sanitize(),this.MacroGraphReference&&(this.MacroGraphReference.MacroGraph?.sanitize(),this.MacroGraphReference.GraphBlueprint?.sanitize());const s=this.getMaterialSubobject();if(s){const e=s;e.SizeX&&(e.SizeX.getter=()=>this.NodeWidth),e.SizeY&&(e.SizeY.getter=()=>this.NodeHeight),e.Text&&(e.Text.getter=()=>this.NodeComment),e.MaterialExpressionEditorX&&(e.MaterialExpressionEditorX.getter=()=>this.NodePosX),e.MaterialExpressionEditorY&&(e.MaterialExpressionEditorY.getter=()=>this.NodePosY)}const r=this.getPcgSubobject();r&&(r.PositionX&&(r.PositionX.getter=()=>this.NodePosX),r.PositionY&&(r.PositionY.getter=()=>this.NodePosY),r.getSubobjects().forEach((e=>{if(void 0!==e.Node){const t=e.Node.get();t.type===this.PCGNode.type&&t.path===`${this.Name}.${this.PCGNode.path}`&&(e.Node.getter=()=>new Ie({type:this.PCGNode.type,path:`${this.Name}.${this.PCGNode.path}`}))}})));let n=0,a=0;this.CustomProperties?.forEach(((e,t)=>{e.objectEntity=this,e.pinIndex=e.isInput()?n++:e.isOutput()?a++:t}))}getClass(){return(this.Class?.path?this.Class.path:this.Class?.type)??(this.ExportPath?.path?this.ExportPath.path:this.ExportPath?.type)??""}getType(){let e=this.getClass();return this.MacroGraphReference?.MacroGraph?.path?this.MacroGraphReference.MacroGraph.path:this.MaterialExpression?this.MaterialExpression.type:e}getObjectName(e=!1){return e?this.getNameAndCounter()[0]:this.Name}getNameAndCounter(){const e=this.getObjectName(!1).match(ot.nameRegex);let t="",i=null;return e?(e.length>1&&(t=e[1]),e.length>2&&(i=parseInt(e[2])),[t,i]):["",0]}getCounter(){return this.getNameAndCounter()[1]}getNodeWidth(){return this.NodeWidth??this.isComment()?ne.defaultCommentWidth:void 0}setNodeWidth(e){this.NodeWidth||(this.NodeWidth=new He),this.NodeWidth.value=e}getNodeHeight(){return this.NodeHeight??this.isComment()?ne.defaultCommentHeight:void 0}setNodeHeight(e){this.NodeHeight||(this.NodeHeight=new He),this.NodeHeight.value=e}getNodePosX(){return this.NodePosX?.value??0}setNodePosX(e){this.NodePosX||(this.NodePosX=new He),this.NodePosX.value=Math.round(e)}getNodePosY(){return this.NodePosY?.value??0}setNodePosY(e){this.NodePosY||(this.NodePosY=new He),this.NodePosY.value=Math.round(e)}getCustomproperties(e=!1){return e&&!this.CustomProperties&&(this.CustomProperties=[]),this.CustomProperties??[]}getPinEntities(){return this.getCustomproperties().filter((e=>e.constructor===st))}getSubobjects(){return Object.keys(this).filter((e=>e.startsWith(ne.subObjectAttributeNamePrefix))).flatMap((e=>[this[e],...this[e].getSubobjects()]))}switchTarget(){const e=this.getClass().match(ne.switchTargetPattern);if(e)return e[1]}isEvent(){switch(this.getClass()){case ne.paths.actorBoundEvent:case ne.paths.componentBoundEvent:case ne.paths.customEvent:case ne.paths.event:case ne.paths.inputAxisKeyEvent:case ne.paths.inputVectorAxisEvent:return!0}return!1}isComment(){switch(this.getClass()){case ne.paths.comment:case ne.paths.materialGraphNodeComment:return!0}return!1}isMaterial(){return this.getClass()===ne.paths.materialGraphNode}getMaterialSubobject(){const e=this.MaterialExpression??this.MaterialExpressionComment;return e?this[ne.subObjectAttributeNameFromReference(e,!0)]:null}isPcg(){return this.getClass()===ne.paths.pcgEditorGraphNode||this.getPcgSubobject()}getPcgSubobject(){const e=this.PCGNode;return e?this[ne.subObjectAttributeNameFromReference(e,!0)]:null}getSettingsObject(){const e=this.SettingsInterface;return e?this[ne.subObjectAttributeNameFromReference(e,!0)]:null}getSubgraphObject(){const e=this.SubgraphInstance;return e?this[ne.subObjectAttributeNameFromName(e)]:null}isDevelopmentOnly(){const e=this.getClass();return"DevelopmentOnly"===this.EnabledState?.toString()||e.includes("Debug",Math.max(0,e.lastIndexOf(".")))}getHIDAttribute(){return this.InputKey??this.AxisKey??this.InputAxisKey}getDelegatePin(){return this.getCustomproperties().find((e=>"delegate"===e.PinType.PinCategory))}nodeDisplayName(){let e;switch(this.getType()){case ne.paths.asyncAction:if(this.ProxyFactoryFunctionName)return Ae.formatStringName(this.ProxyFactoryFunctionName);case ne.paths.actorBoundEvent:case ne.paths.componentBoundEvent:return`${Ae.formatStringName(this.DelegatePropertyName)} (${this.ComponentPropertyName??"Unknown"})`;case ne.paths.callDelegate:return`Call ${this.DelegateReference?.MemberName??"None"}`;case ne.paths.createDelegate:return"Create Event";case ne.paths.customEvent:if(this.CustomFunctionName)return this.CustomFunctionName;case ne.paths.dynamicCast:return this.TargetType?`Cast To ${this.TargetType?.getName()}`:"Bad cast node";case ne.paths.enumLiteral:return`Literal enum ${this.Enum?.getName()}`;case ne.paths.event:return`Event ${(this.EventReference?.MemberName??"").replace(/^Receive/,"")}`;case ne.paths.executionSequence:return"Sequence";case ne.paths.forEachElementInEnum:return`For Each ${this.Enum?.getName()}`;case ne.paths.forEachLoopWithBreak:return"For Each Loop with Break";case ne.paths.functionEntry:return"UserConstructionScript"===this.FunctionReference?.MemberName?"Construction Script":this.FunctionReference?.MemberName;case ne.paths.functionResult:return"Return Node";case ne.paths.ifThenElse:return"Branch";case ne.paths.makeStruct:if(this.StructType)return`Make ${this.StructType.getName()}`;case ne.paths.materialExpressionConstant:e??=[this.getCustomproperties().find((e=>"Value"==e.PinName))?.DefaultValue];case ne.paths.materialExpressionConstant2Vector:e??=[this.getCustomproperties().find((e=>"X"==e.PinName))?.DefaultValue,this.getCustomproperties().find((e=>"Y"==e.PinName))?.DefaultValue];case ne.paths.materialExpressionConstant3Vector:if(!e){const t=this.getCustomproperties().find((e=>"Constant"==e.PinName))?.DefaultValue;e=[t.X,t.Y,t.Z]}case ne.paths.materialExpressionConstant4Vector:if(!e){const t=this.getCustomproperties().find((e=>"Constant"==e.PinName))?.DefaultValue;e=[t.R,t.G,t.B,t.A].map((e=>e.valueOf()))}if(e.length>0)return e.map((e=>Ae.printExponential(e))).reduce(((e,t)=>e+","+t));break;case ne.paths.materialExpressionLogarithm:return"Ln";case ne.paths.materialExpressionLogarithm10:return"Log10";case ne.paths.materialExpressionLogarithm2:return"Log2";case ne.paths.materialExpressionMaterialFunctionCall:const t=this.getMaterialSubobject()?.MaterialFunction;if(t)return t.getName();break;case ne.paths.materialExpressionSquareRoot:return"Sqrt";case ne.paths.pcgEditorGraphNodeInput:return"Input";case ne.paths.pcgEditorGraphNodeOutput:return"Output";case ne.paths.spawnActorFromClass:return`SpawnActor ${Ae.formatStringName(this.getCustomproperties().find((e=>"class"==e.getType()))?.DefaultObject?.getName()??"NONE")}`;case ne.paths.switchEnum:return`Switch on ${this.Enum?.getName()??"Enum"}`;case ne.paths.switchInteger:return"Switch on Int";case ne.paths.variableGet:return"";case ne.paths.variableSet:return"SET"}let t=this.switchTarget();if(t)return"E"!==t[0]&&(t=Ae.formatStringName(t)),`Switch on ${t}`;if(this.isComment())return this.NodeComment;const i=this.getHIDAttribute();if(i){const e=i.toString();let t=ot.keyName(e)??Ae.formatStringName(e);return this.getClass()===ne.paths.inputDebugKey?t="Debug Key "+t:this.getClass()===ne.paths.getInputAxisKeyValue&&(t="Get "+t),t}if(this.getClass()===ne.paths.macro)return Ae.formatStringName(this.MacroGraphReference?.getMacroName());if(this.isMaterial()&&this.getMaterialSubobject()){let e=this.getMaterialSubobject().nodeDisplayName();return e=e.match(/Material Expression (.+)/)?.[1]??e,e}if(this.isPcg()&&this.getPcgSubobject()){let e=this.getPcgSubobject();return e.NodeTitle?e.NodeTitle:e.nodeDisplayName()}const s=this.getSubgraphObject();if(s)return s.Graph.getName();const r=this.getSettingsObject();if(r){if(r.ExportPath.type===ne.paths.pcgHiGenGridSizeSettings)return`Grid Size: ${r.HiGenGridSize?.toString().match(/\d+/)?.[0]?.concat("00")??r.HiGenGridSize?.toString().match(/^\w+$/)?.[0]??"256"}`;if(r.BlueprintElementInstance)return Ae.formatStringName(r.BlueprintElementType.getName());if(r.Operation){const e=r.Name.match(/PCGMetadata(\w+)Settings_\d+/);if(e)return Ae.formatStringName(e[1]+": "+r.Operation)}const e=r.getSubgraphObject();if(e&&e.Graph)return e.Graph.getName()}let n=this.FunctionReference?.MemberName;if(n){const e=this.FunctionReference.MemberParent?.path??"";switch(n){case"AddKey":let t=e.match(ot.sequencerScriptingNameRegex);if(t)return`Add Key (${Ae.formatStringName(t[1])})`;case"Concat_StrStr":return"Append"}const t=n.match(ne.lineTracePattern);if(t)return"Line Trace"+("Multi"===t[1]?" Multi ":" ")+(""===t[2]?"By Channel":Ae.formatStringName(t[2]));switch(e){case ne.paths.blueprintGameplayTagLibrary:case ne.paths.kismetMathLibrary:case ne.paths.slateBlueprintLibrary:case ne.paths.timeManagementBlueprintLibrary:const e=n.match(/[BF]([A-Z]\w+)/);switch(e&&(n=e[1]),n){case"Abs":return"ABS";case"BooleanAND":return"AND";case"BooleanNAND":return"NAND";case"BooleanOR":return"OR";case"Exp":return"e";case"LineTraceSingle":return"Line Trace By Channel";case"Max":case"MaxInt64":return"MAX";case"Min":case"MinInt64":return"MIN";case"Not_PreBool":return"NOT";case"Sin":return"SIN";case"Sqrt":return"SQRT";case"Square":return"^2";case"CrossProduct2D":return"cross";case"Vector4_CrossProduct3":return"cross3";case"DotProduct2D":case"Vector4_DotProduct":return"dot";case"Vector4_DotProduct3":return"dot3"}if(n.startsWith("Add_"))return"+";if(n.startsWith("And_"))return"&";if(n.startsWith("Conv_"))return"";if(n.startsWith("Cross_"))return"cross";if(n.startsWith("Divide_"))return String.fromCharCode(247);if(n.startsWith("Dot_"))return"dot";if(n.startsWith("EqualEqual_"))return"==";if(n.startsWith("Greater_"))return">";if(n.startsWith("GreaterEqual_"))return">=";if(n.startsWith("Less_"))return"<";if(n.startsWith("LessEqual_"))return"<=";if(n.startsWith("Multiply_"))return String.fromCharCode(10799);if(n.startsWith("Not_"))return"~";if(n.startsWith("NotEqual_"))return"!=";if(n.startsWith("Or_"))return"|";if(n.startsWith("Percent_"))return"%";if(n.startsWith("Subtract_"))return"-";if(n.startsWith("Xor_"))return"^";break;case ne.paths.blueprintSetLibrary:{const e=n.match(/Set_(\w+)/);if(e)return Ae.formatStringName(e[1]).toUpperCase()}break;case ne.paths.blueprintMapLibrary:{const e=n.match(/Map_(\w+)/);if(e)return Ae.formatStringName(e[1]).toUpperCase()}break;case ne.paths.kismetArrayLibrary:{const e=n.match(/Array_(\w+)/);if(e)return e[1].toUpperCase()}}return Ae.formatStringName(n)}return this.ObjectRef?this.ObjectRef.getName():Ae.formatStringName(this.getNameAndCounter()[0])}nodeColor(){switch(this.getType()){case ne.paths.materialExpressionConstant2Vector:case ne.paths.materialExpressionConstant3Vector:case ne.paths.materialExpressionConstant4Vector:return ne.nodeColors.yellow;case ne.paths.makeStruct:return ne.nodeColors.darkBlue;case ne.paths.materialExpressionMaterialFunctionCall:return ne.nodeColors.blue;case ne.paths.materialExpressionTextureSample:return ne.nodeColors.darkTurquoise;case ne.paths.materialExpressionTextureCoordinate:case ne.paths.pcgEditorGraphNodeInput:case ne.paths.pcgEditorGraphNodeOutput:return ne.nodeColors.red}switch(this.getClass()){case ne.paths.callFunction:return this.bIsPureFunc?ne.nodeColors.green:ne.nodeColors.blue;case ne.paths.dynamicCast:return ne.nodeColors.turquoise;case ne.paths.inputDebugKey:case ne.paths.inputKey:return ne.nodeColors.red;case ne.paths.createDelegate:case ne.paths.enumLiteral:case ne.paths.makeArray:case ne.paths.makeMap:case ne.paths.materialGraphNode:case ne.paths.select:return ne.nodeColors.green;case ne.paths.executionSequence:case ne.paths.ifThenElse:case ne.paths.macro:case ne.paths.multiGate:return ne.nodeColors.gray;case ne.paths.functionEntry:case ne.paths.functionResult:return ne.nodeColors.violet;case ne.paths.timeline:return ne.nodeColors.yellow}if(this.switchTarget())return ne.nodeColors.lime;if(this.isEvent())return ne.nodeColors.red;if(this.isComment())return(this.CommentColor?this.CommentColor:Oe.getWhite()).toDimmedColor().toCSSRGBValues();const e=this.getPcgSubobject();return e&&e.NodeTitleColor?e.NodeTitleColor.toDimmedColor(.1).toCSSRGBValues():this.bIsPureFunc?ne.nodeColors.green:ne.nodeColors.blue}nodeIcon(){if(this.isMaterial()||this.isPcg())return null;switch(this.getType()){case ne.paths.addDelegate:case ne.paths.asyncAction:case ne.paths.callDelegate:case ne.paths.createDelegate:case ne.paths.functionEntry:case ne.paths.functionResult:return rt.node;case ne.paths.customEvent:return rt.event;case ne.paths.doN:return rt.doN;case ne.paths.doOnce:return rt.doOnce;case ne.paths.dynamicCast:return rt.cast;case ne.paths.enumLiteral:return rt.enum;case ne.paths.event:return rt.event;case ne.paths.executionSequence:case ne.paths.multiGate:return rt.sequence;case ne.paths.flipflop:return rt.flipflop;case ne.paths.forEachElementInEnum:case ne.paths.forLoop:case ne.paths.forLoopWithBreak:case ne.paths.whileLoop:return rt.loop;case ne.paths.forEachLoop:case ne.paths.forEachLoopWithBreak:return rt.forEachLoop;case ne.paths.ifThenElse:return rt.branchNode;case ne.paths.isValid:return rt.questionMark;case ne.paths.makeArray:return rt.makeArray;case ne.paths.makeMap:return rt.makeMap;case ne.paths.makeSet:return rt.makeSet;case ne.paths.makeStruct:return rt.makeStruct;case ne.paths.select:return rt.select;case ne.paths.spawnActorFromClass:return rt.spawnActor;case ne.paths.timeline:return rt.timer}if(this.switchTarget())return rt.switch;if(this.nodeDisplayName().startsWith("Break"))return rt.breakStruct;if(this.getClass()===ne.paths.macro)return rt.macro;const e=this.getHIDAttribute()?.toString();return e?e.includes("Mouse")?rt.mouse:e.includes("Gamepad_Special")?rt.keyboard:e.includes("Gamepad")||e.includes("Steam")?rt.gamepad:e.includes("Touch")?rt.touchpad:rt.keyboard:this.getDelegatePin()?rt.event:this.ObjectRef?.type===ne.paths.ambientSound?rt.sound:rt.functionSymbol}additionalPinInserter(){let e,t,i;switch(this.getType()){case ne.paths.commutativeAssociativeBinaryOperator:case ne.paths.promotableOperator:switch(this.FunctionReference?.MemberName){default:if(!(this.FunctionReference?.MemberName?.startsWith("Add_")||this.FunctionReference?.MemberName?.startsWith("Subtract_")||this.FunctionReference?.MemberName?.startsWith("Multiply_")||this.FunctionReference?.MemberName?.startsWith("Divide_")))break;case"And_Int64Int64":case"And_IntInt":case"BMax":case"BMin":case"BooleanAND":case"BooleanNAND":case"BooleanOR":case"Concat_StrStr":case"FMax":case"FMin":case"Max":case"MaxInt64":case"Min":case"MinInt64":case"Or_Int64Int64":case"Or_IntInt":e??=()=>this.getPinEntities().filter((e=>e.isInput())),t??=e=>e.PinName.match(/^\s*([A-Z])\s*$/)?.[1]?.charCodeAt(0)-"A".charCodeAt(0),i??=(t,i=-1,s=-1)=>{const r=String.fromCharCode(t>=0?t:s+"A".charCodeAt(0)+1);return this.NumAdditionalInputs=e().length-1,r}}break;case ne.paths.multiGate:e??=()=>this.getPinEntities().filter((e=>e.isOutput())),t??=e=>Number(e.PinName.match(/^\s*Out[_\s]+(\d+)\s*$/i)?.[1]),i??=(e,t=-1,i=-1)=>`Out ${e>=0?e:t>0?"Out 0":i+1}`;break;case ne.paths.switchInteger:e??=()=>this.getPinEntities().filter((e=>e.isOutput())),t??=e=>Number(e.PinName.match(/^\s*(\d+)\s*$/)?.[1]),i??=(e,t=-1,i=-1)=>(e<0?i+1:e).toString();break;case ne.paths.switchGameplayTag:i??=(e,t=-1,i=-1)=>{const s=`Case_${e>=0?e:t>0?"0":i+1}`;return this.PinNames??=[],this.PinNames.push(s),delete this.PinTags[this.PinTags.length-1],this.PinTags[this.PinTags.length]=null,s};case ne.paths.switchName:case ne.paths.switchString:e??=()=>this.getPinEntities().filter((e=>e.isOutput())),t??=e=>Number(e.PinName.match(/^\s*Case[_\s]+(\d+)\s*$/i)?.[1]),i??=(e,t=-1,i=-1)=>{const s=`Case_${e>=0?e:t>0?"0":i+1}`;return this.PinNames??=[],this.PinNames.push(s),s}}if(e)return()=>{let s=Number.MAX_SAFE_INTEGER,r=Number.MIN_SAFE_INTEGER,n=[];const a=e().reduce(((e,i)=>{const a=t(i);if(isNaN(a)){if(void 0===e)return i}else if(n.push(a),s=Math.min(a,s),a>r)return r=a,i;return e}),void 0);if(s!==Number.MAX_SAFE_INTEGER&&r!==Number.MIN_SAFE_INTEGER||(s=void 0,r=void 0),!a)return null;n.sort(((e,t)=>e{const t=e-o>1;return o=e,t}));const c=new st(a);return c.PinId=Te.generateGuid(),c.PinName=i(l,s,r),c.PinToolTip=void 0,this.CustomProperties.push(c),c}}}class lt{static same=e=>e;static notWrapped=(e,t)=>t;static bracketsWrapped=(e,t)=>`(${t})`;constructor(e,t=((e,t)=>t),i=",",s=!1,r="=",n=lt.same){this.entityType=e,this.wrap=t,this.attributeSeparator=i,this.trailingSeparator=s,this.attributeValueConjunctionSign=r,this.attributeKeyPrinter=n}read(e){return this.doRead(e.trim())}write(e,t=!1){return this.doWrite(e,t)}doRead(e){const t=Me.grammarFor(void 0,this.entityType).run(e);if(!t.status)throw new Error(`Error when trying to parse the entity ${this.entityType.prototype.constructor.name}.`);return t.value}doWrite(e,t=!1,i="",s=this.wrap,r=this.attributeSeparator,n=this.trailingSeparator,a=this.attributeValueConjunctionSign,o=this.attributeKeyPrinter){let l="";const c=Le.getAttributes(e),u=Object.keys(e);let h=!0;for(const s of u){const n=e[s];if(void 0!==n&&this.showProperty(e,s)){let u=e instanceof Array?`(${s})`:s;c[s]?.quoted&&(u=`"${u}"`);const p=Ae.isSerialized(e,s);if(h?h=!1:l+=r,c[s]?.inlined){l+=this.doWrite(n,t,i,lt.notWrapped,r,!1,a,c[s].type instanceof Array?e=>o(`${u}${e}`):e=>o(`${u}.${e}`));continue}const d=o(u),m=r.includes("\n")?i:"";l+=(d.length?m+d+this.attributeValueConjunctionSign:"")+(p?`"${this.doWriteValue(n,!0,i)}"`:this.doWriteValue(n,t,i))}}return n&&l.length&&(l+=r),s(e,l)}doWriteValue(e,t,i=""){const s=Ae.getType(e),r=Ne.getSerializer(s);if(!r)throw new Error(`Unknown value type "${s.name}", a serializer must be registered in the SerializerFactory class, check initializeSerializerFactory.js`);return r.doWrite(e,t,i)}showProperty(e,t){const i=this.entityType.attributes[t];return i?.constructor!==Object||!i.ignored}}class ct extends lt{constructor(e=ot){super(e,void 0,"\n",!0,void 0,lt.same)}showProperty(e,t){switch(t){case"Class":case"Name":case"Archetype":case"ExportPath":case"CustomProperties":return!1}return super.showProperty(e,t)}write(e,t=!1){return this.doWrite(e,t)+"\n"}doRead(e){return Me.grammarFor(void 0,this.entityType).parse(e)}readMultiple(e){return ot.getMultipleObjectsGrammar().parse(e)}doWrite(e,t,i="",s=this.wrap,r=this.attributeSeparator,n=this.trailingSeparator,a=this.attributeValueConjunctionSign,o=this.attributeKeyPrinter){const l=i+ne.indentation;if(!(e instanceof ot))return super.doWrite(e,t,i,s,r,n,a,(t=>e[t]instanceof ot?"":o(t)));return i+"Begin Object"+(e.Class?.type||e.Class?.path?` Class=${this.doWriteValue(e.Class,t)}`:"")+(e.Name?` Name=${this.doWriteValue(e.Name,t)}`:"")+(e.Archetype?` Archetype=${this.doWriteValue(e.Archetype,t)}`:"")+(e.ExportPath?.type||e.ExportPath?.path?` ExportPath=${this.doWriteValue(e.ExportPath,t)}`:"")+"\n"+super.doWrite(e,t,l,s,r,!0,a,(t=>e[t]instanceof ot?"":o(t)))+e.getCustomproperties().map((e=>l+o("CustomProperties ")+Ne.getSerializer(st).doWrite(e,t)+this.attributeSeparator)).join("")+i+"End Object"}}class ut extends ae{static#k=new ct;#A;constructor(e,t,i={}){i.listenOnFocus??=!0,i.unlistenOnTextEdit??=!0,super(e,t,i);let s=this;this.#A=()=>s.copied()}listenEvents(){window.addEventListener("copy",this.#A)}unlistenEvents(){window.removeEventListener("copy",this.#A)}getSerializedText(){return this.blueprint.getNodes(!0).map((e=>ut.#k.write(e.entity,!1))).join("")}copied(){const e=this.getSerializedText();return navigator.clipboard.writeText(e),e}}class ht extends ae{static#k=new ct;#L;constructor(e,t,i={}){i.listenOnFocus??=!0,i.unlistenOnTextEdit??=!0,super(e,t,i);let s=this;this.#L=()=>s.cut()}listenEvents(){window.addEventListener("cut",this.#L)}unlistenEvents(){window.removeEventListener("cut",this.#L)}getSerializedText(){return this.blueprint.getNodes(!0).map((e=>ht.#k.write(e.entity,!1))).join("")}cut(){this.blueprint.template.getCopyInputObject().copied(),this.blueprint.removeGraphElement(...this.blueprint.getNodes(!0))}}class pt{element;get blueprint(){return this.element.blueprint}#M=[];get inputObjects(){return this.#M}initialize(e){this.element=e}createInputObjects(){return[]}setup(){this.#M.forEach((e=>e.setup()))}cleanup(){this.#M.forEach((e=>e.cleanup()))}willUpdate(e){}update(e){}render(){return O``}firstUpdated(e){}updated(e){}inputSetup(){this.#M=this.createInputObjects()}}class dt extends Le{static attributes={...super.attributes,ActionName:{default:""},bShift:{default:!1},bCtrl:{default:!1},bAlt:{default:!1},bCmd:{default:!1},Key:{type:$e}};static{this.cleanupAttributes(this.attributes)}static grammar=this.createGrammar();static createGrammar(){return Pe.alt($e.grammar.map((e=>new this({Key:e}))),Me.createEntityGrammar(this))}constructor(e={}){super(e,!0),this.ActionName,this.bShift,this.bCtrl,this.bAlt,this.bCmd,this.Key}}class mt extends ae{static#T=e=>{};#I;pressedKey="";constructor(e,t,i={},s=mt.#T,r=mt.#T){i.activationKeys??=[],i.consumeEvent??=!0,i.listenOnFocus??=!0,i.unlistenOnTextEdit??=!0,i.activationKeys instanceof Array||(i.activationKeys=[i.activationKeys]),i.activationKeys=i.activationKeys.map((e=>{if(e instanceof dt)return e;if(e.constructor===String){const t=dt.createGrammar().run(e);if(t.status)return t.value}throw new Error("Unexpected key value")})),super(e,t,i),this.onKeyDown=s,this.onKeyUp=r,this.#I=this.options.activationKeys??[];let n=this;this.keyDownHandler=e=>{n.#I.some((t=>(e=>e.bShift||"LeftShift"==e.Key||"RightShift"==e.Key)(t)==e.shiftKey&&(e=>e.bCtrl||"LeftControl"==e.Key||"RightControl"==e.Key)(t)==e.ctrlKey&&(e=>e.bAlt||"LeftAlt"==e.Key||"RightAlt"==e.Key)(t)==e.altKey&&ne.Keys[t.Key.value]==e.code))&&(this.consumeEvent&&(e.preventDefault(),e.stopImmediatePropagation()),this.pressedKey=e.code,n.fire(),document.removeEventListener("keydown",n.keyDownHandler),document.addEventListener("keyup",n.keyUpHandler))},this.keyUpHandler=e=>{n.#I.some((t=>t.bShift&&"Shift"==e.key||t.bCtrl&&"Control"==e.key||t.bAlt&&"Alt"==e.key||t.bCmd&&"Meta"==e.key||ne.Keys[t.Key.value]==e.code))&&(this.consumeEvent&&e.stopImmediatePropagation(),n.unfire(),this.pressedKey="",document.removeEventListener("keyup",this.keyUpHandler),document.addEventListener("keydown",this.keyDownHandler))}}listenEvents(){document.addEventListener("keydown",this.keyDownHandler)}unlistenEvents(){document.removeEventListener("keydown",this.keyDownHandler)}fire(){this.onKeyDown(this)}unfire(){this.onKeyUp(this)}}class gt{static deleteNodes="Delete";static duplicateNodes="(bCtrl=True,Key=D)";static enableLinkDelete="LeftAlt";static enableZoomIn=["LeftControl","RightControl"];static selectAllNodes="(bCtrl=True,Key=A)"}class bt extends ae{#B=[0,0];get location(){return this.#B}#$;get enablerKey(){return this.#$}#H=!0;get enablerActivated(){return this.#H}constructor(e,t,i={}){i.ignoreTranslateCompensate??=!1,i.ignoreScale??=!1,i.movementSpace??=t.getGridDOMElement()??document.documentElement,super(e,t,i),this.movementSpace=i.movementSpace,i.enablerKey&&(this.#$=i.enablerKey,this.#$.onKeyDown=()=>this.#H=!0,this.#$.onKeyUp=()=>this.#H=!1,this.#$.consumeEvent=!1,this.#$.listenEvents(),this.#H=!1)}setLocationFromEvent(e){let t=Ae.convertLocation([e.clientX,e.clientY],this.movementSpace,this.options.ignoreScale);return t=this.options.ignoreTranslateCompensate?t:this.blueprint.compensateTranslation(t[0],t[1]),this.#B=[...t],this.#B}}class vt extends bt{static#T=e=>{};#G=0;get variation(){return this.#G}#O=e=>{this.enablerKey&&!this.enablerActivated||(e.preventDefault(),this.#G=e.deltaY,this.setLocationFromEvent(e),this.wheel())};#D=e=>e.preventDefault();constructor(e,t,i={},s=vt.#T){i.listenOnFocus=!0,i.strictTarget??=!1,super(e,t,i),this.strictTarget=i.strictTarget,this.onWheel=s}listenEvents(){this.movementSpace.addEventListener("wheel",this.#O,!1),this.movementSpace.parentElement?.addEventListener("wheel",this.#D)}unlistenEvents(){this.movementSpace.removeEventListener("wheel",this.#O,!1),this.movementSpace.parentElement?.removeEventListener("wheel",this.#D)}wheel(){this.onWheel(this)}}class yt extends vt{#V=0;#R=!1;get enableZoonIn(){return this.#R}set enableZoonIn(e){e!=this.#R&&(this.#R=e)}wheel(){if(this.#V+=-this.variation,Math.abs(this.#V)0||(e+=Math.sign(this.#V),this.blueprint.setZoom(e,this.location),this.#V=0)}}class ft extends mt{#z;constructor(e,t,i={}){i.activationKeys=gt.enableZoomIn,super(e,t,i)}fire(){this.#z=this.blueprint.template.getZoomInputObject(),this.#z.enableZoonIn=!0}unfire(){this.#z.enableZoonIn=!1}}class wt extends se{#t;get blueprint(){return this.#t}set blueprint(e){this.#t=e}#_;get entity(){return this.#_}set entity(e){this.#_=e}#F;get template(){return this.#F}isInitialized=!1;isSetup=!1;inputObjects=[];initialize(e,t){this.requestUpdate(),this.#_=e,this.#F=t,this.#F.initialize(this),this.isConnected&&this.updateComplete.then((()=>this.setup())),this.isInitialized=!0}connectedCallback(){super.connectedCallback(),this.blueprint=this.closest("ueb-blueprint"),this.isInitialized&&(this.requestUpdate(),this.updateComplete.then((()=>this.setup())))}disconnectedCallback(){super.disconnectedCallback(),this.isSetup&&this.updateComplete.then((()=>this.cleanup())),this.acknowledgeDelete()}createRenderRoot(){return this}setup(){this.template.setup(),this.isSetup=!0}cleanup(){this.template.cleanup(),this.isSetup=!1}willUpdate(e){super.willUpdate(e),this.template.willUpdate(e)}update(e){super.update(e),this.template.update(e)}render(){return this.template.render()}firstUpdated(e){super.firstUpdated(e),this.template.firstUpdated(e),this.template.inputSetup()}updated(e){super.updated(e),this.template.updated(e)}acknowledgeDelete(){let e=new CustomEvent(ne.removeEventName);this.dispatchEvent(e)}isSameGraph(e){return this.blueprint&&this.blueprint==e?.blueprint}}class St extends wt{static properties={...super.properties,locationX:{type:Number,attribute:!1},locationY:{type:Number,attribute:!1},sizeX:{type:Number,attribute:!1},sizeY:{type:Number,attribute:!1}};static dragEventName=ne.dragEventName;static dragGeneralEventName=ne.dragGeneralEventName;constructor(){super(),this.locationX=0,this.locationY=0,this.sizeX=0,this.sizeY=0}computeSizes(){const e=this.getBoundingClientRect();this.sizeX=this.blueprint.scaleCorrect(e.width),this.sizeY=this.blueprint.scaleCorrect(e.height)}firstUpdated(e){super.firstUpdated(e),this.computeSizes()}setLocation(e,t,i=!0){const s=e-this.locationX,r=t-this.locationY;if(this.locationX=e,this.locationY=t,this.blueprint&&i){const e=new CustomEvent(this.constructor.dragEventName,{detail:{value:[s,r]},bubbles:!1,cancelable:!0});this.dispatchEvent(e)}}addLocation(e,t,i=!0){this.setLocation(this.locationX+e,this.locationY+t,i)}acknowledgeDrag(e){const t=new CustomEvent(this.constructor.dragGeneralEventName,{detail:{value:e},bubbles:!0,cancelable:!0});this.dispatchEvent(t)}snapToGrid(){const e=Ae.snapToGrid(this.locationX,this.locationY,ne.gridSize);this.locationX==e[0]&&this.locationY==e[1]||this.setLocation(e[0],e[1])}topBoundary(e=!1){return this.template.topBoundary(e)}rightBoundary(e=!1){return this.template.rightBoundary(e)}bottomBoundary(e=!1){return this.template.bottomBoundary(e)}leftBoundary(e=!1){return this.template.leftBoundary(e)}}class Et extends bt{#j=e=>{if(this.blueprint.setFocused(!0),e.button===this.options.clickButton)this.options.strictTarget&&e.target!=e.currentTarget||(this.consumeEvent&&e.stopImmediatePropagation(),this.#U.addEventListener("mousemove",this.#W),document.addEventListener("mouseup",this.#K),this.setLocationFromEvent(e),this.clickedPosition[0]=this.location[0],this.clickedPosition[1]=this.location[1],this.blueprint.mousePosition[0]=this.location[0],this.blueprint.mousePosition[1]=this.location[1],this.target instanceof St&&(this.clickedOffset=[this.clickedPosition[0]-this.target.locationX,this.clickedPosition[1]-this.target.locationY]),this.clicked(this.clickedPosition));else this.options.exitAnyButton||this.#K(e)};#W=e=>{this.consumeEvent&&e.stopImmediatePropagation(),this.#U.removeEventListener("mousemove",this.#W),this.#U.addEventListener("mousemove",this.#Y);const t=this.getEvent(ne.trackingMouseEventName.begin);this.#Z=0==this.target.dispatchEvent(t),this.setLocationFromEvent(e),this.lastLocation=Ae.snapToGrid(this.clickedPosition[0],this.clickedPosition[1],this.stepSize),this.startDrag(this.location),this.started=!0,this.#Y(e)};#Y=e=>{this.consumeEvent&&e.stopImmediatePropagation();const t=this.setLocationFromEvent(e),i=[e.movementX,e.movementY];if(this.dragTo(t,i),this.#Z&&(this.blueprint.mousePosition=t),this.options.scrollGraphEdge){const e=Math.sqrt(i[0]*i[0]+i[1]*i[1]),s=this.blueprint.scaleCorrect(ne.edgeScrollThreshold),r=this.blueprint.template.gridLeftVisibilityBoundary()+s,n=this.blueprint.template.gridRightVisibilityBoundary()-s;let a=0;t[0]n&&(a=t[0]-n);const o=this.blueprint.template.gridTopVisibilityBoundary()+s,l=this.blueprint.template.gridBottomVisibilityBoundary()-s;let c=0;t[1]l&&(c=t[1]-l),a=Ae.clamp(this.blueprint.scaleCorrectReverse(a)**3*e*.6,-20,20),c=Ae.clamp(this.blueprint.scaleCorrectReverse(c)**3*e*.6,-20,20),this.blueprint.scrollDelta(a,c)}};#K=e=>{if(!this.options.exitAnyButton||e.button==this.options.clickButton){if(this.consumeEvent&&e.stopImmediatePropagation(),this.#U.removeEventListener("mousemove",this.#W),this.#U.removeEventListener("mousemove",this.#Y),document.removeEventListener("mouseup",this.#K),this.started&&this.endDrag(),this.unclicked(),this.#Z){const e=this.getEvent(ne.trackingMouseEventName.end);this.target.dispatchEvent(e),this.#Z=!1}this.started=!1}};#Z=!1;#U;#X;clickedOffset=[0,0];clickedPosition=[0,0];lastLocation=[0,0];started=!1;stepSize=1;constructor(e,t,i={}){i.clickButton??=ne.mouseClickButton,i.consumeEvent??=!0,i.draggableElement??=e,i.exitAnyButton??=!0,i.moveEverywhere??=!1,i.movementSpace??=t?.getGridDOMElement(),i.repositionOnClick??=!1,i.scrollGraphEdge??=!1,i.strictTarget??=!1,super(e,t,i),this.stepSize=Number(i.stepSize??ne.gridSize),this.#U=this.options.moveEverywhere?document.documentElement:this.movementSpace,this.#X=this.options.draggableElement,this.listenEvents()}listenEvents(){super.listenEvents(),this.#X.addEventListener("mousedown",this.#j),this.options.clickButton===ne.mouseRightClickButton&&this.#X.addEventListener("contextmenu",(e=>e.preventDefault()))}unlistenEvents(){super.unlistenEvents(),this.#X.removeEventListener("mousedown",this.#j)}getEvent(e){return new CustomEvent(e,{detail:{tracker:this},bubbles:!0,cancelable:!0})}clicked(e){}startDrag(e){}dragTo(e,t){}endDrag(){}unclicked(e){}}class Ct extends Et{startDrag(){this.blueprint.scrolling=!0}dragTo(e,t){this.blueprint.scrollDelta(-t[0],-t[1])}endDrag(){this.blueprint.scrolling=!1}}class Pt extends bt{#q=null;#Q=e=>{e.preventDefault(),this.setLocationFromEvent(e),this.blueprint.mousePosition=[...this.location]};#J=e=>{this.#q||(e.preventDefault(),this.#q=e.detail.tracker,this.unlistenMouseMove())};#ee=e=>{this.#q==e.detail.tracker&&(e.preventDefault(),this.#q=null,this.listenMouseMove())};constructor(e,t,i={}){i.listenOnFocus=!0,super(e,t,i)}listenMouseMove(){this.target.addEventListener("mousemove",this.#Q)}unlistenMouseMove(){this.target.removeEventListener("mousemove",this.#Q)}listenEvents(){this.listenMouseMove(),this.blueprint.addEventListener(ne.trackingMouseEventName.begin,this.#J),this.blueprint.addEventListener(ne.trackingMouseEventName.end,this.#ee)}unlistenEvents(){this.unlistenMouseMove(),this.blueprint.removeEventListener(ne.trackingMouseEventName.begin,this.#J),this.blueprint.removeEventListener(ne.trackingMouseEventName.end,this.#ee)}}class xt{static#te=new Map;static registerElement(e,t){xt.#te.set(e,t)}static getConstructor(e){return xt.#te.get(e)}}class Nt extends ae{static#k=new ct;#ie;constructor(e,t,i={}){i.listenOnFocus??=!0,i.unlistenOnTextEdit??=!0,super(e,t,i);let s=this;this.#ie=e=>s.pasted(e.clipboardData.getData("Text"))}listenEvents(){window.addEventListener("paste",this.#ie)}unlistenEvents(){window.removeEventListener("paste",this.#ie)}pasted(e){let t=0,i=0,s=0,r=Nt.#k.readMultiple(e).map((e=>{let r=xt.getConstructor("ueb-node").newObject(e);return t+=r.locationY,i+=r.locationX,++s,r}));t/=s,i/=s,r.length>0&&this.blueprint.unselectAll();let n=this.blueprint.mousePosition;return r.forEach((e=>{e.addLocation(n[0]-i,n[1]-t),e.snapToGrid(),e.setSelected(!0)})),this.blueprint.addGraphElement(...r),!0}}class kt extends Et{constructor(e,t,i={}){i.scrollGraphEdge??=!0,super(e,t,i),this.selectorElement=this.blueprint.template.selectorElement}startDrag(){this.selectorElement.beginSelect(this.clickedPosition)}dragTo(e,t){this.selectorElement.selectTo(e)}endDrag(){this.started&&this.selectorElement.endSelect()}unclicked(){this.started||this.blueprint.unselectAll()}}class At extends ae{#se=e=>this.clickedSomewhere(e.target);constructor(e,t,i={}){i.listenOnFocus=!0,super(e,t,i),this.blueprint.focus&&document.addEventListener("click",this.#se)}clickedSomewhere(e){e.closest("ueb-blueprint")||this.blueprint.setFocused(!1)}listenEvents(){document.addEventListener("click",this.#se)}unlistenEvents(){document.removeEventListener("click",this.#se)}}class Lt extends pt{static styleVariables={"--ueb-font-size":`${ne.fontSize}`,"--ueb-grid-axis-line-color":`${ne.gridAxisLineColor}`,"--ueb-grid-expand":`${ne.expandGridSize}px`,"--ueb-grid-line-color":`${ne.gridLineColor}`,"--ueb-grid-line-width":`${ne.gridLineWidth}px`,"--ueb-grid-set-line-color":`${ne.gridSetLineColor}`,"--ueb-grid-set":`${ne.gridSet}`,"--ueb-grid-size":`${ne.gridSize}px`,"--ueb-link-min-width":`${ne.linkMinWidth}`,"--ueb-node-radius":`${ne.nodeRadius}px`};#re=new ResizeObserver((e=>{const t=e.find((e=>e.target===this.viewportElement))?.devicePixelContentBoxSize?.[0];t&&(this.viewportSize[0]=t.inlineSize,this.viewportSize[1]=t.blockSize)}));#ne;#ae;#z;headerElement;overlayElement;viewportElement;selectorElement;gridElement;linksContainerElement;nodesContainerElement;viewportSize=[0,0];#oe(){}initialize(e){super.initialize(e),this.element.style.cssText=Object.entries(Lt.styleVariables).map((([e,t])=>`${e}:${t};`)).join("");const t=this.element.querySelector(":scope > template")?.content.textContent;t&&(this.element.requestUpdate(),this.element.updateComplete.then((()=>{this.blueprint.mousePosition=[Math.round(this.viewportSize[0]/2),Math.round(this.viewportSize[1]/2)],this.getPasteInputObject().pasted(t),this.blueprint.unselectAll()})))}setup(){super.setup(),this.#re.observe(this.viewportElement,{box:"device-pixel-content-box"});const e=this.viewportElement.getBoundingClientRect();this.viewportSize[0]=e.width,this.viewportSize[1]=e.height,this.blueprint.nodes.length>0&&(this.blueprint.requestUpdate(),this.blueprint.updateComplete.then((()=>this.centerContentInViewport())))}cleanup(){super.cleanup(),this.#re.unobserve(this.viewportElement)}createInputObjects(){const e=this.element.getGridDOMElement();return this.#ne=new ut(e,this.blueprint),this.#ae=new Nt(e,this.blueprint),this.#z=new yt(e,this.blueprint),[...super.createInputObjects(),this.#ne,this.#ae,this.#z,new ht(e,this.blueprint),new mt(e,this.blueprint,{activationKeys:gt.duplicateNodes},(()=>this.blueprint.template.getPasteInputObject().pasted(this.blueprint.template.getCopyInputObject().copied()))),new mt(e,this.blueprint,{activationKeys:gt.deleteNodes},(()=>this.blueprint.removeGraphElement(...this.blueprint.getNodes(!0)))),new mt(e,this.blueprint,{activationKeys:gt.selectAllNodes},(()=>this.blueprint.selectAll())),new kt(e,this.blueprint,{clickButton:ne.mouseClickButton,exitAnyButton:!0,moveEverywhere:!0}),new Ct(e,this.blueprint,{clickButton:ne.mouseRightClickButton,exitAnyButton:!1,moveEverywhere:!0}),new At(e,this.blueprint),new Pt(e,this.blueprint),new ft(e,this.blueprint)]}render(){return O`
Zoom ${0==this.blueprint.zoom?"1:1":(this.blueprint.zoom>0?"+":"")+this.blueprint.zoom}
`}firstUpdated(e){super.firstUpdated(e),this.headerElement=this.blueprint.querySelector(".ueb-viewport-header"),this.overlayElement=this.blueprint.querySelector(".ueb-viewport-overlay"),this.viewportElement=this.blueprint.querySelector(".ueb-viewport-body"),this.selectorElement=this.blueprint.querySelector("ueb-selector"),this.gridElement=this.viewportElement.querySelector(".ueb-grid"),this.linksContainerElement=this.blueprint.querySelector("[data-links]"),this.linksContainerElement.append(...this.blueprint.getLinks()),this.nodesContainerElement=this.blueprint.querySelector("[data-nodes]"),this.nodesContainerElement.append(...this.blueprint.getNodes()),this.viewportElement.scroll(ne.expandGridSize,ne.expandGridSize)}willUpdate(e){super.willUpdate(e),this.headerElement&&e.has("zoom")&&(this.headerElement.classList.add("ueb-zoom-changed"),this.headerElement.addEventListener("animationend",(()=>this.headerElement.classList.remove("ueb-zoom-changed"))))}updated(e){if(super.updated(e),(e.has("scrollX")||e.has("scrollY"))&&this.viewportElement.scroll(this.blueprint.scrollX,this.blueprint.scrollY),e.has("zoom")){this.blueprint.style.setProperty("--ueb-scale",this.blueprint.getScale());const t=e.get("zoom"),i=Math.min(t,this.blueprint.zoom),s=Math.max(t,this.blueprint.zoom),r=Ae.range(i,s),n=e=>`ueb-zoom-${e}`;te<0)).map(n)),this.blueprint.classList.add(...r.filter((e=>e>0)).map(n))):(this.blueprint.classList.remove(...r.filter((e=>e>0)).map(n)),this.blueprint.classList.add(...r.filter((e=>e<0)).map(n)))}}getCommentNodes(e=!1){return this.blueprint.querySelectorAll(`ueb-node[data-type="${ne.paths.comment}"]${e?'[data-selected="true"]':""}, ueb-node[data-type="${ne.paths.materialGraphNodeComment}"]${e?'[data-selected="true"]':""}`)}getPin(e){return this.blueprint.querySelector(`ueb-node[data-title="${e.objectName}"] ueb-pin[data-id="${e.pinGuid}"]`)}getCopyInputObject(){return this.#ne}getPasteInputObject(){return this.#ae}getZoomInputObject(){return this.#z}isPointVisible(e,t){return!1}gridTopVisibilityBoundary(){return this.blueprint.scaleCorrect(this.blueprint.scrollY)-this.blueprint.translateY}gridRightVisibilityBoundary(){return this.gridLeftVisibilityBoundary()+this.blueprint.scaleCorrect(this.viewportSize[0])}gridBottomVisibilityBoundary(){return this.gridTopVisibilityBoundary()+this.blueprint.scaleCorrect(this.viewportSize[1])}gridLeftVisibilityBoundary(){return this.blueprint.scaleCorrect(this.blueprint.scrollX)-this.blueprint.translateX}centerViewport(e=0,t=0,i=!0){const s=this.gridLeftVisibilityBoundary()+this.blueprint.scaleCorrect(this.viewportSize[0]/2),r=this.gridTopVisibilityBoundary()+this.blueprint.scaleCorrect(this.viewportSize[1]/2);this.blueprint.scrollDelta(this.blueprint.scaleCorrectReverse(e-s),this.blueprint.scaleCorrectReverse(t-r),i)}centerContentInViewport(e=!0){let t=0,i=0,s=Number.MAX_SAFE_INTEGER,r=Number.MIN_SAFE_INTEGER,n=Number.MAX_SAFE_INTEGER,a=Number.MIN_SAFE_INTEGER;const o=this.blueprint.getNodes();for(const e of o)t+=e.leftBoundary()+e.rightBoundary(),i+=e.topBoundary()+e.bottomBoundary(),s=Math.min(s,e.leftBoundary()),r=Math.max(r,e.rightBoundary()),n=Math.min(n,e.topBoundary()),a=Math.max(a,e.bottomBoundary());t=Math.round(r-s<=this.viewportSize[0]?(r+s)/2:t/(2*o.length)),i=Math.round(a-n<=this.viewportSize[1]?(a+n)/2:i/(2*o.length)),this.centerViewport(t,i,e)}}class Mt extends wt{static properties={...super.properties,fromX:{type:Number,attribute:!1},fromY:{type:Number,attribute:!1},toX:{type:Number,attribute:!1},toY:{type:Number,attribute:!1}};constructor(){super(),this.fromX=0,this.fromY=0,this.toX=0,this.toY=0}setBothLocations([e,t]){this.fromX=e,this.fromY=t,this.toX=e,this.toY=t}addSourceLocation(e,t){this.fromX+=e,this.fromY+=t}addDestinationLocation(e,t){this.toX+=e,this.toY+=t}}class Tt extends pt{update(e){super.update(e);const[t,i,s,r]=[Math.round(this.element.fromX),Math.round(this.element.fromY),Math.round(this.element.toX),Math.round(this.element.toY)],[n,a,o,l]=[Math.min(t,s),Math.min(i,r),Math.abs(t-s),Math.abs(i-r)];(e.has("fromX")||e.has("toX"))&&(this.element.style.left=`${n}px`,this.element.style.width=`${o}px`),(e.has("fromY")||e.has("toY"))&&(this.element.style.top=`${a}px`,this.element.style.height=`${l}px`)}}class It extends ot{constructor(e={},t=void 0){e.Class=new Ie(ne.paths.knot),e.Name="K2Node_Knot";const i=new st({PinName:"InputPin"},!0),s=new st({PinName:"OutputPin",Direction:"EGPD_Output"},!0);t&&(i.copyTypeFrom(t),s.copyTypeFrom(t)),e.CustomProperties=[i,s],super(e,!0)}}class Bt extends bt{static#T=e=>{};#j=e=>{if(this.blueprint.setFocused(!0),!this.enablerKey||this.enablerActivated)if(e.button===this.options.clickButton)this.options.strictTarget&&e.target!==e.currentTarget||(this.consumeEvent&&e.stopImmediatePropagation(),document.addEventListener("mouseup",this.#K),this.setLocationFromEvent(e),this.clickedPosition[0]=this.location[0],this.clickedPosition[1]=this.location[1],this.blueprint.mousePosition[0]=this.location[0],this.blueprint.mousePosition[1]=this.location[1],this.clicked(this.clickedPosition));else this.options.exitAnyButton||this.#K(e)};#K=e=>{this.options.exitAnyButton&&e.button!=this.options.clickButton||(this.consumeEvent&&e.stopImmediatePropagation(),document.removeEventListener("mouseup",this.#K),this.unclicked())};clickedPosition=[0,0];constructor(e,t,i={},s=Bt.#T,r=Bt.#T){i.clickButton??=ne.mouseClickButton,i.consumeEvent??=!0,i.exitAnyButton??=!0,i.strictTarget??=!1,super(e,t,i),this.onClick=s,this.onUnclick=r,this.listenEvents()}listenEvents(){this.target.addEventListener("mousedown",this.#j),this.options.clickButton===ne.mouseRightClickButton&&this.target.addEventListener("contextmenu",(e=>e.preventDefault()))}unlistenEvents(){this.target.removeEventListener("mousedown",this.#j)}clicked(e){this.onClick(this)}unclicked(e){this.onUnclick(this)}}class $t extends bt{static ignoreDbClick=e=>{};#le=e=>{this.options.strictTarget&&e.target!==e.currentTarget||(this.consumeEvent&&e.stopImmediatePropagation(),this.clickedPosition=this.setLocationFromEvent(e),this.blueprint.mousePosition=[...this.clickedPosition],this.dbclicked(this.clickedPosition))};#ce;get onDbClick(){return this.#ce}set onDbClick(e){this.#ce=e}clickedPosition=[0,0];constructor(e,t,i={},s=$t.ignoreDbClick){i.consumeEvent??=!0,i.strictTarget??=!1,super(e,t,i),this.#ce=s,this.listenEvents()}listenEvents(){this.target.addEventListener("dblclick",this.#le)}unlistenEvents(){this.target.removeEventListener("dblclick",this.#le)}dbclicked(e){this.onDbClick(e)}}class Ht extends Tt{static decreasingValue(e,t){const i=-e*t[0]**2,s=t[1]-i/t[0];return e=>i/e+s}static clampedLine(e,t){if(e[0]>t[0]){const i=e;e=t,t=i}const i=(t[1]-e[1])/(t[0]-e[0]),s=e[1]-i*e[0];return r=>rt[0]?t[1]:i*r+s}static c1DecreasingValue=Ht.decreasingValue(-.15,[100,15]);static c2DecreasingValue=Ht.decreasingValue(-.05,[500,130]);static c2Clamped=Ht.clampedLine([0,80],[200,40]);#ue=`ueb-id-${Math.floor(1e12*Math.random())}`;#he=e=>{const t=new It({},this.element.source.entity),i=xt.getConstructor("ueb-node").newObject(t);i.setLocation(...this.blueprint.snapToGrid(...e));const s=i.template;this.blueprint.addGraphElement(i);const r=this.element.getInputPin(),n=this.element.getOutputPin();this.element.source=null,this.element.destination=null;const a=xt.getConstructor("ueb-link").newObject(n,s.inputPin);this.blueprint.addGraphElement(a),this.element.source=s.outputPin,this.element.destination=r};createInputObjects(){const e=this.element.querySelector(".ueb-link-area");return[...super.createInputObjects(),new $t(e,this.blueprint,void 0,(e=>{e[0]+=ne.knotOffset[0],e[1]+=ne.knotOffset[1],e=Ae.snapToGrid(e[0],e[1],ne.gridSize),this.#he(e)})),new Bt(e,this.blueprint,{enablerKey:new mt(this.blueprint,this.blueprint,{activationKeys:gt.enableLinkDelete})},(()=>this.blueprint.removeGraphElement(this.element)))]}willUpdate(e){super.willUpdate(e);const t=this.element.source,i=this.element.destination;if(e.has("fromX")||e.has("toX")){const e=this.element.fromX,s=this.element.toX,r=t?.nodeElement.getType()==ne.paths.knot,n=i?.nodeElement.getType()==ne.paths.knot;!r||i&&!n||(t?.isInput()&&s>e+ne.distanceThreshold?this.element.source=t.nodeElement.template.outputPin:t?.isOutput()&&se+ne.distanceThreshold&&(this.element.destination=i.nodeElement.template.inputPin))}const s=Math.max(Math.abs(this.element.fromX-this.element.toX),1),r=Math.max(Math.abs(this.element.fromY-this.element.toY),1),n=Math.max(s,ne.linkMinWidth),a=s/n,o=this.element.originatesFromInput?this.element.fromXthis.element.toY?1:0)),this.element.style.setProperty("--ueb-start-percentage",`${Math.round(this.element.startPercentage)}%`),this.element.style.setProperty("--ueb-link-start",`${Math.round(this.element.startPixels)}`)}render(){return O` ${this.element.linkMessageIcon||this.element.linkMessageText?O``:V}`}}class Gt extends Mt{static properties={...super.properties,dragging:{type:Boolean,attribute:"data-dragging",converter:Ae.booleanConverter,reflect:!0},originatesFromInput:{type:Boolean,attribute:!1},svgPathD:{type:String,attribute:!1},linkMessageIcon:{type:String,attribute:!1},linkMessageText:{type:String,attribute:!1}};#pe;get source(){return this.#pe}set source(e){this.#de(e,!1)}#me;get destination(){return this.#me}set destination(e){this.#de(e,!0)}#ge=()=>this.remove();#be=e=>this.addSourceLocation(...e.detail.value);#ve=e=>this.addDestinationLocation(...e.detail.value);#ye=e=>this.setSourceLocation();#fe=e=>this.setDestinationLocation();linkMessageIcon=V;linkMessageText=V;pathElement;constructor(){super(),this.dragging=!1,this.originatesFromInput=!1,this.startPercentage=0,this.svgPathD="",this.startPixels=0}static newObject(e,t){const i=new Gt;return i.initialize(e,t),i}initialize(e,t){super.initialize({},new Ht),e&&(this.source=e,t||(this.toX=this.fromX,this.toY=this.fromY)),t&&(this.destination=t,e||(this.fromX=this.toX,this.fromY=this.toY))}#de(e,t){const i=()=>t?this.destination:this.source;if(i()!=e){if(i()){const e=i().getNodeElement();e.removeEventListener(ne.removeEventName,this.#ge),e.removeEventListener(ne.nodeDragEventName,t?this.#ve:this.#be),e.removeEventListener(ne.nodeReflowEventName,t?this.#fe:this.#ye),this.#we()}if(t?this.#me=e:this.#pe=e,i()){const e=i().getNodeElement();e.addEventListener(ne.removeEventName,this.#ge),e.addEventListener(ne.nodeDragEventName,t?this.#ve:this.#be),e.addEventListener(ne.nodeReflowEventName,t?this.#fe:this.#ye),t?this.setDestinationLocation():(this.setSourceLocation(),this.originatesFromInput=this.source.isInput()),this.#Se()}}}#Se(){this.source&&this.destination&&(this.source.linkTo(this.destination),this.destination.linkTo(this.source))}#we(){this.source&&this.destination&&(this.source.unlinkFrom(this.destination,!1),this.destination.unlinkFrom(this.source,!1))}cleanup(){super.cleanup(),this.#we(),this.source=null,this.destination=null}setSourceLocation(e=null,t=!0){if(null==e){const i=this;if(t&&(!this.hasUpdated||!this.source.hasUpdated))return void Promise.all([this.updateComplete,this.source.updateComplete]).then((()=>i.setSourceLocation(null,!1)));e=this.source.template.getLinkLocation()}const[i,s]=e;this.fromX=i,this.fromY=s}setDestinationLocation(e=null,t=!0){if(null==e){const i=this;if(t&&(!this.hasUpdated||!this.destination.hasUpdated))return void Promise.all([this.updateComplete,this.destination.updateComplete]).then((()=>i.setDestinationLocation(null,!1)));e=this.destination.template.getLinkLocation()}this.toX=e[0],this.toY=e[1]}getInputPin(){return this.source?.isInput()?this.source:this.destination}setInputPin(e){this.source?.isInput()&&(this.source=e),this.destination=e}getOutputPin(){return this.destination?.isOutput()?this.destination:this.source}setOutputPin(e){this.destination?.isOutput()&&(this.destination=e),this.source=e}startDragging(){this.dragging=!0}finishDragging(){this.dragging=!1}removeMessage(){this.linkMessageIcon=V,this.linkMessageText=V}setMessageConvertType(){this.linkMessageIcon=rt.convert,this.linkMessageText=O`Convert ${this.source.pinType} to ${this.destination.pinType}.`}setMessageCorrect(){this.linkMessageIcon=rt.correct,this.linkMessageText=V}setMessageReplace(){this.linkMessageIcon=rt.correct,this.linkMessageText=V}setMessageDirectionsIncompatible(){this.linkMessageIcon=rt.reject,this.linkMessageText=O`Directions are not compatbile.`}setMessagePlaceNode(){this.linkMessageIcon=V,this.linkMessageText=O`Place a new node.`}setMessageReplaceLink(){this.linkMessageIcon=rt.correct,this.linkMessageText=O`Replace existing input connections.`}setMessageReplaceOutputLink(){this.linkMessageIcon=rt.correct,this.linkMessageText=O`Replace existing output connections.`}setMessageSameNode(){this.linkMessageIcon=rt.reject,this.linkMessageText=O`Both are on the same node.`}setMessageTypesIncompatible(e,t){this.linkMessageIcon=rt.reject,this.linkMessageText=O`${Ae.capitalFirstLetter(e.pinType)} is not compatible with ${Ae.capitalFirstLetter(t.pinType)}.`}}class Ot extends Et{clicked(e){this.options.repositionOnClick&&(this.target.setLocation(...this.stepSize>1?Ae.snapToGrid(e[0],e[1],this.stepSize):e),this.clickedOffset=[0,0])}dragTo(e,t){const i=[this.target.locationX??this.lastLocation[0],this.target.locationY??this.lastLocation[1]],[s,r]=this.stepSize>1?[Ae.snapToGrid(e[0],e[1],this.stepSize),Ae.snapToGrid(i[0],i[1],this.stepSize)]:[e,i];0==(t=[s[0]-this.lastLocation[0],s[1]-this.lastLocation[1]])[0]&&0==t[1]||(t[0]+=r[0]-i[0],t[1]+=r[1]-i[1],this.dragAction(s,t),this.lastLocation=s)}dragAction(e,t){this.target.setLocation(e[0]-this.clickedOffset[0],e[1]-this.clickedOffset[1])}}class Dt extends Ot{#Ee;#Ce;#Pe;#xe;constructor(e,t,i={}){super(e,t,i),i.onClicked&&(this.#Ee=i.onClicked),i.onStartDrag&&(this.#Ce=i.onStartDrag),i.onDrag&&(this.#Pe=i.onDrag),i.onEndDrag&&(this.#xe=i.onEndDrag)}clicked(e){super.clicked(e),this.#Ee?.()}startDrag(){super.startDrag(),this.#Ce?.()}dragAction(e,t){this.#Pe?.(e,t)}endDrag(){super.endDrag(),this.#xe?.()}}class Vt extends pt{getDraggableElement(){return this.element}createDraggableObject(){return new Ot(this.element,this.blueprint,{draggableElement:this.getDraggableElement()})}createInputObjects(){return[...super.createInputObjects(),this.createDraggableObject(),new mt(this.element,this.blueprint,{activationKeys:[ne.Keys.ArrowUp,ne.Keys.ArrowRight,ne.Keys.ArrowDown,ne.Keys.ArrowLeft]},(e=>e.target.acknowledgeDrag([e.pressedKey===ne.Keys.ArrowLeft?-ne.gridSize:e.pressedKey===ne.Keys.ArrowRight?ne.gridSize:0,e.pressedKey===ne.Keys.ArrowUp?-ne.gridSize:e.pressedKey===ne.Keys.ArrowDown?ne.gridSize:0])))]}topBoundary(e=!1){return this.element.locationY}rightBoundary(e=!1){return this.element.locationX+this.element.sizeX}bottomBoundary(e=!1){return this.element.locationY+this.element.sizeY}leftBoundary(e=!1){return this.element.locationX}centerInViewport(){const e=Math.min(this.blueprint.template.viewportSize[0]/10,this.blueprint.template.viewportSize[1]/10),t=this.leftBoundary()-this.blueprint.template.gridLeftVisibilityBoundary(),i=this.blueprint.template.gridRightVisibilityBoundary()-this.rightBoundary();let s=Math.max((t+i)/2,e);const r=this.topBoundary()-this.blueprint.template.gridTopVisibilityBoundary(),n=this.blueprint.template.gridBottomVisibilityBoundary()-this.bottomBoundary();let a=Math.max((r+n)/2,e);this.blueprint.scrollDelta(t-s,r-a,!0)}}class Rt extends Vt{update(e){super.update(e),e.has("locationX")&&(this.element.style.left=`${this.element.locationX}px`),e.has("locationY")&&(this.element.style.top=`${this.element.locationY}px`)}}class zt extends Ot{startDrag(){this.target.selected||(this.blueprint.unselectAll(),this.target.setSelected(!0))}dragAction(e,t){this.target.acknowledgeDrag(t)}unclicked(){this.started?(this.blueprint.getNodes(!0).forEach((e=>e.boundComments.filter((t=>!e.isInsideComment(t))).forEach((t=>e.unbindFromComment(t))))),this.blueprint.getCommentNodes().forEach((e=>e.template.manageNodesBind()))):(this.blueprint.unselectAll(),this.target.setSelected(!0))}}class _t extends Rt{getDraggableElement(){return this.element}createDraggableObject(){return new zt(this.element,this.blueprint,{draggableElement:this.getDraggableElement(),scrollGraphEdge:!0})}firstUpdated(e){super.firstUpdated(e),this.element.selected&&!this.element.listeningDrag&&this.element.setSelected(!0)}}class Ft extends _t{static nodeStyleClasses=["ueb-node-style-default"];#Ne=!1;pinInserter;inputContainer;outputContainer;pinElement;addPinHandler=()=>{const e=this.pinInserter?.();e&&(this.defaultPin&&this.defaultPin.isInput()===e.isInput()?this.defaultPin.before(this.createPinElement(e)):(e.isInput()?this.inputContainer:this.outputContainer).appendChild(this.createPinElement(e)),this.element.acknowledgeReflow())};toggleAdvancedDisplayHandler=()=>{this.element.toggleShowAdvancedPinDisplay(),this.element.requestUpdate(),this.element.updateComplete.then((()=>this.element.acknowledgeReflow()))};createPinElement(e){const t=xt.getConstructor("ueb-pin").newObject(e,void 0,this.element);return this.pinInserter&&!this.defaultPin&&"Default"===t.getPinName()&&(this.defaultPin=t,this.defaultPin.classList.add("ueb-node-variadic-default")),t}initialize(e){super.initialize(e),this.element.classList.add(...this.constructor.nodeStyleClasses),this.element.style.setProperty("--ueb-node-color",this.getColor().cssText),this.pinInserter=this.element.entity.additionalPinInserter(),this.pinInserter&&this.element.classList.add("ueb-node-is-variadic")}getColor(){return this.element.entity.nodeColor()}render(){return O`
${this.renderTop()}
${this.pinInserter?O`
Add pin ${rt.plusCircle}
`:V} ${this.element.entity.isDevelopmentOnly()?O`
Development Only
`:V} ${this.element.advancedPinDisplay?O`
${rt.expandIcon}
`:V}
`}renderNodeIcon(){return this.element.entity.nodeIcon()}renderNodeName(){return this.element.getNodeDisplayName()}renderTop(){const e=this.renderNodeIcon(),t=this.renderNodeName();return O`
${e?O`
${e}
`:V} ${t?O`
${t} ${this.#Ne&&this.getTargetType().length>0?O`
Target is ${Ae.formatStringName(this.getTargetType())}
`:V}
`:V}
`}firstUpdated(e){super.firstUpdated(e),this.inputContainer=this.element.querySelector(".ueb-node-inputs"),this.outputContainer=this.element.querySelector(".ueb-node-outputs"),this.setupPins(),this.element.updateComplete.then((()=>this.element.acknowledgeReflow()))}setupPins(){this.element.nodeNameElement=this.element.querySelector(".ueb-node-name-text");let e=!1,t=!1;for(const i of this.element.getPinElements())i!==this.defaultPin&&(i.isInput()?(this.inputContainer.appendChild(i),e=!0):i.isOutput()&&(this.outputContainer.appendChild(i),t=!0));this.defaultPin&&(this.defaultPin.isInput()?this.inputContainer:this.outputContainer).appendChild(this.defaultPin),e&&this.element.classList.add("ueb-node-has-inputs"),t&&this.element.classList.add("ueb-node-has-outputs")}createPinElements(){return this.element.getPinEntities().filter((e=>!e.isHidden())).map((e=>(this.#Ne=this.#Ne||"self"===e.PinName&&"Target"===e.pinDisplayName(),this.createPinElement(e))))}getTargetType(){return this.element.entity.FunctionReference?.MemberParent?.getName()??"Untitled"}getPinElements(e){return e.querySelectorAll("ueb-pin")}linksChanged(){}}class jt extends Ft{#ke=document.createElement("div");#Ae=document.createElement("div");#Le=document.createElement("div");#Me=document.createElement("div");#Te=document.createElement("div");#Ie=document.createElement("div");#Be=document.createElement("div");#$e=document.createElement("div");initialize(e){super.initialize(e),this.element.classList.add("ueb-resizeable"),this.#ke.classList.add("ueb-resizeable-top"),this.#Ae.classList.add("ueb-resizeable-right"),this.#Le.classList.add("ueb-resizeable-bottom"),this.#Me.classList.add("ueb-resizeable-left"),this.#Te.classList.add("ueb-resizeable-top-right"),this.#Ie.classList.add("ueb-resizeable-bottom-right"),this.#Be.classList.add("ueb-resizeable-bottom-left"),this.#$e.classList.add("ueb-resizeable-top-left")}update(e){super.update(e),this.element.sizeX>=0&&e.has("sizeX")&&(this.element.style.width=`${this.element.sizeX}px`),this.element.sizeY>=0&&e.has("sizeY")&&(this.element.style.height=`${this.element.sizeY}px`)}firstUpdated(e){super.firstUpdated(e),this.element.append(this.#ke,this.#Ae,this.#Le,this.#Me,this.#Te,this.#Ie,this.#Be,this.#$e)}createInputObjects(){return[...super.createInputObjects(),new Dt(this.#ke,this.blueprint,{onDrag:(e,t)=>{t[1]=e[1]-this.element.topBoundary(),this.setSizeY(this.element.sizeY-t[1])&&this.element.addLocation(0,t[1],!1)},onEndDrag:()=>this.endResize()}),new Dt(this.#Ae,this.blueprint,{onDrag:(e,t)=>{t[0]=e[0]-this.element.rightBoundary(),this.setSizeX(this.element.sizeX+t[0])},onEndDrag:()=>this.endResize()}),new Dt(this.#Le,this.blueprint,{onDrag:(e,t)=>{t[1]=e[1]-this.element.bottomBoundary(),this.setSizeY(this.element.sizeY+t[1])},onEndDrag:()=>this.endResize()}),new Dt(this.#Me,this.blueprint,{onDrag:(e,t)=>{t[0]=e[0]-this.element.leftBoundary(),this.setSizeX(this.element.sizeX-t[0])&&this.element.addLocation(t[0],0,!1)},onEndDrag:()=>this.endResize()}),new Dt(this.#Te,this.blueprint,{onDrag:(e,t)=>{t[0]=e[0]-this.element.rightBoundary(),t[1]=e[1]-this.element.topBoundary(),this.setSizeX(this.element.sizeX+t[0]),this.setSizeY(this.element.sizeY-t[1])&&this.element.addLocation(0,t[1],!1)},onEndDrag:()=>this.endResize()}),new Dt(this.#Ie,this.blueprint,{onDrag:(e,t)=>{t[0]=e[0]-this.element.rightBoundary(),t[1]=e[1]-this.element.bottomBoundary(),this.setSizeX(this.element.sizeX+t[0]),this.setSizeY(this.element.sizeY+t[1])},onEndDrag:()=>this.endResize()}),new Dt(this.#Be,this.blueprint,{onDrag:(e,t)=>{t[0]=e[0]-this.element.leftBoundary(),t[1]=e[1]-this.element.bottomBoundary(),this.setSizeX(this.element.sizeX-t[0])&&this.element.addLocation(t[0],0,!1),this.setSizeY(this.element.sizeY+t[1])},onEndDrag:()=>this.endResize()}),new Dt(this.#$e,this.blueprint,{onDrag:(e,t)=>{t[0]=e[0]-this.element.leftBoundary(),t[1]=e[1]-this.element.topBoundary(),this.setSizeX(this.element.sizeX-t[0])&&this.element.addLocation(t[0],0,!1),this.setSizeY(this.element.sizeY-t[1])&&this.element.addLocation(0,t[1],!1)},onEndDrag:()=>this.endResize()})]}setSizeX(e){return this.element.setNodeWidth(e),!0}setSizeY(e){return this.element.setNodeHeight(e),!0}endResize(){}}class Ut extends jt{#He=0;initialize(e){super.initialize(e),e.classList.add("ueb-node-style-comment","ueb-node-resizeable"),e.sizeX=25*ne.gridSize,e.sizeY=6*ne.gridSize,super.initialize(e)}getDraggableElement(){return this.element.querySelector(".ueb-node-top")}render(){return O`
`}firstUpdated(e){super.firstUpdated(e);const t=this.getDraggableElement().getBoundingClientRect();this.#He=t.height}manageNodesBind(){let e=this.blueprint.getNodes();for(let t of e)t.topBoundary()>=this.element.topBoundary()&&t.rightBoundary()<=this.element.rightBoundary()&&t.bottomBoundary()<=this.element.bottomBoundary()&&t.leftBoundary()>=this.element.leftBoundary()?t.bindToComment(this.element):t.unbindFromComment(this.element)}setSizeX(e){return(e=Math.round(e))>=2*ne.gridSize&&(this.element.setNodeWidth(e),!0)}setSizeY(e){return(e=Math.round(e))>=2*ne.gridSize&&(this.element.setNodeHeight(e),!0)}endResize(){this.manageNodesBind()}topBoundary(e=!1){return this.element.locationY}rightBoundary(e=!1){return this.element.locationX+this.element.sizeX}bottomBoundary(e=!1){return e?this.element.locationY+this.#He:super.bottomBoundary()}leftBoundary(e=!1){return this.element.locationX}}class Wt extends Et{#Ge;#Oe=null;#De=e=>{if(!this.enteredPin){this.linkValid=!1,this.enteredPin=e.target;const t=this.link.source??this.target,i=this.enteredPin,s=t.isOutput()?t:i;t.nodeElement.getType()===ne.paths.knot||i.nodeElement.getType()===ne.paths.knot?(this.link.setMessageCorrect(),this.linkValid=!0):t.getNodeElement()===i.getNodeElement()?this.link.setMessageSameNode():t.isOutput()===i.isOutput()?this.link.setMessageDirectionsIncompatible():this.blueprint.getLinks(t,i).length?(this.link.setMessageReplaceLink(),this.linkValid=!0):"exec"===s.entity.getType()&&s.isLinked?(this.link.setMessageReplaceOutputLink(),this.linkValid=!0):"object"==t.entity.PinType.PinCategory&&"object"==i.entity.PinType.PinCategory||t.pinType==i.pinType?(this.link.setMessageCorrect(),this.linkValid=!0):(this.link.setMessageTypesIncompatible(t,i),this.linkValid=!1)}};#Ve=e=>{this.enteredPin==e.target&&(this.enteredPin=null,this.linkValid=!1,this.link?.setMessagePlaceNode())};link;enteredPin;linkValid=!1;constructor(e,t,i={}){i.scrollGraphEdge??=!0,super(e,t,i)}startDrag(e){this.target.nodeElement.getType()==ne.paths.knot&&(this.#Oe=this.target),this.link=xt.getConstructor("ueb-link").newObject(this.target,null),this.blueprint.template.linksContainerElement.prepend(this.link),this.link.setMessagePlaceNode(),this.#Ge=this.blueprint.querySelectorAll("ueb-pin"),this.#Ge.forEach((e=>{e!=this.target&&(e.addEventListener("mouseenter",this.#De),e.addEventListener("mouseleave",this.#Ve))})),this.link.startDragging(),this.link.setDestinationLocation(e)}dragTo(e,t){this.link.setDestinationLocation(e)}endDrag(){if(this.#Ge.forEach((e=>{e.removeEventListener("mouseenter",this.#De),e.removeEventListener("mouseleave",this.#Ve)})),this.#Ge=null,this.enteredPin&&this.linkValid){if(this.#Oe){const e=this.#Oe!==this.link.source?this.link.source:this.enteredPin;if(this.#Oe.isInput()&&e.isInput()||this.#Oe.isOutput()&&e.isOutput()){const e=this.#Oe.template.getOppositePin();this.#Oe===this.link.source?this.link.source=e:this.enteredPin=e}}else this.enteredPin.nodeElement.getType()===ne.paths.knot&&(this.enteredPin=this.enteredPin.template.getOppositePin());this.link.source.getLinks().find((e=>e.equals(this.enteredPin.createPinReference())))?this.link.remove():(this.blueprint.addGraphElement(this.link),this.link.destination=this.enteredPin)}else this.link.remove();this.enteredPin=null,this.link.removeMessage(),this.link.finishDragging(),this.link=null}}class Kt extends Ft{#Re=!1;#ze=!1;#_e="";static nodeStyleClasses=["ueb-node-style-glass"];initialize(e){super.initialize(e),this.#_e=this.element.getNodeDisplayName()}render(){return O`
${this.#_e?O`
${this.#_e}
`:V} ${this.#Re?O`
`:V} ${this.#ze?O`
`:V} ${this.pinInserter?O`
Add pin ${rt.plusCircle}
`:V}
`}createPinElements(){return this.element.getPinEntities().filter((e=>!e.isHidden())).map((e=>{this.#Re||=e.isInput(),this.#ze||=e.isOutput();return xt.getConstructor("ueb-pin").newObject(e,void 0,this.element)}))}}class Yt extends Kt{static nodeStyleClasses=[...super.nodeStyleClasses,"ueb-node-style-conversion"]}class Zt extends Kt{static nodeStyleClasses=[...super.nodeStyleClasses,"ueb-node-style-operation"]}class Xt extends pt{static canWrapInput=!0;#Fe;get iconElement(){return this.#Fe}#je;get wrapperElement(){return this.#je}isNameRendered=!0;initialize(e){if(super.initialize(e),this.element.nodeElement){const e=this.element.nodeElement.template;this.isNameRendered=!(e instanceof Yt||e instanceof Zt)}}setup(){super.setup(),this.element.nodeElement=this.element.closest("ueb-node");const e=this.element.nodeElement.template;(e instanceof Yt||e instanceof Zt)&&(this.isNameRendered=!1,this.element.requestUpdate())}createInputObjects(){return[new Wt(this.element,this.blueprint,{moveEverywhere:!0,draggableElement:this.getClickableElement()})]}render(){const e=O`
${this.renderIcon()}
`,t=O`
${this.isNameRendered?this.renderName():V} ${this.isInputRendered()?this.renderInput():O``}
`;return O`
${this.element.isInput()?O`${e}${t}`:O`${t}${e}`}
`}renderIcon(){if(this.element.nodeElement.entity.isPcg())switch(this.element.entity.getType()){case"Any":return rt.pcgPin;case"Param":case"Param[]":return rt.pcgParamPin;case"Spatial":case"Spatial[]":return rt.pcgSpatialPin;case"Any[]":case"Point[]":case"Surface[]":case"Volume[]":if(this.element.isOutput())return rt.pcgPin;case"Point":case"Surface":case"Volume":return rt.pcgStackPin}switch(this.element.entity.PinType?.ContainerType?.toString()){case"Array":return rt.arrayPin;case"Set":return rt.setPin;case"Map":return rt.mapPin}return"delegate"===this.element.entity.PinType?.PinCategory?.toLocaleLowerCase()?rt.delegate:this.element.nodeElement?.template instanceof Zt?rt.operationPin:rt.genericPin}renderName(){let e=this.element.getPinDisplayName();const t=this.element.nodeElement,i=this.element.getPinName();return t.getType()==ne.paths.makeStruct&&i==t.entity.StructType.getName()&&(e=i),O`${e}`}isInputRendered(){return this.element.isInput()&&!this.element.entity.bDefaultValueIsIgnored&&!this.element.entity.PinType.bIsReference}renderInput(){return O``}updated(e){if(super.updated(e),this.element.isInput()&&e.has("isLinked")){const e=this.element.nodeElement;this.element.requestUpdate(),this.element.updateComplete.then((()=>e.acknowledgeReflow()))}}firstUpdated(e){super.firstUpdated(e),this.element.style.setProperty("--ueb-pin-color-rgb",this.element.entity.pinColor().cssText),this.#Fe=this.element.querySelector(".ueb-pin-icon svg")??this.element,this.#je=this.element.querySelector(".ueb-pin-wrapper")}getLinkLocation(){const e=this.iconElement.getBoundingClientRect(),t=[this.element.isInput()?e.left:e.right+1,(e.top+e.bottom)/2],i=Ae.convertLocation(t,this.blueprint.template.gridElement);return this.blueprint.compensateTranslation(i[0],i[1])}getClickableElement(){return this.#je??this.element}}class qt extends Xt{render(){return O`
${this.renderIcon()}
`}}class Qt extends Ft{static nodeStyleClasses=[...super.nodeStyleClasses,"ueb-node-style-event"];firstUpdated(e){super.firstUpdated(e),this.element.querySelector(".ueb-node-top").appendChild(this.createDelegatePinElement())}renderTop(){const e=this.renderNodeIcon(),t=this.renderNodeName(),i=this.element.getType()===ne.paths.customEvent&&(this.element.entity.CustomFunctionName||this.element.entity.FunctionReference.MemberParent);return O`
${e?O`
${e}
`:V} ${t?O`
${t} ${i?O`
Custom Event
`:V}
`:V}
`}createDelegatePinElement(){const e=xt.getConstructor("ueb-pin").newObject(this.element.getPinEntities().find((e=>!e.isHidden()&&"delegate"===e.PinType.PinCategory)),new qt,this.element);return e.template.isNameRendered=!1,e}createPinElements(){return this.element.getPinEntities().filter((e=>!e.isHidden()&&"delegate"!==e.PinType.PinCategory)).map((e=>xt.getConstructor("ueb-pin").newObject(e,void 0,this.element)))}}class Jt extends St{static properties={...super.properties,selected:{type:Boolean,attribute:"data-selected",reflect:!0,converter:Ae.booleanConverter}};dragHandler=e=>this.addLocation(...e.detail.value);constructor(){super(),this.selected=!1,this.listeningDrag=!1}setup(){super.setup(),this.setSelected(this.selected)}cleanup(){super.cleanup(),this.blueprint.removeEventListener(ne.nodeDragGeneralEventName,this.dragHandler)}setSelected(e=!0){this.selected=e,this.blueprint&&(this.selected?(this.listeningDrag=!0,this.blueprint.addEventListener(ne.nodeDragGeneralEventName,this.dragHandler)):(this.blueprint.removeEventListener(ne.nodeDragGeneralEventName,this.dragHandler),this.listeningDrag=!1))}}class ei extends qt{render(){return this.element.isOutput()?super.render():O``}getOppositePin(){const e=this.element.nodeElement.template;return this.element.isOutput()?e.inputPin:e.outputPin}getLinkLocation(){const e=(this.element.isInput()?this.element.nodeElement.template.outputPin.template:this).iconElement.getBoundingClientRect(),t=[this.element.isInput()?e.left:e.right+1,(e.top+e.bottom)/2],i=Ae.convertLocation(t,this.blueprint.template.gridElement);return this.blueprint.compensateTranslation(i[0],i[1])}}class ti extends Ft{static#Ue=new Set;#We=null;#Ke;get inputPin(){return this.#Ke}#Ye;get outputPin(){return this.#Ye}initialize(e){super.initialize(e),this.element.classList.add("ueb-node-style-minimal")}findDirectionaPin(e){if(e.nodeElement.getType()!==ne.paths.knot||ti.#Ue.has(e))return ti.#Ue.clear(),!0;ti.#Ue.add(e);for(let t of e.getLinks().map((e=>this.blueprint.getPin(e))))if(this.findDirectionaPin(t))return!0;return!1}render(){return O`
`}setupPins(){this.element.getPinElements().forEach((e=>this.element.querySelector(".ueb-node-border").appendChild(e)))}getPinElements(e){return e.querySelectorAll("ueb-pin")}createPinElements(){const e=this.element.getPinEntities().filter((e=>!e.isHidden())),t=e[e[0].isInput()?0:1],i=e[e[0].isOutput()?0:1],s=xt.getConstructor("ueb-pin");return[this.#Ke=s.newObject(t,new ei,this.element),this.#Ye=s.newObject(i,new ei,this.element)]}linksChanged(){}}class ii extends Kt{initialize(e){super.initialize(e),e.getType()===ne.paths.variableGet?this.element.classList.add("ueb-node-style-getter"):e.getType()===ne.paths.variableSet&&this.element.classList.add("ueb-node-style-setter")}setupPins(){super.setupPins();let e=this.element.getPinElements().find((e=>!e.entity.isHidden()&&!e.entity.isExecution()));this.element.style.setProperty("--ueb-node-color",e.getColor().cssText)}}class si extends Jt{static properties={...Jt.properties,typePath:{type:String,attribute:"data-type",reflect:!0},nodeTitle:{type:String,attribute:"data-title",reflect:!0},advancedPinDisplay:{type:String,attribute:"data-advanced-display",converter:$e.attributeConverter,reflect:!0},enabledState:{type:String,attribute:"data-enabled-state",reflect:!0},nodeDisplayName:{type:String,attribute:!1},pureFunction:{type:Boolean,converter:Ae.booleanConverter,attribute:"data-pure-function",reflect:!0}};static dragEventName=ne.nodeDragEventName;static dragGeneralEventName=ne.nodeDragGeneralEventName;get blueprint(){return super.blueprint}set blueprint(e){super.blueprint=e,this.#Ze.forEach((t=>t.blueprint=e))}#Xe;get nodeNameElement(){return this.#Xe}set nodeNameElement(e){this.#Xe=e}#Ze=[];boundComments=[];#qe=!1;#Qe=e=>{this.selected||this.#qe||(this.#qe=!0,this.requestUpdate(),this.updateComplete.then((()=>this.#qe=!1)),this.addLocation(...e.detail.value))};static getTypeTemplate(e){if(e.getClass()===ne.paths.callFunction||e.getClass()===ne.paths.commutativeAssociativeBinaryOperator||e.getClass()===ne.paths.callArrayFunction){const t=e.FunctionReference?.MemberParent?.path??"",i=e.FunctionReference?.MemberName;if(i&&(t===ne.paths.kismetMathLibrary||t===ne.paths.kismetArrayLibrary)){if(i.startsWith("Conv_"))return Yt;if(i.startsWith("And_")||i.startsWith("Boolean")||i.startsWith("Cross_")||i.startsWith("Dot_")||i.startsWith("Not_")||i.startsWith("Or_")||i.startsWith("Percent_")||i.startsWith("Xor_"))return Zt;switch(i){case"Abs":case"Array_Add":case"Array_AddUnique":case"Array_Identical":case"BMax":case"BMin":case"CrossProduct2D":case"DotProduct2D":case"Exp":case"FMax":case"FMin":case"GetPI":case"Max":case"MaxInt64":case"Min":case"MinInt64":case"Sqrt":case"Square":case"Vector4_CrossProduct3":case"Vector4_DotProduct":case"Vector4_DotProduct3":case"Acos":case"Asin":case"Cos":case"DegAcos":case"DegCos":case"DegSin":case"DegTan":case"Sin":case"Tan":return Zt}}if(t===ne.paths.blueprintSetLibrary)return Zt;if(t===ne.paths.blueprintMapLibrary)return Zt}switch(e.getClass()){case ne.paths.comment:case ne.paths.materialGraphNodeComment:return Ut;case ne.paths.createDelegate:return Ft;case ne.paths.promotableOperator:return Zt;case ne.paths.knot:return ti;case ne.paths.literal:case ne.paths.variableGet:case ne.paths.variableSet:return ii}return e.isEvent()?Qt:Ft}static fromSerializedObject(e){e=e.trim();let t=Ne.getSerializer(ot).read(e);return si.newObject(t)}static newObject(e=new ot,t=new(si.getTypeTemplate(e))){const i=new si;return i.initialize(e,t),i}initialize(e=new ot,t=new(si.getTypeTemplate(e))){super.initialize(e,t),this.#Ze=this.template.createPinElements(),this.typePath=this.entity.getType(),this.nodeTitle=this.entity.getObjectName(),this.advancedPinDisplay=this.entity.AdvancedPinDisplay?.toString(),this.enabledState=this.entity.EnabledState,this.nodeDisplayName=this.getNodeDisplayName(),this.pureFunction=this.entity.bIsPureFunc,this.dragLinkObjects=[],super.setLocation(this.entity.getNodePosX(),this.entity.getNodePosY()),this.entity.NodeWidth&&this.entity.NodeHeight?(this.sizeX=this.entity.NodeWidth.value,this.sizeY=this.entity.NodeHeight.value):this.updateComplete.then((()=>this.computeSizes()))}async getUpdateComplete(){let e=await super.getUpdateComplete();for(const t of this.getPinElements())e&&=await t.updateComplete;return e}bindToComment(e){e==this||this.boundComments.includes(e)||(e.addEventListener(ne.nodeDragEventName,this.#Qe),this.boundComments.push(e))}unbindFromComment(e){const t=this.boundComments.indexOf(e);t>=0&&(e.removeEventListener(ne.nodeDragEventName,this.#Qe),this.boundComments[t]=this.boundComments[this.boundComments.length-1],this.boundComments.pop())}isInsideComment(e){return this.topBoundary()>=e.topBoundary()&&this.rightBoundary()<=e.rightBoundary()&&this.bottomBoundary()<=e.bottomBoundary()&&this.leftBoundary()>=e.leftBoundary()}getType(){return this.entity.getType()}getNodeName(){return this.entity.getObjectName()}getNodeDisplayName(){return this.entity.nodeDisplayName()}setNodeWidth(e){this.entity.setNodeWidth(e),this.sizeX=e,this.acknowledgeReflow()}setNodeHeight(e){this.entity.setNodeHeight(e),this.sizeY=e,this.acknowledgeReflow()}sanitizeLinks(e=[]){this.getPinElements().forEach((t=>t.sanitizeLinks(e)))}rename(e){if(this.entity.Name==e)return!1;for(let t of this.getPinElements())for(let i of t.getLinks())this.blueprint.getPin(i).redirectLink(t,new Ye({objectName:e,pinGuid:t.entity.PinId}));this.entity.Name=e,this.nodeTitle=this.entity.Name}getPinElements(){return this.#Ze}getPinEntities(){return this.entity.getPinEntities()}setLocation(e=0,t=0,i=!0){this.entity.setNodePosX(e),this.entity.setNodePosY(t),super.setLocation(e,t,i)}acknowledgeReflow(){this.requestUpdate(),this.updateComplete.then((()=>this.computeSizes()));let e=new CustomEvent(ne.nodeReflowEventName);this.dispatchEvent(e)}setShowAdvancedPinDisplay(e){this.entity.AdvancedPinDisplay=new $e(e?"Shown":"Hidden"),this.advancedPinDisplay=this.entity.AdvancedPinDisplay}toggleShowAdvancedPinDisplay(){this.setShowAdvancedPinDisplay("Shown"!=this.entity.AdvancedPinDisplay?.toString())}}class ri extends wt{static properties={selecting:{type:Boolean,attribute:"data-selecting",reflect:!0,converter:Ae.booleanConverter},scrolling:{type:Boolean,attribute:"data-scrolling",reflect:!0,converter:Ae.booleanConverter},focused:{type:Boolean,attribute:"data-focused",reflect:!0,converter:Ae.booleanConverter},zoom:{type:Number,attribute:"data-zoom",reflect:!0},scrollX:{type:Number,attribute:!1},scrollY:{type:Number,attribute:!1},additionalX:{type:Number,attribute:!1},additionalY:{type:Number,attribute:!1},translateX:{type:Number,attribute:!1},translateY:{type:Number,attribute:!1}};static nodeBoundariesSupplier=e=>({primaryInf:e.leftBoundary(!0),primarySup:e.rightBoundary(!0),secondaryInf:e.topBoundary(!0),secondarySup:e.bottomBoundary(!0)});static nodeSelectToggleFunction=(e,t)=>{e.setSelected(t)};#Je=new Map;#et=0;#tt=0;nodes=[];links=[];nodesNames=new Map;mousePosition=[0,0];waitingExpandUpdate=!1;constructor(){super(),this.selecting=!1,this.scrolling=!1,this.focused=!1,this.zoom=0,this.scrollX=ne.expandGridSize,this.scrollY=ne.expandGridSize,this.translateX=ne.expandGridSize,this.translateY=ne.expandGridSize,super.initialize({},new Lt)}initialize(){}getGridDOMElement(){return this.template.gridElement}getScroll(){return[this.scrollX,this.scrollY]}setScroll(e,t){this.scrollX=e,this.scrollY=t}scrollDelta(e=0,t=0,i=!1,s=ne.smoothScrollTime){if(i){let i=[0,0];this.#et&&cancelAnimationFrame(this.#et),this.#tt&&cancelAnimationFrame(this.#tt),Ae.animate(0,e,s,(e=>{this.scrollDelta(e-i[0],0,!1),i[0]=e}),(e=>this.#et=e)),Ae.animate(0,t,s,(e=>{this.scrollDelta(0,e-i[1],!1),i[1]=e}),(e=>this.#tt=e))}else{const i=[2*ne.expandGridSize,2*ne.expandGridSize];let s=this.getScroll(),r=[s[0]+e,s[1]+t],n=[0,0];for(let e=0;e<2;++e)r[e]i[e]-ne.gridExpandThreshold*ne.expandGridSize&&(n[e]=1);0==n[0]&&0==n[1]||this.seamlessExpand(n[0],n[1]),s=this.getScroll(),r=[s[0]+e,s[1]+t],this.setScroll(r[0],r[1])}}scrollCenter(e=!1){const t=this.getScroll(),i=[this.translateX-t[0],this.translateY-t[1]],s=this.getViewportSize().map((e=>e/2)),r=[i[0]-s[0],i[1]-s[1]];this.scrollDelta(r[0],r[1],e)}getViewportSize(){return[this.template.viewportElement.clientWidth,this.template.viewportElement.clientHeight]}getScrollMax(){return[this.template.viewportElement.scrollWidth-this.template.viewportElement.clientWidth,this.template.viewportElement.scrollHeight-this.template.viewportElement.clientHeight]}snapToGrid(e,t){return Ae.snapToGrid(e,t,ne.gridSize)}seamlessExpand(e,t){e=Math.round(e),t=Math.round(t);let i=this.getScale();[e,t]=[-e*ne.expandGridSize,-t*ne.expandGridSize],0!=e&&(this.scrollX+=e,e/=i),0!=t&&(this.scrollY+=t,t/=i),this.translateX+=e,this.translateY+=t}progressiveSnapToGrid(e){return ne.expandGridSize*Math.round(e/ne.expandGridSize+.5*Math.sign(e))}getZoom(){return this.zoom}setZoom(e,t){if((e=Ae.clamp(e,ne.minZoom,ne.maxZoom))==this.zoom)return;let i=this.getScale();if(this.zoom=e,t){t[0]+=this.translateX,t[1]+=this.translateY;let e=this.getScale()/i,s=[e*t[0],e*t[1]];this.scrollDelta((s[0]-t[0])*i,(s[1]-t[1])*i)}}getScale(){return ne.scale[this.getZoom()]}scaleCorrect(e){return e/this.getScale()}scaleCorrectReverse(e){return e*this.getScale()}compensateTranslation(e,t){return[e-=this.translateX,t-=this.translateY]}getNodes(e=!1,[t,i,s,r]=[Number.MIN_SAFE_INTEGER,Number.MAX_SAFE_INTEGER,Number.MAX_SAFE_INTEGER,Number.MIN_SAFE_INTEGER]){let n=this.nodes;return e&&(n=n.filter((e=>e.selected))),(t>Number.MIN_SAFE_INTEGER||iNumber.MIN_SAFE_INTEGER)&&(n=n.filter((e=>e.topBoundary()>=t&&e.rightBoundary()<=i&&e.bottomBoundary()<=s&&e.leftBoundary()>=r))),n}getCommentNodes(e=!1){let t=[...this.template.getCommentNodes(e)];return 0===t.length&&(t=this.nodes.filter((t=>t.getType()===ne.paths.comment&&(!e||t.selected)))),t}getPin(e){let t=this.template.getPin(e);return t&&t.nodeElement.getNodeName()==e.objectName.toString()||(t=[...this.nodes.find((t=>e.objectName.toString()==t.getNodeName()))?.getPinElements()??[]].find((t=>e.pinGuid.toString()==t.getPinId().toString()))),t}getLinks(e=null,t=null){if(null==e!=(null==t)){const i=e??t;return this.links.filter((e=>e.source==i||e.destination==i))}return null!=e&&null!=t?this.links.filter((i=>i.source==e&&i.destination==t||i.source==t&&i.destination==e)):this.links}getLink(e,t,i=!1){return this.links.find((s=>s.source==e&&s.destination==t||!i&&s.source==t&&s.destination==e))}selectAll(){this.getNodes().forEach((e=>ri.nodeSelectToggleFunction(e,!0)))}unselectAll(){this.getNodes().forEach((e=>ri.nodeSelectToggleFunction(e,!1)))}addGraphElement(...e){const t=e=>{const i=e.currentTarget;i.removeEventListener(ne.removeEventName,t);const s=i instanceof si?this.nodes:i instanceof Gt?this.links:null,r=s?.indexOf(i);if(r>=0){const e=s.pop();rt.entity.getObjectName()==e));if(s){let e=s.entity.getObjectName(!0);this.#Je[e]=this.#Je[e]??-1;do{++this.#Je[e]}while(this.nodes.find((t=>t.entity.getObjectName()==ne.nodeTitle(e,this.#Je[e]))));s.rename(ne.nodeTitle(e,this.#Je[e]))}this.nodes.push(i),i.addEventListener(ne.removeEventName,t),this.template.nodesContainerElement?.appendChild(i)}else i instanceof Gt&&!this.links.includes(i)&&(this.links.push(i),i.addEventListener(ne.removeEventName,t),this.template.linksContainerElement&&!this.template.linksContainerElement.contains(i)&&this.template.linksContainerElement.appendChild(i));e.filter((e=>e instanceof si)).forEach((t=>t.sanitizeLinks(e))),e.filter((e=>e instanceof si&&e.getType()==ne.paths.comment)).forEach((e=>e.updateComplete.then((()=>e.template.manageNodesBind()))))}removeGraphElement(...e){for(let t of e){if(t.closest("ueb-blueprint")!==this)return;t.remove()}}setFocused(e=!0){if(this.focused==e)return;let t=new CustomEvent(e?ne.focusEventName.begin:ne.focusEventName.end);this.focused=e,this.focused||this.unselectAll(),this.dispatchEvent(t)}acknowledgeEditText(e){const t=new CustomEvent(e?ne.editTextEventName.begin:ne.editTextEventName.end);this.dispatchEvent(t)}}customElements.define("ueb-blueprint",ri);class ni extends Vt{#it;get locationChangeCallback(){return this.#it}set locationChangeCallback(e){this.#it=e}movementSpace;movementSpaceSize=[0,0];firstUpdated(e){super.firstUpdated(e),this.movementSpace=this.element.parentElement}setup(){super.setup();const e=this.movementSpace.getBoundingClientRect();this.movementSpaceSize=[e.width,e.height]}createDraggableObject(){return new Ot(this.element,this.blueprint,{draggableElement:this.movementSpace,ignoreTranslateCompensate:!0,moveEverywhere:!0,movementSpace:this.movementSpace,repositionOnClick:!0,stepSize:1})}adjustLocation(e,t){return this.locationChangeCallback?.(e,t),[e,t]}}class ai extends ni{adjustLocation(e,t){const i=Math.round(this.movementSpaceSize[0]/2);e-=i,t=-(t-i);let[s,r]=Ae.getPolarCoordinates(e,t);return s=Math.min(s,i),[e,t]=Ae.getCartesianCoordinates(s,r),this.locationChangeCallback?.(e/i,t/i),[e=Math.round(e+i),t=Math.round(-t+i)]}}class oi extends St{windowElement;setup(){super.setup(),this.windowElement=this.closest("ueb-window")}setLocation(e,t){super.setLocation(...this.template.adjustLocation(e,t))}}class li extends oi{constructor(){super(),super.initialize({},new ai)}static newObject(){return new li}initialize(){}}class ci extends ni{adjustLocation(e,t){return e=Ae.clamp(e,0,this.movementSpaceSize[0]),t=Ae.clamp(t,0,this.movementSpaceSize[1]),this.locationChangeCallback?.(e/this.movementSpaceSize[0],1-t/this.movementSpaceSize[1]),[e,t]}}class ui extends oi{constructor(){super(),super.initialize({},new ci)}static newObject(){return new ui}initialize(){}}class hi extends Et{constructor(e,t,i={}){i.consumeEvent=!0,super(e,t,i)}}class pi extends pt{#st;#rt;#nt=e=>this.element.selectedOption=e.target.selectedOptions[0].value;render(){return O` `}firstUpdated(e){super.firstUpdated(e),this.#st=this.element.querySelector("select:first-child"),this.#rt=this.element.querySelector("select:last-child");const t=new Event("input",{bubbles:!0});this.#st.dispatchEvent(t)}updated(e){super.updated(e);const t=this.#rt.getBoundingClientRect();this.element.style.setProperty("--ueb-dropdown-width",t.width+"px")}createInputObjects(){return[...super.createInputObjects(),new hi(this.element,this.blueprint)]}setSelectedValue(e){this.element.querySelector(`option[value="${e}"]`).defaultSelected=!0}getSelectedValue(){return this.#st.value}}class di extends wt{static properties={...super.properties,options:{type:Object},selectedOption:{type:String}};constructor(){super(),super.initialize({},new pi),this.options=[],this.selectedOption=""}static newObject(e){return new di}initialize(){}getValue(){return this.template.getSelectedValue()}}class mi extends pt{#at=()=>{this.blueprint.acknowledgeEditText(!0),this.element.selectOnFocus&&getSelection().selectAllChildren(this.element)};#ot=()=>{this.blueprint.acknowledgeEditText(!1),getSelection().removeAllRanges()};#lt=e=>e.target.querySelectorAll("br").forEach((e=>e.remove()));#ct=e=>{"Enter"!=e.code||e.shiftKey||e.target.blur()};initialize(e){super.initialize(e),this.element.classList.add("ueb-pin-input-content"),this.element.setAttribute("role","textbox"),this.element.contentEditable="true"}firstUpdated(e){super.firstUpdated(e);const t=new Event("input",{bubbles:!0});this.element.dispatchEvent(t)}createInputObjects(){return[...super.createInputObjects(),new hi(this.element,this.blueprint)]}setup(){super.setup(),this.element.addEventListener("focus",this.#at),this.element.addEventListener("focusout",this.#ot),this.element.singleLine&&this.element.addEventListener("input",this.#lt),this.element.blurOnEnter&&this.element.addEventListener("keydown",this.#ct)}cleanup(){super.cleanup(),this.element.removeEventListener("focus",this.#at),this.element.removeEventListener("focusout",this.#ot),this.element.removeEventListener("input",this.#lt),this.element.removeEventListener("keydown",this.#ct)}}class gi extends wt{static properties={...super.properties,singleLine:{type:Boolean,attribute:"data-single-line",converter:Ae.booleanConverter,reflect:!0},selectOnFocus:{type:Boolean,attribute:"data-select-focus",converter:Ae.booleanConverter,reflect:!0},blurOnEnter:{type:Boolean,attribute:"data-blur-enter",converter:Ae.booleanConverter,reflect:!0}};constructor(){super(),this.singleLine=!1,this.selectOnFocus=!0,this.blurOnEnter=!0,super.initialize({},new mi)}static newObject(){return new gi}initialize(){}}class bi extends Xt{#ut;#ht=()=>this.element.setDefaultValue(this.#ut.checked);firstUpdated(e){super.firstUpdated(e),this.#ut=this.element.querySelector(".ueb-pin-input")}setup(){super.setup(),this.#ut?.addEventListener("change",this.#ht)}cleanup(){super.cleanup(),this.#ut?.removeEventListener("change",this.#ht)}createInputObjects(){return[...super.createInputObjects(),new hi(this.#ut,this.blueprint)]}renderInput(){return O``}}class vi extends Xt{static singleLineInput=!1;static selectOnFocus=!0;static saveEachInputChange=!1;#pt;get inputWrapper(){return this.#pt}#dt;static stringFromInputToUE(e){return e.replace(/(?=\n\s*)\n$/,"")}static stringFromUEToInput(e){return e.replaceAll(/(?:\r|(?<=(?:^|[^\\])(?:\\\\)*)\\r)(?=\n)/g,"").replace(/(?<=\n\s*)$/,"\n")}#mt=()=>this.setInputs(this.getInputs(),!0);#gt=e=>this.#bt(e.target);#bt(e){const t=this.blueprint.scaleCorrect(this.#pt.getBoundingClientRect().width)+this.nameWidth,i=this.element.classList.contains("ueb-pin-input-wrap");!i&&t>ne.pinInputWrapWidth?this.element.classList.add("ueb-pin-input-wrap"):i&&t<=ne.pinInputWrapWidth&&this.element.classList.remove("ueb-pin-input-wrap")}firstUpdated(e){super.firstUpdated(e);this.constructor.canWrapInput&&this.isInputRendered()&&(this.element.addEventListener("input",this.#gt),this.nameWidth=this.blueprint.scaleCorrect(this.element.querySelector(".ueb-pin-name")?.getBoundingClientRect().width??0)),this.#pt=this.element.querySelector(".ueb-pin-input-wrapper"),this.#dt=[...this.element.querySelectorAll("ueb-input")]}setup(){super.setup();const e=this.constructor;e.saveEachInputChange?this.element.addEventListener("input",this.#mt):this.element.addEventListener("focusout",this.#mt),e.canWrapInput&&this.isInputRendered()&&(this.element.addEventListener("input",this.#gt),this.element.nodeElement.addEventListener(ne.nodeReflowEventName,this.#gt))}cleanup(){super.cleanup(),this.element.nodeElement.removeEventListener(ne.nodeReflowEventName,this.#gt),this.element.removeEventListener("input",this.#gt),this.element.removeEventListener("input",this.#mt),this.element.removeEventListener("focusout",this.#mt)}getInput(){return this.getInputs().reduce(((e,t)=>e+t),"")}getInputs(){return this.#dt.map((e=>Ae.clearHTMLWhitespace(e.innerHTML)))}setInputs(e=[],t=!0){this.#dt.forEach(this.constructor.singleLineInput?(t,i)=>t.innerText=e[i]:(t,i)=>t.innerText=e[i].replaceAll("\n","")),t&&this.setDefaultValue(e.map((e=>vi.stringFromInputToUE(e))),e),this.element.requestUpdate(),this.element.nodeElement.acknowledgeReflow()}setDefaultValue(e=[],t=e){this.element.setDefaultValue(e.join(""))}renderInput(){const e=this.constructor,t=e.singleLineInput,i=e.selectOnFocus;return O`
`}}class yi extends vi{static saveEachInputChange=!0;#vt;#yt=[];setup(){super.setup();const e=this.element.nodeElement.entity.EnumEntries;this.#yt=e?.map((e=>(""===e&&(e="None"),[e,this.element.nodeElement.getPinEntities().find((t=>e===t.PinName))?.PinFriendlyName.toString()??e])))??ne.CommonEnums[this.element.entity.getSubCategory()]?.map((e=>e instanceof Array?e:[e,Ae.formatStringName(e)]))??[];const t=this.element.getDefaultValue().toString();this.#yt.find((([e,i])=>e===t))||this.#yt.push([t,Ae.formatStringName(t)]),this.element.requestUpdate()}renderInput(){return this.element.nodeElement.entity,O``}firstUpdated(e){super.firstUpdated(e),this.#vt=this.element.querySelector("ueb-dropdown")}getInputs(){return[this.#vt.getValue()]}}class fi extends Xt{renderIcon(){return rt.execPin}renderName(){let e=this.element.entity.PinName;if(this.element.entity.PinFriendlyName)e=this.element.entity.PinFriendlyName.toString();else if("execute"===e||"then"===e)return O``;return O`${this.element.getPinDisplayName()}`}}class wi extends vi{static singleLineInput=!0;setInputs(e=[],t=!1){if(e&&0!=e.length||(e=[this.getInput()]),super.setInputs(e,!1),t){let i=[];for(const s of e){let e=parseFloat(s);isNaN(e)&&(e=0,t=!1),i.push(e)}this.setDefaultValue(i,e)}}setDefaultValue(e=[],t){this.element.setDefaultValue(e[0])}}class Si extends wi{setDefaultValue(e=[],t=e){this.element.getDefaultValue(!0).value=e[0],this.element.requestUpdate()}renderInput(){return O`
`}}class Ei extends Si{setInputs(e=[],t=!1){if(e&&0!=e.length||(e=[this.getInput()]),super.setInputs(e,!1),t){if(!e[0].match(/[\-\+]?[0-9]+/))return;const t=[BigInt(e[0])];this.setDefaultValue(t,e)}}} /** * @license * Copyright 2017 Google LLC * SPDX-License-Identifier: BSD-3-Clause - */const pi=1;class di{constructor(e){}get _$AU(){return this._$AM._$AU}_$AT(e,t,i){this._$Ct=e,this._$AM=t,this._$Ci=i}_$AS(e,t){return this.update(e,t)}update(e,t){return this.render(...t)}} + */const Ci=1;class Pi{constructor(e){}get _$AU(){return this._$AM._$AU}_$AT(e,t,i){this._$Ct=e,this._$AM=t,this._$Ci=i}_$AS(e,t){return this.update(e,t)}update(e,t){return this.render(...t)}} /** * @license * Copyright 2018 Google LLC * SPDX-License-Identifier: BSD-3-Clause - */const mi="important",gi=" !"+mi,bi=(e=>(...t)=>({_$litDirective$:e,values:t}))(class extends di{constructor(e){var t;if(super(e),e.type!==pi||"style"!==e.name||(null===(t=e.strings)||void 0===t?void 0:t.length)>2)throw Error("The `styleMap` directive must be used in the `style` attribute and must be the only part in the attribute.")}render(e){return Object.keys(e).reduce(((t,i)=>{const n=e[i];return null==n?t:t+`${i=i.includes("-")?i:i.replace(/(?:^(webkit|moz|ms|o)|)(?=[A-Z])/g,"-$&").toLowerCase()}:${n};`}),"")}update(e,[t]){const{style:i}=e.element;if(void 0===this.ht){this.ht=new Set;for(const e in t)this.ht.add(e);return this.render(t)}this.ht.forEach((e=>{null==t[e]&&(this.ht.delete(e),e.includes("-")?i.removeProperty(e):i[e]="")}));for(const e in t){const n=t[e];if(null!=n){this.ht.add(e);const t="string"==typeof n&&n.endsWith(gi);e.includes("-")||t?i.setProperty(e,t?n.slice(0,-11):n,t?mi:""):i[e]=n}}return D}});class fi extends At{toggleAdvancedDisplayHandler;getDraggableElement(){return this.element.querySelector(".ueb-window-top")}createDraggableObject(){return new Nt(this.element,this.blueprint,{draggableElement:this.getDraggableElement(),ignoreScale:!0,ignoreTranslateCompensate:!1,movementSpace:this.blueprint,stepSize:1})}setup(){const e=this.blueprint.template.gridLeftVisibilityBoundary(),t=this.blueprint.template.gridTopVisibilityBoundary();this.element.locationX=this.blueprint.scaleCorrectReverse(this.blueprint.mousePosition[0]-e),this.element.locationY=this.blueprint.scaleCorrectReverse(this.blueprint.mousePosition[1]-t),this.element.updateComplete.then((()=>{const e=this.blueprint.getBoundingClientRect();this.element.locationX+this.element.sizeX>e.width&&(this.element.locationX=e.width-this.element.sizeX),this.element.locationX=Math.max(0,this.element.locationX),this.element.locationY+this.element.sizeY>e.height&&(this.element.locationY=e.height-this.element.sizeY),this.element.locationY=Math.max(0,this.element.locationY)}))}render(){return O`
${this.renderWindowName()}
${Ke.close}
${this.renderContent()}
`}renderWindowName(){return O`Window`}renderContent(){return O``}apply(){this.element.dispatchEvent(new CustomEvent(se.windowApplyEventName)),this.element.remove()}cancel(){this.element.dispatchEvent(new CustomEvent(se.windowCancelEventName)),this.element.remove()}}class vi extends fi{#tt;#it;#nt;#rt;#st;#at;#ot;#lt;#ut;#ct;#ht=e=>{const t=be.clearHTMLWhitespace(e.target.innerHTML),i=parseInt(t,16);isNaN(i)||(this.color.setFromRGBANumber(i),this.element.requestUpdate())};#pt=e=>{const t=be.clearHTMLWhitespace(e.target.innerHTML),i=parseInt(t,16);isNaN(i)||(this.color.setFromSRGBANumber(i),this.element.requestUpdate())};#dt=e=>t=>{"Enter"==t.code&&(t.preventDefault(),e(t))};#mt=new Ne;get color(){return this.#mt}set color(e){e.toNumber()!=this.color?.toNumber()&&(this.element.requestUpdate("color",this.#mt),this.#mt=e)}#gt=new Ne;get fullColor(){return this.#gt}#bt;get initialColor(){return this.#bt}#ft=new Ne;#vt(e,t,i=!1){const n=this.color.toRGBAString(),r=`${n.substring(0,2*e)}${t}${n.substring(2+2*e)}`;return i?`${r.substring(0,6)}FF`:r}initialize(e){super.initialize(e),this.#bt=this.element.windowOptions.getPinColor(),this.color.setFromHSVA(this.initialColor.H.value,this.initialColor.S.value,this.initialColor.V.value,this.initialColor.A.value),this.fullColor.setFromHSVA(this.color.H.value,1,1,1)}firstUpdated(e){this.#tt=this.element.querySelector(".ueb-color-picker-wheel ueb-color-handler"),this.#it=this.element.querySelector(".ueb-color-picker-saturation ueb-ui-slider"),this.#nt=this.element.querySelector(".ueb-color-picker-value ueb-ui-slider"),this.#rt=this.element.querySelector(".ueb-color-picker-r ueb-ui-slider"),this.#st=this.element.querySelector(".ueb-color-picker-g ueb-ui-slider"),this.#at=this.element.querySelector(".ueb-color-picker-b ueb-ui-slider"),this.#ot=this.element.querySelector(".ueb-color-picker-a ueb-ui-slider"),this.#lt=this.element.querySelector(".ueb-color-picker-h ueb-ui-slider"),this.#ut=this.element.querySelector(".ueb-color-picker-s ueb-ui-slider"),this.#ct=this.element.querySelector(".ueb-color-picker-v ueb-ui-slider"),this.#tt.template.locationChangeCallback=(e,t)=>{this.color.setFromWheelLocation(e,t,this.color.V.value,this.color.A.value),this.fullColor.setFromHSVA(this.color.H.value,1,1,1),this.element.requestUpdate()},this.#it.template.locationChangeCallback=(e,t)=>{this.color.setFromHSVA(this.color.H.value,t,this.color.V.value,this.color.A.value),this.element.requestUpdate()},this.#nt.template.locationChangeCallback=(e,t)=>{this.color.setFromHSVA(this.color.H.value,this.color.S.value,t,this.color.A.value),this.element.requestUpdate()},this.#rt.template.locationChangeCallback=(e,t)=>{this.color.setFromRGBA(e,this.color.G.value,this.color.B.value,this.color.A.value),this.element.requestUpdate()},this.#st.template.locationChangeCallback=(e,t)=>{this.color.setFromRGBA(this.color.R.value,e,this.color.B.value,this.color.A.value),this.element.requestUpdate()},this.#at.template.locationChangeCallback=(e,t)=>{this.color.setFromRGBA(this.color.R.value,this.color.G.value,e,this.color.A.value),this.element.requestUpdate()},this.#ot.template.locationChangeCallback=(e,t)=>{this.color.setFromRGBA(this.color.R.value,this.color.G.value,this.color.B.value,e),this.element.requestUpdate()},this.#lt.template.locationChangeCallback=(e,t)=>{this.color.setFromHSVA(e,this.color.S.value,this.color.V.value,this.color.A.value),this.element.requestUpdate()},this.#ut.template.locationChangeCallback=(e,t)=>{this.color.setFromHSVA(this.color.H.value,e,this.color.V.value,this.color.A.value),this.element.requestUpdate()},this.#ct.template.locationChangeCallback=(e,t)=>{this.color.setFromHSVA(this.color.H.value,this.color.S.value,e,this.color.A.value),this.element.requestUpdate()}}renderSlider(e){let t="",i=0,n="";const r=e=>`linear-gradient(to right, #${this.#vt(e,"00",!0)}, #${this.#vt(e,"ff",!0)})`;switch(e){case 0:t="r",i=this.color.R.value,n=r(e);break;case 1:t="g",i=this.color.G.value,n=r(e);break;case 2:t="b",i=this.color.B.value,n=r(e);break;case 3:t="a",i=this.color.A.value,n=`${se.alphaPattern}, ${r(e)}`;break;case 4:t="h",i=360*this.color.H.value,n="linear-gradient(to right, #f00 0%, #ff0 16.666%, #0f0 33.333%, #0ff 50%, #00f 66.666%, #f0f 83.333%, #f00 100%)";break;case 5:t="s",i=this.color.S.value,n=`linear-gradient(to right,#${this.#ft.setFromHSVA(this.color.H.value,0,this.color.V.value,1),this.#ft.toRGBAString()},#${this.#ft.setFromHSVA(this.color.H.value,1,this.color.V.value,1),this.#ft.toRGBAString()})`;break;case 6:t="v",i=this.color.V.value,n=`linear-gradient(to right, #000, #${this.fullColor.toRGBAString()})`}return n=`background: ${n};`,O`
${t.toUpperCase()}
`}renderContent(){const e=2*this.color.H.value*Math.PI,t={"--ueb-color-r":this.color.R.toString(),"--ueb-color-g":this.color.G.toString(),"--ueb-color-b":this.color.B.toString(),"--ueb-color-a":this.color.A.toString(),"--ueb-color-h":this.color.H.toString(),"--ueb-color-s":this.color.S.toString(),"--ueb-color-v":this.color.V.toString(),"--ueb-color-wheel-x":100*(this.color.S.value*Math.cos(e)*.5+.5)+"%","--ueb-color-wheel-y":100*(this.color.S.value*Math.sin(e)*.5+.5)+"%"},i=this.color.toRGBAString(),n=this.color.toSRGBAString(),r=this.fullColor.toRGBAString();return O`
Old
New
Advanced
${this.renderSlider(0)} ${this.renderSlider(1)} ${this.renderSlider(2)} ${this.renderSlider(3)}
${this.renderSlider(4)} ${this.renderSlider(5)} ${this.renderSlider(6)}
Hex Linear
Hex sRGB
${se.windowApplyButtonText}
${se.windowCancelButtonText}
`}renderWindowName(){return O`${se.colorWindowName}`}}class yi extends Vt{#yt;#wt=e=>{e.preventDefault(),this.blueprint.setFocused(!0),this.#yt=mt.getConstructor("ueb-window").newObject({type:new vi,windowOptions:{getPinColor:()=>this.element.defaultValue,setPinColor:e=>this.element.setDefaultValue(e)}}),this.blueprint.append(this.#yt);const t=()=>{this.element.setDefaultValue(this.#yt.template.color)},i=()=>{this.#yt.removeEventListener(se.windowApplyEventName,t),this.#yt.removeEventListener(se.windowCloseEventName,i),this.#yt=null};this.#yt.addEventListener(se.windowApplyEventName,t),this.#yt.addEventListener(se.windowCloseEventName,i)};renderInput(){return O``}}class wi extends ai{static singleLineInput=!0}class Ei extends ui{setDefaultValue(e=[],t=e){this.element.setDefaultValue(e[0])}renderInput(){return O`
`}}class Si extends Vt{renderIcon(){return Ke.referencePin}}class Ci extends ui{#Et(){return be.printNumber(this.element.getDefaultValue()?.R??0)}#St(){return be.printNumber(this.element.getDefaultValue()?.P??0)}#Ct(){return be.printNumber(this.element.getDefaultValue()?.Y??0)}setDefaultValue(e=[],t=e){const i=this.element.getDefaultValue(!0);if(!(i instanceof ze))throw new TypeError("Expected DefaultValue to be a RotatorEntity");i.R=e[0],i.P=e[1],i.Y=e[2],this.element.requestUpdate("DefaultValue",i)}renderInput(){return O`
X
Y
Z
`}}class xi extends ai{}class Pi extends ui{#xt(){return be.printNumber(this.element.getDefaultValue()?.X??0)}#Ct(){return be.printNumber(this.element.getDefaultValue()?.Y??0)}setDefaultValue(e,t){const i=this.element.getDefaultValue(!0);if(!(i instanceof Ve))throw new TypeError("Expected DefaultValue to be a Vector2DEntity");i.X=e[0],i.Y=e[1],this.element.requestUpdate("DefaultValue",i)}renderInput(){return O`
X
Y
`}}class Ni extends ui{#xt(){return be.printNumber(this.element.getDefaultValue()?.X??0)}#Ct(){return be.printNumber(this.element.getDefaultValue()?.Y??0)}#Pt(){return be.printNumber(this.element.getDefaultValue()?.Z??0)}setDefaultValue(e,t){const i=this.element.getDefaultValue(!0);if(!(i instanceof je))throw new TypeError("Expected DefaultValue to be a VectorEntity");i.X=e[0],i.Y=e[1],i.Z=e[2],this.element.requestUpdate("DefaultValue",i)}renderInput(){return O`
X
Y
Z
`}}class ki extends ut{static#Nt={bool:si,byte:ci,enum:oi,int:ci,int64:hi,MUTABLE_REFERENCE:Si,name:wi,rg:Pi,real:Ei,string:xi,[se.paths.linearColor]:yi,[se.paths.rotator]:Ci,[se.paths.vector]:Ni,[se.paths.vector2D]:Pi};static properties={pinId:{type:we,converter:{fromAttribute:(e,t)=>e?we.grammar.parse(e).value:null,toAttribute:(e,t)=>e?.toString()},attribute:"data-id",reflect:!0},pinType:{type:String,attribute:"data-type",reflect:!0},advancedView:{type:String,attribute:"data-advanced-view",reflect:!0},color:{type:Ne,converter:{fromAttribute:(e,t)=>e?Ne.getLinearColorFromAnyFormat().parse(e).value:null,toAttribute:(e,t)=>e?be.printLinearColor(e):null},attribute:"data-color",reflect:!0},defaultValue:{type:String,attribute:!1},isLinked:{type:Boolean,converter:be.booleanConverter,attribute:"data-linked",reflect:!0},pinDirection:{type:String,attribute:"data-direction",reflect:!0},connectable:{type:Boolean,converter:be.booleanConverter,attribute:"data-connectable",reflect:!0}};nodeElement;static getTypeTemplate(e){return"Array"===e.PinType.ContainerType?.toString()?Vt:e.PinType.bIsReference&&!e.PinType.bIsConst?ki.#Nt.MUTABLE_REFERENCE:"exec"===e.getType()?li:(e.isInput()?ki.#Nt[e.getType()]:Vt)??Vt}static newObject(e=new We,t=new(ki.getTypeTemplate(e)),i=void 0){const n=new ki;return n.initialize(e,t,i),n}initialize(e=new We,t=new(ki.getTypeTemplate(e)),i=void 0){this.nodeElement=i,this.advancedView=e.bAdvancedView,this.isLinked=!1,this.connectable=!e.bNotConnectable,super.initialize(e,t),this.pinType=this.entity.getType(),this.defaultValue=this.entity.getDefaultValue(),this.color=ki.properties.color.converter.fromAttribute(this.getColor().toString()),this.pinDirection=e.isInput()?"input":e.isOutput()?"output":"hidden"}setup(){super.setup(),this.nodeElement=this.closest("ueb-node")}createPinReference(){return new Oe({objectName:this.nodeElement.getNodeName(),pinGuid:this.getPinId()})}getPinId(){return this.entity.PinId}getPinName(){return this.entity.PinName}getPinDisplayName(){return this.entity.pinDisplayName()}getColor(){return this.entity.pinColor()}isInput(){return this.entity.isInput()}isOutput(){return this.entity.isOutput()}getLinkLocation(){return this.template.getLinkLocation()}getNodeElement(){return this.nodeElement}getLinks(){return this.entity.LinkedTo??[]}getDefaultValue(e=!1){return this.defaultValue=this.entity.getDefaultValue(e)}setDefaultValue(e){this.entity.DefaultValue=e,this.defaultValue=e}sanitizeLinks(e=[]){this.entity.LinkedTo=this.entity.LinkedTo?.filter((t=>{let i=this.blueprint.getPin(t);if(i){if(e.length&&!e.includes(i.nodeElement))return!1;let t=this.blueprint.getLink(this,i);t||(t=mt.getConstructor("ueb-link").newObject(this,i),this.blueprint.addGraphElement(t))}return i})),this.isLinked=this.entity.isLinked()}linkTo(e){const t=this.createPinReference();!this.isLinked||!this.isOutput()||"exec"!==this.pinType&&"exec"!==e.pinType||this.getLinks().some((e=>t.equals(e)))||this.unlinkFromAll(),this.entity.linkTo(e.getNodeElement().getNodeName(),e.entity)&&(this.isLinked=this.entity.isLinked(),this.nodeElement?.template.linksChanged())}unlinkFrom(e,t=!0){this.entity.unlinkFrom(e.getNodeElement().getNodeName(),e.entity)&&(this.isLinked=this.entity.isLinked(),this.nodeElement?.template.linksChanged(),t&&this.blueprint.getLink(this,e)?.remove())}unlinkFromAll(){const e=this.getLinks().length;this.getLinks().map((e=>this.blueprint.getPin(e))).forEach((e=>this.unlinkFrom(e))),e&&this.nodeElement?.template.linksChanged()}redirectLink(e,t){const i=this.getLinks().findIndex((t=>t.objectName.toString()==e.getNodeElement().getNodeName()&&t.pinGuid.valueOf()==e.entity.PinId.valueOf()));return i>=0&&(this.entity.LinkedTo[i]=t,!0)}}class Li{constructor(e=(e=>e),t=null){this.array=new Uint32Array(t),this.comparisonValueSupplier=e,this.length=0,this.currentPosition=0}get(e){return e>=0&&e=0&&this.currentPosition=0&&this.currentPosition0?this.get(this.currentPosition-1):null}getPrevValue(){return this.currentPosition>0?this.comparisonValueSupplier(this.get(this.currentPosition-1)):Number.MIN_SAFE_INTEGER}shiftLeft(e,t=1){this.array.set(this.array.subarray(e+t),e)}shiftRight(e,t=1){this.array.set(this.array.subarray(e,-t),e+t)}}class Ai{constructor(e,t,i,n){this.initialPosition=e,this.finalPosition=e,this.metadata=new Array(t.length),this.primaryOrder=new Li((e=>this.metadata[e].primaryBoundary)),this.secondaryOrder=new Li((e=>this.metadata[e].secondaryBoundary)),this.selectFunc=n,this.rectangles=t,this.primaryOrder.reserve(this.rectangles.length),this.secondaryOrder.reserve(this.rectangles.length),t.forEach(((e,t)=>{let r={primaryBoundary:this.initialPosition[0],secondaryBoundary:this.initialPosition[1],rectangle:t,onSecondaryAxis:!1};this.metadata[t]=r,n(e,!1);const s=i(e);this.initialPosition[1]{if(this.metadata[i].onSecondaryAxis)this.selectFunc(this.rectangles[i],n);else if(n){this.secondaryOrder.insert(i,e[1]);const n=this.metadata[i].secondaryBoundary;Math.sign(e[1]-n)==t[1]&&Math.sign(n-this.initialPosition[1])==t[1]&&this.selectFunc(this.rectangles[i],!0)}else this.selectFunc(this.rectangles[i],!1),this.secondaryOrder.remove(i);this.computeBoundaries(),this.selectTo(e)};e[0]this.boundaries.primaryN.v&&e[0]this.boundaries.primaryP.v&&(++this.primaryOrder.currentPosition,i(this.boundaries.primaryP.i,this.initialPosition[0]{this.selectFunc(this.rectangles[t],i),this.computeBoundaries(),this.selectTo(e)};e[1]this.boundaries.secondaryN.v&&e[1]this.boundaries.secondaryP.v&&(++this.secondaryOrder.currentPosition,n(this.boundaries.secondaryP.i,this.initialPosition[1]Bi.#kt[e],toAttribute:(e,t)=>Object.entries(Bi.#kt).find((([t,i])=>e.constructor===i))?.[0]}}};static newObject(e={},t=e.type??new fi){const i=new Bi;return i.initialize(e,t),i}initialize(e={},t=e.type??new fi){e.windowOptions??={},this.type=e.type,this.windowOptions=e.windowOptions,super.initialize(e,t)}computeSizes(){const e=this.getBoundingClientRect();this.sizeX=e.width,this.sizeY=e.height}cleanup(){super.cleanup(),this.acknowledgeClose()}acknowledgeClose(){let e=new CustomEvent(se.windowCloseEventName);this.dispatchEvent(e)}}class Ii extends Ye{#Lt;constructor(e,t){super(t),this.#Lt=e}doWrite(e,t,i=""){return this.#Lt(e,t)}}class $i extends fe{static attributes={...super.attributes,TerminalCategory:{type:String},TerminalSubCategory:{type:String},bTerminalIsConst:{type:Boolean},bTerminalIsWeakPointer:{type:Boolean},bTerminalIsUObjectWrapper:{type:Boolean}};static{this.cleanupAttributes(this.attributes)}constructor(e){super(e),this.TerminalCategory,this.TerminalSubCategory,this.bTerminalIsConst,this.bTerminalIsWeakPointer,this.bTerminalIsUObjectWrapper}}class Gi extends Ye{constructor(e){super(e)}doWrite(e,t,i=""){return t||e.constructor!==String?be.escapeString(e.toString()):`"${be.escapeString(e.toString())}"`}}class Hi extends fe{static attributes={...super.attributes,lookbehind:{default:"",ignored:!0}};static{this.cleanupAttributes(this.attributes)}static grammar=this.createGrammar();static createGrammar(){return he.seq(ye.regexMap(new RegExp(`(${ye.Regex.Path.source}|${ye.Regex.Symbol.source}\\s*)?\\(\\s*`),(e=>e[1]??"")),ye.attributeName.skip(ye.equalSeparation).chain((e=>ye.unknownValue.map((t=>i=>i[e]=t)))).sepBy1(ye.commaSeparation),he.regex(/\s*(?:,\s*)?\)/)).map((([e,t,i])=>{let n={};return e.length&&(n.lookbehind=e),t.forEach((e=>e(n))),new this(n)}))}constructor(e){super(e,!0),this.lookbehind}}ye.unknownValue=he.alt(ye.boolean,we.createGrammar(),Ee.noneReferenceGrammar,ye.null,ye.number,ye.string,Ee.fullReferenceGrammar,Ie.createGrammar(),Be.createGrammar(),$e.createGrammar(),Oe.createGrammar(),je.createGrammar(),ze.createGrammar(),Ne.createGrammar(),Ve.createGrammar(),Hi.createGrammar(),Ae.createGrammar(),ye.grammarFor(void 0,[Oe]),ye.grammarFor(void 0,[new ge(Number,String,Ae)])),me.registerSerializer(null,new Ii(((e,t)=>"()"),null)),me.registerSerializer(Array,new Ii(((e,t)=>`(${e.map((e=>me.getSerializer(be.getType(e)).write(e,t)+",")).join("")})`),Array)),me.registerSerializer(BigInt,new Gi(BigInt)),me.registerSerializer(Boolean,new Ii(((e,t)=>e?t?"true":"True":t?"false":"False"),Boolean)),me.registerSerializer(Le,new Gi(Le)),me.registerSerializer(Pe,new Gi(Pe)),me.registerSerializer(Te,new Gi(Te)),me.registerSerializer(Me,new Gi(Me)),me.registerSerializer($e,new Ii(((e,t)=>e.getLookbehind()+"("+e.value.map((e=>me.getSerializer(be.getType(e)).write(e,t))).join(", ")+")"),$e)),me.registerSerializer(Se,new Ye(Se,Ye.bracketsWrapped)),me.registerSerializer(we,new Gi(we)),me.registerSerializer(Ce,new Gi(Ce)),me.registerSerializer(Ge,new Gi(Ge)),me.registerSerializer(xe,new Gi(xe)),me.registerSerializer(Be,new Ye(Be,((e,t)=>`${e.getLookbehind()}(${t})`),", ",!1,"",(()=>""))),me.registerSerializer(it,new Ye(it,Ye.bracketsWrapped)),me.registerSerializer(Ne,new Ye(Ne,Ye.bracketsWrapped)),me.registerSerializer(Ie,new Ye(Ie,((e,t)=>`${e.getLookbehind()}(${t})`),", ",!1,"",(()=>""))),me.registerSerializer(ke,new Ye(ke,Ye.bracketsWrapped)),me.registerSerializer(le,new Ii(((e,t)=>me.getSerializer(e.getTargetType()).write(e.get(),t)),le)),me.registerSerializer(Number,new Gi(Number)),me.registerSerializer(Xe,new Qe),me.registerSerializer(Ee,new Ii((e=>(e.type??"")+(e.path?e.type?`'"${e.path}"'`:`"${e.path}"`:"")),Ee)),me.registerSerializer(He,new Gi(He)),me.registerSerializer(We,new Ye(We,((e,t)=>`${e.getLookbehind()} (${t})`),",",!0)),me.registerSerializer(Oe,new Ye(Oe,void 0," ",!1,"",(()=>""))),me.registerSerializer($i,new Ye($i,Ye.bracketsWrapped)),me.registerSerializer(Re,new Ii(((e,t)=>`X=${e.X} Y=${e.Y}`),Re)),me.registerSerializer(ze,new Ye(ze,Ye.bracketsWrapped)),me.registerSerializer(String,new Ii(((e,t)=>t?be.escapeString(e):`"${be.escapeString(e)}"`),String)),me.registerSerializer(_e,new Ii(((e,t)=>`${e.P}, ${e.Y}, ${e.R}`),_e)),me.registerSerializer(Fe,new Ii(((e,t)=>`${e.X}, ${e.Y}`),Fe)),me.registerSerializer(Ue,new Ii(((e,t)=>`${e.X}, ${e.Y}, ${e.Z}`),Ue)),me.registerSerializer(Ae,new Gi(Ae)),me.registerSerializer(Hi,new Ye(Hi,((e,t)=>`${e.getLookbehind()??""}(${t})`))),me.registerSerializer(Ze,new Ye(Ze,Ye.bracketsWrapped)),me.registerSerializer(Ve,new Ye(Ve,Ye.bracketsWrapped)),me.registerSerializer(je,new Ye(je,Ye.bracketsWrapped)),function(){const e=(e,t)=>{customElements.define(e,t),mt.registerElement(e,t)};e("ueb-color-handler",Yt),e("ueb-dropdown",ii),e("ueb-input",ri),e("ueb-link",Pt),e("ueb-node",Wt),e("ueb-pin",ki),e("ueb-selector",Ti),e("ueb-ui-slider",Jt),e("ueb-window",Bi)}();export{Kt as Blueprint,se as Configuration,Pt as LinkElement,Wt as NodeElement,be as Utility}; + */const xi="important",Ni=" !"+xi,ki=(e=>(...t)=>({_$litDirective$:e,values:t}))(class extends Pi{constructor(e){var t;if(super(e),e.type!==Ci||"style"!==e.name||(null===(t=e.strings)||void 0===t?void 0:t.length)>2)throw Error("The `styleMap` directive must be used in the `style` attribute and must be the only part in the attribute.")}render(e){return Object.keys(e).reduce(((t,i)=>{const s=e[i];return null==s?t:t+`${i=i.includes("-")?i:i.replace(/(?:^(webkit|moz|ms|o)|)(?=[A-Z])/g,"-$&").toLowerCase()}:${s};`}),"")}update(e,[t]){const{style:i}=e.element;if(void 0===this.ht){this.ht=new Set;for(const e in t)this.ht.add(e);return this.render(t)}this.ht.forEach((e=>{null==t[e]&&(this.ht.delete(e),e.includes("-")?i.removeProperty(e):i[e]="")}));for(const e in t){const s=t[e];if(null!=s){this.ht.add(e);const t="string"==typeof s&&s.endsWith(Ni);e.includes("-")||t?i.setProperty(e,t?s.slice(0,-11):s,t?xi:""):i[e]=s}}return D}});class Ai extends Rt{toggleAdvancedDisplayHandler;getDraggableElement(){return this.element.querySelector(".ueb-window-top")}createDraggableObject(){return new Ot(this.element,this.blueprint,{draggableElement:this.getDraggableElement(),ignoreScale:!0,ignoreTranslateCompensate:!1,movementSpace:this.blueprint,stepSize:1})}setup(){const e=this.blueprint.template.gridLeftVisibilityBoundary(),t=this.blueprint.template.gridTopVisibilityBoundary();this.element.locationX=this.blueprint.scaleCorrectReverse(this.blueprint.mousePosition[0]-e),this.element.locationY=this.blueprint.scaleCorrectReverse(this.blueprint.mousePosition[1]-t),this.element.updateComplete.then((()=>{const e=this.blueprint.getBoundingClientRect();this.element.locationX+this.element.sizeX>e.width&&(this.element.locationX=e.width-this.element.sizeX),this.element.locationX=Math.max(0,this.element.locationX),this.element.locationY+this.element.sizeY>e.height&&(this.element.locationY=e.height-this.element.sizeY),this.element.locationY=Math.max(0,this.element.locationY)}))}render(){return O`
${this.renderWindowName()}
${rt.close}
${this.renderContent()}
`}renderWindowName(){return O`Window`}renderContent(){return O``}apply(){this.element.dispatchEvent(new CustomEvent(ne.windowApplyEventName)),this.element.remove()}cancel(){this.element.dispatchEvent(new CustomEvent(ne.windowCancelEventName)),this.element.remove()}}class Li extends Ai{#ft;#wt;#St;#Et;#Ct;#Pt;#xt;#Nt;#kt;#At;#Lt=e=>{const t=Ae.clearHTMLWhitespace(e.target.innerHTML),i=parseInt(t,16);isNaN(i)||(this.color.setFromRGBANumber(i),this.element.requestUpdate())};#Mt=e=>{const t=Ae.clearHTMLWhitespace(e.target.innerHTML),i=parseInt(t,16);isNaN(i)||(this.color.setFromSRGBANumber(i),this.element.requestUpdate())};#Tt=e=>t=>{"Enter"==t.code&&(t.preventDefault(),e(t))};#It=new Oe;get color(){return this.#It}set color(e){e.toNumber()!=this.color?.toNumber()&&(this.element.requestUpdate("color",this.#It),this.#It=e)}#Bt=new Oe;get fullColor(){return this.#Bt}#$t;get initialColor(){return this.#$t}#Ht=new Oe;#Gt(e,t,i=!1){const s=this.color.toRGBAString(),r=`${s.substring(0,2*e)}${t}${s.substring(2+2*e)}`;return i?`${r.substring(0,6)}FF`:r}initialize(e){super.initialize(e),this.#$t=this.element.windowOptions.getPinColor(),this.color.setFromHSVA(this.initialColor.H.value,this.initialColor.S.value,this.initialColor.V.value,this.initialColor.A.value),this.fullColor.setFromHSVA(this.color.H.value,1,1,1)}firstUpdated(e){this.#ft=this.element.querySelector(".ueb-color-picker-wheel ueb-color-handler"),this.#wt=this.element.querySelector(".ueb-color-picker-saturation ueb-ui-slider"),this.#St=this.element.querySelector(".ueb-color-picker-value ueb-ui-slider"),this.#Et=this.element.querySelector(".ueb-color-picker-r ueb-ui-slider"),this.#Ct=this.element.querySelector(".ueb-color-picker-g ueb-ui-slider"),this.#Pt=this.element.querySelector(".ueb-color-picker-b ueb-ui-slider"),this.#xt=this.element.querySelector(".ueb-color-picker-a ueb-ui-slider"),this.#Nt=this.element.querySelector(".ueb-color-picker-h ueb-ui-slider"),this.#kt=this.element.querySelector(".ueb-color-picker-s ueb-ui-slider"),this.#At=this.element.querySelector(".ueb-color-picker-v ueb-ui-slider"),this.#ft.template.locationChangeCallback=(e,t)=>{this.color.setFromWheelLocation(e,t,this.color.V.value,this.color.A.value),this.fullColor.setFromHSVA(this.color.H.value,1,1,1),this.element.requestUpdate()},this.#wt.template.locationChangeCallback=(e,t)=>{this.color.setFromHSVA(this.color.H.value,t,this.color.V.value,this.color.A.value),this.element.requestUpdate()},this.#St.template.locationChangeCallback=(e,t)=>{this.color.setFromHSVA(this.color.H.value,this.color.S.value,t,this.color.A.value),this.element.requestUpdate()},this.#Et.template.locationChangeCallback=(e,t)=>{this.color.setFromRGBA(e,this.color.G.value,this.color.B.value,this.color.A.value),this.element.requestUpdate()},this.#Ct.template.locationChangeCallback=(e,t)=>{this.color.setFromRGBA(this.color.R.value,e,this.color.B.value,this.color.A.value),this.element.requestUpdate()},this.#Pt.template.locationChangeCallback=(e,t)=>{this.color.setFromRGBA(this.color.R.value,this.color.G.value,e,this.color.A.value),this.element.requestUpdate()},this.#xt.template.locationChangeCallback=(e,t)=>{this.color.setFromRGBA(this.color.R.value,this.color.G.value,this.color.B.value,e),this.element.requestUpdate()},this.#Nt.template.locationChangeCallback=(e,t)=>{this.color.setFromHSVA(e,this.color.S.value,this.color.V.value,this.color.A.value),this.element.requestUpdate()},this.#kt.template.locationChangeCallback=(e,t)=>{this.color.setFromHSVA(this.color.H.value,e,this.color.V.value,this.color.A.value),this.element.requestUpdate()},this.#At.template.locationChangeCallback=(e,t)=>{this.color.setFromHSVA(this.color.H.value,this.color.S.value,e,this.color.A.value),this.element.requestUpdate()}}renderSlider(e){let t="",i=0,s="";const r=e=>`linear-gradient(to right, #${this.#Gt(e,"00",!0)}, #${this.#Gt(e,"ff",!0)})`;switch(e){case 0:t="r",i=this.color.R.value,s=r(e);break;case 1:t="g",i=this.color.G.value,s=r(e);break;case 2:t="b",i=this.color.B.value,s=r(e);break;case 3:t="a",i=this.color.A.value,s=`${ne.alphaPattern}, ${r(e)}`;break;case 4:t="h",i=360*this.color.H.value,s="linear-gradient(to right, #f00 0%, #ff0 16.666%, #0f0 33.333%, #0ff 50%, #00f 66.666%, #f0f 83.333%, #f00 100%)";break;case 5:t="s",i=this.color.S.value,s=`linear-gradient(to right,#${this.#Ht.setFromHSVA(this.color.H.value,0,this.color.V.value,1),this.#Ht.toRGBAString()},#${this.#Ht.setFromHSVA(this.color.H.value,1,this.color.V.value,1),this.#Ht.toRGBAString()})`;break;case 6:t="v",i=this.color.V.value,s=`linear-gradient(to right, #000, #${this.fullColor.toRGBAString()})`}return s=`background: ${s};`,O`
${t.toUpperCase()}
`}renderContent(){const e=2*this.color.H.value*Math.PI,t={"--ueb-color-r":this.color.R.toString(),"--ueb-color-g":this.color.G.toString(),"--ueb-color-b":this.color.B.toString(),"--ueb-color-a":this.color.A.toString(),"--ueb-color-h":this.color.H.toString(),"--ueb-color-s":this.color.S.toString(),"--ueb-color-v":this.color.V.toString(),"--ueb-color-wheel-x":100*(this.color.S.value*Math.cos(e)*.5+.5)+"%","--ueb-color-wheel-y":100*(this.color.S.value*Math.sin(e)*.5+.5)+"%"},i=this.color.toRGBAString(),s=this.color.toSRGBAString(),r=this.fullColor.toRGBAString();return O`
Old
New
Advanced
${this.renderSlider(0)} ${this.renderSlider(1)} ${this.renderSlider(2)} ${this.renderSlider(3)}
${this.renderSlider(4)} ${this.renderSlider(5)} ${this.renderSlider(6)}
Hex Linear
Hex sRGB
${ne.windowApplyButtonText}
${ne.windowCancelButtonText}
`}renderWindowName(){return O`${ne.colorWindowName}`}}class Mi extends Xt{#Ot;#Dt=e=>{e.preventDefault(),this.blueprint.setFocused(!0),this.#Ot=xt.getConstructor("ueb-window").newObject({type:new Li,windowOptions:{getPinColor:()=>this.element.defaultValue,setPinColor:e=>this.element.setDefaultValue(e)}}),this.blueprint.append(this.#Ot);const t=()=>{this.element.setDefaultValue(this.#Ot.template.color)},i=()=>{this.#Ot.removeEventListener(ne.windowApplyEventName,t),this.#Ot.removeEventListener(ne.windowCloseEventName,i),this.#Ot=null};this.#Ot.addEventListener(ne.windowApplyEventName,t),this.#Ot.addEventListener(ne.windowCloseEventName,i)};renderInput(){return O``}}class Ti extends vi{static singleLineInput=!0}class Ii extends wi{setDefaultValue(e=[],t=e){this.element.setDefaultValue(e[0])}renderInput(){return O`
`}}class Bi extends Xt{renderIcon(){return rt.referencePin}}class $i extends wi{#Vt(){return Ae.printNumber(this.element.getDefaultValue()?.R??0)}#Rt(){return Ae.printNumber(this.element.getDefaultValue()?.P??0)}#zt(){return Ae.printNumber(this.element.getDefaultValue()?.Y??0)}setDefaultValue(e=[],t=e){const i=this.element.getDefaultValue(!0);if(!(i instanceof Qe))throw new TypeError("Expected DefaultValue to be a RotatorEntity");i.R=e[0],i.P=e[1],i.Y=e[2],this.element.requestUpdate("DefaultValue",i)}renderInput(){return O`
X
Y
Z
`}}class Hi extends vi{}class Gi extends wi{#_t(){return Ae.printNumber(this.element.getDefaultValue()?.X??0)}#zt(){return Ae.printNumber(this.element.getDefaultValue()?.Y??0)}setDefaultValue(e,t){const i=this.element.getDefaultValue(!0);if(!(i instanceof Xe))throw new TypeError("Expected DefaultValue to be a Vector2DEntity");i.X=e[0],i.Y=e[1],this.element.requestUpdate("DefaultValue",i)}renderInput(){return O`
X
Y
`}}class Oi extends wi{#_t(){return Ae.printNumber(this.element.getDefaultValue()?.X??0)}#zt(){return Ae.printNumber(this.element.getDefaultValue()?.Y??0)}#Ft(){return Ae.printNumber(this.element.getDefaultValue()?.Z??0)}setDefaultValue(e,t){const i=this.element.getDefaultValue(!0);if(!(i instanceof tt))throw new TypeError("Expected DefaultValue to be a VectorEntity");i.X=e[0],i.Y=e[1],i.Z=e[2],this.element.requestUpdate("DefaultValue",i)}renderInput(){return O`
X
Y
Z
`}}class Di extends wt{static#jt={bool:bi,byte:Si,enum:yi,int:Si,int64:Ei,MUTABLE_REFERENCE:Bi,name:Ti,rg:Gi,real:Ii,string:Hi,[ne.paths.linearColor]:Mi,[ne.paths.rotator]:$i,[ne.paths.vector]:Oi,[ne.paths.vector2D]:Gi};static properties={pinId:{type:Te,converter:{fromAttribute:(e,t)=>e?Te.grammar.parse(e):null,toAttribute:(e,t)=>e?.toString()},attribute:"data-id",reflect:!0},pinType:{type:String,attribute:"data-type",reflect:!0},advancedView:{type:String,attribute:"data-advanced-view",reflect:!0},color:{type:Oe,converter:{fromAttribute:(e,t)=>e?Oe.getLinearColorFromAnyFormat().parse(e):null,toAttribute:(e,t)=>e?Ae.printLinearColor(e):null},attribute:"data-color",reflect:!0},defaultValue:{type:String,attribute:!1},isLinked:{type:Boolean,converter:Ae.booleanConverter,attribute:"data-linked",reflect:!0},pinDirection:{type:String,attribute:"data-direction",reflect:!0},connectable:{type:Boolean,converter:Ae.booleanConverter,attribute:"data-connectable",reflect:!0}};nodeElement;static getTypeTemplate(e){return"Array"===e.PinType.ContainerType?.toString()?Xt:e.PinType.bIsReference&&!e.PinType.bIsConst?Di.#jt.MUTABLE_REFERENCE:"exec"===e.getType()?fi:(e.isInput()?Di.#jt[e.getType()]:Xt)??Xt}static newObject(e=new st,t=new(Di.getTypeTemplate(e)),i=void 0){const s=new Di;return s.initialize(e,t,i),s}initialize(e=new st,t=new(Di.getTypeTemplate(e)),i=void 0){this.nodeElement=i,this.advancedView=e.bAdvancedView,this.isLinked=!1,this.connectable=!e.bNotConnectable,super.initialize(e,t),this.pinType=this.entity.getType(),this.defaultValue=this.entity.getDefaultValue(),this.color=Di.properties.color.converter.fromAttribute(this.getColor().toString()),this.pinDirection=e.isInput()?"input":e.isOutput()?"output":"hidden"}setup(){super.setup(),this.nodeElement=this.closest("ueb-node")}createPinReference(){return new Ye({objectName:this.nodeElement.getNodeName(),pinGuid:this.getPinId()})}getPinId(){return this.entity.PinId}getPinName(){return this.entity.PinName}getPinDisplayName(){return this.entity.pinDisplayName()}getColor(){return this.entity.pinColor()}isInput(){return this.entity.isInput()}isOutput(){return this.entity.isOutput()}getLinkLocation(){return this.template.getLinkLocation()}getNodeElement(){return this.nodeElement}getLinks(){return this.entity.LinkedTo??[]}getDefaultValue(e=!1){return this.defaultValue=this.entity.getDefaultValue(e)}setDefaultValue(e){this.entity.DefaultValue=e,this.defaultValue=e}sanitizeLinks(e=[]){this.entity.LinkedTo=this.entity.LinkedTo?.filter((t=>{let i=this.blueprint.getPin(t);if(i){if(e.length&&!e.includes(i.nodeElement))return!1;let t=this.blueprint.getLink(this,i);t||(t=xt.getConstructor("ueb-link").newObject(this,i),this.blueprint.addGraphElement(t))}return i})),this.isLinked=this.entity.isLinked()}linkTo(e){const t=this.createPinReference();!this.isLinked||!this.isOutput()||"exec"!==this.pinType&&"exec"!==e.pinType||this.getLinks().some((e=>t.equals(e)))||this.unlinkFromAll(),this.entity.linkTo(e.getNodeElement().getNodeName(),e.entity)&&(this.isLinked=this.entity.isLinked(),this.nodeElement?.template.linksChanged())}unlinkFrom(e,t=!0){this.entity.unlinkFrom(e.getNodeElement().getNodeName(),e.entity)&&(this.isLinked=this.entity.isLinked(),this.nodeElement?.template.linksChanged(),t&&this.blueprint.getLink(this,e)?.remove())}unlinkFromAll(){const e=this.getLinks().length;this.getLinks().map((e=>this.blueprint.getPin(e))).forEach((e=>this.unlinkFrom(e))),e&&this.nodeElement?.template.linksChanged()}redirectLink(e,t){const i=this.getLinks().findIndex((t=>t.objectName.toString()==e.getNodeElement().getNodeName()&&t.pinGuid.valueOf()==e.entity.PinId.valueOf()));return i>=0&&(this.entity.LinkedTo[i]=t,!0)}}class Vi{constructor(e=(e=>e),t=null){this.array=new Uint32Array(t),this.comparisonValueSupplier=e,this.length=0,this.currentPosition=0}get(e){return e>=0&&e=0&&this.currentPosition=0&&this.currentPosition0?this.get(this.currentPosition-1):null}getPrevValue(){return this.currentPosition>0?this.comparisonValueSupplier(this.get(this.currentPosition-1)):Number.MIN_SAFE_INTEGER}shiftLeft(e,t=1){this.array.set(this.array.subarray(e+t),e)}shiftRight(e,t=1){this.array.set(this.array.subarray(e,-t),e+t)}}class Ri{constructor(e,t,i,s){this.initialPosition=e,this.finalPosition=e,this.metadata=new Array(t.length),this.primaryOrder=new Vi((e=>this.metadata[e].primaryBoundary)),this.secondaryOrder=new Vi((e=>this.metadata[e].secondaryBoundary)),this.selectFunc=s,this.rectangles=t,this.primaryOrder.reserve(this.rectangles.length),this.secondaryOrder.reserve(this.rectangles.length),t.forEach(((e,t)=>{let r={primaryBoundary:this.initialPosition[0],secondaryBoundary:this.initialPosition[1],rectangle:t,onSecondaryAxis:!1};this.metadata[t]=r,s(e,!1);const n=i(e);this.initialPosition[1]{if(this.metadata[i].onSecondaryAxis)this.selectFunc(this.rectangles[i],s);else if(s){this.secondaryOrder.insert(i,e[1]);const s=this.metadata[i].secondaryBoundary;Math.sign(e[1]-s)==t[1]&&Math.sign(s-this.initialPosition[1])==t[1]&&this.selectFunc(this.rectangles[i],!0)}else this.selectFunc(this.rectangles[i],!1),this.secondaryOrder.remove(i);this.computeBoundaries(),this.selectTo(e)};e[0]this.boundaries.primaryN.v&&e[0]this.boundaries.primaryP.v&&(++this.primaryOrder.currentPosition,i(this.boundaries.primaryP.i,this.initialPosition[0]{this.selectFunc(this.rectangles[t],i),this.computeBoundaries(),this.selectTo(e)};e[1]this.boundaries.secondaryN.v&&e[1]this.boundaries.secondaryP.v&&(++this.secondaryOrder.currentPosition,s(this.boundaries.secondaryP.i,this.initialPosition[1]Fi.#Ut[e],toAttribute:(e,t)=>Object.entries(Fi.#Ut).find((([t,i])=>e.constructor===i))?.[0]}}};static newObject(e={},t=e.type??new Ai){const i=new Fi;return i.initialize(e,t),i}initialize(e={},t=e.type??new Ai){e.windowOptions??={},this.type=e.type,this.windowOptions=e.windowOptions,super.initialize(e,t)}computeSizes(){const e=this.getBoundingClientRect();this.sizeX=e.width,this.sizeY=e.height}cleanup(){super.cleanup(),this.acknowledgeClose()}acknowledgeClose(){let e=new CustomEvent(ne.windowCloseEventName);this.dispatchEvent(e)}}class ji extends lt{#Wt;constructor(e,t){super(t),this.#Wt=e}doWrite(e,t,i=""){return this.#Wt(e,t)}}class Ui extends Le{static attributes={...super.attributes,TerminalCategory:{type:String},TerminalSubCategory:{type:String},bTerminalIsConst:{type:Boolean},bTerminalIsWeakPointer:{type:Boolean},bTerminalIsUObjectWrapper:{type:Boolean}};static{this.cleanupAttributes(this.attributes)}constructor(e){super(e),this.TerminalCategory,this.TerminalSubCategory,this.bTerminalIsConst,this.bTerminalIsWeakPointer,this.bTerminalIsUObjectWrapper}}class Wi extends lt{constructor(e){super(e)}doWrite(e,t,i=""){return t||e.constructor!==String?Ae.escapeString(e.toString()):`"${Ae.escapeString(e.toString())}"`}}class Ki extends Le{static attributes={...super.attributes,lookbehind:{default:"",ignored:!0}};static{this.cleanupAttributes(this.attributes)}static grammar=this.createGrammar();static createGrammar(){return Pe.seq(Pe.reg(new RegExp(`(${Me.Regex.Path.source}|${Me.Regex.Symbol.source}\\s*)?\\(\\s*`),1),Pe.seq(Me.attributeName,Me.equalSeparation).map((([e,t])=>e)).chain((e=>Me.unknownValue.map((t=>i=>i[e]=t)))).sepBy(Me.commaSeparation),Pe.reg(/\s*(?:,\s*)?\)/)).map((([e,t,i])=>{e??="";let s={};return e.length&&(s.lookbehind=e),t.forEach((e=>e(s))),new this(s)}))}constructor(e){super(e,!0),this.lookbehind}}Me.unknownValue=Pe.alt(Me.boolean,Te.createGrammar(),Ie.noneReferenceGrammar,Me.null,Me.number,Me.string,Ie.fullReferenceGrammar,je.createGrammar(),Fe.createGrammar(),Ue.createGrammar(),Ye.createGrammar(),tt.createGrammar(),Qe.createGrammar(),Oe.createGrammar(),Xe.createGrammar(),Ki.createGrammar(),Re.createGrammar(),Me.grammarFor(void 0,[Ye]),Me.grammarFor(void 0,[new ke(Number,String,Re)])),Ne.registerSerializer(null,new ji(((e,t)=>"()"),null)),Ne.registerSerializer(Array,new ji(((e,t)=>`(${e.map((e=>Ne.getSerializer(Ae.getType(e)).write(e,t)+",")).join("")})`),Array)),Ne.registerSerializer(BigInt,new Wi(BigInt)),Ne.registerSerializer(Boolean,new ji(((e,t)=>e?t?"true":"True":t?"false":"False"),Boolean)),Ne.registerSerializer(Ve,new Wi(Ve)),Ne.registerSerializer(Ge,new Wi(Ge)),Ne.registerSerializer(_e,new Wi(_e)),Ne.registerSerializer(ze,new Wi(ze)),Ne.registerSerializer(Ue,new ji(((e,t)=>e.getLookbehind()+"("+e.value.map((e=>Ne.getSerializer(Ae.getType(e)).write(e,t))).join(", ")+")"),Ue)),Ne.registerSerializer(Be,new lt(Be,lt.bracketsWrapped)),Ne.registerSerializer(Te,new Wi(Te)),Ne.registerSerializer($e,new Wi($e)),Ne.registerSerializer(We,new Wi(We)),Ne.registerSerializer(He,new Wi(He)),Ne.registerSerializer(Fe,new lt(Fe,((e,t)=>`${e.getLookbehind()}(${t})`),", ",!1,"",(()=>""))),Ne.registerSerializer(dt,new lt(dt,lt.bracketsWrapped)),Ne.registerSerializer(Oe,new lt(Oe,lt.bracketsWrapped)),Ne.registerSerializer(je,new lt(je,((e,t)=>`${e.getLookbehind()}(${t})`),", ",!1,"",(()=>""))),Ne.registerSerializer(De,new lt(De,lt.bracketsWrapped)),Ne.registerSerializer(le,new ji(((e,t)=>Ne.getSerializer(e.getTargetType()).write(e.get(),t)),le)),Ne.registerSerializer(Number,new Wi(Number)),Ne.registerSerializer(ot,new ct),Ne.registerSerializer(Ie,new ji((e=>(e.type??"")+(e.path?e.type?`'"${e.path}"'`:`"${e.path}"`:"")),Ie)),Ne.registerSerializer(Ke,new Wi(Ke)),Ne.registerSerializer(st,new lt(st,((e,t)=>`${e.getLookbehind()} (${t})`),",",!0)),Ne.registerSerializer(Ye,new lt(Ye,void 0," ",!1,"",(()=>""))),Ne.registerSerializer(Ui,new lt(Ui,lt.bracketsWrapped)),Ne.registerSerializer(qe,new ji(((e,t)=>`X=${e.X} Y=${e.Y}`),qe)),Ne.registerSerializer(Qe,new lt(Qe,lt.bracketsWrapped)),Ne.registerSerializer(String,new ji(((e,t)=>t?Ae.escapeString(e):`"${Ae.escapeString(e)}"`),String)),Ne.registerSerializer(Je,new ji(((e,t)=>`${e.P}, ${e.Y}, ${e.R}`),Je)),Ne.registerSerializer(et,new ji(((e,t)=>`${e.X}, ${e.Y}`),et)),Ne.registerSerializer(it,new ji(((e,t)=>`${e.X}, ${e.Y}, ${e.Z}`),it)),Ne.registerSerializer(Re,new Wi(Re)),Ne.registerSerializer(Ki,new lt(Ki,((e,t)=>`${e.getLookbehind()??""}(${t})`))),Ne.registerSerializer(at,new lt(at,lt.bracketsWrapped)),Ne.registerSerializer(Xe,new lt(Xe,lt.bracketsWrapped)),Ne.registerSerializer(tt,new lt(tt,lt.bracketsWrapped)),function(){const e=(e,t)=>{customElements.define(e,t),xt.registerElement(e,t)};e("ueb-color-handler",li),e("ueb-dropdown",di),e("ueb-input",gi),e("ueb-link",Gt),e("ueb-node",si),e("ueb-pin",Di),e("ueb-selector",_i),e("ueb-ui-slider",ui),e("ueb-window",Fi)}();export{ri as Blueprint,ne as Configuration,Gt as LinkElement,si as NodeElement,Ae as Utility}; diff --git a/js/Blueprint.js b/js/Blueprint.js index 670ffca..492b3d7 100755 --- a/js/Blueprint.js +++ b/js/Blueprint.js @@ -80,7 +80,9 @@ export default class Blueprint extends IElement { nodes = [] /** @type {LinkElement[]}" */ links = [] - /** @type {Number[]} */ + /** @type {Map} */ + nodesNames = new Map() + /** @type {Coordinates} */ mousePosition = [0, 0] waitingExpandUpdate = false diff --git a/js/Configuration.js b/js/Configuration.js index 03c0591..df8d83a 100755 --- a/js/Configuration.js +++ b/js/Configuration.js @@ -52,15 +52,16 @@ export default class Configuration { static linkCurveWidth = 80 // px static linkMinWidth = 100 // px static nameRegexSpaceReplacement = new RegExp( - // Leading K2_ or K2Node_ + // Leading K2_ or K2Node_ is removed "^K2(?:[Nn]ode)?_" - // End of a word (lower case followed by either upper case or number) + // End of a word (lower case followed by either upper case or number): "AlphaBravo" => "Alpha Bravo" + "|(?<=[a-z])(?=[A-Z0-9])" - // End of upper case work (upper case followed by either word or number) + // End of upper case word (upper case followed by either word or number) + "|(?<=[A-Z])" + /* Except "UVs" */ "(?} + * @returns {AttributeConstructor} */ static getType(value) { if (value === null) { return null } if (value?.constructor === Object && /** @type {AttributeInformation} */(value)?.type instanceof Function) { - // @ts-expect-error return /** @type {AttributeInformation} */(value).type } - return /** @type {SimpleValueType} */(value?.constructor) + return /** @type {AttributeConstructor} */(value?.constructor) } /** - * @template {SimpleValue} V - * @template {SimpleValueType} C + * @template {Attribute} V + * @template {AttributeConstructor} C * @param {C} type * @returns {value is InstanceType} */ @@ -244,8 +238,8 @@ export default class Utility { return (acceptNull && value === null) || value instanceof type || value?.constructor === type } - /** @param {AnyValue | Object} value */ - static sanitize(value, targetType = /** @type {SimpleValueType} */(value?.constructor)) { + /** @param {Attribute} value */ + static sanitize(value, targetType = /** @type {AttributeTypeDescription } */(value?.constructor)) { if (targetType instanceof Array) { targetType = targetType[0] } @@ -271,7 +265,7 @@ export default class Utility { : new /** @type {EntityConstructor} */(targetType)(value) } if (value instanceof Boolean || value instanceof Number || value instanceof String) { - value = /** @type {AnyValue} */(value.valueOf()) // Get the relative primitive value + value = /** @type {TerminalAttribute} */(value.valueOf()) // Get the relative primitive value } return value } @@ -280,7 +274,7 @@ export default class Utility { * @param {Number} x * @param {Number} y * @param {Number} gridSize - * @returns {[Number, Number]} + * @returns {Coordinates} */ static snapToGrid(x, y, gridSize) { if (gridSize === 1) { @@ -397,7 +391,7 @@ export default class Utility { /** * @param {Number} x * @param {Number} y - * @returns {[Number, Number]} + * @returns {Coordinates} */ static getPolarCoordinates(x, y, positiveTheta = false) { let theta = Math.atan2(y, x) @@ -413,7 +407,7 @@ export default class Utility { /** * @param {Number} r * @param {Number} theta - * @returns {[Number, Number]} + * @returns {Coordinates} */ static getCartesianCoordinates(r, theta) { return [ diff --git a/js/element/IDraggableElement.js b/js/element/IDraggableElement.js index 93f0454..519d32e 100644 --- a/js/element/IDraggableElement.js +++ b/js/element/IDraggableElement.js @@ -83,7 +83,7 @@ export default class IDraggableElement extends IElement { this.setLocation(this.locationX + x, this.locationY + y, acknowledge) } - /** @param {Number[]} value */ + /** @param {Coordinates} value */ acknowledgeDrag(value) { const dragEvent = new CustomEvent( /** @type {typeof IDraggableElement} */(this.constructor).dragGeneralEventName, diff --git a/js/element/IFromToPositionedElement.js b/js/element/IFromToPositionedElement.js index 68fee74..c3555f9 100644 --- a/js/element/IFromToPositionedElement.js +++ b/js/element/IFromToPositionedElement.js @@ -35,7 +35,7 @@ export default class IFromToPositionedElement extends IElement { this.toY = 0 } - /** @param {Number[]} param0 */ + /** @param {Coordinates} param0 */ setBothLocations([x, y]) { this.fromX = x this.fromY = y diff --git a/js/element/LinkElement.js b/js/element/LinkElement.js index 0cb1699..2cacc8d 100644 --- a/js/element/LinkElement.js +++ b/js/element/LinkElement.js @@ -174,7 +174,7 @@ export default class LinkElement extends IFromToPositionedElement { this.destination = null } - /** @param {Number[]?} location */ + /** @param {Coordinates} location */ setSourceLocation(location = null, canPostpone = true) { if (location == null) { const self = this @@ -190,7 +190,7 @@ export default class LinkElement extends IFromToPositionedElement { this.fromY = y } - /** @param {Number[]?} location */ + /** @param {Coordinates} location */ setDestinationLocation(location = null, canPostpone = true) { if (location == null) { const self = this diff --git a/js/element/PinElement.js b/js/element/PinElement.js index af60f9b..5d5afb5 100644 --- a/js/element/PinElement.js +++ b/js/element/PinElement.js @@ -22,7 +22,7 @@ import Vector2DPinTemplate from "../template/pin/Vector2DPinTemplate.js" import VectorPinTemplate from "../template/pin/VectorPinTemplate.js" /** - * @template {AnyValue} T + * @template {TerminalAttribute} T * @extends {IElement, PinTemplate>} */ export default class PinElement extends IElement { @@ -49,9 +49,9 @@ export default class PinElement extends IElement { type: GuidEntity, converter: { fromAttribute: (value, type) => value - ? /** @type {Success} */(GuidEntity.grammar.parse(value)).value + ? GuidEntity.grammar.parse(value) : null, - toAttribute: (value, type) => value?.toString(), + toAttribute: (value, type) => /** @type {String} */(value?.toString()), }, attribute: "data-id", reflect: true, @@ -70,7 +70,7 @@ export default class PinElement extends IElement { type: LinearColorEntity, converter: { fromAttribute: (value, type) => value - ? /** @type {Success} */(LinearColorEntity.getLinearColorFromAnyFormat().parse(value)).value + ? LinearColorEntity.getLinearColorFromAnyFormat().parse(value) : null, toAttribute: (value, type) => value ? Utility.printLinearColor(value) : null, }, diff --git a/js/element/SelectorElement.js b/js/element/SelectorElement.js index 204fb81..6ecab10 100644 --- a/js/element/SelectorElement.js +++ b/js/element/SelectorElement.js @@ -21,7 +21,7 @@ export default class SelectorElement extends IFromToPositionedElement { // Initialized in the constructor, this method does nothing } - /** @param {Number[]} initialPosition */ + /** @param {Coordinates} initialPosition */ beginSelect(initialPosition) { const blueprintConstructor = /** @type {BlueprintConstructor} */(this.blueprint.constructor) this.blueprint.selecting = true @@ -34,7 +34,7 @@ export default class SelectorElement extends IFromToPositionedElement { ) } - /** @param {Number[]} finalPosition */ + /** @param {Coordinates} finalPosition */ selectTo(finalPosition) { this.selectionModel.selectTo(finalPosition) this.toX = finalPosition[0] diff --git a/js/entity/ByteEntity.js b/js/entity/ByteEntity.js index 44e4c7e..0c05018 100755 --- a/js/entity/ByteEntity.js +++ b/js/entity/ByteEntity.js @@ -1,5 +1,5 @@ import IntegerEntity from "./IntegerEntity.js" -import Grammar from "../serialization/Grammar.js" +import Parsernostrum from "parsernostrum" export default class ByteEntity extends IntegerEntity { @@ -16,7 +16,7 @@ export default class ByteEntity extends IntegerEntity { static grammar = this.createGrammar() static createGrammar() { - return Grammar.byteNumber.map(v => new this(v)) + return Parsernostrum.numberByte.map(v => new this(v)) } constructor(values = 0) { diff --git a/js/entity/ColorChannelEntity.js b/js/entity/ColorChannelEntity.js index 49d2a4e..e4fc328 100644 --- a/js/entity/ColorChannelEntity.js +++ b/js/entity/ColorChannelEntity.js @@ -1,5 +1,5 @@ -import Grammar from "../serialization/Grammar.js" import IEntity from "./IEntity.js" +import Parsernostrum from "parsernostrum" export default class ColorChannelEntity extends IEntity { @@ -15,7 +15,7 @@ export default class ColorChannelEntity extends IEntity { static grammar = this.createGrammar() static createGrammar() { - return Grammar.number.map(value => new this(value)) + return Parsernostrum.number.map(value => new this(value)) } constructor(values = 0) { diff --git a/js/entity/EnumDisplayValueEntity.js b/js/entity/EnumDisplayValueEntity.js index dc9552b..6968838 100755 --- a/js/entity/EnumDisplayValueEntity.js +++ b/js/entity/EnumDisplayValueEntity.js @@ -1,12 +1,12 @@ import EnumEntity from "./EnumEntity.js" import Grammar from "../serialization/Grammar.js" -import Parsimmon from "parsimmon" +import Parsernostrum from "parsernostrum" export default class EnumDisplayValueEntity extends EnumEntity { static grammar = this.createGrammar() static createGrammar() { - return Parsimmon.regex(Grammar.Regex.InsideString).map(v => new this(v)) + return Parsernostrum.reg(Grammar.Regex.InsideString).map(v => new this(v)) } } diff --git a/js/entity/FormatTextEntity.js b/js/entity/FormatTextEntity.js index 85ec615..d5e3e84 100644 --- a/js/entity/FormatTextEntity.js +++ b/js/entity/FormatTextEntity.js @@ -2,7 +2,7 @@ import Grammar from "../serialization/Grammar.js" import IEntity from "./IEntity.js" import InvariantTextEntity from "./InvariantTextEntity.js" import LocalizedTextEntity from "./LocalizedTextEntity.js" -import Parsimmon from "parsimmon" +import Parsernostrum from "parsernostrum" import Union from "./Union.js" export default class FormatTextEntity extends IEntity { @@ -21,23 +21,21 @@ export default class FormatTextEntity extends IEntity { static grammar = this.createGrammar() static createGrammar() { - return Parsimmon.lazy(() => - Parsimmon.seq( - Grammar.regexMap( - // Resulting regex: /(LOCGEN_FORMAT_NAMED|LOCGEN_FORMAT_ORDERED)\s*/ - new RegExp(`(${this.lookbehind.values.reduce((acc, cur) => acc + "|" + cur)})\\s*`), - result => result[1] - ), - Grammar.grammarFor(this.attributes.value) - ) - .map(([lookbehind, values]) => { - const result = new this({ - value: values, - }) - result.lookbehind = lookbehind - return result - }) + return Parsernostrum.seq( + Parsernostrum.reg( + // Resulting regex: /(LOCGEN_FORMAT_NAMED|LOCGEN_FORMAT_ORDERED)\s*/ + new RegExp(`(${this.lookbehind.values.reduce((acc, cur) => acc + "|" + cur)})\\s*`), + 1 + ), + Grammar.grammarFor(this.attributes.value) ) + .map(([lookbehind, values]) => { + const result = new this({ + value: values, + }) + result.lookbehind = lookbehind + return result + }) } constructor(values) { diff --git a/js/entity/IEntity.js b/js/entity/IEntity.js index a8d8cb3..a28fee1 100644 --- a/js/entity/IEntity.js +++ b/js/entity/IEntity.js @@ -1,10 +1,12 @@ import ComputedType from "./ComputedType.js" +import Configuration from "../Configuration.js" import MirroredEntity from "./MirroredEntity.js" import Serializable from "../serialization/Serializable.js" import SerializerFactory from "../serialization/SerializerFactory.js" import Union from "./Union.js" import Utility from "../Utility.js" +/** @abstract */ export default class IEntity extends Serializable { /** @type {String | Union} */ @@ -31,7 +33,7 @@ export default class IEntity extends Serializable { let attributes = Self.attributes if (values.attributes) { attributes = { ...Self.attributes } - Utility.mergeArrays(Object.keys(attributes), Object.keys(values.attributes)) + Utility.mergeArrays(Object.keys(values.attributes), Object.keys(attributes)) .forEach(k => { attributes[k] = { ...IEntity.defaultAttribute, @@ -55,13 +57,17 @@ export default class IEntity extends Serializable { } for (const attributeName of allAttributesNames) { if (attributeName == "attributes") { + // Ignore this special attribute describing all the attributes continue } let value = values[attributeName] let attribute = attributes[attributeName] if (!suppressWarns && value !== undefined) { - if (!(attributeName in attributes) && !attributeName.startsWith("#SubObject")) { + if ( + !(attributeName in attributes) + && !attributeName.startsWith(Configuration.subObjectAttributeNamePrefix) + ) { const typeName = value instanceof Array ? `[${value[0]?.constructor.name}]` : value.constructor.name console.warn( `UEBlueprint: Attribute ${attributeName} (of type ${typeName}) in the serialized data is not ` @@ -128,7 +134,7 @@ export default class IEntity extends Serializable { .getSerializer(defaultType) .read(/** @type {String} */(value)) } - assignAttribute(Utility.sanitize(value, /** @type {SimpleValueType} */(defaultType))) + assignAttribute(Utility.sanitize(value, /** @type {AttributeConstructor} */(defaultType))) continue // We have a value, need nothing more } if (Object.hasOwn(attribute, "default")) { // Accept also explicit undefined @@ -137,7 +143,7 @@ export default class IEntity extends Serializable { } } - /** @param {AttributeType} attributeType */ + /** @param {AttributeTypeDescription} attributeType */ static defaultValueProviderFromType(attributeType) { if (attributeType === Boolean) { return false @@ -152,12 +158,11 @@ export default class IEntity extends Serializable { } else if (attributeType instanceof Union) { return this.defaultValueProviderFromType(attributeType.values[0]) } else if (attributeType instanceof MirroredEntity) { - return () => new MirroredEntity(attributeType.type, attributeType.key, attributeType.getter) + return () => new MirroredEntity(attributeType.type, attributeType.getter) } else if (attributeType instanceof ComputedType) { return undefined } else { - // @ts-expect-error - return () => new attributeType() + return () => new /** @type {AnyConstructor} */(attributeType)() } } @@ -205,6 +210,7 @@ export default class IEntity extends Serializable { return this.getAttributes(object)[attribute] } + /** @returns {AttributeDeclarations} */ static getAttributes(object) { return object.attributes ?? object.constructor?.attributes ?? {} } diff --git a/js/entity/Integer64Entity.js b/js/entity/Integer64Entity.js index 518d3a4..f5228c2 100755 --- a/js/entity/Integer64Entity.js +++ b/js/entity/Integer64Entity.js @@ -1,5 +1,5 @@ -import Grammar from "../serialization/Grammar.js" import IEntity from "./IEntity.js" +import Parsernostrum from "parsernostrum" export default class Integer64Entity extends IEntity { @@ -16,7 +16,7 @@ export default class Integer64Entity extends IEntity { static grammar = this.createGrammar() static createGrammar() { - return Grammar.bigInt.map(v => new this(v)) + return Parsernostrum.numberBigInteger.map(v => new this(v)) } /** @param {BigInt | Number} value */ diff --git a/js/entity/IntegerEntity.js b/js/entity/IntegerEntity.js index b92558c..5ef770c 100755 --- a/js/entity/IntegerEntity.js +++ b/js/entity/IntegerEntity.js @@ -1,5 +1,5 @@ -import Grammar from "../serialization/Grammar.js" import IEntity from "./IEntity.js" +import Parsernostrum from "parsernostrum" export default class IntegerEntity extends IEntity { @@ -16,11 +16,14 @@ export default class IntegerEntity extends IEntity { static grammar = this.createGrammar() static createGrammar() { - return Grammar.integer.map(v => new this(v)) + return Parsernostrum.numberInteger.map(v => new this(v)) } /** @param {Number | AttributeInformation} value */ constructor(value = 0) { + if (value === -0) { + value = 0 + } super(value.constructor === Object ? value : { diff --git a/js/entity/InvariantTextEntity.js b/js/entity/InvariantTextEntity.js index 4736002..51912de 100644 --- a/js/entity/InvariantTextEntity.js +++ b/js/entity/InvariantTextEntity.js @@ -1,6 +1,6 @@ import Grammar from "../serialization/Grammar.js" import IEntity from "./IEntity.js" -import Parsimmon from "parsimmon" +import Parsernostrum from "parsernostrum" export default class InvariantTextEntity extends IEntity { @@ -17,14 +17,14 @@ export default class InvariantTextEntity extends IEntity { static grammar = this.createGrammar() static createGrammar() { - return Parsimmon.alt( - Parsimmon.seq( - Parsimmon.regex(new RegExp(`${this.lookbehind}\\s*\\(`)), + return Parsernostrum.alt( + Parsernostrum.seq( + Parsernostrum.reg(new RegExp(`${this.lookbehind}\\s*\\(`)), Grammar.grammarFor(this.attributes.value), - Parsimmon.regex(/\s*\)/) + Parsernostrum.reg(/\s*\)/) ) .map(([_0, value, _2]) => value), - Parsimmon.regex(new RegExp(this.lookbehind)) // InvariantTextEntity can not have arguments + Parsernostrum.reg(new RegExp(this.lookbehind)) // InvariantTextEntity can not have arguments .map(() => "") ).map(value => new this(value)) } diff --git a/js/entity/KeyBindingEntity.js b/js/entity/KeyBindingEntity.js index 185757d..0be0616 100644 --- a/js/entity/KeyBindingEntity.js +++ b/js/entity/KeyBindingEntity.js @@ -1,7 +1,7 @@ import Grammar from "../serialization/Grammar.js" import IdentifierEntity from "./IdentifierEntity.js" import IEntity from "./IEntity.js" -import Parsimmon from "parsimmon" +import Parsernostrum from "parsernostrum" export default class KeyBindingEntity extends IEntity { @@ -32,7 +32,7 @@ export default class KeyBindingEntity extends IEntity { static grammar = this.createGrammar() static createGrammar() { - return Parsimmon.alt( + return Parsernostrum.alt( IdentifierEntity.grammar.map(identifier => new this({ Key: identifier })), diff --git a/js/entity/LinearColorEntity.js b/js/entity/LinearColorEntity.js index e6301be..47d211a 100644 --- a/js/entity/LinearColorEntity.js +++ b/js/entity/LinearColorEntity.js @@ -2,7 +2,7 @@ import { css } from "lit" import ColorChannelEntity from "./ColorChannelEntity.js" import Grammar from "../serialization/Grammar.js" import IEntity from "./IEntity.js" -import Parsimmon from "parsimmon" +import Parsernostrum from "parsernostrum" import Utility from "../Utility.js" export default class LinearColorEntity extends IEntity { @@ -88,29 +88,26 @@ export default class LinearColorEntity extends IEntity { } static getLinearColorFromHexGrammar() { - return Grammar.regexMap(new RegExp( - `#(${Grammar.Regex.HexDigit.source - }{2})(${Grammar.Regex.HexDigit.source - }{2})(${Grammar.Regex.HexDigit.source - }{2})(${Grammar.Regex.HexDigit.source - }{2})?` - ), - v => [v[1], v[2], v[3], v[4] ?? "FF"]) - .map(([R, G, B, A]) => new this({ - R: parseInt(R, 16) / 255, - G: parseInt(G, 16) / 255, - B: parseInt(B, 16) / 255, - A: parseInt(A, 16) / 255, - })) + return Parsernostrum.regArray(new RegExp( + "#(" + Grammar.Regex.HexDigit.source + "{2})" + + "(" + Grammar.Regex.HexDigit.source + "{2})" + + "(" + Grammar.Regex.HexDigit.source + "{2})" + + "(" + Grammar.Regex.HexDigit.source + "{2})?" + )).map(([m, R, G, B, A]) => new this({ + R: parseInt(R, 16) / 255, + G: parseInt(G, 16) / 255, + B: parseInt(B, 16) / 255, + A: parseInt(A ?? "FF", 16) / 255, + })) } static getLinearColorRGBListGrammar() { - return Parsimmon.seq( - Grammar.byteNumber, + return Parsernostrum.seq( + Parsernostrum.numberByte, Grammar.commaSeparation, - Grammar.byteNumber, + Parsernostrum.numberByte, Grammar.commaSeparation, - Grammar.byteNumber, + Parsernostrum.numberByte, ).map(([R, _1, G, _3, B]) => new this({ R: R / 255, G: G / 255, @@ -120,25 +117,23 @@ export default class LinearColorEntity extends IEntity { } static getLinearColorRGBGrammar() { - return Parsimmon.seq( - Parsimmon.regex(/rgb\s*\(\s*/), + return Parsernostrum.seq( + Parsernostrum.reg(/rgb\s*\(\s*/), this.getLinearColorRGBListGrammar(), - Parsimmon.regex(/\s*\)/) - ) - .map(([_0, linearColor, _2]) => linearColor) + Parsernostrum.reg(/\s*\)/) + ).map(([_0, linearColor, _2]) => linearColor) } static getLinearColorRGBAGrammar() { - return Parsimmon.seq( - Parsimmon.regex(/rgba\s*\(\s*/), + return Parsernostrum.seq( + Parsernostrum.reg(/rgba\s*\(\s*/), this.getLinearColorRGBListGrammar(), - Parsimmon.regex(/\s*\)/) - ) - .map(([_0, linearColor, _2]) => linearColor) + Parsernostrum.reg(/\s*\)/) + ).map(([_0, linearColor, _2]) => linearColor) } static getLinearColorFromAnyFormat() { - return Parsimmon.alt( + return Parsernostrum.alt( this.getLinearColorFromHexGrammar(), this.getLinearColorRGBAGrammar(), this.getLinearColorRGBGrammar(), @@ -327,6 +322,11 @@ export default class LinearColorEntity extends IEntity { this.#updateHSV() } + /** @returns {[Number, Number, Number, Number]} */ + toArray() { + return [this.R.value, this.G.value, this.B.value, this.A.value] + } + toString() { return Utility.printLinearColor(this) } diff --git a/js/entity/LocalizedTextEntity.js b/js/entity/LocalizedTextEntity.js index 8eaee7d..aa0137b 100755 --- a/js/entity/LocalizedTextEntity.js +++ b/js/entity/LocalizedTextEntity.js @@ -1,5 +1,6 @@ import Grammar from "../serialization/Grammar.js" import IEntity from "./IEntity.js" +import Parsernostrum from "parsernostrum" import Utility from "../Utility.js" export default class LocalizedTextEntity extends IEntity { @@ -23,22 +24,19 @@ export default class LocalizedTextEntity extends IEntity { static grammar = this.createGrammar() static createGrammar() { - return Grammar.regexMap( - new RegExp( - String.raw`${this.lookbehind}\s*\(` - + String.raw`\s*"(${Grammar.Regex.InsideString.source})"\s*,` - + String.raw`\s*"(${Grammar.Regex.InsideString.source})"\s*,` - + String.raw`\s*"(${Grammar.Regex.InsideString.source})"\s*` - + String.raw`(?:,\s+)?` - + String.raw`\)`, - "m" - ), - matchResult => new this({ - namespace: Utility.unescapeString(matchResult[1]), - key: Utility.unescapeString(matchResult[2]), - value: Utility.unescapeString(matchResult[3]), - }) - ) + return Parsernostrum.regArray(new RegExp( + String.raw`${this.lookbehind}\s*\(` + + String.raw`\s*"(${Grammar.Regex.InsideString.source})"\s*,` + + String.raw`\s*"(${Grammar.Regex.InsideString.source})"\s*,` + + String.raw`\s*"(${Grammar.Regex.InsideString.source})"\s*` + + String.raw`(?:,\s+)?` + + String.raw`\)`, + "m" + )).map(matchResult => new this({ + namespace: Utility.unescapeString(matchResult[1]), + key: Utility.unescapeString(matchResult[2]), + value: Utility.unescapeString(matchResult[3]), + })) } constructor(values) { diff --git a/js/entity/MirroredEntity.js b/js/entity/MirroredEntity.js index aa761ff..b8427f9 100644 --- a/js/entity/MirroredEntity.js +++ b/js/entity/MirroredEntity.js @@ -1,24 +1,21 @@ +/** @template {Attribute} T */ export default class MirroredEntity { static attributes = { type: { ignored: true, }, - key: { - ignored: true, - }, getter: { ignored: true, }, } /** - * @param {EntityConstructor} type - * @param {String} key + * @param {ConstructorType} type + * @param {() => T} getter */ - constructor(type, key, getter = () => null) { + constructor(type, getter = null) { this.type = type - this.key = key this.getter = getter } @@ -26,8 +23,9 @@ export default class MirroredEntity { return this.getter() } + /** @returns {AttributeConstructor} */ getTargetType() { - const result = this.type.attributes[this.key].type + const result = this.type if (result instanceof MirroredEntity) { return result.getTargetType() } diff --git a/js/entity/NaturalNumberEntity.js b/js/entity/NaturalNumberEntity.js index 8ddcab1..a53a6b9 100755 --- a/js/entity/NaturalNumberEntity.js +++ b/js/entity/NaturalNumberEntity.js @@ -1,5 +1,5 @@ -import Grammar from "../serialization/Grammar.js" import IntegerEntity from "./IntegerEntity.js" +import Parsernostrum from "parsernostrum" import Utility from "../Utility.js" export default class NaturalNumberEntity extends IntegerEntity { @@ -7,7 +7,7 @@ export default class NaturalNumberEntity extends IntegerEntity { static grammar = this.createGrammar() static createGrammar() { - return Grammar.naturalNumber.map(v => new this(v)) + return Parsernostrum.numberNatural.map(v => new this(v)) } constructor(values = 0) { diff --git a/js/entity/ObjectEntity.js b/js/entity/ObjectEntity.js index 7961456..334143d 100755 --- a/js/entity/ObjectEntity.js +++ b/js/entity/ObjectEntity.js @@ -9,7 +9,7 @@ import LinearColorEntity from "./LinearColorEntity.js" import MacroGraphReferenceEntity from "./MacroGraphReferenceEntity.js" import MirroredEntity from "./MirroredEntity.js" import ObjectReferenceEntity from "./ObjectReferenceEntity.js" -import Parsimmon from "parsimmon" +import Parsernostrum from "parsernostrum" import PinEntity from "./PinEntity.js" import SVGIcon from "../SVGIcon.js" import SymbolEntity from "./SymbolEntity.js" @@ -50,271 +50,115 @@ export default class ObjectEntity extends IEntity { } static attributes = { ...super.attributes, - Class: { - type: ObjectReferenceEntity, + AdvancedPinDisplay: { type: IdentifierEntity }, + Archetype: { type: ObjectReferenceEntity }, + AxisKey: { type: SymbolEntity }, + bAlt: { type: Boolean }, + bCanRenameNode: { type: Boolean }, + bColorCommentBubble: { type: Boolean }, + bCommand: { type: Boolean }, + bCommentBubblePinned: { type: Boolean }, + bCommentBubbleVisible_InDetailsPanel: { type: Boolean }, + bCommentBubbleVisible: { type: Boolean }, + bConsumeInput: { type: Boolean }, + bControl: { type: Boolean }, + bExecuteWhenPaused: { type: Boolean }, + bExposeToLibrary: { type: Boolean }, + bInternalEvent: { type: Boolean }, + bIsCaseSensitive: { type: Boolean }, + bIsConstFunc: { type: Boolean }, + bIsPureFunc: { type: Boolean }, + BlueprintElementInstance: { type: ObjectReferenceEntity }, + BlueprintElementType: { type: ObjectReferenceEntity }, + bOverrideFunction: { type: Boolean }, + bOverrideParentBinding: { type: Boolean }, + bShift: { type: Boolean }, + Class: { type: ObjectReferenceEntity }, + CommentColor: { type: LinearColorEntity }, + ComponentPropertyName: { type: String }, + CustomFunctionName: { type: String }, + CustomProperties: { type: [new Union(PinEntity, UnknownPinEntity)] }, + DelegateOwnerClass: { type: ObjectReferenceEntity }, + DelegatePropertyName: { type: String }, + DelegateReference: { type: VariableReferenceEntity }, + EnabledState: { type: IdentifierEntity }, + Enum: { type: ObjectReferenceEntity }, + EnumEntries: { + type: [String], + inlined: true, }, - Name: { - type: String, + ErrorMsg: { type: String }, + ErrorType: { type: IntegerEntity }, + EventReference: { type: FunctionReferenceEntity }, + ExportPath: { type: ObjectReferenceEntity }, + FunctionReference: { type: FunctionReferenceEntity }, + G: { type: Number }, + Graph: { type: ObjectReferenceEntity }, + HiGenGridSize: { type: SymbolEntity }, + InputAxisKey: { type: SymbolEntity }, + InputKey: { type: SymbolEntity }, + InputPins: { + type: [ObjectReferenceEntity], + inlined: true, }, - Archetype: { - type: ObjectReferenceEntity, + MacroGraphReference: { type: MacroGraphReferenceEntity }, + MaterialExpression: { type: ObjectReferenceEntity }, + MaterialExpressionComment: { type: ObjectReferenceEntity }, + MaterialExpressionEditorX: { type: new MirroredEntity(IntegerEntity) }, + MaterialExpressionEditorY: { type: new MirroredEntity(IntegerEntity) }, + MaterialFunction: { type: ObjectReferenceEntity }, + MoveMode: { type: SymbolEntity }, + Name: { type: String }, + Node: { type: new MirroredEntity(ObjectReferenceEntity) }, + NodeComment: { type: String }, + NodeGuid: { type: GuidEntity }, + NodeHeight: { type: IntegerEntity }, + NodePosX: { type: IntegerEntity }, + NodePosY: { type: IntegerEntity }, + NodeTitle: { type: String }, + NodeTitleColor: { type: LinearColorEntity }, + NodeWidth: { type: IntegerEntity }, + NumAdditionalInputs: { type: Number }, + ObjectRef: { type: ObjectReferenceEntity }, + Operation: { type: SymbolEntity }, + OutputPins: { + type: [ObjectReferenceEntity], + inlined: true, }, - ExportPath: { - type: ObjectReferenceEntity, - }, - ObjectRef: { - type: ObjectReferenceEntity, - }, - BlueprintElementType: { - type: ObjectReferenceEntity - }, - BlueprintElementInstance: { - type: ObjectReferenceEntity + PCGNode: { type: ObjectReferenceEntity }, + PinNames: { + type: [String], + inlined: true, }, PinTags: { type: [null], inlined: true, }, - PinNames: { - type: [String], - inlined: true, - }, - AxisKey: { - type: SymbolEntity, - }, - InputAxisKey: { - type: SymbolEntity, - }, - NumAdditionalInputs: { - type: Number, - }, - bIsPureFunc: { - type: Boolean, - }, - bIsConstFunc: { - type: Boolean, - }, - bIsCaseSensitive: { - type: Boolean, - }, - VariableReference: { - type: VariableReferenceEntity, - }, - SelfContextInfo: { - type: SymbolEntity, - }, - DelegatePropertyName: { - type: String, - }, - DelegateOwnerClass: { - type: ObjectReferenceEntity, - }, - ComponentPropertyName: { - type: String, - }, - EventReference: { - type: FunctionReferenceEntity, - }, - FunctionReference: { - type: FunctionReferenceEntity, - }, - CustomFunctionName: { - type: String, - }, - TargetType: { - type: ObjectReferenceEntity, - }, - MacroGraphReference: { - type: MacroGraphReferenceEntity, - }, - Enum: { - type: ObjectReferenceEntity, - }, - EnumEntries: { - type: [String], - inlined: true, - }, - InputKey: { - type: SymbolEntity, - }, - MaterialFunction: { - type: ObjectReferenceEntity, - }, - bOverrideFunction: { - type: Boolean, - }, - bInternalEvent: { - type: Boolean, - }, - bConsumeInput: { - type: Boolean, - }, - bExecuteWhenPaused: { - type: Boolean, - }, - bOverrideParentBinding: { - type: Boolean, - }, - bControl: { - type: Boolean, - }, - bAlt: { - type: Boolean, - }, - bShift: { - type: Boolean, - }, - bCommand: { - type: Boolean, - }, - CommentColor: { - type: LinearColorEntity, - }, - bCommentBubbleVisible_InDetailsPanel: { - type: Boolean, - }, - bColorCommentBubble: { - type: Boolean, - }, - ProxyFactoryFunctionName: { - type: String, - }, - ProxyFactoryClass: { - type: ObjectReferenceEntity, - }, - ProxyClass: { - type: ObjectReferenceEntity, - }, - R: { - type: Number, - }, - G: { - type: Number, - }, - StructType: { - type: ObjectReferenceEntity, - }, - MaterialExpression: { - type: ObjectReferenceEntity, - }, - MaterialExpressionComment: { - type: ObjectReferenceEntity, - }, - MoveMode: { - type: SymbolEntity, - }, - TimelineName: { - type: String, - }, - TimelineGuid: { - type: GuidEntity, - }, - SizeX: { - type: new MirroredEntity(ObjectEntity, "NodeWidth"), - }, - SizeY: { - type: new MirroredEntity(ObjectEntity, "NodeHeight"), - }, - Text: { - type: new MirroredEntity(ObjectEntity, "NodeComment"), - }, - MaterialExpressionEditorX: { - type: new MirroredEntity(ObjectEntity, "NodePosX"), - }, - MaterialExpressionEditorY: { - type: new MirroredEntity(ObjectEntity, "NodePosY"), - }, - NodeTitle: { - type: String, - }, - NodeTitleColor: { - type: LinearColorEntity, - }, - PositionX: { - type: new MirroredEntity(ObjectEntity, "NodePosX"), - }, - PositionY: { - type: new MirroredEntity(ObjectEntity, "NodePosY"), - }, - PCGNode: { - type: ObjectReferenceEntity, - }, - HiGenGridSize: { - type: SymbolEntity, - }, - Operation: { - type: SymbolEntity, - }, - NodePosX: { - type: IntegerEntity, - }, - NodePosY: { - type: IntegerEntity, - }, - NodeWidth: { - type: IntegerEntity, - }, - NodeHeight: { - type: IntegerEntity, - }, - Graph: { - type: ObjectReferenceEntity, - }, - SubgraphInstance: { - type: String, - }, - SettingsInterface: { - type: ObjectReferenceEntity, - }, - InputPins: { - type: [ObjectReferenceEntity], - inlined: true, - }, - OutputPins: { - type: [ObjectReferenceEntity], - inlined: true, - }, - bExposeToLibrary: { - type: Boolean, - }, - bCanRenameNode: { - type: Boolean, - }, - bCommentBubblePinned: { - type: Boolean, - }, - bCommentBubbleVisible: { - type: Boolean, - }, - NodeComment: { - type: String, - }, - AdvancedPinDisplay: { - type: IdentifierEntity, - }, - EnabledState: { - type: IdentifierEntity, - }, - NodeGuid: { - type: GuidEntity, - }, - ErrorType: { - type: IntegerEntity, - }, - ErrorMsg: { - type: String, - }, - CustomProperties: { - type: [new Union(PinEntity, UnknownPinEntity)], - } + PositionX: { type: new MirroredEntity(IntegerEntity) }, + PositionY: { type: new MirroredEntity(IntegerEntity) }, + ProxyClass: { type: ObjectReferenceEntity }, + ProxyFactoryClass: { type: ObjectReferenceEntity }, + ProxyFactoryFunctionName: { type: String }, + R: { type: Number }, + SelfContextInfo: { type: SymbolEntity }, + SettingsInterface: { type: ObjectReferenceEntity }, + SizeX: { type: new MirroredEntity(IntegerEntity) }, + SizeY: { type: new MirroredEntity(IntegerEntity) }, + StructType: { type: ObjectReferenceEntity }, + SubgraphInstance: { type: String }, + TargetType: { type: ObjectReferenceEntity }, + Text: { type: new MirroredEntity(String) }, + TimelineGuid: { type: GuidEntity }, + TimelineName: { type: String }, + VariableReference: { type: VariableReferenceEntity }, } static { this.cleanupAttributes(this.attributes) } static nameRegex = /^(\w+?)(?:_(\d+))?$/ static sequencerScriptingNameRegex = /\/Script\/SequencerScripting\.MovieSceneScripting(.+)Channel/ - static customPropertyGrammar = Parsimmon.seq( - Parsimmon.regex(/CustomProperties\s+/), + static customPropertyGrammar = Parsernostrum.seq( + Parsernostrum.reg(/CustomProperties\s+/), Grammar.grammarFor( undefined, this.attributes.CustomProperties.type[0] @@ -325,15 +169,15 @@ export default class ObjectEntity extends IEntity { } values.CustomProperties.push(pin) }) - static inlinedArrayEntryGrammar = Parsimmon.seq( - Parsimmon.alt( + static inlinedArrayEntryGrammar = Parsernostrum.seq( + Parsernostrum.alt( Grammar.symbolQuoted.map(v => [v, true]), Grammar.symbol.map(v => [v, false]), ), - Grammar.regexMap( + Parsernostrum.reg( new RegExp(`\\s*\\(\\s*(\\d+)\\s*\\)\\s*\\=\\s*`), - v => Number(v[1]) - ) + 1 + ).map(Number) ) .chain( /** @param {[[String, Boolean], Number]} param */ @@ -355,20 +199,19 @@ export default class ObjectEntity extends IEntity { static grammar = this.createGrammar() static createSubObjectGrammar() { - return Parsimmon.lazy(() => - this.createGrammar() - .map(object => - values => values[Configuration.subObjectAttributeNameFromEntity(object)] = object - ) - ) + return Parsernostrum.lazy(() => this.createGrammar()) + .map(object => + values => values[Configuration.subObjectAttributeNameFromEntity(object)] = object + ) + } static createGrammar() { - return Parsimmon.seq( - Parsimmon.regex(/Begin\s+Object/), - Parsimmon.seq( - Parsimmon.whitespace, - Parsimmon.alt( + return Parsernostrum.seq( + Parsernostrum.reg(/Begin\s+Object/), + Parsernostrum.seq( + Parsernostrum.whitespace, + Parsernostrum.alt( this.customPropertyGrammar, Grammar.createAttributeGrammar(this), Grammar.createAttributeGrammar(this, Grammar.attributeNameQuoted, undefined, (obj, k, v) => @@ -380,7 +223,7 @@ export default class ObjectEntity extends IEntity { ) .map(([_0, entry]) => entry) .many(), - Parsimmon.regex(/\s+End\s+Object/), + Parsernostrum.reg(/\s+End\s+Object/), ) .map(([_0, attributes, _2]) => { const values = {} @@ -410,16 +253,16 @@ export default class ObjectEntity extends IEntity { } static getMultipleObjectsGrammar() { - return Parsimmon.seq( - Parsimmon.optWhitespace, + return Parsernostrum.seq( + Parsernostrum.whitespaceOpt, this.createGrammar(), - Parsimmon.seq( - Parsimmon.whitespace, + Parsernostrum.seq( + Parsernostrum.whitespace, this.createGrammar(), ) .map(([_0, object]) => object) .many(), - Parsimmon.optWhitespace + Parsernostrum.whitespaceOpt ) .map(([_0, first, remaining, _4]) => [first, ...remaining]) } @@ -443,91 +286,93 @@ export default class ObjectEntity extends IEntity { } } super(values, suppressWarns) - /** @type {ObjectReferenceEntity} */ this.Class - /** @type {String} */ this.Name - /** @type {ObjectReferenceEntity} */ this.Archetype - /** @type {ObjectReferenceEntity} */ this.ExportPath - /** @type {ObjectReferenceEntity} */ this.ObjectRef - /** @type {ObjectReferenceEntity} */ this.BlueprintElementType - /** @type {ObjectReferenceEntity} */ this.BlueprintElementInstance - /** @type {null[]} */ this.PinTags - /** @type {String[]} */ this.PinNames - /** @type {SymbolEntity} */ this.AxisKey - /** @type {SymbolEntity} */ this.InputAxisKey - /** @type {Number} */ this.NumAdditionalInputs - /** @type {Boolean} */ this.bIsPureFunc - /** @type {Boolean} */ this.bIsConstFunc + /** @type {(PinEntity | UnknownPinEntity)[]} */ this.CustomProperties + /** @type {Boolean} */ this.bAlt + /** @type {Boolean} */ this.bCanRenameNode + /** @type {Boolean} */ this.bColorCommentBubble + /** @type {Boolean} */ this.bCommand + /** @type {Boolean} */ this.bCommentBubblePinned + /** @type {Boolean} */ this.bCommentBubbleVisible + /** @type {Boolean} */ this.bCommentBubbleVisible_InDetailsPanel + /** @type {Boolean} */ this.bConsumeInput + /** @type {Boolean} */ this.bControl + /** @type {Boolean} */ this.bExecuteWhenPaused + /** @type {Boolean} */ this.bExposeToLibrary + /** @type {Boolean} */ this.bInternalEvent /** @type {Boolean} */ this.bIsCaseSensitive - /** @type {VariableReferenceEntity} */ this.VariableReference - /** @type {SymbolEntity} */ this.SelfContextInfo - /** @type {String} */ this.DelegatePropertyName - /** @type {ObjectReferenceEntity} */ this.DelegateOwnerClass + /** @type {Boolean} */ this.bIsConstFunc + /** @type {Boolean} */ this.bIsPureFunc + /** @type {Boolean} */ this.bOverrideFunction + /** @type {Boolean} */ this.bOverrideParentBinding + /** @type {Boolean} */ this.bShift /** @type {FunctionReferenceEntity} */ this.ComponentPropertyName /** @type {FunctionReferenceEntity} */ this.EventReference /** @type {FunctionReferenceEntity} */ this.FunctionReference - /** @type {String} */ this.CustomFunctionName - /** @type {ObjectReferenceEntity} */ this.TargetType - /** @type {MacroGraphReferenceEntity} */ this.MacroGraphReference - /** @type {ObjectReferenceEntity} */ this.Enum - /** @type {String[]} */ this.EnumEntries - /** @type {SymbolEntity} */ this.InputKey - /** @type {ObjectReferenceEntity} */ this.MaterialFunction - /** @type {Boolean} */ this.bOverrideFunction - /** @type {Boolean} */ this.bInternalEvent - /** @type {Boolean} */ this.bConsumeInput - /** @type {Boolean} */ this.bExecuteWhenPaused - /** @type {Boolean} */ this.bOverrideParentBinding - /** @type {Boolean} */ this.bControl - /** @type {Boolean} */ this.bAlt - /** @type {Boolean} */ this.bShift - /** @type {Boolean} */ this.bCommand - /** @type {LinearColorEntity} */ this.CommentColor - /** @type {Boolean} */ this.bCommentBubbleVisible_InDetailsPanel - /** @type {Boolean} */ this.bColorCommentBubble - /** @type {String} */ this.ProxyFactoryFunctionName - /** @type {ObjectReferenceEntity} */ this.ProxyFactoryClass - /** @type {ObjectReferenceEntity} */ this.ProxyClass - /** @type {Number} */ this.R - /** @type {Number} */ this.G - /** @type {ObjectReferenceEntity} */ this.StructType - /** @type {ObjectReferenceEntity} */ this.MaterialExpression - /** @type {ObjectReferenceEntity} */ this.MaterialExpressionComment - /** @type {SymbolEntity} */ this.MoveMode - /** @type {String} */ this.TimelineName + /** @type {GuidEntity} */ this.NodeGuid /** @type {GuidEntity} */ this.TimelineGuid - /** @type {MirroredEntity} */ this.SizeX - /** @type {MirroredEntity} */ this.SizeY - /** @type {MirroredEntity} */ this.Text - /** @type {MirroredEntity} */ this.MaterialExpressionEditorX - /** @type {MirroredEntity} */ this.MaterialExpressionEditorY - /** @type {String} */ this.NodeTitle - /** @type {LinearColorEntity} */ this.NodeTitleColor - /** @type {MirroredEntity} */ this.PositionX - /** @type {MirroredEntity} */ this.PositionY - /** @type {ObjectReferenceEntity} */ this.PCGNode - /** @type {SymbolEntity} */ this.HiGenGridSize - /** @type {String} */ this.Operation + /** @type {IdentifierEntity} */ this.AdvancedPinDisplay + /** @type {IdentifierEntity} */ this.EnabledState + /** @type {IntegerEntity} */ this.ErrorType + /** @type {IntegerEntity} */ this.NodeHeight /** @type {IntegerEntity} */ this.NodePosX /** @type {IntegerEntity} */ this.NodePosY /** @type {IntegerEntity} */ this.NodeWidth - /** @type {IntegerEntity} */ this.NodeHeight - /** @type {ObjectReferenceEntity} */ this.Graph - /** @type {String} */ this.SubgraphInstance - /** @type {ObjectReferenceEntity} */ this.SettingsInterface + /** @type {LinearColorEntity} */ this.CommentColor + /** @type {LinearColorEntity} */ this.NodeTitleColor + /** @type {MacroGraphReferenceEntity} */ this.MacroGraphReference + /** @type {MirroredEntity} */ this.MaterialExpressionEditorX + /** @type {MirroredEntity} */ this.MaterialExpressionEditorY + /** @type {MirroredEntity} */ this.SizeX + /** @type {MirroredEntity} */ this.SizeY + /** @type {MirroredEntity} */ this.Text + /** @type {MirroredEntity} */ this.PositionX + /** @type {MirroredEntity} */ this.PositionY + /** @type {MirroredEntity} */ this.Node + /** @type {null[]} */ this.PinTags + /** @type {Number} */ this.G + /** @type {Number} */ this.NumAdditionalInputs + /** @type {Number} */ this.R /** @type {ObjectReferenceEntity[]} */ this.InputPins /** @type {ObjectReferenceEntity[]} */ this.OutputPins - /** @type {Boolean} */ this.bExposeToLibrary - /** @type {Boolean} */ this.bCanRenameNode - /** @type {Boolean} */ this.bCommentBubblePinned - /** @type {Boolean} */ this.bCommentBubbleVisible - /** @type {String} */ this.Text - /** @type {String} */ this.NodeComment - /** @type {IdentifierEntity} */ this.AdvancedPinDisplay - /** @type {IdentifierEntity} */ this.EnabledState - /** @type {GuidEntity} */ this.NodeGuid - /** @type {IntegerEntity} */ this.ErrorType + /** @type {ObjectReferenceEntity} */ this.Archetype + /** @type {ObjectReferenceEntity} */ this.BlueprintElementInstance + /** @type {ObjectReferenceEntity} */ this.BlueprintElementType + /** @type {ObjectReferenceEntity} */ this.Class + /** @type {ObjectReferenceEntity} */ this.DelegateOwnerClass + /** @type {ObjectReferenceEntity} */ this.Enum + /** @type {ObjectReferenceEntity} */ this.ExportPath + /** @type {ObjectReferenceEntity} */ this.Graph + /** @type {ObjectReferenceEntity} */ this.MaterialExpression + /** @type {ObjectReferenceEntity} */ this.MaterialExpressionComment + /** @type {ObjectReferenceEntity} */ this.MaterialFunction + /** @type {ObjectReferenceEntity} */ this.ObjectRef + /** @type {ObjectReferenceEntity} */ this.PCGNode + /** @type {ObjectReferenceEntity} */ this.ProxyClass + /** @type {ObjectReferenceEntity} */ this.ProxyFactoryClass + /** @type {ObjectReferenceEntity} */ this.SettingsInterface + /** @type {ObjectReferenceEntity} */ this.StructType + /** @type {ObjectReferenceEntity} */ this.TargetType + /** @type {String[]} */ this.EnumEntries + /** @type {String[]} */ this.PinNames + /** @type {String} */ this.CustomFunctionName + /** @type {String} */ this.DelegatePropertyName /** @type {String} */ this.ErrorMsg - /** @type {(PinEntity | UnknownPinEntity)[]} */ this.CustomProperties + /** @type {String} */ this.Name + /** @type {String} */ this.NodeComment + /** @type {String} */ this.NodeTitle + /** @type {String} */ this.Operation + /** @type {String} */ this.ProxyFactoryFunctionName + /** @type {String} */ this.SubgraphInstance + /** @type {String} */ this.Text + /** @type {String} */ this.TimelineName + /** @type {SymbolEntity} */ this.AxisKey + /** @type {SymbolEntity} */ this.HiGenGridSize + /** @type {SymbolEntity} */ this.InputAxisKey + /** @type {SymbolEntity} */ this.InputKey + /** @type {SymbolEntity} */ this.MoveMode + /** @type {SymbolEntity} */ this.SelfContextInfo + /** @type {VariableReferenceEntity} */ this.DelegateReference + /** @type {VariableReferenceEntity} */ this.VariableReference // Legacy nodes cleanup if (this["Pins"] instanceof Array) { @@ -564,6 +409,25 @@ export default class ObjectEntity extends IEntity { if (pcgObject) { pcgObject.PositionX && (pcgObject.PositionX.getter = () => this.NodePosX) pcgObject.PositionY && (pcgObject.PositionY.getter = () => this.NodePosY) + pcgObject.getSubobjects() + .forEach( + /** @param {ObjectEntity} obj */ + obj => { + if (obj.Node !== undefined) { + const nodeRef = obj.Node.get() + if ( + nodeRef.type === this.PCGNode.type + && nodeRef.path === `${this.Name}.${this.PCGNode.path}` + ) { + obj.Node.getter = () => new ObjectReferenceEntity({ + type: this.PCGNode.type, + path: `${this.Name}.${this.PCGNode.path}`, + }) + } + } + } + ) + } let inputIndex = 0 let outputIndex = 0 @@ -684,6 +548,13 @@ export default class ObjectEntity extends IEntity { return this.getCustomproperties().filter(v => v.constructor === PinEntity) } + /** @returns {ObjectEntity[]} */ + getSubobjects() { + return Object.keys(this) + .filter(k => k.startsWith(Configuration.subObjectAttributeNamePrefix)) + .flatMap(k => [this[k], .../** @type {ObjectEntity} */(this[k]).getSubobjects()]) + } + switchTarget() { const switchMatch = this.getClass().match(Configuration.switchTargetPattern) if (switchMatch) { @@ -779,6 +650,8 @@ export default class ObjectEntity extends IEntity { case Configuration.paths.actorBoundEvent: case Configuration.paths.componentBoundEvent: return `${Utility.formatStringName(this.DelegatePropertyName)} (${this.ComponentPropertyName ?? "Unknown"})` + case Configuration.paths.callDelegate: + return `Call ${this.DelegateReference?.MemberName ?? "None"}` case Configuration.paths.createDelegate: return "Create Event" case Configuration.paths.customEvent: @@ -1142,7 +1015,7 @@ export default class ObjectEntity extends IEntity { nodeIcon() { if (this.isMaterial() || this.isPcg()) { - return undefined + return null } switch (this.getType()) { case Configuration.paths.addDelegate: diff --git a/js/entity/ObjectReferenceEntity.js b/js/entity/ObjectReferenceEntity.js index dee11f7..6722262 100755 --- a/js/entity/ObjectReferenceEntity.js +++ b/js/entity/ObjectReferenceEntity.js @@ -1,7 +1,7 @@ import Configuration from "../Configuration.js" import Grammar from "../serialization/Grammar.js" import IEntity from "./IEntity.js" -import Parsimmon from "parsimmon" +import Parsernostrum from "parsernostrum" import Utility from "../Utility.js" export default class ObjectReferenceEntity extends IEntity { @@ -18,25 +18,18 @@ export default class ObjectReferenceEntity extends IEntity { static { this.cleanupAttributes(this.attributes) } - static noneReferenceGrammar = Parsimmon.string("None").map(() => this.createNoneInstance()) - static fullReferenceGrammar = Parsimmon.seq( + static noneReferenceGrammar = Parsernostrum.str("None").map(() => this.createNoneInstance()) + static fullReferenceGrammar = Parsernostrum.seq( Grammar.typeReference, - Parsimmon.regex(Grammar.Regex.InlineOptWhitespace), + Parsernostrum.whitespaceInlineOpt, Grammar.pathQuotes - ) - .map(([type, _2, path]) => - new this({ type: type, path: path }) - ) - static typeReferenceGrammar = Grammar.typeReference.map(v => - new this({ type: v, path: "" }) - ) - static pathReferenceGrammar = Grammar.path.map(path => - new this({ type: "", path: path }) - ) + ).map(([type, _2, path]) => new this({ type, path })) + static typeReferenceGrammar = Grammar.typeReference.map(v => new this({ type: v, path: "" })) + static pathReferenceGrammar = Grammar.path.map(path => new this({ type: "", path: path })) static grammar = this.createGrammar() static createGrammar() { - return Parsimmon.alt( + return Parsernostrum.alt( this.noneReferenceGrammar, this.fullReferenceGrammar, this.typeReferenceGrammar, diff --git a/js/entity/PinEntity.js b/js/entity/PinEntity.js index 7403b94..d37f47d 100755 --- a/js/entity/PinEntity.js +++ b/js/entity/PinEntity.js @@ -24,7 +24,7 @@ import Utility from "../Utility.js" import Vector2DEntity from "./Vector2DEntity.js" import VectorEntity from "./VectorEntity.js" -/** @template {AnyValue} T */ +/** @template {TerminalAttribute} T */ export default class PinEntity extends IEntity { static #typeEntityMap = { diff --git a/js/entity/PinReferenceEntity.js b/js/entity/PinReferenceEntity.js index 830f82c..50f012c 100755 --- a/js/entity/PinReferenceEntity.js +++ b/js/entity/PinReferenceEntity.js @@ -1,6 +1,6 @@ import GuidEntity from "./GuidEntity.js" import IEntity from "./IEntity.js" -import Parsimmon from "parsimmon" +import Parsernostrum from "parsernostrum" import PathSymbolEntity from "./PathSymbolEntity.js" export default class PinReferenceEntity extends IEntity { @@ -20,9 +20,9 @@ export default class PinReferenceEntity extends IEntity { static grammar = this.createGrammar() static createGrammar() { - return Parsimmon.seq( + return Parsernostrum.seq( PathSymbolEntity.createGrammar(), - Parsimmon.whitespace, + Parsernostrum.whitespace, GuidEntity.createGrammar() ).map( ([objectName, _1, pinGuid]) => new this({ diff --git a/js/entity/RBSerializationVector2DEntity.js b/js/entity/RBSerializationVector2DEntity.js index f4a3e87..45192a7 100644 --- a/js/entity/RBSerializationVector2DEntity.js +++ b/js/entity/RBSerializationVector2DEntity.js @@ -1,5 +1,4 @@ -import Grammar from "../serialization/Grammar.js" -import Parsimmon from "parsimmon" +import Parsernostrum from "parsernostrum" import Vector2DEntity from "./Vector2DEntity.js" export default class RBSerializationVector2DEntity extends Vector2DEntity { @@ -7,14 +6,14 @@ export default class RBSerializationVector2DEntity extends Vector2DEntity { static grammar = this.createGrammar() static createGrammar() { - return Parsimmon.alt( - Parsimmon.seq( - Parsimmon.string("X").then(Grammar.equalSeparation).then(Grammar.number), - Parsimmon.regex(Grammar.Regex.InlineWhitespace), - Parsimmon.string("Y").then(Grammar.equalSeparation).then(Grammar.number), - ).map(([x, _1, y]) => new this({ - X: x, - Y: y, + return Parsernostrum.alt( + Parsernostrum.regArray(new RegExp( + /X\s*=\s*/.source + "(?" + Parsernostrum.number.getParser().parser.regexp.source + ")" + + "\\s+" + + /Y\s*=\s*/.source + "(?" + Parsernostrum.number.getParser().parser.regexp.source + ")" + )).map(({ groups: { x, y } }) => new this({ + X: Number(x), + Y: Number(y), })), Vector2DEntity.createGrammar() ) diff --git a/js/entity/SimpleSerializationRotatorEntity.js b/js/entity/SimpleSerializationRotatorEntity.js index 9b6bf38..635ecda 100644 --- a/js/entity/SimpleSerializationRotatorEntity.js +++ b/js/entity/SimpleSerializationRotatorEntity.js @@ -1,26 +1,24 @@ -import Parsimmon from "parsimmon" +import Parsernostrum from "parsernostrum" import RotatorEntity from "./RotatorEntity.js" -import Grammar from "../serialization/Grammar.js" export default class SimpleSerializationRotatorEntity extends RotatorEntity { static grammar = this.createGrammar() static createGrammar() { - return Parsimmon.alt( - Parsimmon.seq( - Grammar.number, - Grammar.commaSeparation, - Grammar.number, - Grammar.commaSeparation, - Grammar.number, - ).map(([p, _1, y, _3, r]) => - new this({ - R: r, - P: p, - Y: y, - }) - ), + const number = Parsernostrum.number.getParser().parser.regexp.source + return Parsernostrum.alt( + Parsernostrum.reg(new RegExp( + "(" + number + ")" + + "\\s*,\\s" + + "(" + number + ")" + + "\\s*,\\s" + + "(" + number + ")" + )).map(([p, y, r]) => new this({ + R: Number(r), + P: Number(p), + Y: Number(y), + })), RotatorEntity.createGrammar() ) } diff --git a/js/entity/SimpleSerializationVector2DEntity.js b/js/entity/SimpleSerializationVector2DEntity.js index 01bf934..59fac88 100644 --- a/js/entity/SimpleSerializationVector2DEntity.js +++ b/js/entity/SimpleSerializationVector2DEntity.js @@ -1,5 +1,4 @@ -import Grammar from "../serialization/Grammar.js" -import Parsimmon from "parsimmon" +import Parsernostrum from "parsernostrum" import Vector2DEntity from "./Vector2DEntity.js" export default class SimpleSerializationVector2DEntity extends Vector2DEntity { @@ -7,14 +6,15 @@ export default class SimpleSerializationVector2DEntity extends Vector2DEntity { static grammar = this.createGrammar() static createGrammar() { - return Parsimmon.alt( - Parsimmon.seq( - Grammar.number, - Grammar.commaSeparation, - Grammar.number, - ).map(([x, _1, y]) => new this({ - X: x, - Y: y, + const number = Parsernostrum.number.getParser().parser.regexp.source + return Parsernostrum.alt( + Parsernostrum.reg(new RegExp( + "(" + number + ")" + + "\\s*,\\s" + + "(" + number + ")" + )).map(([x, y]) => new this({ + X: Number(x), + Y: Number(y), })), Vector2DEntity.createGrammar() ) diff --git a/js/entity/SimpleSerializationVectorEntity.js b/js/entity/SimpleSerializationVectorEntity.js index 9093ea8..9c0c387 100644 --- a/js/entity/SimpleSerializationVectorEntity.js +++ b/js/entity/SimpleSerializationVectorEntity.js @@ -1,5 +1,4 @@ -import Grammar from "../serialization/Grammar.js" -import Parsimmon from "parsimmon" +import Parsernostrum from "parsernostrum" import VectorEntity from "./VectorEntity.js" export default class SimpleSerializationVectorEntity extends VectorEntity { @@ -7,18 +6,20 @@ export default class SimpleSerializationVectorEntity extends VectorEntity { static grammar = this.createGrammar() static createGrammar() { - return Parsimmon.alt( - Parsimmon.seq( - Grammar.number, - Grammar.commaSeparation, - Grammar.number, - Grammar.commaSeparation, - Grammar.number, - ).map(([x, _1, y, _3, z]) => new this({ - X: x, - Y: y, - Z: z, - })), + const number = Parsernostrum.number.getParser().parser.regexp.source + return Parsernostrum.alt( + Parsernostrum.regArray(new RegExp( + "(" + number + ")" + + "\\s*,\\s*" + + "(" + number + ")" + + "\\s*,\\s*" + + "(" + number + ")" + )) + .map(([_0, x, y, z]) => new this({ + X: Number(x), + Y: Number(y), + Z: Number(z), + })), VectorEntity.createGrammar() ) } diff --git a/js/entity/UnknownKeysEntity.js b/js/entity/UnknownKeysEntity.js index aab1230..3baed10 100644 --- a/js/entity/UnknownKeysEntity.js +++ b/js/entity/UnknownKeysEntity.js @@ -1,6 +1,6 @@ import Grammar from "../serialization/Grammar.js" import IEntity from "./IEntity.js" -import Parsimmon from "parsimmon" +import Parsernostrum from "parsernostrum" export default class UnknownKeysEntity extends IEntity { @@ -17,31 +17,29 @@ export default class UnknownKeysEntity extends IEntity { static grammar = this.createGrammar() static createGrammar() { - return Parsimmon.seq( + return Parsernostrum.seq( // Lookbehind - Grammar.regexMap( + Parsernostrum.reg( new RegExp(`(${Grammar.Regex.Path.source}|${Grammar.Regex.Symbol.source}\\s*)?\\(\\s*`), - result => result[1] ?? "" + 1 ), - Grammar.attributeName - .skip(Grammar.equalSeparation) + Parsernostrum.seq(Grammar.attributeName, Grammar.equalSeparation).map(([attribute, equal]) => attribute) .chain(attributeName => - Grammar.unknownValue - .map(attributeValue => - values => values[attributeName] = attributeValue - ) + Grammar.unknownValue.map(attributeValue => + values => values[attributeName] = attributeValue + ) ) - .sepBy1(Grammar.commaSeparation), - Parsimmon.regex(/\s*(?:,\s*)?\)/), - ) - .map(([lookbehind, attributes, _2]) => { - let values = {} - if (lookbehind.length) { - values.lookbehind = lookbehind - } - attributes.forEach(attributeSetter => attributeSetter(values)) - return new this(values) - }) + .sepBy(Grammar.commaSeparation), + Parsernostrum.reg(/\s*(?:,\s*)?\)/), + ).map(([lookbehind, attributes, _2]) => { + lookbehind ??= "" + let values = {} + if (lookbehind.length) { + values.lookbehind = lookbehind + } + attributes.forEach(attributeSetter => attributeSetter(values)) + return new this(values) + }) } constructor(values) { diff --git a/js/entity/UnknownPinEntity.js b/js/entity/UnknownPinEntity.js index f363c85..ca7ac6b 100755 --- a/js/entity/UnknownPinEntity.js +++ b/js/entity/UnknownPinEntity.js @@ -1,6 +1,6 @@ -import Parsimmon from "parsimmon" -import PinEntity from "./PinEntity.js" import Grammar from "../serialization/Grammar.js" +import Parsernostrum from "parsernostrum" +import PinEntity from "./PinEntity.js" export default class UnknownPinEntity extends PinEntity { @@ -8,23 +8,22 @@ export default class UnknownPinEntity extends PinEntity { static grammar = this.createGrammar() static createGrammar() { - return Parsimmon.lazy(() => Parsimmon.seq( - Grammar.regexMap( + return Parsernostrum.seq( + Parsernostrum.reg( new RegExp(`${Grammar.Regex.Symbol.source}\\s*\\(\\s*`), - result => result[1] ?? "" + 1 ), - Grammar.createAttributeGrammar(this).sepBy1(Grammar.commaSeparation), - Parsimmon.regex(/\s*(?:,\s*)?\)/) - ) - .map(([lookbehind, attributes, _2]) => { - let values = {} - if (lookbehind.length) { - values.lookbehind = lookbehind - } - attributes.forEach(attributeSetter => attributeSetter(values)) - return new this(values) - }) - ) + Grammar.createAttributeGrammar(this).sepBy(Grammar.commaSeparation), + Parsernostrum.reg(/\s*(?:,\s*)?\)/) + ).map(([lookbehind, attributes, _2]) => { + lookbehind ??= "" + let values = {} + if (lookbehind.length) { + values.lookbehind = lookbehind + } + attributes.forEach(attributeSetter => attributeSetter(values)) + return new this(values) + }) } constructor(values = {}) { diff --git a/js/entity/Vector2DEntity.js b/js/entity/Vector2DEntity.js index fdce1a1..d07d197 100644 --- a/js/entity/Vector2DEntity.js +++ b/js/entity/Vector2DEntity.js @@ -28,4 +28,9 @@ export default class Vector2DEntity extends IEntity { /** @type {Number} */ this.X /** @type {Number} */ this.Y } + + /** @returns {[Number, Number]} */ + toArray() { + return [this.X, this.Y] + } } diff --git a/js/entity/VectorEntity.js b/js/entity/VectorEntity.js index af8041e..cc1388c 100644 --- a/js/entity/VectorEntity.js +++ b/js/entity/VectorEntity.js @@ -33,4 +33,9 @@ export default class VectorEntity extends IEntity { /** @type {Number} */ this.Y /** @type {Number} */ this.Z } + + /** @returns {[Number, Number, Number]} */ + toArray() { + return [this.X, this.Y, this.Z] + } } diff --git a/js/input/IInput.js b/js/input/IInput.js index d41adbd..1098e7d 100644 --- a/js/input/IInput.js +++ b/js/input/IInput.js @@ -1,5 +1,13 @@ import Configuration from "../Configuration.js" +/** + * @typedef {{ + * consumeEvent?: Boolean, + * listenOnFocus?: Boolean, + * unlistenOnTextEdit?: Boolean, + * }} Options + */ + /** @template {Element} T */ export default class IInput { @@ -15,7 +23,7 @@ export default class IInput { return this.#blueprint } - consumeEvent = true + consumeEvent /** @type {Object} */ options @@ -27,7 +35,7 @@ export default class IInput { /** * @param {T} target * @param {Blueprint} blueprint - * @param {Object} options + * @param {Options} options */ constructor(target, blueprint, options = {}) { options.consumeEvent ??= false diff --git a/js/input/common/Copy.js b/js/input/common/Copy.js index ba9785b..6628431 100755 --- a/js/input/common/Copy.js +++ b/js/input/common/Copy.js @@ -1,6 +1,13 @@ import IInput from "../IInput.js" import ObjectSerializer from "../../serialization/ObjectSerializer.js" +/** + * @typedef {import("../IInput.js").Options & { + * listenOnFocus?: Boolean, + * unlistenOnTextEdit?: Boolean, + * }} Options + */ + export default class Copy extends IInput { static #serializer = new ObjectSerializer() diff --git a/js/input/common/Cut.js b/js/input/common/Cut.js index 2338818..ce47347 100755 --- a/js/input/common/Cut.js +++ b/js/input/common/Cut.js @@ -1,6 +1,13 @@ import IInput from "../IInput.js" import ObjectSerializer from "../../serialization/ObjectSerializer.js" +/** + * @typedef {import("../IInput.js").Options & { + * listenOnFocus?: Boolean, + * unlistenOnTextEdit?: Boolean, + * }} Options + */ + export default class Cut extends IInput { static #serializer = new ObjectSerializer() @@ -8,6 +15,11 @@ export default class Cut extends IInput { /** @type {(e: ClipboardEvent) => void} */ #cutHandler + /** + * @param {Element} target + * @param {Blueprint} blueprint + * @param {Options} options + */ constructor(target, blueprint, options = {}) { options.listenOnFocus ??= true options.unlistenOnTextEdit ??= true // No nodes copy if inside a text field, just text (default behavior) diff --git a/js/input/common/Paste.js b/js/input/common/Paste.js index cad2c58..9188e5a 100755 --- a/js/input/common/Paste.js +++ b/js/input/common/Paste.js @@ -2,6 +2,13 @@ import ElementFactory from "../../element/ElementFactory.js" import IInput from "../IInput.js" import ObjectSerializer from "../../serialization/ObjectSerializer.js" +/** + * @typedef {import("../IInput.js").Options & { + * listenOnFocus?: Boolean, + * unlistenOnTextEdit?: Boolean, + * }} Options + */ + export default class Paste extends IInput { static #serializer = new ObjectSerializer() @@ -9,6 +16,11 @@ export default class Paste extends IInput { /** @type {(e: ClipboardEvent) => void} */ #pasteHandle + /** + * @param {Element} target + * @param {Blueprint} blueprint + * @param {Options} options + */ constructor(target, blueprint, options = {}) { options.listenOnFocus ??= true options.unlistenOnTextEdit ??= true // No nodes paste if inside a text field, just text (default behavior) diff --git a/js/input/keyboard/KeyboardEnableZoom.js b/js/input/keyboard/KeyboardEnableZoom.js index b510a03..fb0fdad 100644 --- a/js/input/keyboard/KeyboardEnableZoom.js +++ b/js/input/keyboard/KeyboardEnableZoom.js @@ -2,6 +2,12 @@ import KeyboardShortcut from "./KeyboardShortcut.js" import Shortcuts from "../../Shortcuts.js" import Zoom from "../mouse/Zoom.js" +/** + * @typedef {import("./KeyboardShortcut.js").Options & { + * activationKeys?: String | KeyBindingEntity | (String | KeyBindingEntity)[], + * }} Options + */ + export default class KeyboardEnableZoom extends KeyboardShortcut { /** @type {Zoom} */ @@ -10,7 +16,7 @@ export default class KeyboardEnableZoom extends KeyboardShortcut { /** * @param {HTMLElement} target * @param {Blueprint} blueprint - * @param {Object} options + * @param {Options} options */ constructor(target, blueprint, options = {}) { options.activationKeys = Shortcuts.enableZoomIn diff --git a/js/input/keyboard/KeyboardShortcut.js b/js/input/keyboard/KeyboardShortcut.js index 36ec267..3b0bd3f 100644 --- a/js/input/keyboard/KeyboardShortcut.js +++ b/js/input/keyboard/KeyboardShortcut.js @@ -2,6 +2,15 @@ import Configuration from "../../Configuration.js" import IInput from "../IInput.js" import KeyBindingEntity from "../../entity/KeyBindingEntity.js" +/** + * @typedef {import("../IInput.js").Options & { + * activationKeys?: String | KeyBindingEntity | (String | KeyBindingEntity)[], + * consumeEvent?: Boolean, + * listenOnFocus?: Boolean, + * unlistenOnTextEdit?: Boolean, + * }} Options + */ + /** * @template {Element} T * @extends IInput @@ -20,7 +29,7 @@ export default class KeyboardShortcut extends IInput { /** * @param {T} target * @param {Blueprint} blueprint - * @param {Object} options + * @param {Options} options */ constructor( target, @@ -40,8 +49,8 @@ export default class KeyboardShortcut extends IInput { if (v instanceof KeyBindingEntity) { return v } - if (typeof v === "string") { - const parsed = KeyBindingEntity.createGrammar().parse(v) + if (v.constructor === String) { + const parsed = KeyBindingEntity.createGrammar().run(v) if (parsed.status) { return parsed.value } diff --git a/js/input/mouse/IMouseClickDrag.js b/js/input/mouse/IMouseClickDrag.js index 9479159..2cbb186 100644 --- a/js/input/mouse/IMouseClickDrag.js +++ b/js/input/mouse/IMouseClickDrag.js @@ -3,6 +3,21 @@ import IDraggableElement from "../../element/IDraggableElement.js" import IPointing from "./IPointing.js" import Utility from "../../Utility.js" +/** + * @typedef {import("./IPointing.js").Options & { + * clickButton?: Number, + * consumeEvent?: Boolean, + * draggableElement?: HTMLElement, + * exitAnyButton?: Boolean, + * moveEverywhere?: Boolean, + * movementSpace?: HTMLElement, + * repositionOnClick?: Boolean, + * scrollGraphEdge?: Boolean, + * strictTarget?: Boolean, + * stepSize?: Number, + * }} Options + */ + /** * @template {IElement} T * @extends {IPointing} @@ -60,6 +75,7 @@ export default class IMouseClickDrag extends IPointing { this.lastLocation = Utility.snapToGrid(this.clickedPosition[0], this.clickedPosition[1], this.stepSize) this.startDrag(this.location) this.started = true + this.#mouseMoveHandler(e) } /** @param {MouseEvent} e */ @@ -125,16 +141,16 @@ export default class IMouseClickDrag extends IPointing { #movementListenedElement #draggableElement - clickedOffset = [0, 0] - clickedPosition = [0, 0] - lastLocation = [0, 0] + clickedOffset = /** @type {Coordinates} */([0, 0]) + clickedPosition = /** @type {Coordinates} */([0, 0]) + lastLocation = /** @type {Coordinates} */([0, 0]) started = false stepSize = 1 /** * @param {T} target * @param {Blueprint} blueprint - * @param {Object} options + * @param {Options} options */ constructor(target, blueprint, options = {}) { options.clickButton ??= Configuration.mouseClickButton @@ -147,7 +163,7 @@ export default class IMouseClickDrag extends IPointing { options.scrollGraphEdge ??= false options.strictTarget ??= false super(target, blueprint, options) - this.stepSize = parseInt(options?.stepSize ?? Configuration.gridSize) + this.stepSize = Number(options.stepSize ?? Configuration.gridSize) this.#movementListenedElement = this.options.moveEverywhere ? document.documentElement : this.movementSpace this.#draggableElement = /** @type {HTMLElement} */(this.options.draggableElement) diff --git a/js/input/mouse/IPointing.js b/js/input/mouse/IPointing.js index e227624..12afbbe 100644 --- a/js/input/mouse/IPointing.js +++ b/js/input/mouse/IPointing.js @@ -1,13 +1,22 @@ import IInput from "../IInput.js" import Utility from "../../Utility.js" +/** + * @typedef {import("../IInput.js").Options & { + * ignoreTranslateCompensate?: Boolean, + * ignoreScale?: Boolean, + * movementSpace?: HTMLElement, + * enablerKey?: KeyboardShortcut, + * }} Options + */ + /** * @template {Element} T * @extends {IInput} */ export default class IPointing extends IInput { - #location = [0, 0] + #location = /** @type {Coordinates} */([0, 0]) get location() { return this.#location } @@ -22,6 +31,11 @@ export default class IPointing extends IInput { return this.#enablerActivated } + /** + * @param {T} target + * @param {Blueprint} blueprint + * @param {Options} options + */ constructor(target, blueprint, options = {}) { options.ignoreTranslateCompensate ??= false options.ignoreScale ??= false @@ -49,8 +63,7 @@ export default class IPointing extends IInput { location = this.options.ignoreTranslateCompensate ? location : this.blueprint.compensateTranslation(location[0], location[1]) - this.#location[0] = location[0] - this.#location[1] = location[1] + this.#location = [...location] return this.#location } } diff --git a/js/input/mouse/MouseClick.js b/js/input/mouse/MouseClick.js index 16e76ba..f5726da 100644 --- a/js/input/mouse/MouseClick.js +++ b/js/input/mouse/MouseClick.js @@ -1,6 +1,11 @@ import Configuration from "../../Configuration.js" import IPointing from "./IPointing.js" +/** + * @typedef {import("./IMouseClickDrag.js").Options & { +* }} Options +*/ + /** * @template {Element} T * @extends {IPointing} @@ -59,7 +64,7 @@ export default class MouseClick extends IPointing { /** * @param {T} target * @param {Blueprint} blueprint - * @param {Object} options + * @param {Options} options */ constructor( target, diff --git a/js/input/mouse/MouseClickDrag.js b/js/input/mouse/MouseClickDrag.js index 2abc1dd..2f4055c 100755 --- a/js/input/mouse/MouseClickDrag.js +++ b/js/input/mouse/MouseClickDrag.js @@ -1,5 +1,14 @@ import MouseMoveDraggable from "./MouseMoveDraggable.js" +/** + * @typedef {import("./MouseMoveDraggable.js").Options & { + * onClicked?: () => void, + * onStartDrag?: () => void, + * onDrag?: (location: Coordinates, movement: Coordinates) => void, + * onEndDrag?: () => void, +* }} Options +*/ + export default class MouseClickDrag extends MouseMoveDraggable { #onClicked @@ -10,7 +19,7 @@ export default class MouseClickDrag extends MouseMoveDraggable { /** * @param {HTMLElement} target * @param {Blueprint} blueprint - * @param {Object} options + * @param {Options} options */ constructor(target, blueprint, options = {}) { super(target, blueprint, options) @@ -28,7 +37,7 @@ export default class MouseClickDrag extends MouseMoveDraggable { } } - /** @param {[Number, Number]} location */ + /** @param {Coordinates} location */ clicked(location) { super.clicked(location) this.#onClicked?.() @@ -39,6 +48,10 @@ export default class MouseClickDrag extends MouseMoveDraggable { this.#onStartDrag?.() } + /** + * @param {Coordinates} location + * @param {Coordinates} movement + */ dragAction(location, movement) { this.#onDrag?.(location, movement) } diff --git a/js/input/mouse/MouseCreateLink.js b/js/input/mouse/MouseCreateLink.js index be7a3b1..49592a7 100755 --- a/js/input/mouse/MouseCreateLink.js +++ b/js/input/mouse/MouseCreateLink.js @@ -2,6 +2,12 @@ import Configuration from "../../Configuration.js" import ElementFactory from "../../element/ElementFactory.js" import IMouseClickDrag from "./IMouseClickDrag.js" +/** + * @typedef {import("./IMouseClickDrag.js").Options & { + * scrollGraphEdge?: Boolean, +* }} Options +*/ + /** @extends IMouseClickDrag */ export default class MouseCreateLink extends IMouseClickDrag { @@ -69,7 +75,7 @@ export default class MouseCreateLink extends IMouseClickDrag { /** * @param {PinElement} target * @param {Blueprint} blueprint - * @param {Object} options + * @param {Options} options */ constructor(target, blueprint, options = {}) { options.scrollGraphEdge ??= true diff --git a/js/input/mouse/MouseDbClick.js b/js/input/mouse/MouseDbClick.js index 303d14f..902a49d 100644 --- a/js/input/mouse/MouseDbClick.js +++ b/js/input/mouse/MouseDbClick.js @@ -1,12 +1,19 @@ import IPointing from "./IPointing.js" +/** + * @typedef {import("./IPointing.js").Options & { + * consumeEvent?: Boolean, + * strictTarget?: Boolean, +* }} Options +*/ + /** * @template {HTMLElement} T * @extends {IPointing} */ export default class MouseDbClick extends IPointing { - /** @param {Number[]} location */ + /** @param {Coordinates} location */ static ignoreDbClick = location => { } /** @param {MouseEvent} e */ @@ -16,8 +23,7 @@ export default class MouseDbClick extends IPointing { e.stopImmediatePropagation() // Captured, don't call anyone else } this.clickedPosition = this.setLocationFromEvent(e) - this.blueprint.mousePosition[0] = this.clickedPosition[0] - this.blueprint.mousePosition[1] = this.clickedPosition[1] + this.blueprint.mousePosition = [...this.clickedPosition] this.dbclicked(this.clickedPosition) } } @@ -30,8 +36,13 @@ export default class MouseDbClick extends IPointing { this.#onDbClick = value } - clickedPosition = [0, 0] + clickedPosition = /** @type {Coordinates} */([0, 0]) + /** + * @param {T} target + * @param {Blueprint} blueprint + * @param {Options} options + */ constructor(target, blueprint, options = {}, onDbClick = MouseDbClick.ignoreDbClick) { options.consumeEvent ??= true options.strictTarget ??= false @@ -49,6 +60,7 @@ export default class MouseDbClick extends IPointing { } /* Subclasses will override the following method */ + /** @param {Coordinates} location */ dbclicked(location) { this.onDbClick(location) } diff --git a/js/input/mouse/MouseMoveDraggable.js b/js/input/mouse/MouseMoveDraggable.js index 397ad9b..143a133 100755 --- a/js/input/mouse/MouseMoveDraggable.js +++ b/js/input/mouse/MouseMoveDraggable.js @@ -1,13 +1,15 @@ import IMouseClickDrag from "./IMouseClickDrag.js" import Utility from "../../Utility.js" +/** @typedef {import("./IMouseClickDrag.js").Options} Options */ + /** * @template {IDraggableElement} T * @extends {IMouseClickDrag} */ export default class MouseMoveDraggable extends IMouseClickDrag { - /** @param {[Number, Number]} location */ + /** @param {Coordinates} location */ clicked(location) { if (this.options.repositionOnClick) { this.target.setLocation(...(this.stepSize > 1 @@ -19,8 +21,8 @@ export default class MouseMoveDraggable extends IMouseClickDrag { } /** - * @param {Number[]} location - * @param {Number[]} offset + * @param {Coordinates} location + * @param {Coordinates} offset */ dragTo(location, offset) { const targetLocation = [ @@ -49,8 +51,8 @@ export default class MouseMoveDraggable extends IMouseClickDrag { } /** - * @param {Number[]} location - * @param {Number[]} offset + * @param {Coordinates} location + * @param {Coordinates} offset */ dragAction(location, offset) { this.target.setLocation(location[0] - this.clickedOffset[0], location[1] - this.clickedOffset[1]) diff --git a/js/input/mouse/MouseScrollGraph.js b/js/input/mouse/MouseScrollGraph.js index 4901069..4526269 100755 --- a/js/input/mouse/MouseScrollGraph.js +++ b/js/input/mouse/MouseScrollGraph.js @@ -6,6 +6,10 @@ export default class MouseScrollGraph extends IMouseClickDrag { this.blueprint.scrolling = true } + /** + * @param {Coordinates} location + * @param {Coordinates} movement + */ dragTo(location, movement) { this.blueprint.scrollDelta(-movement[0], -movement[1]) } diff --git a/js/input/mouse/MouseTracking.js b/js/input/mouse/MouseTracking.js index d35388f..2ee68cc 100755 --- a/js/input/mouse/MouseTracking.js +++ b/js/input/mouse/MouseTracking.js @@ -1,17 +1,22 @@ import Configuration from "../../Configuration.js" import IPointing from "./IPointing.js" +/** + * @typedef {import("./IPointing.js").Options & { + * listenOnFocus?: Boolean, + * }} Options + */ + export default class MouseTracking extends IPointing { /** @type {IPointing} */ #mouseTracker = null /** @param {MouseEvent} e */ - #mousemoveHandler= e => { + #mousemoveHandler = e => { e.preventDefault() this.setLocationFromEvent(e) - this.blueprint.mousePosition[0] = this.location[0] - this.blueprint.mousePosition[1] = this.location[1] + this.blueprint.mousePosition = [...this.location] } /** @param {CustomEvent} e */ @@ -32,6 +37,11 @@ export default class MouseTracking extends IPointing { } } + /** + * @param {Element} target + * @param {Blueprint} blueprint + * @param {Options} options + */ constructor(target, blueprint, options = {}) { options.listenOnFocus = true super(target, blueprint, options) diff --git a/js/input/mouse/MouseWheel.js b/js/input/mouse/MouseWheel.js index bf87da1..a9679a0 100644 --- a/js/input/mouse/MouseWheel.js +++ b/js/input/mouse/MouseWheel.js @@ -1,10 +1,16 @@ import IPointing from "./IPointing.js" +/** + * @typedef {import("./IPointing.js").Options & { + * listenOnFocus?: Boolean, + * strictTarget?: Boolean, + * }} Options + */ + export default class MouseWheel extends IPointing { - static #ignoreEvent = - /** @param {MouseWheel} self */ - self => { } + /** @param {MouseWheel} self */ + static #ignoreEvent = self => { } #variation = 0 get variation() { @@ -28,7 +34,7 @@ export default class MouseWheel extends IPointing { /** * @param {HTMLElement} target * @param {Blueprint} blueprint - * @param {Object} options + * @param {Options} options */ constructor( target, diff --git a/js/input/mouse/Select.js b/js/input/mouse/Select.js index a97a14a..20f1529 100755 --- a/js/input/mouse/Select.js +++ b/js/input/mouse/Select.js @@ -1,5 +1,11 @@ import IMouseClickDrag from "./IMouseClickDrag.js" +/** + * @typedef {import("./IMouseClickDrag.js").Options & { + * scrollGraphEdge?: Boolean, + * }} Options + */ + export default class Select extends IMouseClickDrag { constructor(target, blueprint, options = {}) { @@ -12,6 +18,10 @@ export default class Select extends IMouseClickDrag { this.selectorElement.beginSelect(this.clickedPosition) } + /** + * @param {Coordinates} location + * @param {Coordinates} movement + */ dragTo(location, movement) { this.selectorElement.selectTo(location) } diff --git a/js/input/mouse/Unfocus.js b/js/input/mouse/Unfocus.js index 6e84fe0..46eb96d 100755 --- a/js/input/mouse/Unfocus.js +++ b/js/input/mouse/Unfocus.js @@ -1,14 +1,24 @@ import IInput from "../IInput.js" +/** + * @typedef {import("../IInput.js").Options & { + * listenOnFocus?: Boolean, + * }} Options + */ + export default class Unfocus extends IInput { /** @param {MouseEvent} e */ #clickHandler = e => this.clickedSomewhere(/** @type {HTMLElement} */(e.target)) + /** + * @param {HTMLElement} target + * @param {Blueprint} blueprint + * @param {Options} options + */ constructor(target, blueprint, options = {}) { options.listenOnFocus = true super(target, blueprint, options) - if (this.blueprint.focus) { document.addEventListener("click", this.#clickHandler) } diff --git a/js/selection/FastSelectionModel.js b/js/selection/FastSelectionModel.js index 5b4d420..2307221 100755 --- a/js/selection/FastSelectionModel.js +++ b/js/selection/FastSelectionModel.js @@ -1,7 +1,6 @@ import OrderedIndexArray from "./OrderedIndexArray.js" /** - * @typedef {import("../element/NodeElement.js").default} NodeElement * @typedef {typeof import("../Blueprint.js").default.nodeBoundariesSupplier} BoundariesFunction * @typedef {typeof import("../Blueprint.js").default.nodeSelectToggleFunction} SelectionFunction * @typedef {{ @@ -15,7 +14,7 @@ import OrderedIndexArray from "./OrderedIndexArray.js" export default class FastSelectionModel { /** - * @param {Number[]} initialPosition + * @param {Coordinates} initialPosition * @param {NodeElement[]} rectangles * @param {BoundariesFunction} boundariesFunc * @param {SelectionFunction} selectFunc diff --git a/js/selection/SimpleSelectionModel.js b/js/selection/SimpleSelectionModel.js index 0c84791..5f2c591 100755 --- a/js/selection/SimpleSelectionModel.js +++ b/js/selection/SimpleSelectionModel.js @@ -1,5 +1,4 @@ /** - * @typedef {import("../element/NodeElement.js").default} NodeElement * @typedef {typeof import("../Blueprint.js").default.nodeBoundariesSupplier} BoundariesFunction * @typedef {typeof import("../Blueprint.js").default.nodeSelectToggleFunction} SelectionFunction * @typedef {{ @@ -14,7 +13,7 @@ export default class SimpleSelectionModel { /** - * @param {Number[]} initialPosition + * @param {Coordinates} initialPosition * @param {NodeElement[]} rectangles * @param {BoundariesFunction} boundariesFunc * @param {SelectionFunction} selectToggleFunction diff --git a/js/serialization/CustomSerializer.js b/js/serialization/CustomSerializer.js index a927b6a..9e5c5e5 100755 --- a/js/serialization/CustomSerializer.js +++ b/js/serialization/CustomSerializer.js @@ -1,7 +1,7 @@ import Serializer from "./Serializer.js" /** - * @template {SimpleValueType} T + * @template {AttributeConstructor} T * @extends {Serializer} */ export default class CustomSerializer extends Serializer { diff --git a/js/serialization/Grammar.js b/js/serialization/Grammar.js index eaf272a..0628133 100755 --- a/js/serialization/Grammar.js +++ b/js/serialization/Grammar.js @@ -1,13 +1,11 @@ import Configuration from "../Configuration.js" import IEntity from "../entity/IEntity.js" import MirroredEntity from "../entity/MirroredEntity.js" -import Parsimmon from "parsimmon" +import Parsernostrum from "parsernostrum" import Serializable from "./Serializable.js" import Union from "../entity/Union.js" import Utility from "../Utility.js" -let P = Parsimmon - export default class Grammar { static separatedBy = (source, separator, min = 1) => @@ -17,14 +15,10 @@ export default class Grammar { ) static Regex = class { - static ByteInteger = /0*(?:25[0-5]|2[0-4]\d|1?\d?\d)(?!\d|\.)/ // A integer between 0 and 255 static HexDigit = /[0-9a-fA-F]/ - static InlineOptWhitespace = /[^\S\n]*/ - static InlineWhitespace = /[^\S\n]+/ static InsideString = /(?:[^"\\]|\\.)*/ static InsideSingleQuotedString = /(?:[^'\\]|\\.)*/ static Integer = /[\-\+]?\d+(?!\d|\.)/ - static MultilineWhitespace = /\s*\n\s*/ static Number = /[-\+]?(?:\d*\.)?\d+(?!\d|\.)/ static RealUnit = /\+?(?:0(?:\.\d+)?|1(?:\.0+)?)(?![\.\d])/ // A number between 0 and 1 included static Word = Grammar.separatedBy("[a-zA-Z]", "_") @@ -37,95 +31,55 @@ export default class Grammar { /* --- Primitive --- */ - static null = P.lazy(() => P.regex(/\(\s*\)/).map(() => null)) - static true = P.lazy(() => P.regex(/true/i).map(() => true)) - static false = P.lazy(() => P.regex(/false/i).map(() => false)) - static boolean = P.lazy(() => Grammar.regexMap(/(true)|false/i, v => v[1] ? true : false)) - static number = P.lazy(() => - this.regexMap(new RegExp(`(${Grammar.Regex.Number.source})|(\\+?inf)|(-inf)`), result => { - if (result[2] !== undefined) { - return Number.POSITIVE_INFINITY - } else if (result[3] !== undefined) { - return Number.NEGATIVE_INFINITY - } - return Number(result[1]) - }) - ) - static integer = P.lazy(() => P.regex(Grammar.Regex.Integer).map(Number)) - static bigInt = P.lazy(() => P.regex(Grammar.Regex.Integer).map(BigInt)) - static realUnit = P.lazy(() => P.regex(Grammar.Regex.RealUnit).map(Number)) - static naturalNumber = P.lazy(() => P.regex(/\d+/).map(Number)) - static byteNumber = P.lazy(() => P.regex(Grammar.Regex.ByteInteger).map(Number)) - static string = P.lazy(() => - Grammar.regexMap( - new RegExp(`"(${Grammar.Regex.InsideString.source})"`), - ([_0, value]) => value + static null = Parsernostrum.reg(/\(\s*\)/).map(() => null) + static true = Parsernostrum.reg(/true/i).map(() => true) + static false = Parsernostrum.reg(/false/i).map(() => false) + static boolean = Parsernostrum.regArray(/(true)|false/i).map(v => v[1] ? true : false) + static number = Parsernostrum.regArray( + new RegExp(`(${Parsernostrum.number.getParser().parser.regexp.source})|(\\+?inf)|(-inf)`) + ).map(([_0, n, plusInf, minusInf]) => n ? Number(n) : plusInf ? Number.POSITIVE_INFINITY : Number.NEGATIVE_INFINITY) + static bigInt = Parsernostrum.reg(new RegExp(Parsernostrum.number.getParser().parser.regexp.source)).map(BigInt) + .map(result => + result[2] !== undefined + ? Number.POSITIVE_INFINITY + : result[3] !== undefined + ? Number.NEGATIVE_INFINITY + : Number(result[1]) ) - .map((insideString) => Utility.unescapeString(insideString)) - ) + static naturalNumber = Parsernostrum.lazy(() => Parsernostrum.reg(/\d+/).map(Number)) + static string = Parsernostrum.doubleQuotedString.map(insideString => Utility.unescapeString(insideString)) /* --- Fragment --- */ - static colorValue = this.byteNumber - static word = P.regex(Grammar.Regex.Word) - static pathQuotes = Grammar.regexMap( - new RegExp( - `'"(` + Grammar.Regex.InsideString.source + `)"'` - + `|'(` + Grammar.Regex.InsideSingleQuotedString.source + `)'` - + `|"(` + Grammar.Regex.InsideString.source + `)"` - ), - ([_0, a, b, c]) => a ?? b ?? c - ) - static path = Grammar.regexMap( - new RegExp( - `'"(` + Grammar.Regex.InsideString.source + `)"'` - + `|'(` + Grammar.Regex.InsideSingleQuotedString.source + `)'` - + `|"(` + Grammar.Regex.InsideString.source + `)"` - + `|(` + Grammar.Regex.Path.source + `)` - ), - ([_0, a, b, c, d]) => a ?? b ?? c ?? d - ) - static symbol = P.regex(Grammar.Regex.Symbol) - static symbolQuoted = Grammar.regexMap( - new RegExp('"(' + Grammar.Regex.Symbol.source + ')"'), - /** @type {(_0: String, v: String) => String} */ - ([_0, v]) => v - ) - static attributeName = P.regex(Grammar.Regex.DotSeparatedSymbols) - static attributeNameQuoted = Grammar.regexMap( - new RegExp('"(' + Grammar.Regex.DotSeparatedSymbols.source + ')"'), - ([_0, v]) => v - ) - static guid = P.regex(new RegExp(`${Grammar.Regex.HexDigit.source}{32}`)) - static commaSeparation = P.regex(/\s*,\s*(?!\))/) - static commaOrSpaceSeparation = P.regex(/\s*,\s*(?!\))|\s+/) - static equalSeparation = P.regex(/\s*=\s*/) - static typeReference = P.alt(P.regex(Grammar.Regex.Path), this.symbol) - static hexColorChannel = P.regex(new RegExp(Grammar.Regex.HexDigit.source + "{2}")) + static colorValue = Parsernostrum.numberByte + static word = Parsernostrum.reg(Grammar.Regex.Word) + static pathQuotes = Parsernostrum.regArray(new RegExp( + `'"(` + Grammar.Regex.InsideString.source + `)"'` + + `|'(` + Grammar.Regex.InsideSingleQuotedString.source + `)'` + + `|"(` + Grammar.Regex.InsideString.source + `)"` + )).map(([_0, a, b, c]) => a ?? b ?? c) + static path = Parsernostrum.regArray(new RegExp( + `'"(` + Grammar.Regex.InsideString.source + `)"'` + + `|'(` + Grammar.Regex.InsideSingleQuotedString.source + `)'` + + `|"(` + Grammar.Regex.InsideString.source + `)"` + + `|(` + Grammar.Regex.Path.source + `)` + )).map(([_0, a, b, c, d]) => a ?? b ?? c ?? d) + static symbol = Parsernostrum.reg(Grammar.Regex.Symbol) + static symbolQuoted = Parsernostrum.reg(new RegExp('"(' + Grammar.Regex.Symbol.source + ')"'), 1) + static attributeName = Parsernostrum.reg(Grammar.Regex.DotSeparatedSymbols) + static attributeNameQuoted = Parsernostrum.reg(new RegExp('"(' + Grammar.Regex.DotSeparatedSymbols.source + ')"'), 1) + static guid = Parsernostrum.reg(new RegExp(`${Grammar.Regex.HexDigit.source}{32}`)) + static commaSeparation = Parsernostrum.reg(/\s*,\s*(?!\))/) + static commaOrSpaceSeparation = Parsernostrum.reg(/\s*,\s*(?!\))|\s+/) + static equalSeparation = Parsernostrum.reg(/\s*=\s*/) + static typeReference = Parsernostrum.alt(Parsernostrum.reg(Grammar.Regex.Path), this.symbol) + static hexColorChannel = Parsernostrum.reg(new RegExp(Grammar.Regex.HexDigit.source + "{2}")) /* --- Factory --- */ /** - * @template T - * @param {RegExp} re - * @param {(execResult) => T} mapper - */ - static regexMap(re, mapper) { - const anchored = RegExp("^(?:" + re.source + ")", re.flags) - const expected = "" + re - return P((input, i) => { - const match = anchored.exec(input.slice(i)) - if (match) { - return P.makeSuccess(i + match[0].length, mapper(match)) - } - return P.makeFailure(i, expected) - }) - } - - /** - * @template {SimpleValueType} T + * @template {AttributeTypeDescription} T * @param {T} type - * @returns {Parsimmon.Parser>} */ static grammarFor( attribute, @@ -139,39 +93,39 @@ export default class Grammar { if (attribute?.inlined) { return this.grammarFor(undefined, type[0]) } - result = P.seq( - P.regex(/\(\s*/), + result = Parsernostrum.seq( + Parsernostrum.reg(/\(\s*/), this.grammarFor(undefined, type[0]).sepBy(this.commaSeparation), - P.regex(/\s*(?:,\s*)?\)/), + Parsernostrum.reg(/\s*(?:,\s*)?\)/), ).map(([_0, values, _3]) => values) } else if (type instanceof Union) { result = type.values .map(v => this.grammarFor(undefined, v)) .reduce((acc, cur) => !cur || cur === this.unknownValue || acc === this.unknownValue ? this.unknownValue - : P.alt(acc, cur) + : Parsernostrum.alt(acc, cur) ) } else if (type instanceof MirroredEntity) { - return this.grammarFor(type.type.attributes[type.key]) - .map(() => new MirroredEntity(type.type, type.key, type.getter)) + return this.grammarFor(undefined, type.getTargetType()) + .map(v => new MirroredEntity(type.type, () => v)) } else if (attribute?.constructor === Object) { result = this.grammarFor(undefined, type) } else { switch (type) { - case BigInt: - result = this.bigInt - break case Boolean: result = this.boolean break case Number: result = this.number break + case BigInt: + result = this.bigInt + break case String: result = this.string break default: - if (type?.prototype instanceof Serializable) { + if (/** @type {AttributeConstructor} */(type)?.prototype instanceof Serializable) { return /** @type {typeof Serializable} */(type).grammar } } @@ -181,18 +135,18 @@ export default class Grammar { if (result == this.unknownValue) { result = this.string } else { - result = P.seq(P.string('"'), result, P.string('"')) + result = Parsernostrum.seq(Parsernostrum.str('"'), result, Parsernostrum.str('"')) } } if (attribute.nullable) { - result = P.alt(result, this.null) + result = Parsernostrum.alt(result, this.null) } } return result } /** - * @template {SimpleValueType} T + * @template {AttributeConstructor} T * @param {T} entityType * @param {String[]} key * @returns {AttributeInformation} @@ -227,7 +181,7 @@ export default class Grammar { valueSeparator = this.equalSeparation, handleObjectSet = (obj, k, v) => { } ) { - return P.seq( + return Parsernostrum.seq( attributeName, valueSeparator, ).chain(([attributeName, _1]) => { @@ -248,20 +202,19 @@ export default class Grammar { * @template {IEntity} T * @param {(new (...args: any) => T) & EntityConstructor} entityType * @param {Boolean | Number} acceptUnknownKeys Number to specify the limit or true, to let it be a reasonable value - * @returns {Parsimmon.Parser} */ static createEntityGrammar = (entityType, acceptUnknownKeys = true, entriesSeparator = this.commaSeparation) => - P.seq( - this.regexMap( + Parsernostrum.seq( + Parsernostrum.reg( entityType.lookbehind instanceof Union ? new RegExp(`(${entityType.lookbehind.values.reduce((acc, cur) => acc + "|" + cur)})\\s*\\(\\s*`) : entityType.lookbehind.constructor == String && entityType.lookbehind.length ? new RegExp(`(${entityType.lookbehind})\\s*\\(\\s*`) : /()\(\s*/, - result => result[1] + 1 ), - this.createAttributeGrammar(entityType).sepBy1(entriesSeparator), - P.regex(/\s*(?:,\s*)?\)/), // trailing comma + this.createAttributeGrammar(entityType).sepBy(entriesSeparator), + Parsernostrum.reg(/\s*(?:,\s*)?\)/), // trailing comma ) .map(([lookbehind, attributes, _2]) => { let values = {} @@ -281,13 +234,13 @@ export default class Grammar { .filter(key => entityType.attributes[key].expected) .find(key => !totalKeys.includes(key) && (missingKey = key)) ) { - return P.fail("Missing key " + missingKey) + return Parsernostrum.failure() } const unknownKeys = Object.keys(values).filter(key => !(key in entityType.attributes)).length if (!acceptUnknownKeys && unknownKeys > 0) { - return P.fail("Too many unknown keys") + return Parsernostrum.failure() } - return P.succeed(new entityType(values)) + return Parsernostrum.success().map(() => new entityType(values)) }) /* --- Entity --- */ diff --git a/js/serialization/ObjectSerializer.js b/js/serialization/ObjectSerializer.js index f0db7f2..91a8f77 100755 --- a/js/serialization/ObjectSerializer.js +++ b/js/serialization/ObjectSerializer.js @@ -32,11 +32,7 @@ export default class ObjectSerializer extends Serializer { /** @param {String} value */ doRead(value) { - const parseResult = Grammar.grammarFor(undefined, this.entityType).parse(value) - if (!parseResult.status) { - throw new Error("Error when trying to parse the object.") - } - return parseResult.value + return Grammar.grammarFor(undefined, this.entityType).parse(value) } /** @@ -44,11 +40,7 @@ export default class ObjectSerializer extends Serializer { * @returns {ObjectEntity[]} */ readMultiple(value) { - const parseResult = ObjectEntity.getMultipleObjectsGrammar().parse(value) - if (!parseResult.status) { - throw new Error("Error when trying to parse the object.") - } - return parseResult.value + return ObjectEntity.getMultipleObjectsGrammar().parse(value) } /** diff --git a/js/serialization/Serializable.js b/js/serialization/Serializable.js index 1d25aba..6da54c4 100644 --- a/js/serialization/Serializable.js +++ b/js/serialization/Serializable.js @@ -1,6 +1,4 @@ -import Parsimmon from "parsimmon" - -const P = Parsimmon +import Parsernostrum from "parsernostrum" export default class Serializable { @@ -8,8 +6,6 @@ export default class Serializable { /** @protected */ static createGrammar() { - return /** @type {Parsimmon.Parser} */(P.fail( - "Unimplemented createGrammar() method in " + this.name) - ) + return /** @type {Parsernostrum} */(Parsernostrum.failure()) } } diff --git a/js/serialization/Serializer.js b/js/serialization/Serializer.js index 2dbad10..ed7a002 100644 --- a/js/serialization/Serializer.js +++ b/js/serialization/Serializer.js @@ -3,16 +3,16 @@ import IEntity from "../entity/IEntity.js" import SerializerFactory from "./SerializerFactory.js" import Utility from "../Utility.js" -/** @template {SimpleValueType} T */ +/** @template {AttributeConstructor} T */ export default class Serializer { /** @type {(v: String) => String} */ static same = v => v - /** @type {(entity: SimpleValue, serialized: String) => String} */ + /** @type {(entity: Attribute, serialized: String) => String} */ static notWrapped = (entity, serialized) => serialized - /** @type {(entity: SimpleValue, serialized: String) => String} */ + /** @type {(entity: Attribute, serialized: String) => String} */ static bracketsWrapped = (entity, serialized) => `(${serialized})` /** @param {T} entityType */ @@ -43,7 +43,6 @@ export default class Serializer { /** @param {ConstructedType} value */ write(value, insideString = false) { - // @ts-expect-error return this.doWrite(value, insideString) } @@ -53,7 +52,7 @@ export default class Serializer { */ doRead(value) { let grammar = Grammar.grammarFor(undefined, this.entityType) - const parseResult = grammar.parse(value) + const parseResult = grammar.run(value) if (!parseResult.status) { throw new Error(`Error when trying to parse the entity ${this.entityType.prototype.constructor.name}.`) } @@ -61,7 +60,7 @@ export default class Serializer { } /** - * @param {ConstructedType & IEntity} entity + * @param {ConstructedType} entity * @param {Boolean} insideString * @returns {String} */ diff --git a/js/serialization/SerializerFactory.js b/js/serialization/SerializerFactory.js index 5ae64a1..b687cb3 100755 --- a/js/serialization/SerializerFactory.js +++ b/js/serialization/SerializerFactory.js @@ -3,7 +3,7 @@ export default class SerializerFactory { static #serializers = new Map() /** - * @template {SimpleValueType} T + * @template {AttributeConstructor} T * @param {T} type * @param {Serializer} object */ @@ -12,9 +12,9 @@ export default class SerializerFactory { } /** - * @template {SimpleValueType} T + * @template {AttributeConstructor} T * @param {T} type - * @returns {Serializer>} + * @returns {Serializer} */ static getSerializer(type) { return SerializerFactory.#serializers.get(type) diff --git a/js/serialization/ToStringSerializer.js b/js/serialization/ToStringSerializer.js index 0b33a67..fee33e3 100755 --- a/js/serialization/ToStringSerializer.js +++ b/js/serialization/ToStringSerializer.js @@ -2,7 +2,7 @@ import Serializer from "./Serializer.js" import Utility from "../Utility.js" /** - * @template {SimpleValueType} T + * @template {AttributeConstructor} T * @extends {Serializer} */ export default class ToStringSerializer extends Serializer { diff --git a/js/serialization/initializeSerializerFactory.js b/js/serialization/initializeSerializerFactory.js index 8b1c66a..3e80252 100755 --- a/js/serialization/initializeSerializerFactory.js +++ b/js/serialization/initializeSerializerFactory.js @@ -19,7 +19,7 @@ import MirroredEntity from "../entity/MirroredEntity.js" import ObjectEntity from "../entity/ObjectEntity.js" import ObjectReferenceEntity from "../entity/ObjectReferenceEntity.js" import ObjectSerializer from "./ObjectSerializer.js" -import Parsimmon from "parsimmon" +import Parsernostrum from "parsernostrum" import PathSymbolEntity from "../entity/PathSymbolEntity.js" import PinEntity from "../entity/PinEntity.js" import PinReferenceEntity from "../entity/PinReferenceEntity.js" @@ -41,7 +41,7 @@ import Vector2DEntity from "../entity/Vector2DEntity.js" import VectorEntity from "../entity/VectorEntity.js" Grammar.unknownValue = - Parsimmon.alt( + Parsernostrum.alt( // Remember to keep the order, otherwise parsing might fail Grammar.boolean, GuidEntity.createGrammar(), diff --git a/js/template/ColorHandlerTemplate.js b/js/template/ColorHandlerTemplate.js index 23f2453..fc8bf09 100755 --- a/js/template/ColorHandlerTemplate.js +++ b/js/template/ColorHandlerTemplate.js @@ -7,7 +7,7 @@ export default class ColorHandlerTemplate extends IDraggableControlTemplate { /** * @param {Number} x * @param {Number} y - * @returns {[Number, Number]} + * @returns {Coordinates} */ adjustLocation(x, y) { const radius = Math.round(this.movementSpaceSize[0] / 2) diff --git a/js/template/ColorSliderTemplate.js b/js/template/ColorSliderTemplate.js index ac2ce6c..8bce4fd 100755 --- a/js/template/ColorSliderTemplate.js +++ b/js/template/ColorSliderTemplate.js @@ -7,7 +7,7 @@ export default class ColorSliderTemplate extends IDraggableControlTemplate { /** * @param {Number} x * @param {Number} y - * @return {[Number, Number]} + * @return {Coordinates} */ adjustLocation(x, y) { x = Utility.clamp(x, 0, this.movementSpaceSize[0]) diff --git a/js/template/IDraggableControlTemplate.js b/js/template/IDraggableControlTemplate.js index 9a50d9f..8628e6f 100644 --- a/js/template/IDraggableControlTemplate.js +++ b/js/template/IDraggableControlTemplate.js @@ -45,7 +45,7 @@ export default class IDraggableControlTemplate extends IDraggableTemplate { /** * @param {Number} x * @param {Number} y - * @returns {[Number, Number]} + * @returns {Coordinates} */ adjustLocation(x, y) { this.locationChangeCallback?.(x, y) diff --git a/js/template/IDraggableTemplate.js b/js/template/IDraggableTemplate.js index 02a1525..c4a45e5 100755 --- a/js/template/IDraggableTemplate.js +++ b/js/template/IDraggableTemplate.js @@ -9,8 +9,9 @@ import MouseMoveDraggable from "../input/mouse/MouseMoveDraggable.js" */ export default class IDraggableTemplate extends ITemplate { + /** @returns {HTMLElement} */ getDraggableElement() { - return /** @type {Element} */(this.element) + return this.element } createDraggableObject() { diff --git a/js/template/ISelectableDraggableTemplate.js b/js/template/ISelectableDraggableTemplate.js index cf356de..de1b2bc 100755 --- a/js/template/ISelectableDraggableTemplate.js +++ b/js/template/ISelectableDraggableTemplate.js @@ -7,8 +7,9 @@ import MouseMoveNodes from "../input/mouse/MouseMoveNodes.js" */ export default class ISelectableDraggableTemplate extends IDraggablePositionedTemplate { + /** @returns {HTMLElement} */ getDraggableElement() { - return /** @type {Element} */(this.element) + return this.element } createDraggableObject() { diff --git a/js/template/LinkTemplate.js b/js/template/LinkTemplate.js index 79694d1..21d5a4d 100755 --- a/js/template/LinkTemplate.js +++ b/js/template/LinkTemplate.js @@ -18,7 +18,7 @@ export default class LinkTemplate extends IFromToPositionedTemplate { * y'(p[0]) = m => -a / p[0]^2 = m => a = -m * p[0]^2. Now, in order to determine q we can use the starting * function: p[1] = a / p[0] + q => q = p[1] - a / p[0] * @param {Number} m slope - * @param {Number[]} p reference point + * @param {Coordinates} p reference point */ static decreasingValue(m, p) { const a = -m * p[0] ** 2 @@ -59,7 +59,7 @@ export default class LinkTemplate extends IFromToPositionedTemplate { #uniqueId = `ueb-id-${Math.floor(Math.random() * 1E12)}` - /** @param {[Number, Number]} location */ + /** @param {Coordinates} location */ #createKnot = location => { const knotEntity = new KnotEntity({}, this.element.source.entity) const knot = /** @type {NodeElementConstructor} */(ElementFactory.getConstructor("ueb-node")) @@ -79,6 +79,7 @@ export default class LinkTemplate extends IFromToPositionedTemplate { } createInputObjects() { + /** @type {HTMLElement} */ const linkArea = this.element.querySelector(".ueb-link-area") return [ ...super.createInputObjects(), @@ -86,7 +87,7 @@ export default class LinkTemplate extends IFromToPositionedTemplate { linkArea, this.blueprint, undefined, - /** @param {[Number, Number]} location */ + /** @param {Coordinates} location */ location => { location[0] += Configuration.knotOffset[0] location[1] += Configuration.knotOffset[1] diff --git a/js/template/node/CommentNodeTemplate.js b/js/template/node/CommentNodeTemplate.js index a4384a3..18a1314 100644 --- a/js/template/node/CommentNodeTemplate.js +++ b/js/template/node/CommentNodeTemplate.js @@ -16,6 +16,7 @@ export default class CommentNodeTemplate extends IResizeableTemplate { super.initialize(element) // Keep it at the end because it calls this.getColor() where this.#color must be initialized } + /** @returns {HTMLElement} */ getDraggableElement() { return this.element.querySelector(".ueb-node-top") } diff --git a/js/template/node/NodeTemplate.js b/js/template/node/NodeTemplate.js index 70b18c9..b7e0c0c 100755 --- a/js/template/node/NodeTemplate.js +++ b/js/template/node/NodeTemplate.js @@ -55,7 +55,7 @@ export default class NodeTemplate extends ISelectableDraggableTemplate { /** @param {NodeElement} element */ initialize(element) { super.initialize(element) - this.element.classList.add(.../** @type {NodeTemplateConstructor} */(this.constructor).nodeStyleClasses) + this.element.classList.add(.../** @type {typeof NodeTemplate} */(this.constructor).nodeStyleClasses) this.element.style.setProperty("--ueb-node-color", this.getColor().cssText) this.pinInserter = this.element.entity.additionalPinInserter() if (this.pinInserter) { diff --git a/js/template/pin/IInputPinTemplate.js b/js/template/pin/IInputPinTemplate.js index 946c2d0..c3a083f 100644 --- a/js/template/pin/IInputPinTemplate.js +++ b/js/template/pin/IInputPinTemplate.js @@ -4,7 +4,7 @@ import PinTemplate from "./PinTemplate.js" import Utility from "../../Utility.js" /** - * @template {AnyValue} T + * @template {TerminalAttribute} T * @extends PinTemplate */ export default class IInputPinTemplate extends PinTemplate { diff --git a/js/template/pin/INumericPinTemplate.js b/js/template/pin/INumericPinTemplate.js index 824cbf7..780e282 100644 --- a/js/template/pin/INumericPinTemplate.js +++ b/js/template/pin/INumericPinTemplate.js @@ -1,7 +1,7 @@ import IInputPinTemplate from "./IInputPinTemplate.js" /** - * @template {AnyValue} T + * @template {TerminalAttribute} T * @extends IInputPinTemplate */ export default class INumericPinTemplate extends IInputPinTemplate { diff --git a/js/template/pin/MinimalPinTemplate.js b/js/template/pin/MinimalPinTemplate.js index 4bb98ba..5149b29 100644 --- a/js/template/pin/MinimalPinTemplate.js +++ b/js/template/pin/MinimalPinTemplate.js @@ -2,7 +2,7 @@ import { html } from "lit" import PinTemplate from "./PinTemplate.js" /** - * @template {AnyValue} T + * @template {TerminalAttribute} T * @extends PinTemplate */ export default class MinimalPinTemplate extends PinTemplate { diff --git a/js/template/pin/PinTemplate.js b/js/template/pin/PinTemplate.js index a4f4435..15c4b4b 100755 --- a/js/template/pin/PinTemplate.js +++ b/js/template/pin/PinTemplate.js @@ -8,12 +8,12 @@ import VariableConversionNodeTemplate from "../node/VariableConversionNodeTempla import VariableOperationNodeTemplate from "../node/VariableOperationNodeTemplate.js" /** - * @template {AnyValue} T + * @template {TerminalAttribute} T * @typedef {import("../../element/PinElement.js").default} PinElement */ /** - * @template {AnyValue} T + * @template {TerminalAttribute} T * @extends ITemplate> */ export default class PinTemplate extends ITemplate { diff --git a/js/types.js b/js/types.js deleted file mode 100644 index dc30e25..0000000 --- a/js/types.js +++ /dev/null @@ -1,204 +0,0 @@ -/** - * @template T - * @typedef {new (...args: any) => T} AnyConstructor - */ -/** - * @typedef {IEntity | String | Number | BigInt | Boolean | Array | MirroredEntity} SimpleValue - * @typedef {SimpleValue | Union | Union[]} AnyValue - * @typedef {SimpleValueType | SimpleValueType[] | MirroredEntity | Union | Union[] | ComputedType} AttributeType - * @typedef {(entity: IEntity) => AnyValue} ValueSupplier - */ -/** - * @template {SimpleValue} T - * @typedef {AnyConstructor & EntityConstructor | StringConstructor | NumberConstructor | BigIntConstructor - * | BooleanConstructor | ArrayConstructor | MirroredEntityConstructor} SimpleValueType - */ -/** - * @template {SimpleValue} T - * @typedef {T extends String - * ? StringConstructor - * : T extends Number - * ? NumberConstructor - * : T extends BigInt - * ? BigIntConstructor - * : T extends Boolean - * ? BooleanConstructor - * : T extends Array - * ? ArrayConstructor - * : T extends MirroredEntity - * ? MirroredEntityConstructor - * : T extends IEntity - * ? AnyConstructor & EntityConstructor - * : any - * } ConstructorType - */ -/** - * @template T - * @typedef {T extends StringConstructor - * ? String - * : T extends NumberConstructor - * ? Number - * : T extends BigIntConstructor - * ? BigInt - * : T extends BooleanConstructor - * ? Boolean - * : T extends ArrayConstructor - * ? Array - * : T extends MirroredEntity - * ? MirroredEntity - * : T extends AnyConstructor - * ? R - * : any - * } ConstructedType - */ - -/** - * @typedef {{ - * type?: AttributeType, - * default?: AnyValue | ValueSupplier, - * nullable?: Boolean, - * ignored?: Boolean, - * serialized?: Boolean, - * expected?: Boolean, - * inlined?: Boolean, - * quoted?: Boolean, - * predicate?: (value: AnyValue) => Boolean, - * }} AttributeInformation - * @typedef {{ [key: String]: AttributeInformation }} AttributeDeclarations - */ - -/** - * @typedef {CustomEvent<{ value: [Number, Number] }>} UEBDragEvent - */ -/** - * @template T - * @typedef {{ - * (value: Boolean): BooleanConstructor, - * (value: Number): NumberConstructor, - * (value: String): StringConstructor, - * (value: BigInt): BigIntConstructor, - * (value: T): typeof value.constructor, - * }} TypeGetter - */ - -/** - * @typedef {typeof import("./Blueprint.js").default} BlueprintConstructor - * @typedef {typeof import("./element/LinkElement.js").default} LinkElementConstructor - * @typedef {typeof import("./element/NodeElement.js").default} NodeElementConstructor - * @typedef {typeof import("./element/PinElement.js").default} PinElementConstructor - * @typedef {typeof import("./element/WindowElement.js").default} WindowElementConstructor - * @typedef {typeof import("./entity/IEntity.js").default} EntityConstructor - * @typedef {typeof import("./entity/MirroredEntity.js").default} MirroredEntityConstructor - * @typedef {typeof import("./entity/ObjectEntity.js").default} ObjectEntityConstructor - */ -/** - * @typedef {import("./Blueprint.js").default} Blueprint - * @typedef {import("./element/ColorHandlerElement.js").default} ColorHandlerElement - * @typedef {import("./element/ColorSliderElement.js").default} ColorSliderElement - * @typedef {import("./element/DropdownElement.js").default} DropdownElement - * @typedef {import("./element/ElementFactory.js").default} ElementFactory - * @typedef {import("./element/IDraggableControlElement.js").default} IDraggableControlElement - * @typedef {import("./element/IDraggableElement.js").default} IDraggableElement - * @typedef {import("./element/IElement.js").default} IElement - * @typedef {import("./element/IFromToPositionedElement.js").default} IFromToPositionedElement - * @typedef {import("./element/InputElement.js").default} InputElement - * @typedef {import("./element/ISelectableDraggableElement.js").default} ISelectableDraggableElement - * @typedef {import("./element/LinkElement.js").default} LinkElement - * @typedef {import("./element/NodeElement.js").default} NodeElement - * @typedef {import("./element/PinElement.js").default} PinElement - * @typedef {import("./element/SelectorElement.js").default} SelectorElement - * @typedef {import("./element/WindowElement.js").default} WindowElement - * @typedef {import("./entity/Base64ObjectsEncoded.js").default} Base64ObjectsEncoded - * @typedef {import("./entity/ByteEntity.js").default} ByteEntity - * @typedef {import("./entity/ColorChannelEntity.js").default} ColorChannelEntity - * @typedef {import("./entity/ComputedType.js").default} ComputedType - * @typedef {import("./entity/EnumDisplayValueEntity.js").default} EnumDisplayValueEntity - * @typedef {import("./entity/EnumEntity.js").default} EnumEntity - * @typedef {import("./entity/FormatTextEntity.js").default} FormatTextEntity - * @typedef {import("./entity/FunctionReferenceEntity.js").default} FunctionReferenceEntity - * @typedef {import("./entity/GuidEntity.js").default} GuidEntity - * @typedef {import("./entity/IdentifierEntity.js").default} IdentifierEntity - * @typedef {import("./entity/IEntity.js").default} IEntity - * @typedef {import("./entity/Integer64Entity.js").default} Integer64Entity - * @typedef {import("./entity/IntegerEntity.js").default} IntegerEntity - * @typedef {import("./entity/InvariantTextEntity.js").default} InvariantTextEntity - * @typedef {import("./entity/KeyBindingEntity.js").default} KeyBindingEntity - * @typedef {import("./entity/LinearColorEntity.js").default} LinearColorEntity - * @typedef {import("./entity/LocalizedTextEntity.js").default} LocalizedTextEntity - * @typedef {import("./entity/MacroGraphReferenceEntity.js").default} MacroGraphReferenceEntity - * @typedef {import("./entity/MirroredEntity.js").default} MirroredEntity - * @typedef {import("./entity/NaturalNumberEntity.js").default} NaturalNumberEntity - * @typedef {import("./entity/ObjectEntity.js").default} ObjectEntity - * @typedef {import("./entity/ObjectReferenceEntity.js").default} ObjectReferenceEntity - * @typedef {import("./entity/objects/KnotEntity.js").default} KnotEntity - * @typedef {import("./entity/PathSymbolEntity.js").default} PathSymbolEntity - * @typedef {import("./entity/PinEntity.js").default} PinEntity - * @typedef {import("./entity/PinReferenceEntity.js").default} PinReferenceEntity - * @typedef {import("./entity/PinTypeEntity.js").default} PinTypeEntity - * @typedef {import("./entity/RotatorEntity.js").default} RotatorEntity - * @typedef {import("./entity/SimpleSerializationRotatorEntity.js").default} SimpleSerializationRotatorEntity - * @typedef {import("./entity/SimpleSerializationVector2DEntity.js").default} SimpleSerializationVector2DEntity - * @typedef {import("./entity/SimpleSerializationVectorEntity.js").default} SimpleSerializationVectorEntity - * @typedef {import("./entity/SymbolEntity.js").default} SymbolEntity - * @typedef {import("./entity/TerminalTypeEntity.js").default} TerminalTypeEntity - * @typedef {import("./entity/Union.js").default} Union - * @typedef {import("./entity/UnknownKeysEntity.js").default} UnknownKeysEntity - * @typedef {import("./entity/UnknownPinEntity.js").default} UnknownPinEntity - * @typedef {import("./entity/VariableReferenceEntity.js").default} VariableReferenceEntity - * @typedef {import("./entity/Vector2DEntity.js").default} Vector2DEntity - * @typedef {import("./entity/VectorEntity.js").default} VectorEntity - * @typedef {import("./input/IInput.js").default} IInput - * @typedef {import("./template/BlueprintTemplate.js").default} BlueprintTemplate - * @typedef {import("./template/ColorHandlerTemplate.js").default} ColorHandlerTemplate - * @typedef {import("./template/ColorSliderTemplate.js").default} ColorSliderTemplate - * @typedef {import("./template/IDraggableControlTemplate.js").default} IDraggableControlTemplate - * @typedef {import("./template/IDraggablePositionedTemplate.js").default} IDraggablePositionedTemplate - * @typedef {import("./template/IDraggableTemplate.js").default} IDraggableTemplate - * @typedef {import("./template/IFromToPositionedTemplate.js").default} IFromToPositionedTemplate - * @typedef {import("./template/IResizeableTemplate.js").default} IResizeableTemplate - * @typedef {import("./template/ISelectableDraggableTemplate.js").default} ISelectableDraggableTemplate - * @typedef {import("./template/ITemplate.js").default} ITemplate - * @typedef {import("./template/LinkTemplate.js").default} LinkTemplate - * @typedef {import("./template/node/CommentNodeTemplate.js").default} CommentNodeTemplate - * @typedef {import("./template/node/EventNodeTemplate.js").default} EventNodeTemplate - * @typedef {import("./template/node/KnotNodeTemplate.js").default} KnotNodeTemplate - * @typedef {import("./template/node/NodeTemplate.js").default} NodeTemplate - * @typedef {import("./template/node/VariableAccessNodeTemplate.js").default} VariableAccessNodeTemplate - * @typedef {import("./template/node/VariableConversionNodeTemplate.js").default} VariableConversionNodeTemplate - * @typedef {import("./template/node/VariableMangementNodeTemplate.js").default} VariableMangementNodeTemplate - * @typedef {import("./template/node/VariableOperationNodeTemplate.js").default} VariableOperationNodeTemplate - * @typedef {import("./template/pin/BoolPinTemplate.js").default} BoolPinTemplate - * @typedef {import("./template/pin/DropdownTemplate.js").default} DropdownTemplate - * @typedef {import("./template/pin/EnumPinTemplate.js").default} EnumPinTemplate - * @typedef {import("./template/pin/ExecPinTemplate.js").default} ExecPinTemplate - * @typedef {import("./template/pin/IInputPinTemplate.js").default} IInputPinTemplate - * @typedef {import("./template/pin/InputTemplate.js").default} InputTemplate - * @typedef {import("./template/pin/Int64PinTemplate.js").default} Int64PinTemplate - * @typedef {import("./template/pin/IntPinTemplate.js").default} IntPinTemplate - * @typedef {import("./template/pin/INumericPinTemplate.js").default} INumericPinTemplate - * @typedef {import("./template/pin/KnotPinTemplate.js").default} KnotPinTemplate - * @typedef {import("./template/pin/LinearColorPinTemplate.js").default} LinearColorPinTemplate - * @typedef {import("./template/pin/MinimalPinTemplate.js").default} MinimalPinTemplate - * @typedef {import("./template/pin/NamePinTemplate.js").default} NamePinTemplate - * @typedef {import("./template/pin/RealPinTemplate.js").default} RealPinTemplate - * @typedef {import("./template/pin/ReferencePinTemplate.js").default} ReferencePinTemplate - * @typedef {import("./template/pin/RotatorPinTemplate.js").default} RotatorPinTemplate - * @typedef {import("./template/pin/StringPinTemplate.js").default} StringPinTemplate - * @typedef {import("./template/pin/Vector2DPinTemplate.js").default} Vector2DPinTemplate - * @typedef {import("./template/pin/VectorPinTemplate.js").default} VectorPinTemplate - * @typedef {import("./template/SelectorTemplate.js").default} SelectorTemplate - * @typedef {import("./template/window/ColorPickerWindowTemplate.js").default} ColorPickerWindowTemplate - * @typedef {import("./template/window/WindowTemplate.js").default} WindowTemplate - * @typedef {import("./input/keyboard/KeyboardShortcut.js").default} KeyboardShortcut - * @typedef {import("lit").CSSResult} CSSResult - * @typedef {import("lit").PropertyValues} PropertyValues - * @typedef {import("lit").TemplateResult} TemplateResult - */ -/** - * @template {SimpleValueType} T - * @typedef {import("./serialization/Serializer.js").default} Serializer - */ -/** - * @template T - * @typedef {import("parsimmon").Success} Success - */ diff --git a/jsconfig.json b/jsconfig.json index 6b01788..31e19f4 100644 --- a/jsconfig.json +++ b/jsconfig.json @@ -6,5 +6,8 @@ }, "include": [ "js/**/*.js", + "tests/**/*.js", + "tests/**/*.spec.js", + "types.js", ], } diff --git a/package.json b/package.json index 4febdb6..53fb2c8 100755 --- a/package.json +++ b/package.json @@ -1,45 +1,48 @@ -{ - "name": "ueblueprint", - "version": "1.0.0", - "description": "UE's Blueprint visualisation library", - "main": "ueblueprint.js", - "scripts": { - "build": "rollup --config && sass scss/export.scss:dist/css/ueb-style.css && sass scss/export.scss:dist/css/ueb-style.min.css --style=compressed", - "test": "npm run build && export UEBLUEPRINT_TEST_SERVER_PORT=8181 && npx concurrently -k \"http-server -s -p $UEBLUEPRINT_TEST_SERVER_PORT\" \"npx cypress run --env UEBLUEPRINT_TEST_SERVER_PORT=8181\"", - "cypress": "export UEBLUEPRINT_TEST_SERVER_PORT=8181 && npx concurrently -k \"http-server -c-1 -p $UEBLUEPRINT_TEST_SERVER_PORT\" \"npx cypress open --env UEBLUEPRINT_TEST_SERVER_PORT=8181\"" - }, - "repository": { - "type": "git", - "url": "git+https://github.com/barsdeveloper/ueblueprint.git" - }, - "keywords": [ - "unreal", - "engine", - "blueprint" - ], - "author": "barsdeveloper", - "license": "MIT", - "bugs": { - "url": "https://github.com/barsdeveloper/ueblueprint/issues" - }, - "homepage": "https://github.com/barsdeveloper/ueblueprint#readme", - "devDependencies": { - "@rollup/plugin-commonjs": "^24", - "@rollup/plugin-node-resolve": "^15", - "@rollup/plugin-terser": "^0", - "@types/parsimmon": "^1", - "concurrently": "^8", - "cypress": "^12", - "http-server": "^14.1.1", - "minify-html-literals": "^1", - "rollup": "^3||^2", - "rollup-plugin-copy": "^3", - "rollup-plugin-minify-html-literals": "^1", - "sass": "^1", - "terser": "^5" - }, - "dependencies": { - "lit": "^2", - "parsimmon": "^1" - } -} +{ + "name": "ueblueprint", + "version": "1.0.0", + "description": "UE's Blueprint visualisation library", + "type": "module", + "main": "dist/ueblueprint.js", + "types": "types.js", + "scripts": { + "build": "rollup --config && sass scss/export.scss:dist/css/ueb-style.css && sass scss/export.scss:dist/css/ueb-style.min.css --style=compressed", + "test": "npm run build && export UEBLUEPRINT_TEST_SERVER_PORT=8181 && npx concurrently -k \"http-server -s -p $UEBLUEPRINT_TEST_SERVER_PORT\" \"npx cypress run --env UEBLUEPRINT_TEST_SERVER_PORT=8181\"", + "cypress": "npm run build && export UEBLUEPRINT_TEST_SERVER_PORT=8181 && npx playwright test --ui", + "start": "npx http-server" + }, + "repository": { + "type": "git", + "url": "git+https://github.com/barsdeveloper/ueblueprint.git" + }, + "keywords": [ + "unreal", + "engine", + "blueprint" + ], + "author": "barsdeveloper", + "license": "MIT", + "bugs": { + "url": "https://github.com/barsdeveloper/ueblueprint/issues" + }, + "homepage": "https://github.com/barsdeveloper/ueblueprint#readme", + "devDependencies": { + "@playwright/test": "^1.40.1", + "@rollup/plugin-commonjs": "^24", + "@rollup/plugin-node-resolve": "^15", + "@rollup/plugin-terser": "^0", + "concurrently": "^8", + "cypress": "^12", + "http-server": "^14", + "minify-html-literals": "^1", + "rollup": "^3||^2", + "rollup-plugin-copy": "^3", + "rollup-plugin-minify-html-literals": "^1", + "sass": "^1", + "terser": "^5" + }, + "dependencies": { + "lit": "^2", + "parsernostrum": "^1" + } +} diff --git a/playwright.config.js b/playwright.config.js new file mode 100644 index 0000000..578af83 --- /dev/null +++ b/playwright.config.js @@ -0,0 +1,78 @@ +// @ts-check +import { defineConfig, devices } from "@playwright/test" + +/** + * Read environment variables from file. + * https://github.com/motdotla/dotenv + */ +// require('dotenv').config(); + +/** + * @see https://playwright.dev/docs/test-configuration + */ +defineConfig({ + testDir: './tests', + /* Run tests in files in parallel */ + fullyParallel: true, + /* Fail the build on CI if you accidentally left test.only in the source code. */ + forbidOnly: !!process.env.CI, + /* Retry on CI only */ + retries: process.env.CI ? 2 : 0, + /* Opt out of parallel tests on CI. */ + workers: process.env.CI ? 1 : undefined, + /* Reporter to use. See https://playwright.dev/docs/test-reporters */ + reporter: 'html', + /* Shared settings for all the projects below. See https://playwright.dev/docs/api/class-testoptions. */ + use: { + /* Base URL to use in actions like `await page.goto('/')`. */ + // baseURL: 'http://127.0.0.1:3000', + + /* Collect trace when retrying the failed test. See https://playwright.dev/docs/trace-viewer */ + trace: 'on-first-retry', + }, + + /* Configure projects for major browsers */ + projects: [ + { + name: 'chromium', + use: { ...devices['Desktop Chrome'] }, + }, + + { + name: 'firefox', + use: { ...devices['Desktop Firefox'] }, + }, + + { + name: 'webkit', + use: { ...devices['Desktop Safari'] }, + }, + + /* Test against mobile viewports. */ + // { + // name: 'Mobile Chrome', + // use: { ...devices['Pixel 5'] }, + // }, + // { + // name: 'Mobile Safari', + // use: { ...devices['iPhone 12'] }, + // }, + + /* Test against branded browsers. */ + // { + // name: 'Microsoft Edge', + // use: { ...devices['Desktop Edge'], channel: 'msedge' }, + // }, + // { + // name: 'Google Chrome', + // use: { ...devices['Desktop Chrome'], channel: 'chrome' }, + // }, + ], + + /* Run your local dev server before starting the tests */ + // webServer: { + // command: 'npm run start', + // url: 'http://127.0.0.1:3000', + // reuseExistingServer: !process.env.CI, + // }, +}) diff --git a/cypress/e2e/colorPicker.cy.js b/tests/colorPicker.spec.js similarity index 65% rename from cypress/e2e/colorPicker.cy.js rename to tests/colorPicker.spec.js index 64b1fd7..d158155 100644 --- a/cypress/e2e/colorPicker.cy.js +++ b/tests/colorPicker.spec.js @@ -1,19 +1,12 @@ -/// +import { test, expect } from "./fixtures/test.js" +import BlueprintFixture from "./fixtures/BlueprintFixture.js" +import Configuration from "../js/Configuration.js" -import Configuration from "../../js/Configuration.js" -import LinearColorEntity from "../../js/entity/LinearColorEntity.js" -import PinElement from "../../js/element/PinElement.js" -import Utility from "../../js/Utility.js" +test.describe("Color picker", () => { -/** @type {Blueprint} */ -let blueprint - -before(() => { - cy.visit(`http://127.0.0.1:${Cypress.env("UEBLUEPRINT_TEST_SERVER_PORT")}/empty.html`) - cy.get("ueb-blueprint") - .click(100, 300) - .then(blueprint => blueprint[0].removeGraphElement(...blueprint[0].getNodes())) - .then(blueprint => Utility.paste(blueprint[0], String.raw` + test.beforeAll(async ({ blueprintPage }) => { + await blueprintPage.removeNodes() + await blueprintPage.paste(String.raw` Begin Object Class=/Script/BlueprintGraph.K2Node_CallFunction Name="K2Node_CallFunction_0" FunctionReference=(MemberParent=/Script/CoreUObject.Class'"/Script/UMG.WidgetBlueprintLibrary"',MemberName="DrawBox") NodePosX=-528 @@ -28,66 +21,65 @@ before(() => { CustomProperties Pin (PinId=0F39A82607874DEBB85E7CF660A8CEE5,PinName="Brush",PinToolTip="Brush\nSlate Brush Asset Object Reference",PinType.PinCategory="object",PinType.PinSubCategory="",PinType.PinSubCategoryObject=/Script/CoreUObject.Class'"/Script/Engine.SlateBrushAsset"',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=24480A396D474F85A2891846975A2AC6,PinName="Tint",PinToolTip="Tint\nLinear Color Structure",PinType.PinCategory="struct",PinType.PinSubCategory="",PinType.PinSubCategoryObject=/Script/CoreUObject.ScriptStruct'"/Script/CoreUObject.LinearColor"',PinType.PinSubCategoryMemberReference=(),PinType.PinValueType=(),PinType.ContainerType=None,PinType.bIsReference=False,PinType.bIsConst=False,PinType.bIsWeakPointer=False,PinType.bIsUObjectWrapper=False,PinType.bSerializeAsSinglePrecisionFloat=False,DefaultValue="(R=1.000000,G=1.000000,B=1.000000,A=1.000000)",AutogeneratedDefaultValue="(R=1.000000,G=1.000000,B=1.000000,A=1.000000)",PersistentGuid=00000000000000000000000000000000,bHidden=False,bNotConnectable=False,bDefaultValueIsReadOnly=False,bDefaultValueIsIgnored=False,bAdvancedView=False,bOrphanedPin=False,) End Object - `)) -}) - -context("Color picker", () => { - - let color - - it("Can cancel the operation", () => { - cy.get("ueb-window") - .should("not.exist") - cy.contains("ueb-pin", "Tint") - .then(pin => (color = pin[0].dataset.color, pin)) - .find(".ueb-pin-input") - .click() - cy.get("ueb-window") - .should("exist") - .contains(Configuration.windowCancelButtonText) - .click() - .should("not.exist") - cy.contains("ueb-pin", "Tint") - .then( - /** @param {JQuery>} pin */ - pin => expect(color).to.not.be.undefined.and.to.be.equal(pin[0].getDefaultValue().toString())) + `) }) - it("Can close the window", () => { - cy.get("ueb-window") - .should("not.exist") - cy.contains("ueb-pin", "Tint") - .then(pin => (color = pin[0].dataset.color, pin)) - .find(".ueb-pin-input") - .click() - cy.get("ueb-window") - .should("exist") - .find(".ueb-window-close") - .click() - .should("not.exist") - cy.contains("ueb-pin", "Tint") - .then( - /** @param {JQuery>} pin */ - pin => expect(color).to.not.be.undefined.and.to.be.equal(pin[0].getDefaultValue().toString())) + /** @param {BlueprintFixture} blueprintPage */ + const getElements = blueprintPage => { + /** @type {Locator} */ + const tintPin = blueprintPage.blueprintLocator.locator('ueb-pin:has-text("Tint")') + /** @type {Locator} */ + const window = blueprintPage.blueprintLocator.locator("ueb-window") + const input = tintPin.locator(".ueb-pin-input") + return { tintPin, window, input } + } + + test("Can cancel the operation", async ({ blueprintPage }) => { + const { tintPin, window, input } = getElements(blueprintPage) + await expect(window).toBeHidden() + const color = await input.evaluate(input => input.dataset.linearColor) + expect(color).not.toBeUndefined() + await input.click() + await expect(window).toBeVisible() + await window.locator(".ueb-color-picker-wheel").click({ position: { x: 150, y: 60 } }) + await window.getByText(Configuration.windowCancelButtonText).click() + await expect(window).toBeHidden() + const newColor = await input.evaluate(input => input.dataset.linearColor) + expect(newColor).toBe(color) }) - it("Ok changes the color", () => { - cy.get("ueb-window") - .should("not.exist") - cy.contains("ueb-pin", "Tint") - .find(".ueb-pin-input") - .click() - cy.get("ueb-window") - .should("exist") - .find(".ueb-color-picker-wheel") - .click("bottom") - cy.contains("ueb-window *", Configuration.windowApplyButtonText) - .click() - cy.get("ueb-window") - .should("not.exist") - cy.contains("ueb-pin", "Tint") - .then( - /** @param {JQuery>} pin */ - pin => expect(color).to.not.be.undefined.and.to.not.be.equal(pin[0].getDefaultValue().toString())) + test("Can close the window", async ({ blueprintPage }) => { + const { tintPin, window, input } = getElements(blueprintPage) + await expect(window).toBeHidden() + const color = await input.evaluate(input => input.dataset.linearColor) + await input.click() + await expect(window).toBeVisible() + await window.locator(".ueb-color-picker-wheel").click({ position: { x: 150, y: 60 } }) + await window.locator(".ueb-window-close").click() + await expect(window).toBeHidden() + const newColor = await input.evaluate(input => input.dataset.linearColor) + expect(newColor).toBe(color) + }) + + test("Ok changes the color", async ({ blueprintPage }) => { + const { tintPin, window, input } = getElements(blueprintPage) + await expect(window).toBeHidden() + const color = await input.evaluate(input => input.dataset.linearColor) + await input.click() + await expect(window).toBeVisible() + await window.locator(".ueb-color-picker-wheel").click({ position: { x: 150, y: 60 } }) + await window.getByText(Configuration.windowApplyButtonText).click() + await expect(window).toBeHidden() + const newColor = await input.evaluate(input => input.dataset.linearColor) + expect(newColor).not.toBe(color) + }) + + test("Move window", async ({ page, blueprintPage }) => { + const { tintPin, window, input } = getElements(blueprintPage) + await expect(window).toBeHidden() + await input.click() + const movement = await blueprintPage.move(window.locator(".ueb-window-top"), [-15, 22]) + expect(movement.after[0]).toBe(movement.before[0] - 15) + expect(movement.after[1]).toBe(movement.before[1] + 22) }) }) diff --git a/tests/entities.spec.js b/tests/entities.spec.js new file mode 100644 index 0000000..6a9f663 --- /dev/null +++ b/tests/entities.spec.js @@ -0,0 +1,183 @@ +// @ts-nocheck + +import Entity1 from "./resources/Entity1.js" +import Entity2 from "./resources/Entity2.js" +import entity2Value from "./resources/serializedEntity2.js" +import Entity3 from "./resources/Entity3.js" +import entity3Value from "./resources/serializedEntity3.js" +import Entity4 from "./resources/Entity4.js" +import entity4Value from "./resources/serializedEntity4.js" +import Entity5 from "./resources/Entity5.js" +import entity5Value1 from "./resources/serializedEntity5-1.js" +import EntityF from "./resources/EntityF.js" +import Grammar from "../js/serialization/Grammar.js" +import initializeSerializerFactory from "../js/serialization/initializeSerializerFactory.js" +import ObjectSerializer from "../js/serialization/ObjectSerializer.js" +import Serializer from "../js/serialization/Serializer.js" +import SerializerFactory from "../js/serialization/SerializerFactory.js" +import { test, expect } from "./fixtures/test.js" +import UnknownKeysEntity from "../js/entity/UnknownKeysEntity.js" + +test("Entity2", () => { + const entity = new Entity2() + initializeSerializerFactory() + SerializerFactory.registerSerializer( + Entity2, + new Serializer(Entity2, (entity, v) => `{\n${v}\n}`, "\n", false, ": ", k => ` ${k}`) + ) + SerializerFactory.registerSerializer( + Entity1, + new Serializer(Entity1, (entity, v) => `Entity1(${v})`, ", ", false, "=",) + ) + expect(Object.keys(entity)).toHaveLength(8) + expect(entity.someNumber).toBe(567) + expect(entity.someString).toBe("alpha") + expect(entity.someString2).toBe("beta") + expect(entity.someBoolean).toBe(true) + expect(entity.someBoolean2).toBe(false) + expect(entity.someObjectString).toBe("gamma") + expect(entity.someArray).toStrictEqual([400, 500, 600, 700, 800]) + + expect(entity.equals(new Entity2())).toBeTruthy() + + const other = new Entity2({ + someString2: "gamma" + }) + expect(entity.equals(other)).toBe(false) + const other1 = new Entity2({ + someNumber: 123, + someString: "a", + someString2: "b", + someBoolean: false, + someBoolean2: false, + someObjectString: new String("delta"), + someArray: [-1, -2, -3], + }) + const other2 = new Entity2({ + someNumber: 123, + someString: "a", + someString2: "b", + someBoolean: false, + someBoolean2: false, + someObjectString: "delta", + someArray: [-1, -2, -3], + }) + expect(other1.equals(other2)).toBeTruthy() + expect(SerializerFactory.getSerializer(Entity2).write(entity)).toBe(entity2Value) + expect(Grammar.getAttribute(Entity2, ["someEntity", "a"]).type).toBe(Number) +}) + +test("Entity3", () => { + let entity = new Entity3() + const keys = [ + "alpha", + "bravo", + "charlie", + "delta", + "echo", + "foxtrot", + "golf", + "hotel", + "india", + "juliett", + "kilo", + // "lima", // Not defined by default + "mike", + "november", + "oscar", + "papa", + "quebec", + "romeo", + "sierra", + ] + initializeSerializerFactory() + SerializerFactory.registerSerializer( + Entity3, + new Serializer(Entity3, (entity, v) => `[[\n${v}\n]]`, "\n", false, ": ", k => ` ${k}`) + ) + SerializerFactory.registerSerializer( + Entity1, + new Serializer(Entity1, (entity, v) => `Entity1(${v})`, ", ", false, "=",) + ) + expect(Object.keys(entity)).toHaveLength(keys.length) + expect(Object.keys(entity)).toStrictEqual(keys) + expect(entity.alpha).toBe(32) + expect(entity.bravo).toBe(78) + expect(entity.charlie).toBe("Charlie") + expect(entity.delta).toBeNull() + expect(entity.echo).toBe("echo") + expect(entity.foxtrot).toBe(false) + expect(entity.golf).toStrictEqual([]) + expect(entity.hotel).toBeNull() + expect(entity.india).toStrictEqual([]) + expect(entity.juliett).toStrictEqual(["a", "b", "c", "d", "e"]) + expect(entity.kilo).toStrictEqual([true, false, false, true, true]) + expect(entity.mike).toBe("Bar") + expect(entity.november).toBe(0) + expect(entity.oscar).toStrictEqual(new Entity1({ a: 8, b: 9 })) + expect(entity.papa).toStrictEqual(new Entity1({ a: 12, b: 13 })) + expect(entity.quebec).toBeUndefined() + + entity = new Entity3() + entity.quebec = 2 + expect(entity.quebec).toBe(2) + entity["quebec"] = 7 + expect(entity.quebec).toBe(7) + entity.quebec = 1 + expect(entity.quebec).toBe(1) + entity["quebec"] = 10 + expect(entity.quebec).toBe(10) + entity.quebec = 0 + expect(entity.quebec).toBe(10) + entity["quebec"] = 11 + expect(entity.quebec).toBe(10) + entity.quebec = -1 + expect(entity.quebec).toBe(10) + entity.quebec = 6 + expect(entity.quebec).toBe(6) + expect(SerializerFactory.getSerializer(Entity3).write(entity)).toBe(entity3Value) + + expect(Grammar.getAttribute(Entity3, ["romeo", "b"]).type).toBe(Number) + expect(Grammar.getAttribute(Entity3, ["sierra", "someString2"]).type).toBe(String) + expect(Grammar.getAttribute(Entity3, ["sierra", "someObjectString"]).type).toBe(String) + expect(Grammar.getAttribute(Entity3, ["sierra", "someObjectString"]).type).toBe(String) + expect(Grammar.getAttribute(Entity3, ["sierra", "someEntity", "b"]).type).toBe(Number) +}) + +test("Entity4", () => { + const entity = new Entity4() + initializeSerializerFactory() + SerializerFactory.registerSerializer( + Entity1, + new Serializer(Entity1, (entity, v) => `E1[${v}]`, " - ", false, ":", k => k.toUpperCase()) + ) + SerializerFactory.registerSerializer( + Entity4, + new Serializer(Entity4, (entity, v) => `Begin\n${v}\nEnd`, "\n", false, " => ", k => ` \${${k}}`) + ) + expect(Entity4.attributes.second.type).toStrictEqual([Entity1]) + expect(SerializerFactory.getSerializer(Entity4).write(entity)).toBe(entity4Value) +}) + +test("Entity5", () => { + let entity = new Entity5() + initializeSerializerFactory() + SerializerFactory.registerSerializer( + Entity5, + new ObjectSerializer(Entity5) + ) + SerializerFactory.registerSerializer( + EntityF, + new Serializer(UnknownKeysEntity, (entity, string) => `${entity.lookbehind ?? ""}(${string})`) + ) + expect(entity = SerializerFactory.getSerializer(Entity5).read(entity5Value1)).toEqual({ + key1: "Value 1", + key2: { + lookbehind: "Foo", + arg1: 55, + arg2: "Argument 2", + }, + }) + expect(entity.key2).toBeInstanceOf(EntityF) + expect(SerializerFactory.getSerializer(Entity5).write(entity)).toBe(entity5Value1) +}) diff --git a/tests/fixtures/BlueprintFixture.js b/tests/fixtures/BlueprintFixture.js new file mode 100644 index 0000000..da903ab --- /dev/null +++ b/tests/fixtures/BlueprintFixture.js @@ -0,0 +1,120 @@ +import httpServer from "http-server" + + +export default class BlueprintFixture { + + #port = 8181 + + + /** @type {Locator} */ + #blueprintLocator + get blueprintLocator() { + return this.#blueprintLocator + } + + /** @type {Locator} */ + #node + get node() { + return this.#node + } + + /** @type {ReturnType} */ + static server + + /** @param {import("playwright/test").Page} page */ + constructor(page) { + this.page = page + this.#blueprintLocator = page.locator("ueb-blueprint") + this.#node = this.#blueprintLocator.locator("ueb-node").first() + if (process.env.UEBLUEPRINT_TEST_SERVER_PORT) { + this.#port = Number(process.env.UEBLUEPRINT_TEST_SERVER_PORT) + } + } + + /** + * @param {Locator} draggable + * @param {Coordinates} offset + */ + async move(draggable, offset) { + const { x: x1, y: y1 } = await draggable.boundingBox() + await draggable.dragTo(this.blueprintLocator, { + sourcePosition: { + x: 1, + y: 1, + }, + targetPosition: { + x: x1 + offset[0] + 1, + y: y1 + offset[1] + 1, + } + }) + const { x: x2, y: y2 } = await draggable.boundingBox() + return { + before: [x1, y1], + after: [x2, y2], + } + } + + createServer() { + return new Promise((resolve, reject) => { + const webserver = httpServer.createServer({ + root: "./", + cors: true, + logFn: (req, res, error) => error && console.error(`Http server: ${error}`) + }) + webserver.server.addListener("error", error => { + if (error.code === "EADDRINUSE") { + console.log(`Port ${this.#port} is already in use, assuming server is already running`) + resolve(webserver) + } else { + resolve(null) + } + }) + webserver.listen(this.#port, "127.0.0.1", () => resolve(webserver)) + process.addListener("SIGTERM", () => { + console.log("SIGTERM signal received: closing HTTP server") + webserver.close() + }) + BlueprintFixture.server = webserver + }) + } + + async setup() { + const url = `http://127.0.0.1:${this.#port}/empty.html` + try { + await this.page.goto(url) + } catch (e) { + if (e.message.includes("ERR_CONNECTION_REFUSED")) { + await this.createServer() + await this.page.goto(url) + } + } + this.#blueprintLocator = this.page.locator("ueb-blueprint") + // To cause the blueprint to get the focus and start listining for input, see MouseClick::#mouseDownHandler + await this.#blueprintLocator.click({ position: { x: 100, y: 300 } }) + } + + async removeNodes() { + return await this.#blueprintLocator.evaluate(blueprint => + blueprint.removeGraphElement(...blueprint.getNodes()) + ) + } + + /** @param {String} text */ + async paste(text) { + return await this.#blueprintLocator.evaluate( + (blueprint, text) => { + const event = new ClipboardEvent("paste", { + bubbles: true, + cancelable: true, + clipboardData: new DataTransfer(), + }) + event.clipboardData.setData("text", text) + blueprint.dispatchEvent(event) + }, + text + ) + } + + async cleanup() { + } +} diff --git a/tests/fixtures/test.js b/tests/fixtures/test.js new file mode 100644 index 0000000..f4ea5bd --- /dev/null +++ b/tests/fixtures/test.js @@ -0,0 +1,26 @@ +import base from "@playwright/test" +import BlueprintFixture from "./BlueprintFixture.js" + +export const test = /** +@type {typeof base.extend<{}, { + sharedContext: import("@playwright/test").BrowserContext, + blueprintPage: BlueprintFixture, +}>} +*/(base.extend)( + { + sharedContext: [async ({ browser }, use) => { + const context = await browser.newContext() + await use(context) + await context.close() + }, { scope: "worker" }], + blueprintPage: [async ({ sharedContext }, use) => { + const page = await sharedContext.newPage() + const blueprintPage = new BlueprintFixture(page) + await blueprintPage.setup() + await use(blueprintPage) + }, { scope: "worker" }] + } +) + +export const expect = base.expect +export * from "@playwright/test" diff --git a/tests/nodes.spec.js b/tests/nodes.spec.js new file mode 100644 index 0000000..bdca377 --- /dev/null +++ b/tests/nodes.spec.js @@ -0,0 +1,166 @@ +import { test, expect } from "./fixtures/test.js" +import Configuration from "./../js/Configuration.js" +import EventNodes from "./resources/EventNodes.js" +import FlowControlNodes from "./resources/FlowControlNodes.js" +import InputNodes from "./resources/InputNodes.js" +import LegacyNodes from "./resources/LegacyNodes.js" +import MaterialNodes from "./resources/MaterialNodes.js" +import OperationsNodes from "./resources/OperationsNodes.js" +import OtherNodes from "./resources/OtherNodes.js" +import PCGNodes from "./resources/PCGNodes.js" + +const nodeTests = [ + ...EventNodes.get(), + ...FlowControlNodes.get(), + ...InputNodes.get(), + ...LegacyNodes.get(), + ...MaterialNodes.get(), + ...OperationsNodes.get(), + ...OtherNodes.get(), + ...PCGNodes.get() +] + +/** @param {String[]} words */ +function getFirstWordOrder(words) { + return new RegExp(/\s*/.source + words.join(/[^\n]+\n\s*/.source) + /\s*/.source) +} + +for (const nodeTest of nodeTests) { + test.describe(nodeTest.name, () => { + + test.beforeAll(async ({ blueprintPage }) => { + await blueprintPage.removeNodes() + await blueprintPage.paste(nodeTest.value) + }) + + if (nodeTest.color) { + test( + `${nodeTest.name}: Has correct color`, + async ({ blueprintPage }) => { + expect( + await blueprintPage.node.evaluate(node => node.entity.nodeColor().toString()) + ).toBe(nodeTest.color.toString()) + } + ) + } + test( + `${nodeTest.name}: Has correct delegate`, + async ({ blueprintPage }) => { + const delegate = blueprintPage.blueprintLocator.locator( + 'ueb-node .ueb-node-top ueb-pin[data-type="delegate"]' + ) + if (nodeTest.delegate) { + await expect(delegate).toBeVisible() + } else { + await expect(delegate).toBeHidden() + } + } + ) + if (nodeTest.title) { + test( + `${nodeTest.name}: Has title ${nodeTest.title}`, + async ({ blueprintPage }) => expect( + await blueprintPage.node.evaluate(node => node.getNodeDisplayName()) + ).toBe(nodeTest.title) + ) + } + if (nodeTest.subtitle) { + test( + `${nodeTest.name}: Has expected subtitle ${nodeTest.subtitle}`, + async ({ blueprintPage }) => await expect(blueprintPage.node.locator(".ueb-node-subtitle-text")) + .toHaveText(nodeTest.subtitle, { useInnerText: true }) + ) + } + if (nodeTest.size) { + test( + `${nodeTest.name}: Has approximately the expected size`, + async ({ blueprintPage }) => { + const expectedSize = await blueprintPage.node.evaluate( + (node, gridSize) => { + const bounding = node.getBoundingClientRect() + const expectedSize = [bounding.width / gridSize, bounding.height / gridSize] + return expectedSize + }, + Configuration.gridSize + ) + expect(Math.abs(nodeTest.size[0] - expectedSize[0])).toBeLessThan(1.5) + expect(Math.abs(nodeTest.size[1] - expectedSize[1])).toBeLessThan(1.5) + if ( + Math.abs(nodeTest.size[0] - expectedSize[0]) > 0.6 + || Math.abs(nodeTest.size[1] - expectedSize[1]) > 0.6 + ) { + console.error(`Node "${nodeTest.name}" size does not match`) + } + } + ) + } + if (nodeTest.icon !== undefined) { + test( + `${nodeTest.name}: Has the correct icon`, + async ({ blueprintPage }) => expect( + await blueprintPage.node.evaluate( + node => node.entity.nodeIcon()?.strings.join("") + ) + ).toBe(nodeTest.icon?.strings.join("")) + ) + } + if (nodeTest.pins !== undefined) { + test( + `${nodeTest.name}: Has ${nodeTest.pins} pins`, + async ({ blueprintPage }) => expect( + await blueprintPage.node.evaluate( + node => node.querySelectorAll("ueb-pin").length + ) + ).toBe(nodeTest.pins) + ) + } + if (nodeTest.pinNames) { + test( + `${nodeTest.name}: Has correct pin names`, + async ({ blueprintPage }) => { + const innerTexts = await blueprintPage.node.locator(".ueb-pin-content .ueb-pin-name").allInnerTexts() + const pinNames = innerTexts.map(v => v.trim()).filter(v => v.length > 0) + expect(pinNames).toStrictEqual(nodeTest.pinNames) + } + ) + } + test( + `${nodeTest.name}: Expected development`, + async ({ blueprintPage }) => expect( + await blueprintPage.node.evaluate(node => node.entity.isDevelopmentOnly()) + ).toBe(nodeTest.development) + ) + test( + `${nodeTest.name}: Maintains the order of attributes`, + async ({ blueprintPage }) => { + const value = await blueprintPage.blueprintLocator.evaluate(blueprint => { + blueprint.selectAll() + return blueprint.template.getCopyInputObject().getSerializedText() + }) + const words = value + .split("\n") + .map(row => row.match(/\s*("?\w+(\s+\w+)*).+/)?.[1]) + .filter(v => v?.length > 0) + expect(value).toMatch(getFirstWordOrder(words)) + } + ) + if (nodeTest.variadic) { + test( + `${nodeTest.name}: Can add new pins`, + async ({ blueprintPage }) => { + const variadic = blueprintPage.node.getByText("Add pin") + await expect(variadic).toBeVisible() + await variadic.click() + expect(await blueprintPage.node.locator("ueb-pin").all()).toHaveLength(nodeTest.pins + 1) + } + ) + } + if (nodeTest.additionalTest) { + test( + `${nodeTest.name}: Additional tests`, + async ({ blueprintPage }) => + nodeTest.additionalTest(blueprintPage.node, await blueprintPage.node.locator("ueb-pin").all()) + ) + } + }) +} diff --git a/tests/parsing.spec.js b/tests/parsing.spec.js new file mode 100644 index 0000000..81462f2 --- /dev/null +++ b/tests/parsing.spec.js @@ -0,0 +1,361 @@ +import { test, expect } from "@playwright/test" +import FormatTextEntity from "../js/entity/FormatTextEntity.js" +import Grammar from "../js/serialization/Grammar.js" +import GuidEntity from "../js/entity/GuidEntity.js" +import initializeSerializerFactory from "../js/serialization/initializeSerializerFactory.js" +import IntegerEntity from "../js/entity/IntegerEntity.js" +import KeyBindingEntity from "../js/entity/KeyBindingEntity.js" +import LinearColorEntity from "../js/entity/LinearColorEntity.js" +import ObjectReferenceEntity from "../js/entity/ObjectReferenceEntity.js" +import RotatorEntity from "../js/entity/RotatorEntity.js" +import SerializerFactory from "../js/serialization/SerializerFactory.js" +import SymbolEntity from "../js/entity/SymbolEntity.js" +import UnknownKeysEntity from "../js/entity/UnknownKeysEntity.js" +import Utility from "../js/Utility.js" +import Vector2DEntity from "../js/entity/Vector2DEntity.js" +import VectorEntity from "../js/entity/VectorEntity.js" + +initializeSerializerFactory() + +test.describe("Serializer", () => { + + test("Boolean", () => { + let serializer = SerializerFactory.getSerializer(Boolean) + expect(serializer.read("true")).toStrictEqual(true) + expect(serializer.read("True")).toStrictEqual(true) + expect(serializer.read("false")).toStrictEqual(false) + expect(serializer.read("False")).toStrictEqual(false) + }) + + test("FormatTextEntity", () => { + let serializer = SerializerFactory.getSerializer(FormatTextEntity) + expect( + serializer.read(`LOCGEN_FORMAT_NAMED(NSLOCTEXT("KismetSchema", "SplitPinFriendlyNameFormat", "{PinDisplayName} {ProtoPinDisplayName}"), "PinDisplayName", "Out Hit", "ProtoPinDisplayName", "Blocking Hit")`) + .toString() + ).toBe("Out Hit Blocking Hit") + expect( + serializer.read(`LOCGEN_FORMAT_NAMED(NSLOCTEXT("KismetSchema", "SplitPinFriendlyNameFormat", "{PinDisplayName} {ProtoPinDisplayName}"), "PinDisplayName", "Out Hit", "ProtoPinDisplayName", "Hit Bone Name")`) + .toString() + ).toBe("Out Hit Hit Bone Name") + expect( + serializer.read(String.raw`LOCGEN_FORMAT_ORDERED( + NSLOCTEXT( + "PCGSettings", + "OverridableParamPinTooltip", + "{0}Attribute type is \"{1}\" and its exact name is \"{2}\"" + ), + "If InRangeMin = InRangeMax, then that density value is mapped to the average of OutRangeMin and OutRangeMax\n", + "float", + "InRangeMin" + )`) + .toString() + + ).toBe(`If InRangeMin = InRangeMax, then that density value is mapped to the average of OutRangeMin and OutRangeMax\nAttribute type is "float" and its exact name is "InRangeMin"`) + }) + + test("GuidEntity", () => { + let serializer = SerializerFactory.getSerializer(GuidEntity) + + let guid = serializer.read("0556a3ecabf648d0a5c07b2478e9dd32") + expect(guid).toBeInstanceOf(GuidEntity) + expect(guid.value).toBe("0556a3ecabf648d0a5c07b2478e9dd32") + + guid = serializer.read("64023BC344E0453DBB583FAC411489BC") + expect(guid).toBeInstanceOf(GuidEntity) + expect(guid.value).toBe("64023BC344E0453DBB583FAC411489BC") + + guid = serializer.read("6edC4a425ca948da8bC78bA52DED6C6C") + expect(guid).toBeInstanceOf(GuidEntity) + expect(guid.value).toBe("6edC4a425ca948da8bC78bA52DED6C6C") + + expect(() => serializer.read("172087193 9B04362973544B3564FDB2C")).toThrow() + expect(() => serializer.read("E25F14F8F3E9441AB07153E7DA2BA2B")).toThrow() + expect(() => serializer.read("A78988B0097E48418C8CB87EC5A67ABF7")).toThrow() + }) + + test("IntegerEntity", () => { + let serializer = SerializerFactory.getSerializer(IntegerEntity) + + let integer = serializer.read("0") + expect(integer).toBeInstanceOf(IntegerEntity) + expect(integer.value).toStrictEqual(0) + + integer = serializer.read("+0") + expect(integer).toBeInstanceOf(IntegerEntity) + expect(integer.value).toStrictEqual(0) + + integer = serializer.read("-0") + expect(integer).toBeInstanceOf(IntegerEntity) + expect(integer.value).toStrictEqual(0) + + integer = serializer.read("99") + expect(integer).toBeInstanceOf(IntegerEntity) + expect(integer.value).toStrictEqual(99) + + integer = serializer.read("-8685") + expect(integer).toBeInstanceOf(IntegerEntity) + expect(integer.value).toStrictEqual(-8685) + + integer = serializer.read("+555") + expect(integer).toBeInstanceOf(IntegerEntity) + expect(integer.value).toStrictEqual(555) + + integer = serializer.read("1000000000") + expect(integer).toBeInstanceOf(IntegerEntity) + expect(integer.value).toStrictEqual(1000000000) + + expect(() => serializer.read("1.2").value).toThrow() + }) + + test("KeyBindingEntity", () => { + let serializer = SerializerFactory.getSerializer(KeyBindingEntity) + + let binding = serializer.read("A") + expect(binding).toBeInstanceOf(KeyBindingEntity) + expect(binding).toMatchObject({ Key: { value: "A" } }) + + binding = serializer.read("(bCtrl=True,Key=A)") + expect(binding).toBeInstanceOf(KeyBindingEntity) + expect(binding).toMatchObject({ Key: { value: "A" }, bCtrl: true }) + + binding = serializer.read("(bCtrl=false,bShift=false,bCmd=true,bAlt=false,Key=X)") + expect(binding).toBeInstanceOf(KeyBindingEntity) + expect(binding).toMatchObject({ Key: { value: "X" }, bAlt: false, bCtrl: false, bCmd: true }) + + binding = serializer.read("( bCtrl= false \n, Key \n\n\n =Y ,bAlt=true )") + expect(binding).toBeInstanceOf(KeyBindingEntity) + expect(binding).toMatchObject({ Key: { value: "Y" }, bAlt: true, bCtrl: false }) + }) + + test("LinearColorEntity", () => { + const serializer = SerializerFactory.getSerializer(LinearColorEntity) + + let color = LinearColorEntity.getWhite() + expect(color.toRGBA()).toStrictEqual([255, 255, 255, 255]) + expect(color.toRGBAString()).toStrictEqual("FFFFFFFF") + expect(color.toNumber()).toStrictEqual(-1) + expect(color.toHSVA()).toStrictEqual([0, 0, 1, 1]) + + color = serializer.read("(R=1,G=0,B=0)") + expect(color.toRGBA()).toStrictEqual([255, 0, 0, 255]) + expect(color.toRGBAString()).toStrictEqual("FF0000FF") + expect(color.toNumber()).toStrictEqual(-16776961) + expect(color.toHSVA()).toStrictEqual([0, 1, 1, 1]) + + color = serializer.read("(R=0.000000,G=0.660000,B=1.000000,A=1.000000)") + expect(color.toRGBA()).toStrictEqual([0, 168, 255, 255]) + expect(color.toRGBAString()).toStrictEqual("00A8FFFF") + expect(color.toNumber()).toStrictEqual(11075583) + expect(color.toHSVA()).toStrictEqual([0.55666666666666666666, 1, 1, 1]) + + color = serializer.read("(B=0.04394509003266556,G=0.026789300067696642,A=0.83663232408635,R=0.6884158028074934,)") + expect(color.toRGBA()).toStrictEqual([176, 7, 11, 213]) + expect(color.toRGBAString()).toStrictEqual("B0070BD5") + expect(color.toNumber()).toStrictEqual(-1341715499) + expect(color.toHSVA().map(v => Utility.roundDecimals(v, 3))).toStrictEqual([0.996, 0.961, 0.688, 0.837]) + + color = serializer.read(`( + A = 0.327 , + R=0.530 , G = 0.685 + ,B + = 0.9 ,)`) + expect(color.toRGBA()).toStrictEqual([135, 175, 230, 83]) + expect(color.toRGBAString()).toStrictEqual("87AFE653") + expect(color.toNumber()).toStrictEqual(-2018515373) + expect(color.toHSVA().map(v => Utility.roundDecimals(v, 3))).toStrictEqual([0.597, 0.411, 0.9, 0.327]) + + expect(() => serializer.read("(R=0.000000,G=0.660000,A=1.000000)")).toThrow() + expect(() => serializer.read("(R=0.000000,G=\"hello\",A=1.000000)")).toThrow() + }) + + test("Number", () => { + const serializer = SerializerFactory.getSerializer(Number) + + expect(serializer.read("0")).toBeCloseTo(0, 0.00001) + expect(serializer.read("+0")).toBeCloseTo(0, 0.00001) + expect(serializer.read("-0")).toBeCloseTo(0, 0.00001) + expect(serializer.read("5")).toBeCloseTo(5, 0.00001) + expect(serializer.read("0.05")).toBeCloseTo(0.05, 0.00001) + expect(serializer.read("-999.666")).toBeCloseTo(-999.666, 0.001) + expect(serializer.read("+45.4545")).toBeCloseTo(45.4545, 0.001) + expect(serializer.read("+1000000000")).toBeCloseTo(1E9, 0.1) + expect(serializer.read("inf")).toBe(Number.POSITIVE_INFINITY) + expect(serializer.read("+inf")).toBe(Number.POSITIVE_INFINITY) + expect(serializer.read("-inf")).toBe(Number.NEGATIVE_INFINITY) + expect(() => serializer.read("alpha")).toThrow() + }) + + test("ObjectReferenceEntity", () => { + const serializer = SerializerFactory.getSerializer(ObjectReferenceEntity) + + let reference = serializer.read("Class") + expect(reference).toBeInstanceOf(ObjectReferenceEntity) + expect(reference).toMatchObject({ type: "Class", path: "" }) + + reference = serializer.read(`Class'/Script/ShooterGame.ShooterGameMode'`) + expect(reference).toBeInstanceOf(ObjectReferenceEntity) + expect(reference).toMatchObject({ type: "Class", path: "/Script/ShooterGame.ShooterGameMode" }) + + reference = serializer.read(`EdGraphPin'EdGraphPin_45417'`) + expect(reference).toBeInstanceOf(ObjectReferenceEntity) + expect(reference).toMatchObject({ type: "EdGraphPin", path: "EdGraphPin_45417" }) + + reference = serializer.read(`EdGraphPin'"K2Node_DynamicCast_2126.EdGraphPin_3990988"'`) + expect(reference).toBeInstanceOf(ObjectReferenceEntity) + expect(reference).toMatchObject({ type: "EdGraphPin", path: "K2Node_DynamicCast_2126.EdGraphPin_3990988" }) + + reference = serializer.read(`/Script/Engine.EdGraph'"/Engine/EditorBlueprintResources/StandardMacros.StandardMacros:Do N"'`) + expect(reference).toBeInstanceOf(ObjectReferenceEntity) + expect(reference).toMatchObject({ type: "/Script/Engine.EdGraph", path: "/Engine/EditorBlueprintResources/StandardMacros.StandardMacros:Do N" }) + + reference = serializer.read(`Function'"/Game/Mods/CrazyDinos/ElementalDragon/CDElementalDragon_Character_BP.SKEL_CDElementalDragon_Character_BP_C:ROS Change Element"'`) + expect(reference).toBeInstanceOf(ObjectReferenceEntity) + expect(reference).toMatchObject({ type: "Function", path: "/Game/Mods/CrazyDinos/ElementalDragon/CDElementalDragon_Character_BP.SKEL_CDElementalDragon_Character_BP_C:ROS Change Element" }) + + reference = serializer.read(`EdGraph'/Game/Systems/BP_MacroGlobal.BP_MacroGlobal:Or+Branch'`) + expect(reference).toBeInstanceOf(ObjectReferenceEntity) + expect(reference).toMatchObject({ type: "EdGraph", path: "/Game/Systems/BP_MacroGlobal.BP_MacroGlobal:Or+Branch" }) + + reference = serializer.read(`/Script/Engine.EdGraph'"+-Weird/2,Macro"'`) + expect(reference).toBeInstanceOf(ObjectReferenceEntity) + expect(reference).toMatchObject({ type: "/Script/Engine.EdGraph", path: "+-Weird/2,Macro" }) + + reference = serializer.read(`/Script/BlueprintGraph.K2Node_VariableGet`) + expect(reference).toBeInstanceOf(ObjectReferenceEntity) + expect(reference).toMatchObject({ type: "/Script/BlueprintGraph.K2Node_VariableGet", path: "" }) + }) + + test("String", () => { + const serializer = SerializerFactory.getSerializer(String) + + expect(serializer.read('""')).toStrictEqual("") + expect(serializer.read('"hello"')).toStrictEqual("hello") + expect(serializer.read('"hello world 123 - éèàò@ç ^ ^^^"')).toStrictEqual("hello world 123 - éèàò@ç ^ ^^^") + expect(serializer.read('"\\""')).toStrictEqual('"') + expect(() => serializer.read("Hello")).toThrow() + }) + + test("UnknownKeysValue", () => { + const parser = Grammar.unknownValue + + expect(parser.parse('"Hello"').constructor).toStrictEqual(String) + expect(parser.parse("()")).toBeNull() + expect(parser.parse("8345").constructor).toStrictEqual(Number) + expect(parser.parse("True").constructor).toStrictEqual(Boolean) + expect(parser.parse("False").constructor).toStrictEqual(Boolean) + expect(parser.parse("F0223D3742E67C0D9FEFB2A64946B7F0").constructor).toStrictEqual(GuidEntity) + expect(parser.parse("SYMBOL1").constructor).toStrictEqual(SymbolEntity) + expect(parser.parse("Symbol_2_3_4").constructor).toStrictEqual(SymbolEntity) + expect(parser.parse("(X=-0.495, Y=0, )").constructor).toStrictEqual(Vector2DEntity) + expect(parser.parse("(X=-0.495,Y=+765.0,Z=7)").constructor).toStrictEqual(VectorEntity) + expect(parser.parse("(R=1.000000,P=7.6,Y=+88.99)").constructor).toStrictEqual(RotatorEntity) + expect(parser.parse("(R=0.000000,G=0.660000,B=1.000000,A=1.000000)").constructor) + .toStrictEqual(LinearColorEntity) + expect(parser.parse(`Class'"/Script/Engine.KismetSystemLibrary"'`).constructor) + .toStrictEqual(ObjectReferenceEntity) + expect(parser.parse("(1,2,3,4,5,6,7,8,9)")).toStrictEqual([1, 2, 3, 4, 5, 6, 7, 8, 9]) + expect(parser.parse(`( "Hello", "World", )`)).toStrictEqual(["Hello", "World"]) + expect(parser.parse(`( "Alpha", 123, Beta, "Gamma", "Delta", 99 )`)) + .toStrictEqual(["Alpha", 123, new SymbolEntity({ value: "Beta" }), "Gamma", "Delta", 99]) + }) + + test("UnknownKeysEntity", () => { + const serializer = SerializerFactory.getSerializer(UnknownKeysEntity) + + let unknown = serializer.read('LookbehindValue(FirstKey=1,SecondKey=SOME_SYMBOL2,ThirdKey="Hello")') + expect(unknown).toBeInstanceOf(UnknownKeysEntity) + expect(unknown).toMatchObject({ + lookbehind: "LookbehindValue", + FirstKey: 1, + SecondKey: new SymbolEntity("SOME_SYMBOL2"), + ThirdKey: "Hello", + }) + + unknown = serializer.read('(A = (-1,-2,-3), B = SomeFunction(B1 = "b1", B2 = (X=101,Y=102,Z=103)))') + expect(unknown).toBeInstanceOf(UnknownKeysEntity) + expect(unknown).toMatchObject({ + lookbehind: "", + A: [-1, -2, -3], + B: new UnknownKeysEntity({ + lookbehind: "SomeFunction", + B1: "b1", + B2: new VectorEntity({ X: 101, Y: 102, Z: 103 }), + }), + }) + }) + + test("VectorEntity", () => { + const serializer = SerializerFactory.getSerializer(VectorEntity) + + let vector = serializer.read("(X=1,Y=2,Z=3.5)") + expect(vector).toBeInstanceOf(VectorEntity) + expect(vector).toStrictEqual(new VectorEntity({ + X: 1, + Y: 2, + Z: 3.5, + })) + + vector = serializer.read("(X=10,Y=+20.88,Z=-30.54,)") + expect(vector).toBeInstanceOf(VectorEntity) + expect(vector).toStrictEqual(new VectorEntity({ + X: 10, + Y: 20.88, + Z: -30.54, + })) + + vector = serializer.read(`( + Z = -3.66 , + + X + = -1 , Y = + + + -2 + , + )`) + expect(vector).toBeInstanceOf(VectorEntity) + expect(vector).toStrictEqual(new VectorEntity({ + X: -1, + Y: -2, + Z: -3.66, + })) + + expect(() => serializer.read("(X=1,Y=\"2\",Z=3)")).toThrow() + expect(() => serializer.read("(X=1,Z=3)")).toThrow() + expect(() => serializer.read("(X=1,Y=2,Unexpected=6,Z=3.5)")).toThrow() + }) + + test("Vector2DEntity", () => { + let serializer = SerializerFactory.getSerializer(Vector2DEntity) + + let vector = serializer.read("(X=78,Y=56.3)") + expect(vector).toBeInstanceOf(Vector2DEntity) + expect(vector).toStrictEqual(new Vector2DEntity({ + X: 78, + Y: 56.3, + })) + + vector = serializer.read("(X=+4.5,Y=-8.88,)") + expect(vector).toBeInstanceOf(Vector2DEntity) + expect(vector).toStrictEqual(new Vector2DEntity({ + X: 4.5, + Y: -8.88, + })) + + vector = serializer.read(`( + Y = +93.004 , + + X + = 0 , + )`) + expect(vector).toBeInstanceOf(Vector2DEntity) + expect(vector).toStrictEqual(new Vector2DEntity({ + X: 0, + Y: 93.004, + })) + + expect(() => serializer.read("(X=1,Y=\"2\")")).toThrow() + expect(() => serializer.read("(X=1)")).toThrow() + expect(() => serializer.read("(X=777, Y=555, Unexpected=6, HH=2)")).toThrow() + }) +}) diff --git a/cypress/fixtures/Entity1.js b/tests/resources/Entity1.js similarity index 100% rename from cypress/fixtures/Entity1.js rename to tests/resources/Entity1.js diff --git a/cypress/fixtures/Entity2.js b/tests/resources/Entity2.js similarity index 100% rename from cypress/fixtures/Entity2.js rename to tests/resources/Entity2.js diff --git a/cypress/fixtures/Entity3.js b/tests/resources/Entity3.js similarity index 100% rename from cypress/fixtures/Entity3.js rename to tests/resources/Entity3.js diff --git a/cypress/fixtures/Entity4.js b/tests/resources/Entity4.js similarity index 94% rename from cypress/fixtures/Entity4.js rename to tests/resources/Entity4.js index a9ecbae..e93d0e2 100644 --- a/cypress/fixtures/Entity4.js +++ b/tests/resources/Entity4.js @@ -18,6 +18,7 @@ export default class Entity4 extends IEntity { constructor() { super() + /** @type {Entity1} */ this.second IEntity.defineAttributes(this.second, { 0: { inlined: true, diff --git a/cypress/fixtures/Entity5.js b/tests/resources/Entity5.js similarity index 100% rename from cypress/fixtures/Entity5.js rename to tests/resources/Entity5.js diff --git a/cypress/fixtures/EntityF.js b/tests/resources/EntityF.js similarity index 100% rename from cypress/fixtures/EntityF.js rename to tests/resources/EntityF.js diff --git a/tests/resources/EventNodes.js b/tests/resources/EventNodes.js new file mode 100644 index 0000000..e997201 --- /dev/null +++ b/tests/resources/EventNodes.js @@ -0,0 +1,92 @@ +import Configuration from "../../js/Configuration.js" +import NodeTests from "./NodeTests.js" +import SVGIcon from "../../js/SVGIcon.js" + +export default class EventNodes extends NodeTests { + static { + this.set([ + { + name: "MoveCharacterRandomLocation", + subtitle: "Custom Event", + value: String.raw` + Begin Object Class=/Script/BlueprintGraph.K2Node_CustomEvent Name="K2Node_CustomEvent_4" + CustomFunctionName="MoveCharacterRandomLocation" + NodePosX=-368 + NodePosY=64 + NodeGuid=9C3BF2E5A27C4B45825C025A224639EA + CustomProperties Pin (PinId=B563D2CC4FC67B5F348BE18F59F694A4,PinName="OutputDelegate",Direction="EGPD_Output",PinType.PinCategory="delegate",PinType.PinSubCategory="",PinType.PinSubCategoryObject=None,PinType.PinSubCategoryMemberReference=(MemberParent=/Script/Engine.BlueprintGeneratedClass'"/Temp/Untitled_1.Untitled_C"',MemberName="MoveCharacterRandomLocation",MemberGuid=9C3BF2E5A27C4B45825C025A224639EA),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=0DE0B9A2469DB01A69BD5C8BB17D15BB,PinName="then",Direction="EGPD_Output",PinType.PinCategory="exec",PinType.PinSubCategory="",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,LinkedTo=(K2Node_Knot_8 C5BBC59C45ACF577B59616A9D79986B3,),PersistentGuid=00000000000000000000000000000000,bHidden=False,bNotConnectable=False,bDefaultValueIsReadOnly=False,bDefaultValueIsIgnored=False,bAdvancedView=False,bOrphanedPin=False,) + End Object + `, + size: [16, 5], + color: Configuration.nodeColors.red, + icon: SVGIcon.event, + pins: 2, + delegate: true, + development: false, + }, + { + name: "OnComponentBeginOverlap_Event", + subtitle: "Custom Event", + value: String.raw` + Begin Object Class=/Script/BlueprintGraph.K2Node_CustomEvent Name="K2Node_CustomEvent_0" + CustomFunctionName="OnComponentBeginOverlap_Event" + NodePosX=-96 + NodePosY=608 + NodeGuid=6BB0872D81764DAD9270E32E66A4E01C + CustomProperties Pin (PinId=DB4E85FC86FD4EC784FFC45C77BB895C,PinName="OutputDelegate",Direction="EGPD_Output",PinType.PinCategory="delegate",PinType.PinSubCategory="",PinType.PinSubCategoryObject=None,PinType.PinSubCategoryMemberReference=(MemberParent=/Script/Engine.BlueprintGeneratedClass'"/Temp/Untitled_1.Untitled_C"',MemberName="OnComponentBeginOverlap_Event",MemberGuid=6BB0872D81764DAD9270E32E66A4E01C),PinType.PinValueType=(),PinType.ContainerType=None,PinType.bIsReference=False,PinType.bIsConst=False,PinType.bIsWeakPointer=False,PinType.bIsUObjectWrapper=False,PinType.bSerializeAsSinglePrecisionFloat=False,LinkedTo=(K2Node_AssignDelegate_0 D1C3E8BFC4A54F62B5A566D72FAF5363,),PersistentGuid=00000000000000000000000000000000,bHidden=False,bNotConnectable=False,bDefaultValueIsReadOnly=False,bDefaultValueIsIgnored=False,bAdvancedView=False,bOrphanedPin=False,) + CustomProperties Pin (PinId=FE89EFE7B4AF4461B4969FF6AA4E46FC,PinName="then",Direction="EGPD_Output",PinType.PinCategory="exec",PinType.PinSubCategory="",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,) + CustomProperties Pin (PinId=0253993B7559437ABDA8A4FFE6EC2CA6,PinName="OverlappedComponent",Direction="EGPD_Output",PinType.PinCategory="object",PinType.PinSubCategory="",PinType.PinSubCategoryObject=/Script/CoreUObject.Class'"/Script/Engine.PrimitiveComponent"',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=E1538C05015F49D3A3927FFCB700ACB4,PinName="OtherActor",Direction="EGPD_Output",PinType.PinCategory="object",PinType.PinSubCategory="",PinType.PinSubCategoryObject=/Script/CoreUObject.Class'"/Script/Engine.Actor"',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=DA531C332C9041CCBBE58A42C94A0BA3,PinName="OtherComp",Direction="EGPD_Output",PinType.PinCategory="object",PinType.PinSubCategory="",PinType.PinSubCategoryObject=/Script/CoreUObject.Class'"/Script/Engine.PrimitiveComponent"',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=C957CCBA488341E787645E4C886DE2F2,PinName="OtherBodyIndex",Direction="EGPD_Output",PinType.PinCategory="int",PinType.PinSubCategory="",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,) + CustomProperties Pin (PinId=03154C6B4A784B3E82393A3A66803DEF,PinName="bFromSweep",Direction="EGPD_Output",PinType.PinCategory="bool",PinType.PinSubCategory="",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,) + CustomProperties Pin (PinId=FC68A0EBC0FC4A27BECAB79E49D860BD,PinName="SweepResult",Direction="EGPD_Output",PinType.PinCategory="struct",PinType.PinSubCategory="",PinType.PinSubCategoryObject=/Script/CoreUObject.ScriptStruct'"/Script/Engine.HitResult"',PinType.PinSubCategoryMemberReference=(),PinType.PinValueType=(),PinType.ContainerType=None,PinType.bIsReference=True,PinType.bIsConst=True,PinType.bIsWeakPointer=False,PinType.bIsUObjectWrapper=False,PinType.bSerializeAsSinglePrecisionFloat=False,PersistentGuid=00000000000000000000000000000000,bHidden=False,bNotConnectable=False,bDefaultValueIsReadOnly=False,bDefaultValueIsIgnored=False,bAdvancedView=False,bOrphanedPin=False,) + CustomProperties UserDefinedPin (PinName="OverlappedComponent",PinType=(PinCategory="object",PinSubCategoryObject=/Script/CoreUObject.Class'"/Script/Engine.PrimitiveComponent"'),DesiredPinDirection=EGPD_Output) + CustomProperties UserDefinedPin (PinName="OtherActor",PinType=(PinCategory="object",PinSubCategoryObject=/Script/CoreUObject.Class'"/Script/Engine.Actor"'),DesiredPinDirection=EGPD_Output) + CustomProperties UserDefinedPin (PinName="OtherComp",PinType=(PinCategory="object",PinSubCategoryObject=/Script/CoreUObject.Class'"/Script/Engine.PrimitiveComponent"'),DesiredPinDirection=EGPD_Output) + CustomProperties UserDefinedPin (PinName="OtherBodyIndex",PinType=(PinCategory="int"),DesiredPinDirection=EGPD_Output) + CustomProperties UserDefinedPin (PinName="bFromSweep",PinType=(PinCategory="bool"),DesiredPinDirection=EGPD_Output) + CustomProperties UserDefinedPin (PinName="SweepResult",PinType=(PinCategory="struct",PinSubCategoryObject=/Script/CoreUObject.ScriptStruct'"/Script/Engine.HitResult"',bIsReference=True,bIsConst=True),DesiredPinDirection=EGPD_Output) + End Object + `, + size: [16.5, 16], + color: Configuration.nodeColors.red, + icon: SVGIcon.event, + pins: 8, + pinNames: [ + "Overlapped Component", + "Other Actor", + "Other Comp", + "Other Body Index", + "From Sweep", + "Sweep Result", + ], + delegate: true, + development: false, + }, + { + name: "Call AS!%sasd Adsad DD", + value: String.raw` + Begin Object Class=/Script/BlueprintGraph.K2Node_CallDelegate Name="K2Node_CallDelegate_0" ExportPath=/Script/BlueprintGraph.K2Node_CallDelegate'"/PCG/BP_Elements/PCGAsset.PCGAsset:EventGraph.K2Node_CallDelegate_0"' + "DelegateReference"=(MemberName="AS!%sasdAdsadDD",MemberGuid=FB6F7CD342716A4FA22AA6AD6E6B7ED9,bSelfContext=True) + "NodePosX"=-176 + "NodePosY"=368 + "NodeGuid"=DE76D7A748D78DF77131B0AE166442A6 + CustomProperties Pin (PinId=C329158B42D4E4DA1CAEF7A04ED77100,PinName="execute",PinType.PinCategory="exec",PinType.PinSubCategory="",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,) + CustomProperties Pin (PinId=8D92F70C46C94C389AAC3E87191AB46A,PinName="then",Direction="EGPD_Output",PinType.PinCategory="exec",PinType.PinSubCategory="",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,) + CustomProperties Pin (PinId=88182FCB4DE7B6D80AD1B79906069691,PinName="self",PinFriendlyName=NSLOCTEXT("K2Node", "BaseMCDelegateSelfPinName", "Target"),PinType.PinCategory="object",PinType.PinSubCategory="",PinType.PinSubCategoryObject=/Script/Engine.BlueprintGeneratedClass'"/PCG/BP_Elements/PCGAsset.PCGAsset_C"',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 + `, + color: Configuration.nodeColors.blue, + icon: SVGIcon.node, + pins: 3, + pinNames: [ + "Target", + ], + delegate: false, + development: false, + }, + ]) + } +} diff --git a/tests/resources/FlowControlNodes.js b/tests/resources/FlowControlNodes.js new file mode 100644 index 0000000..0cbc2d7 --- /dev/null +++ b/tests/resources/FlowControlNodes.js @@ -0,0 +1,542 @@ +import Configuration from "../../js/Configuration.js" +import SVGIcon from "../../js/SVGIcon.js" +import NodeTests from "./NodeTests.js" + +export default class FlowControlNodes extends NodeTests { + static { + this.set([ + { + name: "Branch", + value: String.raw` + Begin Object Class=/Script/BlueprintGraph.K2Node_IfThenElse Name="K2Node_IfThenElse_3" + NodePosX=-864 + NodePosY=-112 + NodeGuid=394F6A9DE87E4DAF8815B0BC582F67F4 + CustomProperties Pin (PinId=370DE2594FC6D3DF81672491D09FA4F2,PinName="execute",PinType.PinCategory="exec",PinType.PinSubCategory="",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,LinkedTo=(K2Node_ComponentBoundEvent_2 CA668D354E07DD5D3FDF828A8DCB31E2,),PersistentGuid=00000000000000000000000000000000,bHidden=False,bNotConnectable=False,bDefaultValueIsReadOnly=False,bDefaultValueIsIgnored=False,bAdvancedView=False,bOrphanedPin=False,) + CustomProperties Pin (PinId=CC13602F47301B384984DD90F31BBF44,PinName="Condition",PinType.PinCategory="bool",PinType.PinSubCategory="",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,DefaultValue="true",AutogeneratedDefaultValue="true",LinkedTo=(K2Node_VariableGet_6 67589E5F4FC4B9ADA6B13EA1FE75D4BD,),PersistentGuid=00000000000000000000000000000000,bHidden=False,bNotConnectable=False,bDefaultValueIsReadOnly=False,bDefaultValueIsIgnored=False,bAdvancedView=False,bOrphanedPin=False,) + CustomProperties Pin (PinId=5144C992425351C9738579B61BF10CFB,PinName="then",PinFriendlyName=NSLOCTEXT("K2Node", "true", "true"),Direction="EGPD_Output",PinType.PinCategory="exec",PinType.PinSubCategory="",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,) + CustomProperties Pin (PinId=79F953C54BDCD44353369F803937AC7C,PinName="else",PinFriendlyName=NSLOCTEXT("K2Node", "false", "false"),Direction="EGPD_Output",PinType.PinCategory="exec",PinType.PinSubCategory="",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,LinkedTo=(K2Node_IfThenElse_22 2937CFDB4A1C853A34A3B9A67E534029,),PersistentGuid=00000000000000000000000000000000,bHidden=False,bNotConnectable=False,bDefaultValueIsReadOnly=False,bDefaultValueIsIgnored=False,bAdvancedView=False,bOrphanedPin=False,) + End Object + `, + size: [12.5, 6], + color: Configuration.nodeColors.gray, + icon: SVGIcon.branchNode, + pins: 4, + pinNames: ["Condition", "True", "False"], + delegate: false, + development: false, + }, + { + name: "For Each Loop", + value: String.raw` + Begin Object Class=/Script/BlueprintGraph.K2Node_MacroInstance Name="K2Node_MacroInstance_1" + MacroGraphReference=(MacroGraph=/Script/Engine.EdGraph'"/Engine/EditorBlueprintResources/StandardMacros.StandardMacros:ForEachLoop"',GraphBlueprint=/Script/Engine.Blueprint'"/Engine/EditorBlueprintResources/StandardMacros.StandardMacros"',GraphGuid=99DBFD5540A796041F72A5A9DA655026) + NodePosX=-1216 + NodePosY=96 + NodeGuid=DC35C020857E45708D1A7ED3695C0275 + CustomProperties Pin (PinId=98E5694575854D738E59826A4192E63A,PinName="Exec",PinType.PinCategory="exec",PinType.PinSubCategory="",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,) + CustomProperties Pin (PinId=4586F50C416540779AEF16C701119F59,PinName="Array",PinType.PinCategory="wildcard",PinType.PinSubCategory="",PinType.PinSubCategoryObject=None,PinType.PinSubCategoryMemberReference=(),PinType.PinValueType=(),PinType.ContainerType=Array,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=612E0159522948FE9702A36B283523D1,PinName="LoopBody",Direction="EGPD_Output",PinType.PinCategory="exec",PinType.PinSubCategory="",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,) + CustomProperties Pin (PinId=2E365C79D539495FB537CABA9D37F15F,PinName="Array Element",Direction="EGPD_Output",PinType.PinCategory="wildcard",PinType.PinSubCategory="",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,) + CustomProperties Pin (PinId=5797F5E5CBCA47E1B9A39DA8A3893D3D,PinName="Array Index",Direction="EGPD_Output",PinType.PinCategory="int",PinType.PinSubCategory="",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,) + CustomProperties Pin (PinId=6B0EBB7A7BD547E6A3C22BC7F782E742,PinName="Completed",Direction="EGPD_Output",PinType.PinCategory="exec",PinType.PinSubCategory="",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: [12, 10], + color: Configuration.nodeColors.gray, + icon: SVGIcon.forEachLoop, + pins: 6, + pinNames: ["Exec", "Array", "Loop Body", "Array Element", "Array Index", "Completed"], + delegate: false, + development: false, + }, + { + name: "For Each Loop with Break", + value: String.raw` + Begin Object Class=/Script/BlueprintGraph.K2Node_MacroInstance Name="K2Node_MacroInstance_2" + MacroGraphReference=(MacroGraph=/Script/Engine.EdGraph'"/Engine/EditorBlueprintResources/StandardMacros.StandardMacros:ForEachLoopWithBreak"',GraphBlueprint=/Script/Engine.Blueprint'"/Engine/EditorBlueprintResources/StandardMacros.StandardMacros"',GraphGuid=F07560274C5742E391E84B8F394CFB36) + NodePosX=-1136 + NodePosY=-272 + NodeGuid=008F14B9BBA5487F8AE49CD1C8630069 + CustomProperties Pin (PinId=4456C17B27D54BE786BF4FF61C25DE9D,PinName="Exec",PinType.PinCategory="exec",PinType.PinSubCategory="",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,) + CustomProperties Pin (PinId=B6A7B986B2DC4BC0ADB9961E2741EA9D,PinName="Array",PinType.PinCategory="wildcard",PinType.PinSubCategory="",PinType.PinSubCategoryObject=None,PinType.PinSubCategoryMemberReference=(),PinType.PinValueType=(),PinType.ContainerType=Array,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=FB6676D0482D418E9E02F303438FC999,PinName="Break",PinType.PinCategory="exec",PinType.PinSubCategory="",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,) + CustomProperties Pin (PinId=DF7D57F4846F49D19DBBA1EF1555B8E3,PinName="LoopBody",Direction="EGPD_Output",PinType.PinCategory="exec",PinType.PinSubCategory="",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,) + CustomProperties Pin (PinId=8938553CAE344B4B9FE849C020278383,PinName="Array Element",Direction="EGPD_Output",PinType.PinCategory="wildcard",PinType.PinSubCategory="",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,) + CustomProperties Pin (PinId=3870EB0F61D842F789DA17E4DC1D66FC,PinName="Array Index",Direction="EGPD_Output",PinType.PinCategory="int",PinType.PinSubCategory="",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,) + CustomProperties Pin (PinId=ABDAB2F741CF47A4A2E49D0F37A22901,PinName="Completed",Direction="EGPD_Output",PinType.PinCategory="exec",PinType.PinSubCategory="",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: [13, 10], + color: Configuration.nodeColors.gray, + icon: SVGIcon.forEachLoop, + pins: 7, + pinNames: ["Exec", "Array", "Break", "Loop Body", "Array Element", "Array Index", "Completed"], + delegate: false, + development: false, + }, + { + name: "Reverse For Each Loop", + value: String.raw` + Begin Object Class=/Script/BlueprintGraph.K2Node_MacroInstance Name="K2Node_MacroInstance_3" + MacroGraphReference=(MacroGraph=/Script/Engine.EdGraph'"/Engine/EditorBlueprintResources/StandardMacros.StandardMacros:ReverseForEachLoop"',GraphBlueprint=/Script/Engine.Blueprint'"/Engine/EditorBlueprintResources/StandardMacros.StandardMacros"',GraphGuid=6DB5FE084A27CDF3569C7980D75D7E14) + ResolvedWildcardType=(PinCategory="wildcard") + NodePosX=-560 + NodePosY=-256 + NodeGuid=695A57C9EA744959BD630B5A6843125C + CustomProperties Pin (PinId=82F4FB580F714AA8BC05E24CBEA36A39,PinName="Exec",PinType.PinCategory="exec",PinType.PinSubCategory="",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,) + CustomProperties Pin (PinId=2FDD4BF2642849E0BD7B5912F90B4193,PinName="Array",PinType.PinCategory="wildcard",PinType.PinSubCategory="",PinType.PinSubCategoryObject=None,PinType.PinSubCategoryMemberReference=(),PinType.PinValueType=(),PinType.ContainerType=Array,PinType.bIsReference=False,PinType.bIsConst=False,PinType.bIsWeakPointer=False,PinType.bIsUObjectWrapper=False,PinType.bSerializeAsSinglePrecisionFloat=False,LinkedTo=(K2Node_MacroInstance_2 8938553CAE344B4B9FE849C020278383,),PersistentGuid=00000000000000000000000000000000,bHidden=False,bNotConnectable=False,bDefaultValueIsReadOnly=False,bDefaultValueIsIgnored=False,bAdvancedView=False,bOrphanedPin=False,) + CustomProperties Pin (PinId=68B4210D1454406988CE323FE8C1E694,PinName="LoopBody",Direction="EGPD_Output",PinType.PinCategory="exec",PinType.PinSubCategory="",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,) + CustomProperties Pin (PinId=687A39ADBA1C40B58DB4D4A98C68BB30,PinName="ArrayIndex",Direction="EGPD_Output",PinType.PinCategory="int",PinType.PinSubCategory="",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,) + CustomProperties Pin (PinId=5E11F11E5F9B4E0DA2924E7DB49F01F7,PinName="ArrayElement",Direction="EGPD_Output",PinType.PinCategory="wildcard",PinType.PinSubCategory="",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,) + CustomProperties Pin (PinId=BD41530556AD4731B63C13B1183CD844,PinName="Completed",Direction="EGPD_Output",PinType.PinCategory="exec",PinType.PinSubCategory="",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: [12, 10], + color: Configuration.nodeColors.gray, + icon: SVGIcon.macro, + pins: 6, + pinNames: ["Exec", "Array", "Loop Body", "Array Index", "Array Element", "Completed"], + delegate: false, + development: false, + }, + { + name: "For Each EAudioComponentPlayState", + value: String.raw` + Begin Object Class=/Script/BlueprintGraph.K2Node_ForEachElementInEnum Name="K2Node_ForEachElementInEnum_0" + Enum=/Script/CoreUObject.Enum'"/Script/Engine.EAudioComponentPlayState"' + NodePosX=-992 + NodePosY=320 + AdvancedPinDisplay=Shown + NodeGuid=706F82B7815D4137AE662D70A97A62C3 + CustomProperties Pin (PinId=6F89188317294812A79E72CFB15C3DDF,PinName="execute",PinType.PinCategory="exec",PinType.PinSubCategory="",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,) + CustomProperties Pin (PinId=B9078293CD49417AAD1145A636C63C2E,PinName="SkipHidden",PinToolTip="Skip Hidden\nBoolean\n\nControls whether or not the loop will skip over hidden enumeration values.",PinType.PinCategory="bool",PinType.PinSubCategory="",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,DefaultValue="true",AutogeneratedDefaultValue="true",PersistentGuid=00000000000000000000000000000000,bHidden=False,bNotConnectable=False,bDefaultValueIsReadOnly=False,bDefaultValueIsIgnored=False,bAdvancedView=True,bOrphanedPin=False,) + CustomProperties Pin (PinId=5545D12AE949466C98B743E1C736812C,PinName="LoopBody",Direction="EGPD_Output",PinType.PinCategory="exec",PinType.PinSubCategory="",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,) + CustomProperties Pin (PinId=1D66C9B98B8E4C6FBFD39B33C10380EA,PinName="EnumValue",Direction="EGPD_Output",PinType.PinCategory="byte",PinType.PinSubCategory="",PinType.PinSubCategoryObject=/Script/CoreUObject.Enum'"/Script/Engine.EAudioComponentPlayState"',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=D255092C0E544047BB60DD4A8F5333D9,PinName="then",PinFriendlyName=NSLOCTEXT("K2Node", "Completed", "Completed"),Direction="EGPD_Output",PinType.PinCategory="exec",PinType.PinSubCategory="",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: [17.5, 9], + color: Configuration.nodeColors.blue, + icon: SVGIcon.loop, + pins: 5, + pinNames: ["Skip Hidden", "Loop Body", "Enum Value", "Completed"], + delegate: false, + development: false, + }, + { + name: "While Loop", + value: String.raw` + Begin Object Class=/Script/BlueprintGraph.K2Node_MacroInstance Name="K2Node_MacroInstance_4" + MacroGraphReference=(MacroGraph=/Script/Engine.EdGraph'"/Engine/EditorBlueprintResources/StandardMacros.StandardMacros:WhileLoop"',GraphBlueprint=/Script/Engine.Blueprint'"/Engine/EditorBlueprintResources/StandardMacros.StandardMacros"',GraphGuid=FA93B260444755CD702C21A123E9A987) + NodePosX=-560 + NodePosY=304 + NodeGuid=3F7D9F61E00A4E5CA14FD89320152E4C + CustomProperties Pin (PinId=07FE7CEDC21341B7B4E0D40D5CF1E57B,PinName="execute",PinType.PinCategory="exec",PinType.PinSubCategory="",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,) + CustomProperties Pin (PinId=836339BCD71F4D9FA0894B3447A5E8E1,PinName="Condition",PinType.PinCategory="bool",PinType.PinSubCategory="",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,) + CustomProperties Pin (PinId=6A7A1020DE2B4B33B9E82F975D24F144,PinName="LoopBody",Direction="EGPD_Output",PinType.PinCategory="exec",PinType.PinSubCategory="",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,) + CustomProperties Pin (PinId=B5207FF901074E8CB5152721DB154529,PinName="Completed",Direction="EGPD_Output",PinType.PinCategory="exec",PinType.PinSubCategory="",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: [14.5, 6], + color: Configuration.nodeColors.gray, + icon: SVGIcon.loop, + pins: 4, + pinNames: ["Condition", "Loop Body", "Completed"], + delegate: false, + development: false, + }, + { + name: "Is Valid", + value: String.raw` + Begin Object Class=/Script/BlueprintGraph.K2Node_MacroInstance Name="K2Node_MacroInstance_0" + MacroGraphReference=(MacroGraph=/Script/Engine.EdGraph'"/Engine/EditorBlueprintResources/StandardMacros.StandardMacros:IsValid"',GraphBlueprint=/Script/Engine.Blueprint'"/Engine/EditorBlueprintResources/StandardMacros.StandardMacros"',GraphGuid=64422BCD430703FF5CAEA8B79A32AA65) + NodePosX=-656 + NodePosY=304 + NodeGuid=4CE17DC3398743D3A0DF641B28BA82FE + CustomProperties Pin (PinId=8E6B4EA9EF3D418A9017555312A36415,PinName="exec",PinType.PinCategory="exec",PinType.PinSubCategory="",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,) + CustomProperties Pin (PinId=18F0CDCFCDFC49FC92EABDFD77FB2649,PinName="InputObject",PinType.PinCategory="object",PinType.PinSubCategory="",PinType.PinSubCategoryObject=/Script/CoreUObject.Class'"/Script/CoreUObject.Object"',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=B4E31AA12E8D448C8A19F523C10F8527,PinName="Is Valid",Direction="EGPD_Output",PinType.PinCategory="exec",PinType.PinSubCategory="",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,) + CustomProperties Pin (PinId=49E3CCDD6EBB46AE9B6FDFBC951E092C,PinName="Is Not Valid",Direction="EGPD_Output",PinType.PinCategory="exec",PinType.PinSubCategory="",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: [18, 9], + color: Configuration.nodeColors.gray, + icon: SVGIcon.questionMark, + pins: 4, + pinNames: ["Exec", "Input Object", "Is Valid", "Is Not Valid"], + delegate: false, + development: false, + }, + { + name: "Multi Gate", + value: String.raw` + Begin Object Class=/Script/BlueprintGraph.K2Node_MultiGate Name="K2Node_MultiGate_2" + NodePosX=-96 + NodePosY=-160 + NodeGuid=8D5767632F6C462B928E7F9A47E84AF3 + CustomProperties Pin (PinId=61334592A1B647A7888EDF804247FF70,PinName="execute",PinType.PinCategory="exec",PinType.PinSubCategory="",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,) + CustomProperties Pin (PinId=39200141C5D0415B825C28E3EC01A3F1,PinName="Out 0",Direction="EGPD_Output",PinType.PinCategory="exec",PinType.PinSubCategory="",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,) + CustomProperties Pin (PinId=EF36C23B68A44578B518B963E636D33C,PinName="Out 1",Direction="EGPD_Output",PinType.PinCategory="exec",PinType.PinSubCategory="",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,) + CustomProperties Pin (PinId=92FADDC1B07C45AC8BEF2FE42E13A638,PinName="Reset",PinType.PinCategory="exec",PinType.PinSubCategory="",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,) + CustomProperties Pin (PinId=363311761BC8401B8B26AD4B2D255749,PinName="IsRandom",PinType.PinCategory="bool",PinType.PinSubCategory="",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,) + CustomProperties Pin (PinId=6F24605AD128461BB5652884D40E61E3,PinName="Loop",PinType.PinCategory="bool",PinType.PinSubCategory="",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,) + CustomProperties Pin (PinId=E547C9E4961A43AD944E6877C2FF44D6,PinName="StartIndex",PinType.PinCategory="int",PinType.PinSubCategory="",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,DefaultValue="-1",AutogeneratedDefaultValue="-1",PersistentGuid=00000000000000000000000000000000,bHidden=False,bNotConnectable=False,bDefaultValueIsReadOnly=False,bDefaultValueIsIgnored=False,bAdvancedView=False,bOrphanedPin=False,) + End Object + `, + size: [13.5, 12.5], + color: Configuration.nodeColors.gray, + icon: SVGIcon.sequence, + pins: 7, + pinNames: ["Reset", "Is Random", "Loop", "Start Index", "Out 0", "Out 1"], + delegate: false, + development: false, + variadic: true, + }, + { + name: "Do Once", + value: String.raw` + Begin Object Class=/Script/BlueprintGraph.K2Node_MacroInstance Name="K2Node_MacroInstance_1" + MacroGraphReference=(MacroGraph=/Script/Engine.EdGraph'"/Engine/EditorBlueprintResources/StandardMacros.StandardMacros:DoOnce"',GraphBlueprint=/Script/Engine.Blueprint'"/Engine/EditorBlueprintResources/StandardMacros.StandardMacros"',GraphGuid=1281F54248A2ECB5B8B2C5B24AE6FDF4) + NodePosX=-416 + NodePosY=-112 + NodeGuid=A1831A1B85EF4E568E766FE3A3BCC5CD + CustomProperties Pin (PinId=5C24D82D7B084DFB841D17E5DF1CD8CF,PinName="execute",PinType.PinCategory="exec",PinType.PinSubCategory="",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,) + CustomProperties Pin (PinId=27242FC0B565448396C6A2DCD6BEDBD1,PinName="Reset",PinType.PinCategory="exec",PinType.PinSubCategory="",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,) + CustomProperties Pin (PinId=A8C0EB54974741248EA0B7B97FAC44DE,PinName="Start Closed",PinType.PinCategory="bool",PinType.PinSubCategory="",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,DefaultValue="true",PersistentGuid=00000000000000000000000000000000,bHidden=False,bNotConnectable=False,bDefaultValueIsReadOnly=False,bDefaultValueIsIgnored=False,bAdvancedView=False,bOrphanedPin=False,) + CustomProperties Pin (PinId=3DE1FC03BFCD4ACF9AC7B99B89CEF465,PinName="Completed",Direction="EGPD_Output",PinType.PinCategory="exec",PinType.PinSubCategory="",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,LinkedTo=(K2Node_MultiGate_2 92FADDC1B07C45AC8BEF2FE42E13A638,),PersistentGuid=00000000000000000000000000000000,bHidden=False,bNotConnectable=False,bDefaultValueIsReadOnly=False,bDefaultValueIsIgnored=False,bAdvancedView=False,bOrphanedPin=False,) + End Object + `, + size: [15, 8], + color: Configuration.nodeColors.gray, + icon: SVGIcon.doOnce, + pins: 4, + pinNames: ["Reset", "Start Closed", "Completed"], + delegate: false, + development: false, + }, + { + name: "Switch on EConstantQFFTSizeEnum", + value: String.raw` + Begin Object Class=/Script/BlueprintGraph.K2Node_SwitchEnum Name="K2Node_SwitchEnum_0" + Enum=/Script/CoreUObject.Enum'"/Script/AudioSynesthesia.EConstantQFFTSizeEnum"' + EnumEntries(0)="Min" + EnumEntries(1)="XXSmall" + EnumEntries(2)="XSmall" + EnumEntries(3)="Small" + EnumEntries(4)="Medium" + EnumEntries(5)="Large" + EnumEntries(6)="XLarge" + EnumEntries(7)="XXLarge" + EnumEntries(8)="Max" + NodePosX=16 + NodePosY=704 + AdvancedPinDisplay=Hidden + NodeGuid=9DCDC46C72FF47CE91F86A8045F0033E + CustomProperties Pin (PinId=1593030F27084BFD85F54D30CD32C5B8,PinName="execute",PinType.PinCategory="exec",PinType.PinSubCategory="",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,) + CustomProperties Pin (PinId=17161A0F216A4F2FB64374200F51E83D,PinName="Selection",PinType.PinCategory="byte",PinType.PinSubCategory="",PinType.PinSubCategoryObject=/Script/CoreUObject.Enum'"/Script/AudioSynesthesia.EConstantQFFTSizeEnum"',PinType.PinSubCategoryMemberReference=(),PinType.PinValueType=(),PinType.ContainerType=None,PinType.bIsReference=False,PinType.bIsConst=False,PinType.bIsWeakPointer=False,PinType.bIsUObjectWrapper=False,PinType.bSerializeAsSinglePrecisionFloat=False,DefaultValue="Min",PersistentGuid=00000000000000000000000000000000,bHidden=False,bNotConnectable=False,bDefaultValueIsReadOnly=False,bDefaultValueIsIgnored=False,bAdvancedView=False,bOrphanedPin=False,) + CustomProperties Pin (PinId=B14C4298DE3249649D40116D72461E25,PinName="NotEqual_ByteByte",PinType.PinCategory="object",PinType.PinSubCategory="",PinType.PinSubCategoryObject=/Script/CoreUObject.Class'"/Script/Engine.KismetMathLibrary"',PinType.PinSubCategoryMemberReference=(),PinType.PinValueType=(),PinType.ContainerType=None,PinType.bIsReference=False,PinType.bIsConst=False,PinType.bIsWeakPointer=False,PinType.bIsUObjectWrapper=False,PinType.bSerializeAsSinglePrecisionFloat=False,DefaultObject="/Script/Engine.Default__KismetMathLibrary",PersistentGuid=00000000000000000000000000000000,bHidden=True,bNotConnectable=True,bDefaultValueIsReadOnly=True,bDefaultValueIsIgnored=False,bAdvancedView=False,bOrphanedPin=False,) + CustomProperties Pin (PinId=3B40821CA7C749BFAA558A8CF4402B55,PinName="Min",PinFriendlyName=NSLOCTEXT("UObjectDisplayNames", "EConstantQFFTSizeEnum.Min", "Min"),Direction="EGPD_Output",PinType.PinCategory="exec",PinType.PinSubCategory="",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,) + CustomProperties Pin (PinId=B95FFACBCBD040B2AAB48011BC143625,PinName="XXSmall",PinFriendlyName=NSLOCTEXT("UObjectDisplayNames", "EConstantQFFTSizeEnum.XXSmall", "XXSmall"),Direction="EGPD_Output",PinType.PinCategory="exec",PinType.PinSubCategory="",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,) + CustomProperties Pin (PinId=340171B1D59F422E96B45F9B1E11892A,PinName="XSmall",PinFriendlyName=NSLOCTEXT("UObjectDisplayNames", "EConstantQFFTSizeEnum.XSmall", "XSmall"),Direction="EGPD_Output",PinType.PinCategory="exec",PinType.PinSubCategory="",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,) + CustomProperties Pin (PinId=BD0B6BF19D6C4BA487498C4A768FF500,PinName="Small",PinFriendlyName=NSLOCTEXT("UObjectDisplayNames", "EConstantQFFTSizeEnum.Small", "Small"),Direction="EGPD_Output",PinType.PinCategory="exec",PinType.PinSubCategory="",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=True,bOrphanedPin=False,) + CustomProperties Pin (PinId=58E2F332700044E88E8A591FFBE5DEDB,PinName="Medium",PinFriendlyName=NSLOCTEXT("UObjectDisplayNames", "EConstantQFFTSizeEnum.Medium", "Medium"),Direction="EGPD_Output",PinType.PinCategory="exec",PinType.PinSubCategory="",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=True,bOrphanedPin=False,) + CustomProperties Pin (PinId=94B36AB248454AE2884C39DDBBBE55E2,PinName="Large",PinFriendlyName=NSLOCTEXT("UObjectDisplayNames", "EConstantQFFTSizeEnum.Large", "Large"),Direction="EGPD_Output",PinType.PinCategory="exec",PinType.PinSubCategory="",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=True,bOrphanedPin=False,) + CustomProperties Pin (PinId=9F6110F3DE5D42B69DAEDD2BA1F83908,PinName="XLarge",PinFriendlyName=NSLOCTEXT("UObjectDisplayNames", "EConstantQFFTSizeEnum.XLarge", "XLarge"),Direction="EGPD_Output",PinType.PinCategory="exec",PinType.PinSubCategory="",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=True,bOrphanedPin=False,) + CustomProperties Pin (PinId=42A13039E2144897A11DC3A5B96CA8C4,PinName="XXLarge",PinFriendlyName=NSLOCTEXT("UObjectDisplayNames", "EConstantQFFTSizeEnum.XXLarge", "XXLarge"),Direction="EGPD_Output",PinType.PinCategory="exec",PinType.PinSubCategory="",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=True,bOrphanedPin=False,) + CustomProperties Pin (PinId=A064703325A4454EA72392A6C725CCC4,PinName="Max",PinFriendlyName=NSLOCTEXT("UObjectDisplayNames", "EConstantQFFTSizeEnum.Max", "Max"),Direction="EGPD_Output",PinType.PinCategory="exec",PinType.PinSubCategory="",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=True,bOrphanedPin=False,) + End Object + `, + size: [21, 9], + color: Configuration.nodeColors.lime, + icon: SVGIcon.switch, + pins: 11, + pinNames: ["Selection", "Min", "XXSmall", "XSmall", "Small", "Medium", "Large", "XLarge", "XXLarge", "Max"], + delegate: false, + development: false, + }, + { + name: "Flip Flop", + value: String.raw` + Begin Object Class=/Script/BlueprintGraph.K2Node_MacroInstance Name="K2Node_MacroInstance_5" + MacroGraphReference=(MacroGraph=/Script/Engine.EdGraph'"/Engine/EditorBlueprintResources/StandardMacros.StandardMacros:FlipFlop"',GraphBlueprint=/Script/Engine.Blueprint'"/Engine/EditorBlueprintResources/StandardMacros.StandardMacros"',GraphGuid=BFFFAAE4434E166F549665AD1AA89B60) + NodePosX=-48 + NodePosY=48 + NodeGuid=267CBD7BDA9243E0916C518E03EA7F8E + CustomProperties Pin (PinId=CF77C07A39514336BF1F33B71FA6F31A,PinType.PinCategory="exec",PinType.PinSubCategory="",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,) + CustomProperties Pin (PinId=ABD456E3A9E541FCA849DBC7460338A0,PinName="A",Direction="EGPD_Output",PinType.PinCategory="exec",PinType.PinSubCategory="",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,) + CustomProperties Pin (PinId=1E4BC9A55AA247CA8B9B2BA0F4159D07,PinName="B",Direction="EGPD_Output",PinType.PinCategory="exec",PinType.PinSubCategory="",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,) + CustomProperties Pin (PinId=0A09A61366D142C8A0564EC3C173DB79,PinName="IsA",Direction="EGPD_Output",PinType.PinCategory="bool",PinType.PinSubCategory="",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: [7.5, 8], + color: Configuration.nodeColors.gray, + icon: SVGIcon.flipflop, + pins: 4, + pinNames: ["A", "B", "Is A"], + delegate: false, + development: false, + }, + { + name: "Switch on Int", + value: String.raw` + Begin Object Class=/Script/BlueprintGraph.K2Node_SwitchInteger Name="K2Node_SwitchInteger_0" ExportPath=/Script/BlueprintGraph.K2Node_SwitchInteger'"/Temp/Untitled_1.Untitled_1:PersistentLevel.Untitled.EventGraph.K2Node_SwitchInteger_0"' + NodePosX=-976 + NodePosY=-208 + NodeGuid=7D1D44AEC61748948595579E4933DE01 + CustomProperties Pin (PinId=B7119DBD876E4E398D5463E9E8D25EFE,PinName="Default",Direction="EGPD_Output",PinType.PinCategory="exec",PinType.PinSubCategory="",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,) + CustomProperties Pin (PinId=7EB587CEB10C4EBEBFCF3F6611CF9C01,PinName="execute",PinType.PinCategory="exec",PinType.PinSubCategory="",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,) + CustomProperties Pin (PinId=7D90CED7751B46F7ADD3F9D15676441A,PinName="Selection",PinType.PinCategory="int",PinType.PinSubCategory="",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,DefaultValue="0",AutogeneratedDefaultValue="0",PersistentGuid=00000000000000000000000000000000,bHidden=False,bNotConnectable=False,bDefaultValueIsReadOnly=False,bDefaultValueIsIgnored=False,bAdvancedView=False,bOrphanedPin=False,) + CustomProperties Pin (PinId=02817A0069B94F3A873C263E46A63B3E,PinName="NotEqual_IntInt",PinType.PinCategory="object",PinType.PinSubCategory="",PinType.PinSubCategoryObject=/Script/CoreUObject.Class'"/Script/Engine.KismetMathLibrary"',PinType.PinSubCategoryMemberReference=(),PinType.PinValueType=(),PinType.ContainerType=None,PinType.bIsReference=False,PinType.bIsConst=False,PinType.bIsWeakPointer=False,PinType.bIsUObjectWrapper=False,PinType.bSerializeAsSinglePrecisionFloat=False,DefaultObject="/Script/Engine.Default__KismetMathLibrary",PersistentGuid=00000000000000000000000000000000,bHidden=True,bNotConnectable=True,bDefaultValueIsReadOnly=True,bDefaultValueIsIgnored=False,bAdvancedView=False,bOrphanedPin=False,) + CustomProperties Pin (PinId=1C4A112E24004AC3A1960F3BF59E812B,PinName="0",Direction="EGPD_Output",PinType.PinCategory="exec",PinType.PinSubCategory="",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,) + CustomProperties Pin (PinId=9E6A8E01BC714310841B8574240BA501,PinName="1",Direction="EGPD_Output",PinType.PinCategory="exec",PinType.PinSubCategory="",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,) + CustomProperties Pin (PinId=978FFD75663A489895DC53A8B326CB5F,PinName="2",Direction="EGPD_Output",PinType.PinCategory="exec",PinType.PinSubCategory="",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,) + CustomProperties Pin (PinId=349E7E6CDB62428EA386712CAC7EF798,PinName="3",Direction="EGPD_Output",PinType.PinCategory="exec",PinType.PinSubCategory="",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,) + CustomProperties Pin (PinId=DEF18A0DAEF34E1FAC4FA0A5778C1A88,PinName="4",Direction="EGPD_Output",PinType.PinCategory="exec",PinType.PinSubCategory="",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,) + CustomProperties Pin (PinId=9A642941C48546DDB9A882F3E394508C,PinName="5",Direction="EGPD_Output",PinType.PinCategory="exec",PinType.PinSubCategory="",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,) + CustomProperties Pin (PinId=DC199B5D33804EAD80796CD80EFD7433,PinName="6",Direction="EGPD_Output",PinType.PinCategory="exec",PinType.PinSubCategory="",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,) + CustomProperties Pin (PinId=AB4824D6FBFD40658A3C9140FE151DF3,PinName="7",Direction="EGPD_Output",PinType.PinCategory="exec",PinType.PinSubCategory="",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,) + CustomProperties Pin (PinId=4FECE418AD1F407C9C2F9F0C13DCDB0D,PinName="8",Direction="EGPD_Output",PinType.PinCategory="exec",PinType.PinSubCategory="",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,) + CustomProperties Pin (PinId=CF45C88AC0BD478991162D3382B5023D,PinName="9",Direction="EGPD_Output",PinType.PinCategory="exec",PinType.PinSubCategory="",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,) + CustomProperties Pin (PinId=05C0A6F6CC7D45BDAA4BD32A0D57C4A1,PinName="10",Direction="EGPD_Output",PinType.PinCategory="exec",PinType.PinSubCategory="",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,) + CustomProperties Pin (PinId=04ED677A3E3142C7BB5BC3E85E7623EA,PinName="11",Direction="EGPD_Output",PinType.PinCategory="exec",PinType.PinSubCategory="",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,) + CustomProperties Pin (PinId=160F5EFF0F354543A639C2C59B7487E3,PinName="12",Direction="EGPD_Output",PinType.PinCategory="exec",PinType.PinSubCategory="",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,) + CustomProperties Pin (PinId=BC1F119C3E33404787B7562401576DDA,PinName="13",Direction="EGPD_Output",PinType.PinCategory="exec",PinType.PinSubCategory="",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,) + CustomProperties Pin (PinId=64A00EF9C0584A7FA3F9EE804DECCD26,PinName="14",Direction="EGPD_Output",PinType.PinCategory="exec",PinType.PinSubCategory="",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,) + CustomProperties Pin (PinId=AFEB73E3A747474EB2034D7D59FC02D7,PinName="15",Direction="EGPD_Output",PinType.PinCategory="exec",PinType.PinSubCategory="",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,) + CustomProperties Pin (PinId=E860933499D24ADF8FF9A1ECA2E4E94F,PinName="16",Direction="EGPD_Output",PinType.PinCategory="exec",PinType.PinSubCategory="",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,) + CustomProperties Pin (PinId=7A918DA2394740A28C1250C1A7A061C9,PinName="17",Direction="EGPD_Output",PinType.PinCategory="exec",PinType.PinSubCategory="",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: [13, 42], + color: Configuration.nodeColors.lime, + icon: SVGIcon.switch, + pins: 21, + pinNames: [ + "Selection", + "0", + "1", + "2", + "3", + "4", + "5", + "6", + "7", + "8", + "9", + "10", + "11", + "12", + "13", + "14", + "15", + "16", + "17", + "Default" + ], + delegate: false, + development: false, + variadic: true, + }, + { + name: "Switch on String", + value: String.raw` + Begin Object Class=/Script/BlueprintGraph.K2Node_SwitchString Name="K2Node_SwitchString_0" + PinNames(0)="Case_0" + PinNames(1)="Case_1" + PinNames(2)="Case_2" + NodePosX=-2240 + NodePosY=-384 + NodeGuid=7375BC78BF274EFFA76D29F8C2ED121E + CustomProperties Pin (PinId=99643F5A360E4D88AAFCD821E256574F,PinName="Default",Direction="EGPD_Output",PinType.PinCategory="exec",PinType.PinSubCategory="",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,) + CustomProperties Pin (PinId=ACA3449DD6494C67BD30E4FAEFF01C2F,PinName="execute",PinType.PinCategory="exec",PinType.PinSubCategory="",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,) + CustomProperties Pin (PinId=A210E336701C487F8CB425FA599DC5DE,PinName="Selection",PinType.PinCategory="string",PinType.PinSubCategory="",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,) + CustomProperties Pin (PinId=15F56FC350CD47D7A54E4E077818C933,PinName="NotEqual_StriStri",PinType.PinCategory="object",PinType.PinSubCategory="",PinType.PinSubCategoryObject=/Script/CoreUObject.Class'"/Script/Engine.KismetStringLibrary"',PinType.PinSubCategoryMemberReference=(),PinType.PinValueType=(),PinType.ContainerType=None,PinType.bIsReference=False,PinType.bIsConst=False,PinType.bIsWeakPointer=False,PinType.bIsUObjectWrapper=False,PinType.bSerializeAsSinglePrecisionFloat=False,DefaultObject="/Script/Engine.Default__KismetStringLibrary",PersistentGuid=00000000000000000000000000000000,bHidden=True,bNotConnectable=True,bDefaultValueIsReadOnly=True,bDefaultValueIsIgnored=False,bAdvancedView=False,bOrphanedPin=False,) + CustomProperties Pin (PinId=D8C63349C83E4236A207A7DA51002328,PinName="Case_0",Direction="EGPD_Output",PinType.PinCategory="exec",PinType.PinSubCategory="",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,) + CustomProperties Pin (PinId=5DFD70BF7F0C476FA5159979821FF45F,PinName="Case_1",Direction="EGPD_Output",PinType.PinCategory="exec",PinType.PinSubCategory="",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,) + CustomProperties Pin (PinId=C902D54233354133B40C1CC8696C339F,PinName="Case_2",Direction="EGPD_Output",PinType.PinCategory="exec",PinType.PinSubCategory="",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: [13, 12], + color: Configuration.nodeColors.lime, + icon: SVGIcon.switch, + pins: 6, + pinNames: ["Selection", "Case 0", "Case 1", "Case 2", "Default"], + delegate: false, + development: false, + variadic: true, + }, + { + name: "Switch on Gameplay Tag", + value: String.raw` + Begin Object Class=/Script/GameplayTagsEditor.GameplayTagsK2Node_SwitchGameplayTag Name="GameplayTagsK2Node_SwitchGameplayTag_0" + PinTags(14)=() + PinNames(0)="Case_0" + PinNames(1)="Case_1" + PinNames(2)="Case_2" + PinNames(3)="Case_3" + PinNames(4)="Case_4" + PinNames(5)="Case_5" + PinNames(6)="Case_6" + PinNames(7)="Case_7" + PinNames(8)="Case_8" + PinNames(9)="Case_9" + PinNames(10)="Case_10" + PinNames(11)="Case_11" + PinNames(12)="Case_12" + PinNames(13)="Case_13" + PinNames(14)="Case_14" + NodePosX=-512 + NodeGuid=ED658BB7B62F438C9C4C8241FE7333E0 + CustomProperties Pin (PinId=6272078D163F42A0972D3D5DE4267F93,PinName="Default",Direction="EGPD_Output",PinType.PinCategory="exec",PinType.PinSubCategory="",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,) + CustomProperties Pin (PinId=3C1FB3CA71024EC183146491615C75D6,PinName="execute",PinType.PinCategory="exec",PinType.PinSubCategory="",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,) + CustomProperties Pin (PinId=6A936EB599F144DEB209E7062D494522,PinName="Selection",PinType.PinCategory="struct",PinType.PinSubCategory="",PinType.PinSubCategoryObject=/Script/CoreUObject.ScriptStruct'"/Script/GameplayTags.GameplayTag"',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=5DCD6681C7D94F0FBD7FC06ECD41B733,PinName="NotEqual_TagTag",PinType.PinCategory="object",PinType.PinSubCategory="",PinType.PinSubCategoryObject=/Script/CoreUObject.Class'"/Script/GameplayTags.BlueprintGameplayTagLibrary"',PinType.PinSubCategoryMemberReference=(),PinType.PinValueType=(),PinType.ContainerType=None,PinType.bIsReference=False,PinType.bIsConst=False,PinType.bIsWeakPointer=False,PinType.bIsUObjectWrapper=False,PinType.bSerializeAsSinglePrecisionFloat=False,DefaultObject="/Script/GameplayTags.Default__BlueprintGameplayTagLibrary",PersistentGuid=00000000000000000000000000000000,bHidden=True,bNotConnectable=True,bDefaultValueIsReadOnly=True,bDefaultValueIsIgnored=False,bAdvancedView=False,bOrphanedPin=False,) + CustomProperties Pin (PinId=761B2B809F974008BDC8F9D5AAC1DA2A,PinName="Case_0",Direction="EGPD_Output",PinType.PinCategory="exec",PinType.PinSubCategory="",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,) + CustomProperties Pin (PinId=B5E8DC43F8504407B038C8FC2A1E98FA,PinName="Case_1",Direction="EGPD_Output",PinType.PinCategory="exec",PinType.PinSubCategory="",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,) + CustomProperties Pin (PinId=AD14BC4F66DC488584D4EE9CBF2EB80F,PinName="Case_2",Direction="EGPD_Output",PinType.PinCategory="exec",PinType.PinSubCategory="",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,) + CustomProperties Pin (PinId=1612FF4C75E2470D96B7496492ECB40D,PinName="Case_3",Direction="EGPD_Output",PinType.PinCategory="exec",PinType.PinSubCategory="",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,) + CustomProperties Pin (PinId=71DB09F379DA4F6AAC316170276217EA,PinName="Case_4",Direction="EGPD_Output",PinType.PinCategory="exec",PinType.PinSubCategory="",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,) + CustomProperties Pin (PinId=7FB99DAC1E1A45DEA7543A0CCE7ED8CC,PinName="Case_5",Direction="EGPD_Output",PinType.PinCategory="exec",PinType.PinSubCategory="",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,) + CustomProperties Pin (PinId=923B58C73D384BACAC49664AD1CE9F16,PinName="Case_6",Direction="EGPD_Output",PinType.PinCategory="exec",PinType.PinSubCategory="",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,) + CustomProperties Pin (PinId=B80CF21281234D3E9F8CF90C6EECD6F5,PinName="Case_7",Direction="EGPD_Output",PinType.PinCategory="exec",PinType.PinSubCategory="",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,) + CustomProperties Pin (PinId=110CC7DBBB3B4840B00335AD1C3FB531,PinName="Case_8",Direction="EGPD_Output",PinType.PinCategory="exec",PinType.PinSubCategory="",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,) + CustomProperties Pin (PinId=E5166419AD504A99A59651413DB1EBAE,PinName="Case_9",Direction="EGPD_Output",PinType.PinCategory="exec",PinType.PinSubCategory="",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,) + CustomProperties Pin (PinId=5CB0EC686EB841E08C64D261EBE2CDFE,PinName="Case_10",Direction="EGPD_Output",PinType.PinCategory="exec",PinType.PinSubCategory="",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,) + CustomProperties Pin (PinId=144D73A3F8FD4C8092F862D1863A5132,PinName="Case_11",Direction="EGPD_Output",PinType.PinCategory="exec",PinType.PinSubCategory="",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,) + CustomProperties Pin (PinId=2515EACDE70541A191CA8F45E4346A0C,PinName="Case_12",Direction="EGPD_Output",PinType.PinCategory="exec",PinType.PinSubCategory="",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,) + CustomProperties Pin (PinId=6F1F3687EA7F43DA8AC166E35B9AD3F3,PinName="Case_13",Direction="EGPD_Output",PinType.PinCategory="exec",PinType.PinSubCategory="",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,) + CustomProperties Pin (PinId=62464A0DADE0407382DA61A0593EBE12,PinName="Case_14",Direction="EGPD_Output",PinType.PinCategory="exec",PinType.PinSubCategory="",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: [15, 36], + color: Configuration.nodeColors.lime, + icon: SVGIcon.switch, + pins: 18, + pinNames: [ + "Selection", + "Case 0", + "Case 1", + "Case 2", + "Case 3", + "Case 4", + "Case 5", + "Case 6", + "Case 7", + "Case 8", + "Case 9", + "Case 10", + "Case 11", + "Case 12", + "Case 13", + "Case 14", + "Default" + ], + delegate: false, + development: false, + }, + { + name: "Switch on Name", + value: String.raw` + Begin Object Class=/Script/BlueprintGraph.K2Node_SwitchName Name="K2Node_SwitchName_0" + PinNames(0)="Case_0" + NodePosX=-1872 + NodePosY=-192 + NodeGuid=0F6D37C81EA34BDBBB5BCF1B50640C58 + CustomProperties Pin (PinId=364302AC219347A49E8686050F7BEA5A,PinName="Default",Direction="EGPD_Output",PinType.PinCategory="exec",PinType.PinSubCategory="",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,) + CustomProperties Pin (PinId=8831972A02E84D90B4F1A9E21727B68F,PinName="execute",PinType.PinCategory="exec",PinType.PinSubCategory="",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,) + CustomProperties Pin (PinId=5306210FE1664181ADA50665ACB9EFCF,PinName="Selection",PinType.PinCategory="name",PinType.PinSubCategory="",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,DefaultValue="None",AutogeneratedDefaultValue="None",PersistentGuid=00000000000000000000000000000000,bHidden=False,bNotConnectable=False,bDefaultValueIsReadOnly=False,bDefaultValueIsIgnored=False,bAdvancedView=False,bOrphanedPin=False,) + CustomProperties Pin (PinId=7449D10CD02444BFAC164F750710688E,PinName="NotEqual_NameName",PinType.PinCategory="object",PinType.PinSubCategory="",PinType.PinSubCategoryObject=/Script/CoreUObject.Class'"/Script/Engine.KismetMathLibrary"',PinType.PinSubCategoryMemberReference=(),PinType.PinValueType=(),PinType.ContainerType=None,PinType.bIsReference=False,PinType.bIsConst=False,PinType.bIsWeakPointer=False,PinType.bIsUObjectWrapper=False,PinType.bSerializeAsSinglePrecisionFloat=False,DefaultObject="/Script/Engine.Default__KismetMathLibrary",PersistentGuid=00000000000000000000000000000000,bHidden=True,bNotConnectable=True,bDefaultValueIsReadOnly=True,bDefaultValueIsIgnored=False,bAdvancedView=False,bOrphanedPin=False,) + CustomProperties Pin (PinId=FA2ED9343F4648D7A2EC9E8DB23C87BE,PinName="Case_0",Direction="EGPD_Output",PinType.PinCategory="exec",PinType.PinSubCategory="",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: [14.5, 8.5], + color: Configuration.nodeColors.lime, + icon: SVGIcon.switch, + pins: 4, + pinNames: ["Selection", "Case 0", "Default"], + delegate: false, + development: false, + variadic: true, + }, + { + name: "Switch on ENiagaraOrientationAxis", + value: String.raw` + Begin Object Class=/Script/BlueprintGraph.K2Node_SwitchEnum Name="K2Node_SwitchEnum_3" + Enum=/Script/Engine.UserDefinedEnum'"/Niagara/Enums/ENiagaraOrientationAxis.ENiagaraOrientationAxis"' + EnumEntries(0)="NewEnumerator0" + EnumEntries(1)="NewEnumerator1" + EnumEntries(2)="NewEnumerator2" + NodePosX=128 + NodePosY=272 + NodeGuid=27ECE312F8464337AAFD3E4710FD0108 + CustomProperties Pin (PinId=D9D55819354041FCA1749D111E98462F,PinName="execute",PinType.PinCategory="exec",PinType.PinSubCategory="",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,) + CustomProperties Pin (PinId=A34A643489CB4A9A8AB8EF406E66E586,PinName="Selection",PinType.PinCategory="byte",PinType.PinSubCategory="",PinType.PinSubCategoryObject=/Script/Engine.UserDefinedEnum'"/Niagara/Enums/ENiagaraOrientationAxis.ENiagaraOrientationAxis"',PinType.PinSubCategoryMemberReference=(),PinType.PinValueType=(),PinType.ContainerType=None,PinType.bIsReference=False,PinType.bIsConst=False,PinType.bIsWeakPointer=False,PinType.bIsUObjectWrapper=False,PinType.bSerializeAsSinglePrecisionFloat=False,DefaultValue="NewEnumerator0",PersistentGuid=00000000000000000000000000000000,bHidden=False,bNotConnectable=False,bDefaultValueIsReadOnly=False,bDefaultValueIsIgnored=False,bAdvancedView=False,bOrphanedPin=False,) + CustomProperties Pin (PinId=E28F973F53654172AA58FEB665826457,PinName="NotEqual_ByteByte",PinType.PinCategory="object",PinType.PinSubCategory="",PinType.PinSubCategoryObject=/Script/CoreUObject.Class'"/Script/Engine.KismetMathLibrary"',PinType.PinSubCategoryMemberReference=(),PinType.PinValueType=(),PinType.ContainerType=None,PinType.bIsReference=False,PinType.bIsConst=False,PinType.bIsWeakPointer=False,PinType.bIsUObjectWrapper=False,PinType.bSerializeAsSinglePrecisionFloat=False,DefaultObject="/Script/Engine.Default__KismetMathLibrary",PersistentGuid=00000000000000000000000000000000,bHidden=True,bNotConnectable=True,bDefaultValueIsReadOnly=True,bDefaultValueIsIgnored=False,bAdvancedView=False,bOrphanedPin=False,) + CustomProperties Pin (PinId=02E2659FDD834A9483316C112630A17C,PinName="NewEnumerator0",PinFriendlyName=NSLOCTEXT("[9C9868C74FCF3E7AFDEB778F8C9EA988]", "1CE439C14E8741B2E94E4896C5BB29BB", "X Axis"),Direction="EGPD_Output",PinType.PinCategory="exec",PinType.PinSubCategory="",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,) + CustomProperties Pin (PinId=36E317D2BD3C48A7BED78FFE25AD1451,PinName="NewEnumerator1",PinFriendlyName=NSLOCTEXT("[9C9868C74FCF3E7AFDEB778F8C9EA988]", "4807FD384418AD133AF56D9DD063A9D8", "Y Axis"),Direction="EGPD_Output",PinType.PinCategory="exec",PinType.PinSubCategory="",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,) + CustomProperties Pin (PinId=2020E66C887C446DB4B69B0CA9652A6A,PinName="NewEnumerator2",PinFriendlyName=NSLOCTEXT("[9C9868C74FCF3E7AFDEB778F8C9EA988]", "0D8EE448409B4A8CD1F47FAB0AC122CF", "Z Axis"),Direction="EGPD_Output",PinType.PinCategory="exec",PinType.PinSubCategory="",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: [20, 8], + color: Configuration.nodeColors.lime, + icon: SVGIcon.switch, + pins: 5, + pinNames: ["Selection", "X Axis", "Y Axis", "Z Axis"], + delegate: false, + development: false, + }, + { + name: "Switch on FTransformChannelEnum", + value: String.raw` + Begin Object Class=/Script/BlueprintGraph.K2Node_SwitchEnum Name="K2Node_SwitchEnum_4" + Enum=/Script/CoreUObject.Enum'"/Script/MovieSceneTools.FTransformChannelEnum"' + EnumEntries(0)="TranslateX" + EnumEntries(1)="TranslateY" + EnumEntries(2)="TranslateZ" + EnumEntries(3)="RotateX" + EnumEntries(4)="RotateY" + EnumEntries(5)="RotateZ" + EnumEntries(6)="ScaleX" + EnumEntries(7)="ScaleY" + EnumEntries(8)="ScaleZ" + NodePosX=-48 + NodePosY=448 + AdvancedPinDisplay=Shown + NodeGuid=27936712DE844DD68577CF8D703E315B + CustomProperties Pin (PinId=AF3B9C33C7E84817A720F393F7307A46,PinName="execute",PinType.PinCategory="exec",PinType.PinSubCategory="",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,) + CustomProperties Pin (PinId=045AC753EEF74356BE997C19BB00B82B,PinName="Selection",PinType.PinCategory="byte",PinType.PinSubCategory="",PinType.PinSubCategoryObject=/Script/CoreUObject.Enum'"/Script/MovieSceneTools.FTransformChannelEnum"',PinType.PinSubCategoryMemberReference=(),PinType.PinValueType=(),PinType.ContainerType=None,PinType.bIsReference=False,PinType.bIsConst=False,PinType.bIsWeakPointer=False,PinType.bIsUObjectWrapper=False,PinType.bSerializeAsSinglePrecisionFloat=False,DefaultValue="ScaleX",PersistentGuid=00000000000000000000000000000000,bHidden=False,bNotConnectable=False,bDefaultValueIsReadOnly=False,bDefaultValueIsIgnored=False,bAdvancedView=False,bOrphanedPin=False,) + CustomProperties Pin (PinId=759822D08F654AF7ACDFA6F0590404B8,PinName="NotEqual_ByteByte",PinType.PinCategory="object",PinType.PinSubCategory="",PinType.PinSubCategoryObject=/Script/CoreUObject.Class'"/Script/Engine.KismetMathLibrary"',PinType.PinSubCategoryMemberReference=(),PinType.PinValueType=(),PinType.ContainerType=None,PinType.bIsReference=False,PinType.bIsConst=False,PinType.bIsWeakPointer=False,PinType.bIsUObjectWrapper=False,PinType.bSerializeAsSinglePrecisionFloat=False,DefaultObject="/Script/Engine.Default__KismetMathLibrary",PersistentGuid=00000000000000000000000000000000,bHidden=True,bNotConnectable=True,bDefaultValueIsReadOnly=True,bDefaultValueIsIgnored=False,bAdvancedView=False,bOrphanedPin=False,) + CustomProperties Pin (PinId=D91E0E2866954BC887234AA8883DCB83,PinName="TranslateX",PinFriendlyName=NSLOCTEXT("UObjectDisplayNames", "FTransformChannelEnum.TranslateX", "Translate X"),Direction="EGPD_Output",PinType.PinCategory="exec",PinType.PinSubCategory="",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,) + CustomProperties Pin (PinId=697FB3903E294ADF821BFBD574CB2976,PinName="TranslateY",PinFriendlyName=NSLOCTEXT("UObjectDisplayNames", "FTransformChannelEnum.TranslateY", "Translate Y"),Direction="EGPD_Output",PinType.PinCategory="exec",PinType.PinSubCategory="",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,) + CustomProperties Pin (PinId=F76AB334C5E24919815C2AAAEACCD14B,PinName="TranslateZ",PinFriendlyName=NSLOCTEXT("UObjectDisplayNames", "FTransformChannelEnum.TranslateZ", "Translate Z"),Direction="EGPD_Output",PinType.PinCategory="exec",PinType.PinSubCategory="",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,) + CustomProperties Pin (PinId=1C6C49D0E8A94F2F99A1DF9AF1574D16,PinName="RotateX",PinFriendlyName=NSLOCTEXT("UObjectDisplayNames", "FTransformChannelEnum.RotateX", "Rotate X"),Direction="EGPD_Output",PinType.PinCategory="exec",PinType.PinSubCategory="",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=True,bOrphanedPin=False,) + CustomProperties Pin (PinId=0D35BB4401504A20B45D152BCA0B9BD0,PinName="RotateY",PinFriendlyName=NSLOCTEXT("UObjectDisplayNames", "FTransformChannelEnum.RotateY", "Rotate Y"),Direction="EGPD_Output",PinType.PinCategory="exec",PinType.PinSubCategory="",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=True,bOrphanedPin=False,) + CustomProperties Pin (PinId=2024CA11E8E840F1A1D7C087145476AC,PinName="RotateZ",PinFriendlyName=NSLOCTEXT("UObjectDisplayNames", "FTransformChannelEnum.RotateZ", "Rotate Z"),Direction="EGPD_Output",PinType.PinCategory="exec",PinType.PinSubCategory="",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=True,bOrphanedPin=False,) + CustomProperties Pin (PinId=E9F47D5F991E43318D29DD40089114D4,PinName="ScaleX",PinFriendlyName=NSLOCTEXT("UObjectDisplayNames", "FTransformChannelEnum.ScaleX", "Scale X"),Direction="EGPD_Output",PinType.PinCategory="exec",PinType.PinSubCategory="",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=True,bOrphanedPin=False,) + CustomProperties Pin (PinId=D41C6BF492AD4AB09AE11DFEF442E256,PinName="ScaleY",PinFriendlyName=NSLOCTEXT("UObjectDisplayNames", "FTransformChannelEnum.ScaleY", "Scale Y"),Direction="EGPD_Output",PinType.PinCategory="exec",PinType.PinSubCategory="",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=True,bOrphanedPin=False,) + CustomProperties Pin (PinId=A7460C8034394A20863B4AB8A38249D9,PinName="ScaleZ",PinFriendlyName=NSLOCTEXT("UObjectDisplayNames", "FTransformChannelEnum.ScaleZ", "Scale Z"),Direction="EGPD_Output",PinType.PinCategory="exec",PinType.PinSubCategory="",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=True,bOrphanedPin=False,) + End Object + `, + size: [22, 21], + color: Configuration.nodeColors.lime, + icon: SVGIcon.switch, + pins: 11, + pinNames: [ + "Selection", + "Translate X", + "Translate Y", + "Translate Z", + "Rotate X", + "Rotate Y", + "Rotate Z", + "Scale X", + "Scale Y", + "Scale Z", + ], + delegate: false, + development: false, + }, + ]) + } +} diff --git a/tests/resources/InputNodes.js b/tests/resources/InputNodes.js new file mode 100644 index 0000000..7be8a9f --- /dev/null +++ b/tests/resources/InputNodes.js @@ -0,0 +1,889 @@ +import Configuration from "../../js/Configuration.js" +import SVGIcon from "../../js/SVGIcon.js" +import NodeTests from "./NodeTests.js" + +export default class InputNodes extends NodeTests { + static { + this.set([ + { + name: "A", + value: String.raw` + Begin Object Class=/Script/BlueprintGraph.K2Node_InputKey Name="K2Node_InputKey_21" + InputKey=A + NodePosX=-304 + NodePosY=96 + NodeGuid=6259F5F555434903AC5C3C666F979944 + CustomProperties Pin (PinId=CB98C983F3F1464DB10FB786E52E0722,PinName="Pressed",Direction="EGPD_Output",PinType.PinCategory="exec",PinType.PinSubCategory="",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,) + CustomProperties Pin (PinId=D306257F70BF42C19140148BE5998EA3,PinName="Released",Direction="EGPD_Output",PinType.PinCategory="exec",PinType.PinSubCategory="",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,) + CustomProperties Pin (PinId=2977AECB23E44F76A1F92E4DCE1EEE8C,PinName="Key",Direction="EGPD_Output",PinType.PinCategory="struct",PinType.PinSubCategory="",PinType.PinSubCategoryObject=/Script/CoreUObject.ScriptStruct'"/Script/InputCore.Key"',PinType.PinSubCategoryMemberReference=(),PinType.PinValueType=(),PinType.ContainerType=None,PinType.bIsReference=False,PinType.bIsConst=False,PinType.bIsWeakPointer=False,PinType.bIsUObjectWrapper=False,PinType.bSerializeAsSinglePrecisionFloat=False,DefaultValue="None",AutogeneratedDefaultValue="None",PersistentGuid=00000000000000000000000000000000,bHidden=False,bNotConnectable=False,bDefaultValueIsReadOnly=False,bDefaultValueIsIgnored=False,bAdvancedView=False,bOrphanedPin=False,) + End Object + `, + size: [6, 8], + color: Configuration.nodeColors.red, + icon: SVGIcon.keyboard, + pins: 3, + pinNames: ["Pressed", "Released", "Key"], + delegate: false, + development: false, + }, + { + name: "à", + value: String.raw` + Begin Object Class=/Script/BlueprintGraph.K2Node_InputKey Name="K2Node_InputKey_22" + InputKey=A_AccentGrave + NodePosX=-16 + NodePosY=208 + NodeGuid=D3DB357D428F46BBB529721239DD16DF + CustomProperties Pin (PinId=DB7FA89F149E4CE3B2A1F5F103A2C074,PinName="Pressed",Direction="EGPD_Output",PinType.PinCategory="exec",PinType.PinSubCategory="",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,) + CustomProperties Pin (PinId=75FF129EE9094AD3867206DEB7E9D907,PinName="Released",Direction="EGPD_Output",PinType.PinCategory="exec",PinType.PinSubCategory="",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,) + CustomProperties Pin (PinId=E6898EC029904C069C75CFBA94BED0D5,PinName="Key",Direction="EGPD_Output",PinType.PinCategory="struct",PinType.PinSubCategory="",PinType.PinSubCategoryObject=/Script/CoreUObject.ScriptStruct'"/Script/InputCore.Key"',PinType.PinSubCategoryMemberReference=(),PinType.PinValueType=(),PinType.ContainerType=None,PinType.bIsReference=False,PinType.bIsConst=False,PinType.bIsWeakPointer=False,PinType.bIsUObjectWrapper=False,PinType.bSerializeAsSinglePrecisionFloat=False,DefaultValue="None",AutogeneratedDefaultValue="None",PersistentGuid=00000000000000000000000000000000,bHidden=False,bNotConnectable=False,bDefaultValueIsReadOnly=False,bDefaultValueIsIgnored=False,bAdvancedView=False,bOrphanedPin=False,) + End Object + `, + size: [6, 8], + color: Configuration.nodeColors.red, + icon: SVGIcon.keyboard, + pins: 3, + pinNames: ["Pressed", "Released", "Key"], + delegate: false, + development: false, + }, + { + name: "è", + value: String.raw` + Begin Object Class=/Script/BlueprintGraph.K2Node_InputKey Name="K2Node_InputKey_23" + InputKey=E_AccentGrave + NodePosX=208 + NodePosY=160 + NodeGuid=63A85924985A4AA49975B74C27EB01D6 + CustomProperties Pin (PinId=BE32B517D2734017AF0A84D6C359CD96,PinName="Pressed",Direction="EGPD_Output",PinType.PinCategory="exec",PinType.PinSubCategory="",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,) + CustomProperties Pin (PinId=B448C54D91014BF29C40B66B20EFE35A,PinName="Released",Direction="EGPD_Output",PinType.PinCategory="exec",PinType.PinSubCategory="",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,) + CustomProperties Pin (PinId=507B66F736234E55A68C49235B936DF6,PinName="Key",Direction="EGPD_Output",PinType.PinCategory="struct",PinType.PinSubCategory="",PinType.PinSubCategoryObject=/Script/CoreUObject.ScriptStruct'"/Script/InputCore.Key"',PinType.PinSubCategoryMemberReference=(),PinType.PinValueType=(),PinType.ContainerType=None,PinType.bIsReference=False,PinType.bIsConst=False,PinType.bIsWeakPointer=False,PinType.bIsUObjectWrapper=False,PinType.bSerializeAsSinglePrecisionFloat=False,DefaultValue="None",AutogeneratedDefaultValue="None",PersistentGuid=00000000000000000000000000000000,bHidden=False,bNotConnectable=False,bDefaultValueIsReadOnly=False,bDefaultValueIsIgnored=False,bAdvancedView=False,bOrphanedPin=False,) + End Object + `, + size: [6, 8], + color: Configuration.nodeColors.red, + icon: SVGIcon.keyboard, + pins: 3, + pinNames: ["Pressed", "Released", "Key"], + delegate: false, + development: false, + }, + { + name: "`", + value: String.raw` + Begin Object Class=/Script/BlueprintGraph.K2Node_InputKey Name="K2Node_InputKey_24" + InputKey=Tilde + NodePosX=-16 + NodePosY=-176 + NodeGuid=CC2D4F6041DC494C96C08DFBD618AC3A + CustomProperties Pin (PinId=70F444059B5847989EC789B5239F6BE0,PinName="Pressed",Direction="EGPD_Output",PinType.PinCategory="exec",PinType.PinSubCategory="",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,) + CustomProperties Pin (PinId=5EC9A95245F344EF838C08813AD7B1EB,PinName="Released",Direction="EGPD_Output",PinType.PinCategory="exec",PinType.PinSubCategory="",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,) + CustomProperties Pin (PinId=0019D9A7CD8C4338BB75677A00C56CDA,PinName="Key",Direction="EGPD_Output",PinType.PinCategory="struct",PinType.PinSubCategory="",PinType.PinSubCategoryObject=/Script/CoreUObject.ScriptStruct'"/Script/InputCore.Key"',PinType.PinSubCategoryMemberReference=(),PinType.PinValueType=(),PinType.ContainerType=None,PinType.bIsReference=False,PinType.bIsConst=False,PinType.bIsWeakPointer=False,PinType.bIsUObjectWrapper=False,PinType.bSerializeAsSinglePrecisionFloat=False,DefaultValue="None",AutogeneratedDefaultValue="None",PersistentGuid=00000000000000000000000000000000,bHidden=False,bNotConnectable=False,bDefaultValueIsReadOnly=False,bDefaultValueIsIgnored=False,bAdvancedView=False,bOrphanedPin=False,) + End Object + `, + size: [6, 8], + color: Configuration.nodeColors.red, + icon: SVGIcon.keyboard, + pins: 3, + pinNames: ["Pressed", "Released", "Key"], + delegate: false, + development: false, + }, + { + name: "F1", + value: String.raw` + Begin Object Class=/Script/BlueprintGraph.K2Node_InputKey Name="K2Node_InputKey_25" + InputKey=F1 + NodePosX=-432 + NodePosY=-128 + NodeGuid=2A1E4A0B00644BFABB41E79B9EEBA51F + CustomProperties Pin (PinId=34EA0464C8C0463782205148426AFB9D,PinName="Pressed",Direction="EGPD_Output",PinType.PinCategory="exec",PinType.PinSubCategory="",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,) + CustomProperties Pin (PinId=196E5BC3CF0145EBB6501C56C58D0694,PinName="Released",Direction="EGPD_Output",PinType.PinCategory="exec",PinType.PinSubCategory="",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,) + CustomProperties Pin (PinId=70E9187FED444AC392AE4AA4FD4A8F06,PinName="Key",Direction="EGPD_Output",PinType.PinCategory="struct",PinType.PinSubCategory="",PinType.PinSubCategoryObject=/Script/CoreUObject.ScriptStruct'"/Script/InputCore.Key"',PinType.PinSubCategoryMemberReference=(),PinType.PinValueType=(),PinType.ContainerType=None,PinType.bIsReference=False,PinType.bIsConst=False,PinType.bIsWeakPointer=False,PinType.bIsUObjectWrapper=False,PinType.bSerializeAsSinglePrecisionFloat=False,DefaultValue="None",AutogeneratedDefaultValue="None",PersistentGuid=00000000000000000000000000000000,bHidden=False,bNotConnectable=False,bDefaultValueIsReadOnly=False,bDefaultValueIsIgnored=False,bAdvancedView=False,bOrphanedPin=False,) + End Object + `, + size: [6, 8], + color: Configuration.nodeColors.red, + icon: SVGIcon.keyboard, + pins: 3, + pinNames: ["Pressed", "Released", "Key"], + delegate: false, + development: false, + }, + { + name: "Debug Key §", + value: String.raw` + Begin Object Class=/Script/InputBlueprintNodes.K2Node_InputDebugKey Name="K2Node_InputDebugKey_9" + InputKey=Section + NodePosX=-448 + NodePosY=192 + NodeGuid=F77393EEC6EE474EB275F21B79D7AFFA + CustomProperties Pin (PinId=07B3CB6FEBC84F289CFE595A533AC588,PinName="Pressed",Direction="EGPD_Output",PinType.PinCategory="exec",PinType.PinSubCategory="",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,) + CustomProperties Pin (PinId=9B870DCF5BB942EC8B2879ADD3C1C8D7,PinName="Released",Direction="EGPD_Output",PinType.PinCategory="exec",PinType.PinSubCategory="",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,) + CustomProperties Pin (PinId=E303DAA129D744CB895FAAD13AD2E481,PinName="Key",Direction="EGPD_Output",PinType.PinCategory="struct",PinType.PinSubCategory="",PinType.PinSubCategoryObject=/Script/CoreUObject.ScriptStruct'"/Script/InputCore.Key"',PinType.PinSubCategoryMemberReference=(),PinType.PinValueType=(),PinType.ContainerType=None,PinType.bIsReference=False,PinType.bIsConst=False,PinType.bIsWeakPointer=False,PinType.bIsUObjectWrapper=False,PinType.bSerializeAsSinglePrecisionFloat=False,DefaultValue="None",AutogeneratedDefaultValue="None",PersistentGuid=00000000000000000000000000000000,bHidden=False,bNotConnectable=False,bDefaultValueIsReadOnly=False,bDefaultValueIsIgnored=False,bAdvancedView=False,bOrphanedPin=False,) + CustomProperties Pin (PinId=D7A0B7E8F10C42F0812EBD47E57C90A5,PinName="ActionValue",Direction="EGPD_Output",PinType.PinCategory="struct",PinType.PinSubCategory="",PinType.PinSubCategoryObject=/Script/CoreUObject.ScriptStruct'"/Script/EnhancedInput.InputActionValue"',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: [8.5, 11], + color: Configuration.nodeColors.red, + icon: SVGIcon.keyboard, + pins: 4, + pinNames: ["Pressed", "Released", "Key", "Action Value"], + delegate: false, + development: true, + }, + { + name: "Get Touchpad Button X Axis", + value: String.raw` + Begin Object Class=/Script/BlueprintGraph.K2Node_GetInputAxisKeyValue Name="K2Node_GetInputAxisKeyValue_7" + InputAxisKey=Gamepad_Special_Left_X + bIsPureFunc=True + bIsConstFunc=True + FunctionReference=(MemberName="GetInputAxisKeyValue",bSelfContext=True) + NodePosX=-224 + NodePosY=48 + NodeGuid=3385984750554D07BCADFFD48CA3EC9F + CustomProperties Pin (PinId=C04D7513E97B4FB19ECEC736842C4B9C,PinName="self",PinFriendlyName=NSLOCTEXT("K2Node", "Target", "Target"),PinType.PinCategory="object",PinType.PinSubCategory="",PinType.PinSubCategoryObject=/Script/CoreUObject.Class'"/Script/Engine.Actor"',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=True,bNotConnectable=True,bDefaultValueIsReadOnly=False,bDefaultValueIsIgnored=False,bAdvancedView=False,bOrphanedPin=False,) + CustomProperties Pin (PinId=4787139D40A543D7AA60CB927DFFA93C,PinName="InputAxisKey",PinType.PinCategory="struct",PinType.PinSubCategory="",PinType.PinSubCategoryObject=/Script/CoreUObject.ScriptStruct'"/Script/InputCore.Key"',PinType.PinSubCategoryMemberReference=(),PinType.PinValueType=(),PinType.ContainerType=None,PinType.bIsReference=False,PinType.bIsConst=True,PinType.bIsWeakPointer=False,PinType.bIsUObjectWrapper=False,PinType.bSerializeAsSinglePrecisionFloat=False,DefaultValue="Gamepad_Special_Left_X",PersistentGuid=00000000000000000000000000000000,bHidden=True,bNotConnectable=False,bDefaultValueIsReadOnly=False,bDefaultValueIsIgnored=False,bAdvancedView=False,bOrphanedPin=False,) + CustomProperties Pin (PinId=ADD1CDAF5AB542C186B3054E28A3FB85,PinName="ReturnValue",Direction="EGPD_Output",PinType.PinCategory="real",PinType.PinSubCategory="float",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,DefaultValue="0.0",AutogeneratedDefaultValue="0.0",PersistentGuid=00000000000000000000000000000000,bHidden=False,bNotConnectable=False,bDefaultValueIsReadOnly=False,bDefaultValueIsIgnored=False,bAdvancedView=False,bOrphanedPin=False,) + End Object + `, + size: [14, 4], + color: Configuration.nodeColors.green, + icon: SVGIcon.keyboard, + pins: 1, + pinNames: ["Return Value"], + delegate: false, + development: false, + }, + { + name: "Touch 1", + value: String.raw` + Begin Object Class=/Script/BlueprintGraph.K2Node_InputKey Name="K2Node_InputKey_28" + InputKey=Touch1 + NodePosX=-144 + NodePosY=-128 + NodeGuid=2AE125437F1B48B3A849925138CD51D1 + CustomProperties Pin (PinId=A6B5FC017A024EC3B258A048773DD301,PinName="Pressed",Direction="EGPD_Output",PinType.PinCategory="exec",PinType.PinSubCategory="",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,) + CustomProperties Pin (PinId=576F12E928DF4FF48D4D1E1F05C9C661,PinName="Released",Direction="EGPD_Output",PinType.PinCategory="exec",PinType.PinSubCategory="",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,) + CustomProperties Pin (PinId=7102CB8371BA4E8594ACECDAD1422A1C,PinName="Key",Direction="EGPD_Output",PinType.PinCategory="struct",PinType.PinSubCategory="",PinType.PinSubCategoryObject=/Script/CoreUObject.ScriptStruct'"/Script/InputCore.Key"',PinType.PinSubCategoryMemberReference=(),PinType.PinValueType=(),PinType.ContainerType=None,PinType.bIsReference=False,PinType.bIsConst=False,PinType.bIsWeakPointer=False,PinType.bIsUObjectWrapper=False,PinType.bSerializeAsSinglePrecisionFloat=False,DefaultValue="None",AutogeneratedDefaultValue="None",PersistentGuid=00000000000000000000000000000000,bHidden=False,bNotConnectable=False,bDefaultValueIsReadOnly=False,bDefaultValueIsIgnored=False,bAdvancedView=False,bOrphanedPin=False,) + End Object + `, + size: [7, 8], + color: Configuration.nodeColors.red, + icon: SVGIcon.touchpad, + pins: 3, + pinNames: ["Pressed", "Released", "Key"], + delegate: false, + development: false, + }, + { + name: "Debug Key Touch 10", + value: String.raw` + Begin Object Class=/Script/InputBlueprintNodes.K2Node_InputDebugKey Name="K2Node_InputDebugKey_10" + InputKey=Touch10 + NodePosX=192 + NodeGuid=85DC056DAA9A4DB78F7883B8F67DCF59 + CustomProperties Pin (PinId=267ABB8DF21844FB8F6E0CFA990C4E5E,PinName="Pressed",Direction="EGPD_Output",PinType.PinCategory="exec",PinType.PinSubCategory="",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,) + CustomProperties Pin (PinId=3FF391B8B11F4F26828B55863EFB48FD,PinName="Released",Direction="EGPD_Output",PinType.PinCategory="exec",PinType.PinSubCategory="",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,) + CustomProperties Pin (PinId=41C4C9D9831148E087E7D7D86B6CCB2D,PinName="Key",Direction="EGPD_Output",PinType.PinCategory="struct",PinType.PinSubCategory="",PinType.PinSubCategoryObject=/Script/CoreUObject.ScriptStruct'"/Script/InputCore.Key"',PinType.PinSubCategoryMemberReference=(),PinType.PinValueType=(),PinType.ContainerType=None,PinType.bIsReference=False,PinType.bIsConst=False,PinType.bIsWeakPointer=False,PinType.bIsUObjectWrapper=False,PinType.bSerializeAsSinglePrecisionFloat=False,DefaultValue="None",AutogeneratedDefaultValue="None",PersistentGuid=00000000000000000000000000000000,bHidden=False,bNotConnectable=False,bDefaultValueIsReadOnly=False,bDefaultValueIsIgnored=False,bAdvancedView=False,bOrphanedPin=False,) + CustomProperties Pin (PinId=F0EC9017F23F4F73AF3E98AE46008C75,PinName="ActionValue",Direction="EGPD_Output",PinType.PinCategory="struct",PinType.PinSubCategory="",PinType.PinSubCategoryObject=/Script/CoreUObject.ScriptStruct'"/Script/EnhancedInput.InputActionValue"',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: [11, 11], + color: Configuration.nodeColors.red, + icon: SVGIcon.touchpad, + pins: 4, + pinNames: ["Pressed", "Released", "Key", "Action Value"], + delegate: false, + development: true, + }, + { + name: "Steam Touch 1", + value: String.raw` + Begin Object Class=/Script/BlueprintGraph.K2Node_InputKey Name="K2Node_InputKey_29" + InputKey=Steam_Touch_1 + NodePosX=80 + NodePosY=-160 + NodeGuid=E85D97EACB4F4B8B9F8A160A949BB9AD + CustomProperties Pin (PinId=D7E09AE1588B4E949F7C34798AED6758,PinName="Pressed",Direction="EGPD_Output",PinType.PinCategory="exec",PinType.PinSubCategory="",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,) + CustomProperties Pin (PinId=CA4B72FE4D6F4F5DA503674A88F1872E,PinName="Released",Direction="EGPD_Output",PinType.PinCategory="exec",PinType.PinSubCategory="",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,) + CustomProperties Pin (PinId=948BDBCF71EE4E36891EB8259D1C4E44,PinName="Key",Direction="EGPD_Output",PinType.PinCategory="struct",PinType.PinSubCategory="",PinType.PinSubCategoryObject=/Script/CoreUObject.ScriptStruct'"/Script/InputCore.Key"',PinType.PinSubCategoryMemberReference=(),PinType.PinValueType=(),PinType.ContainerType=None,PinType.bIsReference=False,PinType.bIsConst=False,PinType.bIsWeakPointer=False,PinType.bIsUObjectWrapper=False,PinType.bSerializeAsSinglePrecisionFloat=False,DefaultValue="None",AutogeneratedDefaultValue="None",PersistentGuid=00000000000000000000000000000000,bHidden=False,bNotConnectable=False,bDefaultValueIsReadOnly=False,bDefaultValueIsIgnored=False,bAdvancedView=False,bOrphanedPin=False,) + End Object + `, + size: [9, 8], + color: Configuration.nodeColors.red, + icon: SVGIcon.gamepad, + pins: 3, + pinNames: ["Pressed", "Released", "Key"], + delegate: false, + development: false, + }, + { + name: "Mouse X", + value: String.raw` + Begin Object Class=/Script/BlueprintGraph.K2Node_InputAxisKeyEvent Name="K2Node_InputAxisKeyEvent_2" + AxisKey=MouseX + EventReference=(MemberParent=/Script/CoreUObject.Package'"/Script/Engine"') + CustomFunctionName="InpAxisKeyEvt_MouseX_K2Node_InputAxisKeyEvent_2" + NodePosX=16 + NodePosY=384 + NodeGuid=F7AA7D36A681494A9F28239D0FA8FB2D + CustomProperties Pin (PinId=8525745F49DB46C9BBDA7549AB9CD8B5,PinName="OutputDelegate",Direction="EGPD_Output",PinType.PinCategory="delegate",PinType.PinSubCategory="",PinType.PinSubCategoryObject=None,PinType.PinSubCategoryMemberReference=(MemberParent=/Script/Engine.BlueprintGeneratedClass'"/Temp/Untitled_1.Untitled_C"',MemberName="InpAxisKeyEvt_MouseX_K2Node_InputAxisKeyEvent_2"),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=6273D30435714B84BD2139DB4FAFE72F,PinName="then",Direction="EGPD_Output",PinType.PinCategory="exec",PinType.PinSubCategory="",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,) + CustomProperties Pin (PinId=E43D43763CD64E2CB1B030ECCEED6115,PinName="AxisValue",PinToolTip="Axis Value\nFloat (single-precision)",Direction="EGPD_Output",PinType.PinCategory="real",PinType.PinSubCategory="float",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,DefaultValue="0.0",AutogeneratedDefaultValue="0.0",PersistentGuid=00000000000000000000000000000000,bHidden=False,bNotConnectable=False,bDefaultValueIsReadOnly=False,bDefaultValueIsIgnored=False,bAdvancedView=False,bOrphanedPin=False,) + End Object + `, + size: [7, 6], + color: Configuration.nodeColors.red, + icon: SVGIcon.mouse, + pins: 3, + pinNames: ["Axis Value"], + delegate: true, + development: false, + }, + { + name: "Mouse Y", + value: String.raw` + Begin Object Class=/Script/BlueprintGraph.K2Node_InputAxisKeyEvent Name="K2Node_InputAxisKeyEvent_1" + AxisKey=MouseY + EventReference=(MemberParent=/Script/CoreUObject.Package'"/Script/Engine"') + CustomFunctionName="InpAxisKeyEvt_MouseY_K2Node_InputAxisKeyEvent_1" + NodePosX=-16 + NodePosY=144 + NodeGuid=FECB056F1DB940BAB4CA5D0BACCCC810 + CustomProperties Pin (PinId=357A92FB93554066815AF1D9FFEE8849,PinName="OutputDelegate",Direction="EGPD_Output",PinType.PinCategory="delegate",PinType.PinSubCategory="",PinType.PinSubCategoryObject=None,PinType.PinSubCategoryMemberReference=(MemberParent=/Script/Engine.BlueprintGeneratedClass'"/Temp/Untitled_1.Untitled_C"',MemberName="InpAxisKeyEvt_MouseY_K2Node_InputAxisKeyEvent_1"),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=902EB1EFB0F44F8CBFD05C00589EB93B,PinName="then",Direction="EGPD_Output",PinType.PinCategory="exec",PinType.PinSubCategory="",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,) + CustomProperties Pin (PinId=ECD6C7AC46BD47C88180B7198E2AF86B,PinName="AxisValue",PinToolTip="Axis Value\nFloat (single-precision)",Direction="EGPD_Output",PinType.PinCategory="real",PinType.PinSubCategory="float",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,DefaultValue="0.0",AutogeneratedDefaultValue="0.0",PersistentGuid=00000000000000000000000000000000,bHidden=False,bNotConnectable=False,bDefaultValueIsReadOnly=False,bDefaultValueIsIgnored=False,bAdvancedView=False,bOrphanedPin=False,) + End Object + `, + size: [7, 6], + color: Configuration.nodeColors.red, + icon: SVGIcon.mouse, + pins: 3, + pinNames: ["Axis Value"], + delegate: true, + development: false, + }, + { + name: "Mouse XY 2D-Axis", + value: String.raw` + Begin Object Class=/Script/BlueprintGraph.K2Node_InputVectorAxisEvent Name="K2Node_InputVectorAxisEvent_0" + AxisKey=Mouse2D + EventReference=(MemberParent=/Script/CoreUObject.Package'"/Script/Engine"') + CustomFunctionName="InpAxisKeyEvt_Mouse2D_K2Node_InputVectorAxisEvent_0" + NodePosX=-448 + NodePosY=48 + NodeGuid=A6723248596F42A4B997C50F78246F2C + CustomProperties Pin (PinId=56F310FF3B4243D2B0AE09D8949AF505,PinName="OutputDelegate",Direction="EGPD_Output",PinType.PinCategory="delegate",PinType.PinSubCategory="",PinType.PinSubCategoryObject=None,PinType.PinSubCategoryMemberReference=(MemberParent=/Script/Engine.BlueprintGeneratedClass'"/Temp/Untitled_1.Untitled_C"',MemberName="InpAxisKeyEvt_Mouse2D_K2Node_InputVectorAxisEvent_0"),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=9C23986C914C4B11AD7321BBBAB1D538,PinName="then",Direction="EGPD_Output",PinType.PinCategory="exec",PinType.PinSubCategory="",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,) + CustomProperties Pin (PinId=F04B32CC40954BBAB9872EAE26DE2879,PinName="AxisValue",PinToolTip="Axis Value\nVector",Direction="EGPD_Output",PinType.PinCategory="struct",PinType.PinSubCategory="",PinType.PinSubCategoryObject=/Script/CoreUObject.ScriptStruct'"/Script/CoreUObject.Vector"',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, 0",AutogeneratedDefaultValue="0, 0, 0",PersistentGuid=00000000000000000000000000000000,bHidden=False,bNotConnectable=False,bDefaultValueIsReadOnly=False,bDefaultValueIsIgnored=False,bAdvancedView=False,bOrphanedPin=False,) + End Object + `, + size: [11, 6], + color: Configuration.nodeColors.red, + icon: SVGIcon.mouse, + pins: 3, + pinNames: ["Axis Value"], + delegate: true, + development: false, + }, + { + name: "Mouse Wheel Axis", + value: String.raw` + Begin Object Class=/Script/BlueprintGraph.K2Node_InputAxisKeyEvent Name="K2Node_InputAxisKeyEvent_2" + AxisKey=MouseWheelAxis + EventReference=(MemberParent=/Script/CoreUObject.Package'"/Script/Engine"') + CustomFunctionName="InpAxisKeyEvt_MouseWheelAxis_K2Node_InputAxisKeyEvent_2" + NodePosX=240 + NodeGuid=E3FF073E85B34FC4B188CD7BD68D6B9B + CustomProperties Pin (PinId=5770618DFA054880BF33DD39844DE3F8,PinName="OutputDelegate",Direction="EGPD_Output",PinType.PinCategory="delegate",PinType.PinSubCategory="",PinType.PinSubCategoryObject=None,PinType.PinSubCategoryMemberReference=(MemberParent=/Script/Engine.BlueprintGeneratedClass'"/Temp/Untitled_1.Untitled_C"',MemberName="InpAxisKeyEvt_MouseWheelAxis_K2Node_InputAxisKeyEvent_2"),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=AEC4EBC2FF5744538B93F21321891828,PinName="then",Direction="EGPD_Output",PinType.PinCategory="exec",PinType.PinSubCategory="",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,) + CustomProperties Pin (PinId=8490344E6BD94ED49267BC0C82317109,PinName="AxisValue",PinToolTip="Axis Value\nFloat (single-precision)",Direction="EGPD_Output",PinType.PinCategory="real",PinType.PinSubCategory="float",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,DefaultValue="0.0",AutogeneratedDefaultValue="0.0",PersistentGuid=00000000000000000000000000000000,bHidden=False,bNotConnectable=False,bDefaultValueIsReadOnly=False,bDefaultValueIsIgnored=False,bAdvancedView=False,bOrphanedPin=False,) + End Object + `, + size: [10.5, 6], + color: Configuration.nodeColors.red, + icon: SVGIcon.mouse, + pins: 3, + pinNames: ["Axis Value"], + delegate: true, + development: false, + }, + { + name: "Left Mouse Button", + value: String.raw` + Begin Object Class=/Script/BlueprintGraph.K2Node_InputKey Name="K2Node_InputKey_16" + InputKey=LeftMouseButton + NodePosX=-224 + NodePosY=128 + NodeGuid=41CB459BE2E842F8981D1263CBCF48CB + CustomProperties Pin (PinId=6F2EDC0B46FE4B53B031B674417B2F68,PinName="Pressed",Direction="EGPD_Output",PinType.PinCategory="exec",PinType.PinSubCategory="",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,) + CustomProperties Pin (PinId=DE99E9C67C1B4C70B9486BE43DE94813,PinName="Released",Direction="EGPD_Output",PinType.PinCategory="exec",PinType.PinSubCategory="",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,) + CustomProperties Pin (PinId=3078091B73C9484F920A32ABEC7F70E2,PinName="Key",Direction="EGPD_Output",PinType.PinCategory="struct",PinType.PinSubCategory="",PinType.PinSubCategoryObject=/Script/CoreUObject.ScriptStruct'"/Script/InputCore.Key"',PinType.PinSubCategoryMemberReference=(),PinType.PinValueType=(),PinType.ContainerType=None,PinType.bIsReference=False,PinType.bIsConst=False,PinType.bIsWeakPointer=False,PinType.bIsUObjectWrapper=False,PinType.bSerializeAsSinglePrecisionFloat=False,DefaultValue="None",AutogeneratedDefaultValue="None",PersistentGuid=00000000000000000000000000000000,bHidden=False,bNotConnectable=False,bDefaultValueIsReadOnly=False,bDefaultValueIsIgnored=False,bAdvancedView=False,bOrphanedPin=False,) + End Object + `, + size: [11, 8], + color: Configuration.nodeColors.red, + icon: SVGIcon.mouse, + pins: 3, + pinNames: ["Pressed", "Released", "Key"], + delegate: false, + development: false, + }, + { + name: "Middle Mouse Button", + value: String.raw` + Begin Object Class=/Script/BlueprintGraph.K2Node_InputKey Name="K2Node_InputKey_17" + InputKey=MiddleMouseButton + NodePosX=144 + NodePosY=64 + NodeGuid=A9ED686DBFC54789A021351B379B76F2 + CustomProperties Pin (PinId=7C3A115375134DE0BD811E52F246F7BF,PinName="Pressed",Direction="EGPD_Output",PinType.PinCategory="exec",PinType.PinSubCategory="",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,) + CustomProperties Pin (PinId=D28DC408DD34403292368A421E3F9011,PinName="Released",Direction="EGPD_Output",PinType.PinCategory="exec",PinType.PinSubCategory="",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,) + CustomProperties Pin (PinId=7B5F9C141CC34087B646A3360513B7CA,PinName="Key",Direction="EGPD_Output",PinType.PinCategory="struct",PinType.PinSubCategory="",PinType.PinSubCategoryObject=/Script/CoreUObject.ScriptStruct'"/Script/InputCore.Key"',PinType.PinSubCategoryMemberReference=(),PinType.PinValueType=(),PinType.ContainerType=None,PinType.bIsReference=False,PinType.bIsConst=False,PinType.bIsWeakPointer=False,PinType.bIsUObjectWrapper=False,PinType.bSerializeAsSinglePrecisionFloat=False,DefaultValue="None",AutogeneratedDefaultValue="None",PersistentGuid=00000000000000000000000000000000,bHidden=False,bNotConnectable=False,bDefaultValueIsReadOnly=False,bDefaultValueIsIgnored=False,bAdvancedView=False,bOrphanedPin=False,) + End Object + `, + size: [12, 8], + color: Configuration.nodeColors.red, + icon: SVGIcon.mouse, + pins: 3, + pinNames: ["Pressed", "Released", "Key"], + delegate: false, + development: false, + }, + { + name: "Thumb Mouse Button 2", + value: String.raw` + Begin Object Class=/Script/BlueprintGraph.K2Node_InputKey Name="K2Node_InputKey_18" + InputKey=ThumbMouseButton2 + NodePosX=144 + NodePosY=288 + NodeGuid=031BA5DB71BA4F6ABC7F85DCFD34771D + CustomProperties Pin (PinId=DC46CB8B47E0429FB58797DD9FAA9F48,PinName="Pressed",Direction="EGPD_Output",PinType.PinCategory="exec",PinType.PinSubCategory="",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,) + CustomProperties Pin (PinId=66F69216F2964D4C9ADD1997A46F9A76,PinName="Released",Direction="EGPD_Output",PinType.PinCategory="exec",PinType.PinSubCategory="",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,) + CustomProperties Pin (PinId=C80119035CCB451BA90DB5CFD6F98029,PinName="Key",Direction="EGPD_Output",PinType.PinCategory="struct",PinType.PinSubCategory="",PinType.PinSubCategoryObject=/Script/CoreUObject.ScriptStruct'"/Script/InputCore.Key"',PinType.PinSubCategoryMemberReference=(),PinType.PinValueType=(),PinType.ContainerType=None,PinType.bIsReference=False,PinType.bIsConst=False,PinType.bIsWeakPointer=False,PinType.bIsUObjectWrapper=False,PinType.bSerializeAsSinglePrecisionFloat=False,DefaultValue="None",AutogeneratedDefaultValue="None",PersistentGuid=00000000000000000000000000000000,bHidden=False,bNotConnectable=False,bDefaultValueIsReadOnly=False,bDefaultValueIsIgnored=False,bAdvancedView=False,bOrphanedPin=False,) + End Object + `, + size: [12, 8], + color: Configuration.nodeColors.red, + icon: SVGIcon.mouse, + pins: 3, + pinNames: ["Pressed", "Released", "Key"], + delegate: false, + development: false, + }, + { + name: "Debug Key Thumb Mouse Button", + value: String.raw` + Begin Object Class=/Script/InputBlueprintNodes.K2Node_InputDebugKey Name="K2Node_InputDebugKey_7" + InputKey=ThumbMouseButton + NodePosX=-384 + NodePosY=288 + NodeGuid=A399E6224ADE4FCA957A949B4660E1C1 + CustomProperties Pin (PinId=A4BEA026C1B741DDB6C690AD79683F0F,PinName="Pressed",Direction="EGPD_Output",PinType.PinCategory="exec",PinType.PinSubCategory="",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,) + CustomProperties Pin (PinId=A0CEF5BCEAD14E868B4227481755F5C5,PinName="Released",Direction="EGPD_Output",PinType.PinCategory="exec",PinType.PinSubCategory="",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,) + CustomProperties Pin (PinId=E977C11019F74CD8A15C467CA0B1C005,PinName="Key",Direction="EGPD_Output",PinType.PinCategory="struct",PinType.PinSubCategory="",PinType.PinSubCategoryObject=/Script/CoreUObject.ScriptStruct'"/Script/InputCore.Key"',PinType.PinSubCategoryMemberReference=(),PinType.PinValueType=(),PinType.ContainerType=None,PinType.bIsReference=False,PinType.bIsConst=False,PinType.bIsWeakPointer=False,PinType.bIsUObjectWrapper=False,PinType.bSerializeAsSinglePrecisionFloat=False,DefaultValue="None",AutogeneratedDefaultValue="None",PersistentGuid=00000000000000000000000000000000,bHidden=False,bNotConnectable=False,bDefaultValueIsReadOnly=False,bDefaultValueIsIgnored=False,bAdvancedView=False,bOrphanedPin=False,) + CustomProperties Pin (PinId=ED934B47B72E4A94834897DCD89BABB3,PinName="ActionValue",Direction="EGPD_Output",PinType.PinCategory="struct",PinType.PinSubCategory="",PinType.PinSubCategoryObject=/Script/CoreUObject.ScriptStruct'"/Script/EnhancedInput.InputActionValue"',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: [16, 11], + color: Configuration.nodeColors.red, + icon: SVGIcon.mouse, + pins: 4, + pinNames: ["Pressed", "Released", "Key", "Action Value"], + delegate: false, + development: true, + }, + { + name: "Get Mouse Y", + value: String.raw` + Begin Object Class=/Script/BlueprintGraph.K2Node_GetInputAxisKeyValue Name="K2Node_GetInputAxisKeyValue_2" + InputAxisKey=MouseY + bIsPureFunc=True + bIsConstFunc=True + FunctionReference=(MemberName="GetInputAxisKeyValue",bSelfContext=True) + NodePosX=-336 + NodePosY=176 + NodeGuid=03F17E5E722044968C2604B5C7DB96DF + CustomProperties Pin (PinId=BAC6585AD74E46FB99497B33417089E8,PinName="self",PinFriendlyName=NSLOCTEXT("K2Node", "Target", "Target"),PinToolTip="Target\nActor Object Reference",PinType.PinCategory="object",PinType.PinSubCategory="",PinType.PinSubCategoryObject=/Script/CoreUObject.Class'"/Script/Engine.Actor"',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=True,bNotConnectable=True,bDefaultValueIsReadOnly=False,bDefaultValueIsIgnored=False,bAdvancedView=False,bOrphanedPin=False,) + CustomProperties Pin (PinId=EBD21E94C73B4648A6E42EEDAAECC25C,PinName="InputAxisKey",PinToolTip="Input Axis Key\nKey Structure",PinType.PinCategory="struct",PinType.PinSubCategory="",PinType.PinSubCategoryObject=/Script/CoreUObject.ScriptStruct'"/Script/InputCore.Key"',PinType.PinSubCategoryMemberReference=(),PinType.PinValueType=(),PinType.ContainerType=None,PinType.bIsReference=False,PinType.bIsConst=True,PinType.bIsWeakPointer=False,PinType.bIsUObjectWrapper=False,PinType.bSerializeAsSinglePrecisionFloat=False,DefaultValue="MouseY",PersistentGuid=00000000000000000000000000000000,bHidden=True,bNotConnectable=False,bDefaultValueIsReadOnly=False,bDefaultValueIsIgnored=False,bAdvancedView=False,bOrphanedPin=False,) + CustomProperties Pin (PinId=FBB13F62789849748C804E02B8E147AD,PinName="ReturnValue",PinToolTip="Return Value\nFloat (single-precision)\n\nGets the value of the input axis key if input is enabled for this actor.",Direction="EGPD_Output",PinType.PinCategory="real",PinType.PinSubCategory="float",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,DefaultValue="0.0",AutogeneratedDefaultValue="0.0",PersistentGuid=00000000000000000000000000000000,bHidden=False,bNotConnectable=False,bDefaultValueIsReadOnly=False,bDefaultValueIsIgnored=False,bAdvancedView=False,bOrphanedPin=False,) + End Object + `, + size: [8.5, 4], + color: Configuration.nodeColors.green, + icon: SVGIcon.mouse, + pins: 1, + pinNames: ["Return Value"], + delegate: false, + development: false, + }, + { + name: "Get Mouse Wheel Axis", + value: String.raw` + Begin Object Class=/Script/BlueprintGraph.K2Node_GetInputAxisKeyValue Name="K2Node_GetInputAxisKeyValue_0" + InputAxisKey=MouseWheelAxis + bIsPureFunc=True + bIsConstFunc=True + FunctionReference=(MemberName="GetInputAxisKeyValue",bSelfContext=True) + NodePosX=-384 + NodePosY=16 + NodeGuid=2B1117A5318D40A7AF0DFDA50FEF1591 + CustomProperties Pin (PinId=BFD2DE55F3DB4856ACFC0FE876450E0B,PinName="self",PinFriendlyName=NSLOCTEXT("K2Node", "Target", "Target"),PinType.PinCategory="object",PinType.PinSubCategory="",PinType.PinSubCategoryObject=/Script/CoreUObject.Class'"/Script/Engine.Actor"',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=True,bNotConnectable=True,bDefaultValueIsReadOnly=False,bDefaultValueIsIgnored=False,bAdvancedView=False,bOrphanedPin=False,) + CustomProperties Pin (PinId=5842E327DE3B4521B9B695133F2D5A8D,PinName="InputAxisKey",PinType.PinCategory="struct",PinType.PinSubCategory="",PinType.PinSubCategoryObject=/Script/CoreUObject.ScriptStruct'"/Script/InputCore.Key"',PinType.PinSubCategoryMemberReference=(),PinType.PinValueType=(),PinType.ContainerType=None,PinType.bIsReference=False,PinType.bIsConst=True,PinType.bIsWeakPointer=False,PinType.bIsUObjectWrapper=False,PinType.bSerializeAsSinglePrecisionFloat=False,DefaultValue="MouseWheelAxis",PersistentGuid=00000000000000000000000000000000,bHidden=True,bNotConnectable=False,bDefaultValueIsReadOnly=False,bDefaultValueIsIgnored=False,bAdvancedView=False,bOrphanedPin=False,) + CustomProperties Pin (PinId=D277AF2C806C4B92857827918CA55B91,PinName="ReturnValue",Direction="EGPD_Output",PinType.PinCategory="real",PinType.PinSubCategory="float",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,DefaultValue="0.0",AutogeneratedDefaultValue="0.0",PersistentGuid=00000000000000000000000000000000,bHidden=False,bNotConnectable=False,bDefaultValueIsReadOnly=False,bDefaultValueIsIgnored=False,bAdvancedView=False,bOrphanedPin=False,) + End Object + `, + size: [12, 4], + color: Configuration.nodeColors.green, + icon: SVGIcon.mouse, + pins: 1, + pinNames: ["Return Value"], + delegate: false, + development: false, + }, + { + name: "0", + value: String.raw` + Begin Object Class=/Script/BlueprintGraph.K2Node_InputKey Name="K2Node_InputKey_1" + InputKey=Zero + NodePosX=-304 + NodePosY=176 + NodeGuid=41FC4194F1E4436BB46EC8C1D83D0701 + CustomProperties Pin (PinId=D4A5428B422F4D5085CF41DEAF73523E,PinName="Pressed",Direction="EGPD_Output",PinType.PinCategory="exec",PinType.PinSubCategory="",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,) + CustomProperties Pin (PinId=B1A390663D2B404AAFF90D10273C78E1,PinName="Released",Direction="EGPD_Output",PinType.PinCategory="exec",PinType.PinSubCategory="",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,) + CustomProperties Pin (PinId=0C9FF69AFEEE488F868AB3292050FCB0,PinName="Key",Direction="EGPD_Output",PinType.PinCategory="struct",PinType.PinSubCategory="",PinType.PinSubCategoryObject=/Script/CoreUObject.ScriptStruct'"/Script/InputCore.Key"',PinType.PinSubCategoryMemberReference=(),PinType.PinValueType=(),PinType.ContainerType=None,PinType.bIsReference=False,PinType.bIsConst=False,PinType.bIsWeakPointer=False,PinType.bIsUObjectWrapper=False,PinType.bSerializeAsSinglePrecisionFloat=False,DefaultValue="None",AutogeneratedDefaultValue="None",PersistentGuid=00000000000000000000000000000000,bHidden=False,bNotConnectable=False,bDefaultValueIsReadOnly=False,bDefaultValueIsIgnored=False,bAdvancedView=False,bOrphanedPin=False,) + End Object + `, + size: [6, 8], + color: Configuration.nodeColors.red, + icon: SVGIcon.keyboard, + pins: 3, + pinNames: ["Pressed", "Released", "Key"], + delegate: false, + development: false, + }, + { + name: "1", + value: String.raw` + Begin Object Class=/Script/BlueprintGraph.K2Node_InputKey Name="K2Node_InputKey_0" + InputKey=One + NodePosX=-368 + NodePosY=48 + NodeGuid=92EF207924B8456FA773E70D4CB508B1 + CustomProperties Pin (PinId=B97DD5E035664CC89443E493174A8643,PinName="Pressed",Direction="EGPD_Output",PinType.PinCategory="exec",PinType.PinSubCategory="",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,) + CustomProperties Pin (PinId=B120EF5252EB4F029D420AD0B029AA57,PinName="Released",Direction="EGPD_Output",PinType.PinCategory="exec",PinType.PinSubCategory="",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,) + CustomProperties Pin (PinId=51B6448364CD491B95C79EEDB5947F62,PinName="Key",Direction="EGPD_Output",PinType.PinCategory="struct",PinType.PinSubCategory="",PinType.PinSubCategoryObject=/Script/CoreUObject.ScriptStruct'"/Script/InputCore.Key"',PinType.PinSubCategoryMemberReference=(),PinType.PinValueType=(),PinType.ContainerType=None,PinType.bIsReference=False,PinType.bIsConst=False,PinType.bIsWeakPointer=False,PinType.bIsUObjectWrapper=False,PinType.bSerializeAsSinglePrecisionFloat=False,DefaultValue="None",AutogeneratedDefaultValue="None",PersistentGuid=00000000000000000000000000000000,bHidden=False,bNotConnectable=False,bDefaultValueIsReadOnly=False,bDefaultValueIsIgnored=False,bAdvancedView=False,bOrphanedPin=False,) + End Object + `, + size: [6, 8], + color: Configuration.nodeColors.red, + icon: SVGIcon.keyboard, + pins: 3, + pinNames: ["Pressed", "Released", "Key"], + delegate: false, + development: false, + }, + { + name: "2", + value: String.raw` + Begin Object Class=/Script/BlueprintGraph.K2Node_InputKey Name="K2Node_InputKey_1" + InputKey=Two + NodePosX=-432 + NodePosY=240 + NodeGuid=E0E67B91FE9748C7BA46FD5A5875E1ED + CustomProperties Pin (PinId=C7064464390D411ABFE9427758A4DC81,PinName="Pressed",Direction="EGPD_Output",PinType.PinCategory="exec",PinType.PinSubCategory="",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,) + CustomProperties Pin (PinId=7CC65DFE0C134968A856304AAE6B800D,PinName="Released",Direction="EGPD_Output",PinType.PinCategory="exec",PinType.PinSubCategory="",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,) + CustomProperties Pin (PinId=D79D1BBE0C944B618E16600BAD151493,PinName="Key",Direction="EGPD_Output",PinType.PinCategory="struct",PinType.PinSubCategory="",PinType.PinSubCategoryObject=/Script/CoreUObject.ScriptStruct'"/Script/InputCore.Key"',PinType.PinSubCategoryMemberReference=(),PinType.PinValueType=(),PinType.ContainerType=None,PinType.bIsReference=False,PinType.bIsConst=False,PinType.bIsWeakPointer=False,PinType.bIsUObjectWrapper=False,PinType.bSerializeAsSinglePrecisionFloat=False,DefaultValue="None",AutogeneratedDefaultValue="None",PersistentGuid=00000000000000000000000000000000,bHidden=False,bNotConnectable=False,bDefaultValueIsReadOnly=False,bDefaultValueIsIgnored=False,bAdvancedView=False,bOrphanedPin=False,) + End Object + `, + size: [6, 8], + color: Configuration.nodeColors.red, + icon: SVGIcon.keyboard, + pins: 3, + pinNames: ["Pressed", "Released", "Key"], + delegate: false, + development: false, + }, + { + name: "3", + value: String.raw` + Begin Object Class=/Script/BlueprintGraph.K2Node_InputKey Name="K2Node_InputKey_2" + InputKey=Three + NodePosX=-288 + NodeGuid=86A598DB8EA1471C854A3233595FDD72 + CustomProperties Pin (PinId=14495EF676334DE08F813AE8B458849A,PinName="Pressed",Direction="EGPD_Output",PinType.PinCategory="exec",PinType.PinSubCategory="",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,) + CustomProperties Pin (PinId=0B11504E947F4FF184AC6371CB59D825,PinName="Released",Direction="EGPD_Output",PinType.PinCategory="exec",PinType.PinSubCategory="",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,) + CustomProperties Pin (PinId=7493F1215705457980E294950C651ED7,PinName="Key",Direction="EGPD_Output",PinType.PinCategory="struct",PinType.PinSubCategory="",PinType.PinSubCategoryObject=/Script/CoreUObject.ScriptStruct'"/Script/InputCore.Key"',PinType.PinSubCategoryMemberReference=(),PinType.PinValueType=(),PinType.ContainerType=None,PinType.bIsReference=False,PinType.bIsConst=False,PinType.bIsWeakPointer=False,PinType.bIsUObjectWrapper=False,PinType.bSerializeAsSinglePrecisionFloat=False,DefaultValue="None",AutogeneratedDefaultValue="None",PersistentGuid=00000000000000000000000000000000,bHidden=False,bNotConnectable=False,bDefaultValueIsReadOnly=False,bDefaultValueIsIgnored=False,bAdvancedView=False,bOrphanedPin=False,) + End Object + `, + size: [6, 8], + color: Configuration.nodeColors.red, + icon: SVGIcon.keyboard, + pins: 3, + pinNames: ["Pressed", "Released", "Key"], + delegate: false, + development: false, + }, + { + name: "4", + value: String.raw` + Begin Object Class=/Script/BlueprintGraph.K2Node_InputKey Name="K2Node_InputKey_4" + InputKey=Four + NodePosX=416 + NodeGuid=C0E7B79B3B85408C9FFAFE71B71FD21F + CustomProperties Pin (PinId=28E3A745210949D0864CC441BB0F529C,PinName="Pressed",Direction="EGPD_Output",PinType.PinCategory="exec",PinType.PinSubCategory="",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,) + CustomProperties Pin (PinId=F8A89129B85C44CABFC5082369EEDA65,PinName="Released",Direction="EGPD_Output",PinType.PinCategory="exec",PinType.PinSubCategory="",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,) + CustomProperties Pin (PinId=00DE1A9A2AE249E681808177A2107D5A,PinName="Key",Direction="EGPD_Output",PinType.PinCategory="struct",PinType.PinSubCategory="",PinType.PinSubCategoryObject=/Script/CoreUObject.ScriptStruct'"/Script/InputCore.Key"',PinType.PinSubCategoryMemberReference=(),PinType.PinValueType=(),PinType.ContainerType=None,PinType.bIsReference=False,PinType.bIsConst=False,PinType.bIsWeakPointer=False,PinType.bIsUObjectWrapper=False,PinType.bSerializeAsSinglePrecisionFloat=False,DefaultValue="None",AutogeneratedDefaultValue="None",PersistentGuid=00000000000000000000000000000000,bHidden=False,bNotConnectable=False,bDefaultValueIsReadOnly=False,bDefaultValueIsIgnored=False,bAdvancedView=False,bOrphanedPin=False,) + End Object + `, + size: [6, 8], + color: Configuration.nodeColors.red, + icon: SVGIcon.keyboard, + pins: 3, + pinNames: ["Pressed", "Released", "Key"], + delegate: false, + development: false, + }, + { + name: "5", + value: String.raw` + Begin Object Class=/Script/BlueprintGraph.K2Node_InputKey Name="K2Node_InputKey_3" + InputKey=Five + NodePosX=-416 + NodePosY=48 + NodeGuid=1DC9EFC5D6B34E06839050946BAD178D + CustomProperties Pin (PinId=9D70C05D5C5941CAAC239B23BC11E648,PinName="Pressed",Direction="EGPD_Output",PinType.PinCategory="exec",PinType.PinSubCategory="",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,) + CustomProperties Pin (PinId=790882DB7B64424CBB215644AED9EBBE,PinName="Released",Direction="EGPD_Output",PinType.PinCategory="exec",PinType.PinSubCategory="",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,) + CustomProperties Pin (PinId=9A76A94DEB7E40E08EBD880DFADB212F,PinName="Key",Direction="EGPD_Output",PinType.PinCategory="struct",PinType.PinSubCategory="",PinType.PinSubCategoryObject=/Script/CoreUObject.ScriptStruct'"/Script/InputCore.Key"',PinType.PinSubCategoryMemberReference=(),PinType.PinValueType=(),PinType.ContainerType=None,PinType.bIsReference=False,PinType.bIsConst=False,PinType.bIsWeakPointer=False,PinType.bIsUObjectWrapper=False,PinType.bSerializeAsSinglePrecisionFloat=False,DefaultValue="None",AutogeneratedDefaultValue="None",PersistentGuid=00000000000000000000000000000000,bHidden=False,bNotConnectable=False,bDefaultValueIsReadOnly=False,bDefaultValueIsIgnored=False,bAdvancedView=False,bOrphanedPin=False,) + End Object + `, + size: [6, 8], + color: Configuration.nodeColors.red, + icon: SVGIcon.keyboard, + pins: 3, + pinNames: ["Pressed", "Released", "Key"], + delegate: false, + development: false, + }, + { + name: "6", + value: String.raw` + Begin Object Class=/Script/BlueprintGraph.K2Node_InputKey Name="K2Node_InputKey_5" + InputKey=Six + NodePosX=-192 + NodePosY=112 + NodeGuid=82C5BBFF6AAB4078931656A56DFC214F + CustomProperties Pin (PinId=A4F9728C256C4D0FB053E545EBB0FDE3,PinName="Pressed",Direction="EGPD_Output",PinType.PinCategory="exec",PinType.PinSubCategory="",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,) + CustomProperties Pin (PinId=DF03428EF028466C948E0F2539C1AA2C,PinName="Released",Direction="EGPD_Output",PinType.PinCategory="exec",PinType.PinSubCategory="",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,) + CustomProperties Pin (PinId=509DA3B4BFD84B2FB796CEFE709E3401,PinName="Key",Direction="EGPD_Output",PinType.PinCategory="struct",PinType.PinSubCategory="",PinType.PinSubCategoryObject=/Script/CoreUObject.ScriptStruct'"/Script/InputCore.Key"',PinType.PinSubCategoryMemberReference=(),PinType.PinValueType=(),PinType.ContainerType=None,PinType.bIsReference=False,PinType.bIsConst=False,PinType.bIsWeakPointer=False,PinType.bIsUObjectWrapper=False,PinType.bSerializeAsSinglePrecisionFloat=False,DefaultValue="None",AutogeneratedDefaultValue="None",PersistentGuid=00000000000000000000000000000000,bHidden=False,bNotConnectable=False,bDefaultValueIsReadOnly=False,bDefaultValueIsIgnored=False,bAdvancedView=False,bOrphanedPin=False,) + End Object + `, + size: [6, 8], + color: Configuration.nodeColors.red, + icon: SVGIcon.keyboard, + pins: 3, + pinNames: ["Pressed", "Released", "Key"], + delegate: false, + development: false, + }, + { + name: "7", + value: String.raw` + Begin Object Class=/Script/BlueprintGraph.K2Node_InputKey Name="K2Node_InputKey_6" + InputKey=Seven + NodePosX=-352 + NodePosY=352 + NodeGuid=C32CC49616194AAC923D2C59FB938447 + CustomProperties Pin (PinId=6F69CCDA3E8042AD94D2CED0A400D23C,PinName="Pressed",Direction="EGPD_Output",PinType.PinCategory="exec",PinType.PinSubCategory="",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,) + CustomProperties Pin (PinId=A34A7F4DA2F645F288C0F57A5E24DB8E,PinName="Released",Direction="EGPD_Output",PinType.PinCategory="exec",PinType.PinSubCategory="",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,) + CustomProperties Pin (PinId=3E195C0ABA83425F813A4AB20817BBDE,PinName="Key",Direction="EGPD_Output",PinType.PinCategory="struct",PinType.PinSubCategory="",PinType.PinSubCategoryObject=/Script/CoreUObject.ScriptStruct'"/Script/InputCore.Key"',PinType.PinSubCategoryMemberReference=(),PinType.PinValueType=(),PinType.ContainerType=None,PinType.bIsReference=False,PinType.bIsConst=False,PinType.bIsWeakPointer=False,PinType.bIsUObjectWrapper=False,PinType.bSerializeAsSinglePrecisionFloat=False,DefaultValue="None",AutogeneratedDefaultValue="None",PersistentGuid=00000000000000000000000000000000,bHidden=False,bNotConnectable=False,bDefaultValueIsReadOnly=False,bDefaultValueIsIgnored=False,bAdvancedView=False,bOrphanedPin=False,) + End Object + `, + size: [6, 8], + color: Configuration.nodeColors.red, + icon: SVGIcon.keyboard, + pins: 3, + pinNames: ["Pressed", "Released", "Key"], + delegate: false, + development: false, + }, + { + name: "8", + value: String.raw` + Begin Object Class=/Script/BlueprintGraph.K2Node_InputKey Name="K2Node_InputKey_7" + InputKey=Eight + NodePosX=-384 + NodePosY=256 + NodeGuid=6AF0BCA97BBD467C84CD606C09F1BBAA + CustomProperties Pin (PinId=4020BE13AED349549BA94622B8EEF80E,PinName="Pressed",Direction="EGPD_Output",PinType.PinCategory="exec",PinType.PinSubCategory="",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,) + CustomProperties Pin (PinId=8C4F484474D1432CBD77333B04D315F8,PinName="Released",Direction="EGPD_Output",PinType.PinCategory="exec",PinType.PinSubCategory="",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,) + CustomProperties Pin (PinId=3C0D2A3E5E844466B752EDD6E2160271,PinName="Key",Direction="EGPD_Output",PinType.PinCategory="struct",PinType.PinSubCategory="",PinType.PinSubCategoryObject=/Script/CoreUObject.ScriptStruct'"/Script/InputCore.Key"',PinType.PinSubCategoryMemberReference=(),PinType.PinValueType=(),PinType.ContainerType=None,PinType.bIsReference=False,PinType.bIsConst=False,PinType.bIsWeakPointer=False,PinType.bIsUObjectWrapper=False,PinType.bSerializeAsSinglePrecisionFloat=False,DefaultValue="None",AutogeneratedDefaultValue="None",PersistentGuid=00000000000000000000000000000000,bHidden=False,bNotConnectable=False,bDefaultValueIsReadOnly=False,bDefaultValueIsIgnored=False,bAdvancedView=False,bOrphanedPin=False,) + End Object + `, + size: [6, 8], + color: Configuration.nodeColors.red, + icon: SVGIcon.keyboard, + pins: 3, + pinNames: ["Pressed", "Released", "Key"], + delegate: false, + development: false, + }, + { + name: "9", + value: String.raw` + Begin Object Class=/Script/BlueprintGraph.K2Node_InputKey Name="K2Node_InputKey_8" + InputKey=Nine + NodePosX=-160 + NodePosY=288 + NodeGuid=02A84586D4F842AB87578A8F6DECDFE1 + CustomProperties Pin (PinId=F3EC3CC1CF984B15B391F75CD1B4ECC8,PinName="Pressed",Direction="EGPD_Output",PinType.PinCategory="exec",PinType.PinSubCategory="",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,) + CustomProperties Pin (PinId=2A1785736115425489B80816B0D1AC82,PinName="Released",Direction="EGPD_Output",PinType.PinCategory="exec",PinType.PinSubCategory="",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,) + CustomProperties Pin (PinId=6C6769AC5FFF4CDF98004FEE47E9A3FC,PinName="Key",Direction="EGPD_Output",PinType.PinCategory="struct",PinType.PinSubCategory="",PinType.PinSubCategoryObject=/Script/CoreUObject.ScriptStruct'"/Script/InputCore.Key"',PinType.PinSubCategoryMemberReference=(),PinType.PinValueType=(),PinType.ContainerType=None,PinType.bIsReference=False,PinType.bIsConst=False,PinType.bIsWeakPointer=False,PinType.bIsUObjectWrapper=False,PinType.bSerializeAsSinglePrecisionFloat=False,DefaultValue="None",AutogeneratedDefaultValue="None",PersistentGuid=00000000000000000000000000000000,bHidden=False,bNotConnectable=False,bDefaultValueIsReadOnly=False,bDefaultValueIsIgnored=False,bAdvancedView=False,bOrphanedPin=False,) + End Object + `, + size: [6, 8], + color: Configuration.nodeColors.red, + icon: SVGIcon.keyboard, + pins: 3, + pinNames: ["Pressed", "Released", "Key"], + delegate: false, + development: false, + }, + { + name: "Debug Key 0", + value: String.raw` + Begin Object Class=/Script/InputBlueprintNodes.K2Node_InputDebugKey Name="K2Node_InputDebugKey_1" + InputKey=Zero + NodePosX=-304 + NodePosY=192 + NodeGuid=C07BBFC668144C4FB437B3F6B355E184 + CustomProperties Pin (PinId=9F869036E3A744A8A43AA43A7620F55F,PinName="Pressed",Direction="EGPD_Output",PinType.PinCategory="exec",PinType.PinSubCategory="",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,) + CustomProperties Pin (PinId=6E45643AF86B4A62A751A9B63A57862A,PinName="Released",Direction="EGPD_Output",PinType.PinCategory="exec",PinType.PinSubCategory="",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,) + CustomProperties Pin (PinId=EC8FCA3A4A034EA59784E3A145C8DDCF,PinName="Key",Direction="EGPD_Output",PinType.PinCategory="struct",PinType.PinSubCategory="",PinType.PinSubCategoryObject=/Script/CoreUObject.ScriptStruct'"/Script/InputCore.Key"',PinType.PinSubCategoryMemberReference=(),PinType.PinValueType=(),PinType.ContainerType=None,PinType.bIsReference=False,PinType.bIsConst=False,PinType.bIsWeakPointer=False,PinType.bIsUObjectWrapper=False,PinType.bSerializeAsSinglePrecisionFloat=False,DefaultValue="None",AutogeneratedDefaultValue="None",PersistentGuid=00000000000000000000000000000000,bHidden=False,bNotConnectable=False,bDefaultValueIsReadOnly=False,bDefaultValueIsIgnored=False,bAdvancedView=False,bOrphanedPin=False,) + CustomProperties Pin (PinId=1F6919C3378A48EBBDEE77BD7F1F4E6A,PinName="ActionValue",Direction="EGPD_Output",PinType.PinCategory="struct",PinType.PinSubCategory="",PinType.PinSubCategoryObject=/Script/CoreUObject.ScriptStruct'"/Script/EnhancedInput.InputActionValue"',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: [8.5, 11], + color: Configuration.nodeColors.red, + icon: SVGIcon.keyboard, + pins: 4, + pinNames: ["Pressed", "Released", "Key", "Action Value"], + delegate: false, + development: true, + }, + { + name: "Debug Key 4", + value: String.raw` + Begin Object Class=/Script/InputBlueprintNodes.K2Node_InputDebugKey Name="K2Node_InputDebugKey_2" + InputKey=Four + NodePosY=160 + NodeGuid=10A6E414241D451ABCCDD93A5DC731EC + CustomProperties Pin (PinId=2F11C0CFA4334DC69E85B9E319A4535D,PinName="Pressed",Direction="EGPD_Output",PinType.PinCategory="exec",PinType.PinSubCategory="",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,) + CustomProperties Pin (PinId=19A17B1886904EE7872288EA7750E0A0,PinName="Released",Direction="EGPD_Output",PinType.PinCategory="exec",PinType.PinSubCategory="",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,) + CustomProperties Pin (PinId=C3166A5D6C914ACE9A897A8F95F832A3,PinName="Key",Direction="EGPD_Output",PinType.PinCategory="struct",PinType.PinSubCategory="",PinType.PinSubCategoryObject=/Script/CoreUObject.ScriptStruct'"/Script/InputCore.Key"',PinType.PinSubCategoryMemberReference=(),PinType.PinValueType=(),PinType.ContainerType=None,PinType.bIsReference=False,PinType.bIsConst=False,PinType.bIsWeakPointer=False,PinType.bIsUObjectWrapper=False,PinType.bSerializeAsSinglePrecisionFloat=False,DefaultValue="None",AutogeneratedDefaultValue="None",PersistentGuid=00000000000000000000000000000000,bHidden=False,bNotConnectable=False,bDefaultValueIsReadOnly=False,bDefaultValueIsIgnored=False,bAdvancedView=False,bOrphanedPin=False,) + CustomProperties Pin (PinId=411B9A362C694A60A29B2FA623CF1CD4,PinName="ActionValue",Direction="EGPD_Output",PinType.PinCategory="struct",PinType.PinSubCategory="",PinType.PinSubCategoryObject=/Script/CoreUObject.ScriptStruct'"/Script/EnhancedInput.InputActionValue"',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: [8.5, 11], + color: Configuration.nodeColors.red, + icon: SVGIcon.keyboard, + pins: 4, + pinNames: ["Pressed", "Released", "Key", "Action Value"], + delegate: false, + development: true, + }, + { + name: "Num 1", + value: String.raw` + Begin Object Class=/Script/BlueprintGraph.K2Node_InputKey Name="K2Node_InputKey_9" + InputKey=NumPadOne + NodePosX=-240 + NodeGuid=1B61D1A914354095A8A8420B68656463 + CustomProperties Pin (PinId=2F18160D6E56431D8A81ACD578E0131C,PinName="Pressed",Direction="EGPD_Output",PinType.PinCategory="exec",PinType.PinSubCategory="",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,) + CustomProperties Pin (PinId=0957F9CBAC034E2EBD87B15904B75FF1,PinName="Released",Direction="EGPD_Output",PinType.PinCategory="exec",PinType.PinSubCategory="",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,) + CustomProperties Pin (PinId=45805673C5CF4C80BB198F99EF1FEB24,PinName="Key",Direction="EGPD_Output",PinType.PinCategory="struct",PinType.PinSubCategory="",PinType.PinSubCategoryObject=/Script/CoreUObject.ScriptStruct'"/Script/InputCore.Key"',PinType.PinSubCategoryMemberReference=(),PinType.PinValueType=(),PinType.ContainerType=None,PinType.bIsReference=False,PinType.bIsConst=False,PinType.bIsWeakPointer=False,PinType.bIsUObjectWrapper=False,PinType.bSerializeAsSinglePrecisionFloat=False,DefaultValue="None",AutogeneratedDefaultValue="None",PersistentGuid=00000000000000000000000000000000,bHidden=False,bNotConnectable=False,bDefaultValueIsReadOnly=False,bDefaultValueIsIgnored=False,bAdvancedView=False,bOrphanedPin=False,) + End Object + `, + size: [6.5, 8], + color: Configuration.nodeColors.red, + icon: SVGIcon.keyboard, + pins: 3, + pinNames: ["Pressed", "Released", "Key"], + delegate: false, + development: false, + }, + { + name: "Num 6", + value: String.raw` + Begin Object Class=/Script/BlueprintGraph.K2Node_InputKey Name="K2Node_InputKey_10" + InputKey=NumPadSix + NodePosX=256 + NodePosY=-32 + NodeGuid=26F046FCA2394E5A975801CA389D6E18 + CustomProperties Pin (PinId=450CA89B6E3348D8819EBA1315618F01,PinName="Pressed",Direction="EGPD_Output",PinType.PinCategory="exec",PinType.PinSubCategory="",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,) + CustomProperties Pin (PinId=4F3B98C52357433E9436C29F86844F94,PinName="Released",Direction="EGPD_Output",PinType.PinCategory="exec",PinType.PinSubCategory="",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,) + CustomProperties Pin (PinId=A5BFA728BEA7452B99D3A67DFB2E800E,PinName="Key",Direction="EGPD_Output",PinType.PinCategory="struct",PinType.PinSubCategory="",PinType.PinSubCategoryObject=/Script/CoreUObject.ScriptStruct'"/Script/InputCore.Key"',PinType.PinSubCategoryMemberReference=(),PinType.PinValueType=(),PinType.ContainerType=None,PinType.bIsReference=False,PinType.bIsConst=False,PinType.bIsWeakPointer=False,PinType.bIsUObjectWrapper=False,PinType.bSerializeAsSinglePrecisionFloat=False,DefaultValue="None",AutogeneratedDefaultValue="None",PersistentGuid=00000000000000000000000000000000,bHidden=False,bNotConnectable=False,bDefaultValueIsReadOnly=False,bDefaultValueIsIgnored=False,bAdvancedView=False,bOrphanedPin=False,) + End Object + `, + size: [6.5, 8], + color: Configuration.nodeColors.red, + icon: SVGIcon.keyboard, + pins: 3, + pinNames: ["Pressed", "Released", "Key"], + delegate: false, + development: false, + }, + { + name: "Debug Key Num 5", + value: String.raw` + Begin Object Class=/Script/InputBlueprintNodes.K2Node_InputDebugKey Name="K2Node_InputDebugKey_3" + InputKey=NumPadFive + NodePosX=16 + NodePosY=-48 + NodeGuid=FB21225080DF48DFB7A662369E470AA1 + CustomProperties Pin (PinId=8540A18FD95D477C93035CDB3D2AE2B0,PinName="Pressed",Direction="EGPD_Output",PinType.PinCategory="exec",PinType.PinSubCategory="",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,) + CustomProperties Pin (PinId=B8E224DBCEB1454B81EC9462A6DB5F06,PinName="Released",Direction="EGPD_Output",PinType.PinCategory="exec",PinType.PinSubCategory="",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,) + CustomProperties Pin (PinId=D7B687EA384A4E81B45C9CFB0996989F,PinName="Key",Direction="EGPD_Output",PinType.PinCategory="struct",PinType.PinSubCategory="",PinType.PinSubCategoryObject=/Script/CoreUObject.ScriptStruct'"/Script/InputCore.Key"',PinType.PinSubCategoryMemberReference=(),PinType.PinValueType=(),PinType.ContainerType=None,PinType.bIsReference=False,PinType.bIsConst=False,PinType.bIsWeakPointer=False,PinType.bIsUObjectWrapper=False,PinType.bSerializeAsSinglePrecisionFloat=False,DefaultValue="None",AutogeneratedDefaultValue="None",PersistentGuid=00000000000000000000000000000000,bHidden=False,bNotConnectable=False,bDefaultValueIsReadOnly=False,bDefaultValueIsIgnored=False,bAdvancedView=False,bOrphanedPin=False,) + CustomProperties Pin (PinId=EC6AE35C9D9343E6965884DE97A9555A,PinName="ActionValue",Direction="EGPD_Output",PinType.PinCategory="struct",PinType.PinSubCategory="",PinType.PinSubCategoryObject=/Script/CoreUObject.ScriptStruct'"/Script/EnhancedInput.InputActionValue"',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: [10.5, 11], + color: Configuration.nodeColors.red, + icon: SVGIcon.keyboard, + pins: 4, + pinNames: ["Pressed", "Released", "Key", "Action Value"], + delegate: false, + development: true, + }, + { + name: "Num +", + value: String.raw` + Begin Object Class=/Script/BlueprintGraph.K2Node_InputKey Name="K2Node_InputKey_11" + InputKey=Add + NodePosX=-176 + NodePosY=-128 + NodeGuid=5D4F157F72EC42B69CDB89CB6EEC507C + CustomProperties Pin (PinId=9EFDA67BE6D341B8BC6248F6AEFC75DB,PinName="Pressed",Direction="EGPD_Output",PinType.PinCategory="exec",PinType.PinSubCategory="",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,) + CustomProperties Pin (PinId=35304E478D344F05B081FCA9C3271C52,PinName="Released",Direction="EGPD_Output",PinType.PinCategory="exec",PinType.PinSubCategory="",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,) + CustomProperties Pin (PinId=22180FA7E6054064922D73E6BF50E23A,PinName="Key",Direction="EGPD_Output",PinType.PinCategory="struct",PinType.PinSubCategory="",PinType.PinSubCategoryObject=/Script/CoreUObject.ScriptStruct'"/Script/InputCore.Key"',PinType.PinSubCategoryMemberReference=(),PinType.PinValueType=(),PinType.ContainerType=None,PinType.bIsReference=False,PinType.bIsConst=False,PinType.bIsWeakPointer=False,PinType.bIsUObjectWrapper=False,PinType.bSerializeAsSinglePrecisionFloat=False,DefaultValue="None",AutogeneratedDefaultValue="None",PersistentGuid=00000000000000000000000000000000,bHidden=False,bNotConnectable=False,bDefaultValueIsReadOnly=False,bDefaultValueIsIgnored=False,bAdvancedView=False,bOrphanedPin=False,) + End Object + `, + size: [6, 8], + color: Configuration.nodeColors.red, + icon: SVGIcon.keyboard, + pins: 3, + pinNames: ["Pressed", "Released", "Key"], + delegate: false, + development: false, + }, + { + name: "Num -", + value: String.raw` + Begin Object Class=/Script/BlueprintGraph.K2Node_InputKey Name="K2Node_InputKey_12" + InputKey=Subtract + NodePosX=-480 + NodePosY=128 + NodeGuid=5DC438BC02904EC7B7252EC3A9E63E7E + CustomProperties Pin (PinId=EEF5174C8F8B4BBF999E26222C9F0003,PinName="Pressed",Direction="EGPD_Output",PinType.PinCategory="exec",PinType.PinSubCategory="",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,) + CustomProperties Pin (PinId=C005CB1322CF4A39832A878229F790A4,PinName="Released",Direction="EGPD_Output",PinType.PinCategory="exec",PinType.PinSubCategory="",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,) + CustomProperties Pin (PinId=58DC51053EC343BFA7033F833D7AEC4A,PinName="Key",Direction="EGPD_Output",PinType.PinCategory="struct",PinType.PinSubCategory="",PinType.PinSubCategoryObject=/Script/CoreUObject.ScriptStruct'"/Script/InputCore.Key"',PinType.PinSubCategoryMemberReference=(),PinType.PinValueType=(),PinType.ContainerType=None,PinType.bIsReference=False,PinType.bIsConst=False,PinType.bIsWeakPointer=False,PinType.bIsUObjectWrapper=False,PinType.bSerializeAsSinglePrecisionFloat=False,DefaultValue="None",AutogeneratedDefaultValue="None",PersistentGuid=00000000000000000000000000000000,bHidden=False,bNotConnectable=False,bDefaultValueIsReadOnly=False,bDefaultValueIsIgnored=False,bAdvancedView=False,bOrphanedPin=False,) + End Object + `, + size: [6, 8], + color: Configuration.nodeColors.red, + icon: SVGIcon.keyboard, + pins: 3, + pinNames: ["Pressed", "Released", "Key"], + delegate: false, + development: false, + }, + { + name: "Num *", + value: String.raw` + Begin Object Class=/Script/BlueprintGraph.K2Node_InputKey Name="K2Node_InputKey_13" + InputKey=Multiply + NodePosX=-304 + NodePosY=368 + NodeGuid=7B9AEEA6FD3D43BE9703A49FC653B3EE + CustomProperties Pin (PinId=13493EE95CF9461D82EBC6312E5FB99B,PinName="Pressed",Direction="EGPD_Output",PinType.PinCategory="exec",PinType.PinSubCategory="",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,) + CustomProperties Pin (PinId=10E9155D52D340E59522D3004C684C58,PinName="Released",Direction="EGPD_Output",PinType.PinCategory="exec",PinType.PinSubCategory="",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,) + CustomProperties Pin (PinId=BFC37A52F314418AAB75DFC22ACFC823,PinName="Key",Direction="EGPD_Output",PinType.PinCategory="struct",PinType.PinSubCategory="",PinType.PinSubCategoryObject=/Script/CoreUObject.ScriptStruct'"/Script/InputCore.Key"',PinType.PinSubCategoryMemberReference=(),PinType.PinValueType=(),PinType.ContainerType=None,PinType.bIsReference=False,PinType.bIsConst=False,PinType.bIsWeakPointer=False,PinType.bIsUObjectWrapper=False,PinType.bSerializeAsSinglePrecisionFloat=False,DefaultValue="None",AutogeneratedDefaultValue="None",PersistentGuid=00000000000000000000000000000000,bHidden=False,bNotConnectable=False,bDefaultValueIsReadOnly=False,bDefaultValueIsIgnored=False,bAdvancedView=False,bOrphanedPin=False,) + End Object + `, + size: [6, 8], + color: Configuration.nodeColors.red, + icon: SVGIcon.keyboard, + pins: 3, + pinNames: ["Pressed", "Released", "Key"], + delegate: false, + development: false, + }, + { + name: "Num /", + value: String.raw` + Begin Object Class=/Script/BlueprintGraph.K2Node_InputKey Name="K2Node_InputKey_14" + InputKey=Divide + NodePosX=-16 + NodePosY=320 + NodeGuid=3614847DFA5F4E029DDAEA817DF34A92 + CustomProperties Pin (PinId=7A1E3D92081743D58198DFBC7F2B8A6E,PinName="Pressed",Direction="EGPD_Output",PinType.PinCategory="exec",PinType.PinSubCategory="",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,) + CustomProperties Pin (PinId=6B03709D315C42229EF60E1CB72EC05F,PinName="Released",Direction="EGPD_Output",PinType.PinCategory="exec",PinType.PinSubCategory="",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,) + CustomProperties Pin (PinId=49C225DB9A9A4054A3710C2C1A36B908,PinName="Key",Direction="EGPD_Output",PinType.PinCategory="struct",PinType.PinSubCategory="",PinType.PinSubCategoryObject=/Script/CoreUObject.ScriptStruct'"/Script/InputCore.Key"',PinType.PinSubCategoryMemberReference=(),PinType.PinValueType=(),PinType.ContainerType=None,PinType.bIsReference=False,PinType.bIsConst=False,PinType.bIsWeakPointer=False,PinType.bIsUObjectWrapper=False,PinType.bSerializeAsSinglePrecisionFloat=False,DefaultValue="None",AutogeneratedDefaultValue="None",PersistentGuid=00000000000000000000000000000000,bHidden=False,bNotConnectable=False,bDefaultValueIsReadOnly=False,bDefaultValueIsIgnored=False,bAdvancedView=False,bOrphanedPin=False,) + End Object + `, + size: [6, 8], + color: Configuration.nodeColors.red, + icon: SVGIcon.keyboard, + pins: 3, + pinNames: ["Pressed", "Released", "Key"], + delegate: false, + development: false, + }, + { + name: "Num .", + value: String.raw` + Begin Object Class=/Script/BlueprintGraph.K2Node_InputKey Name="K2Node_InputKey_15" + InputKey=Decimal + NodePosX=352 + NodePosY=-96 + NodeGuid=572FFD40DB4541D497414E86EC4CC310 + CustomProperties Pin (PinId=8A053F5C10A942F88E96C966ABD2CDFF,PinName="Pressed",Direction="EGPD_Output",PinType.PinCategory="exec",PinType.PinSubCategory="",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,) + CustomProperties Pin (PinId=2E39E39C2F3D4F8F8DDBD0B04A30A23E,PinName="Released",Direction="EGPD_Output",PinType.PinCategory="exec",PinType.PinSubCategory="",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,) + CustomProperties Pin (PinId=BE6CA5BA91FF4AB29D695D881E42EC8C,PinName="Key",Direction="EGPD_Output",PinType.PinCategory="struct",PinType.PinSubCategory="",PinType.PinSubCategoryObject=/Script/CoreUObject.ScriptStruct'"/Script/InputCore.Key"',PinType.PinSubCategoryMemberReference=(),PinType.PinValueType=(),PinType.ContainerType=None,PinType.bIsReference=False,PinType.bIsConst=False,PinType.bIsWeakPointer=False,PinType.bIsUObjectWrapper=False,PinType.bSerializeAsSinglePrecisionFloat=False,DefaultValue="None",AutogeneratedDefaultValue="None",PersistentGuid=00000000000000000000000000000000,bHidden=False,bNotConnectable=False,bDefaultValueIsReadOnly=False,bDefaultValueIsIgnored=False,bAdvancedView=False,bOrphanedPin=False,) + End Object + `, + size: [6, 8], + color: Configuration.nodeColors.red, + icon: SVGIcon.keyboard, + pins: 3, + pinNames: ["Pressed", "Released", "Key"], + delegate: false, + development: false, + }, + { + name: "Debug Key Num *", + value: String.raw` + Begin Object Class=/Script/InputBlueprintNodes.K2Node_InputDebugKey Name="K2Node_InputDebugKey_6" + InputKey=Multiply + NodePosX=-128 + NodePosY=144 + NodeGuid=997A0FD2D9774330AF08F15369C56285 + CustomProperties Pin (PinId=26A30BF9FBC446E6BEED77ACFC4ECF11,PinName="Pressed",Direction="EGPD_Output",PinType.PinCategory="exec",PinType.PinSubCategory="",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,) + CustomProperties Pin (PinId=833512F46F464761ACC78C2555D654E5,PinName="Released",Direction="EGPD_Output",PinType.PinCategory="exec",PinType.PinSubCategory="",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,) + CustomProperties Pin (PinId=ACACF4785ED34276B22969BA174904F2,PinName="Key",Direction="EGPD_Output",PinType.PinCategory="struct",PinType.PinSubCategory="",PinType.PinSubCategoryObject=/Script/CoreUObject.ScriptStruct'"/Script/InputCore.Key"',PinType.PinSubCategoryMemberReference=(),PinType.PinValueType=(),PinType.ContainerType=None,PinType.bIsReference=False,PinType.bIsConst=False,PinType.bIsWeakPointer=False,PinType.bIsUObjectWrapper=False,PinType.bSerializeAsSinglePrecisionFloat=False,DefaultValue="None",AutogeneratedDefaultValue="None",PersistentGuid=00000000000000000000000000000000,bHidden=False,bNotConnectable=False,bDefaultValueIsReadOnly=False,bDefaultValueIsIgnored=False,bAdvancedView=False,bOrphanedPin=False,) + CustomProperties Pin (PinId=AC8DDD237434456DA1802FD4C07EE2F5,PinName="ActionValue",Direction="EGPD_Output",PinType.PinCategory="struct",PinType.PinSubCategory="",PinType.PinSubCategoryObject=/Script/CoreUObject.ScriptStruct'"/Script/EnhancedInput.InputActionValue"',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: [10.5, 11], + color: Configuration.nodeColors.red, + icon: SVGIcon.keyboard, + pins: 4, + pinNames: ["Pressed", "Released", "Key", "Action Value"], + delegate: false, + development: true, + }, + ]) + } +} diff --git a/tests/resources/LegacyNodes.js b/tests/resources/LegacyNodes.js new file mode 100644 index 0000000..2c08255 --- /dev/null +++ b/tests/resources/LegacyNodes.js @@ -0,0 +1,87 @@ +import { expect } from "../fixtures/test.js" +import Configuration from "../../js/Configuration.js" +import SVGIcon from "../../js/SVGIcon.js" +import NodeTests from "./NodeTests.js" + +export default class LegacyNodes extends NodeTests { + static { + this.set([ + { + name: "Flip Flop legacy", + title: "Flip Flop", + value: String.raw` + Begin Object Class=K2Node_MacroInstance Name="K2Node_MacroInstance_1262" + NodePosX=3984 + NodePosY=-960 + NodeGuid=968059974A02AF6B67D2879EC909179A + Begin Object Class=EdGraphPin Name="EdGraphPin_59688" + End Object + Begin Object Class=EdGraphPin Name="EdGraphPin_59689" + End Object + Begin Object Class=EdGraphPin Name="EdGraphPin_59690" + End Object + Begin Object Class=EdGraphPin Name="EdGraphPin_59691" + End Object + MacroGraphReference=(MacroGraph=EdGraph'/Engine/EditorBlueprintResources/StandardMacros.StandardMacros:FlipFlop',GraphBlueprint=Blueprint'/Engine/EditorBlueprintResources/StandardMacros.StandardMacros',GraphGuid=BFFFAAE4434E166F549665AD1AA89B60) + Pins(0)=EdGraphPin'EdGraphPin_59688' + Pins(1)=EdGraphPin'EdGraphPin_59689' + Pins(2)=EdGraphPin'EdGraphPin_59690' + Pins(3)=EdGraphPin'EdGraphPin_59691' + Begin Object Name="EdGraphPin_59688" + PinType=(PinCategory="exec") + LinkedTo(0)=EdGraphPin'K2Node_InputKey_1185.EdGraphPin_42090' + LinkedTo(1)=EdGraphPin'K2Node_InputKey_14487.EdGraphPin_45417' + End Object + Begin Object Name="EdGraphPin_59689" + PinName="A" + Direction=EGPD_Output + PinType=(PinCategory="exec") + LinkedTo(0)=EdGraphPin'K2Node_CallFunction_7370.EdGraphPin_43320' + End Object + Begin Object Name="EdGraphPin_59690" + PinName="B" + Direction=EGPD_Output + PinType=(PinCategory="exec") + LinkedTo(0)=EdGraphPin'K2Node_CallFunction_44249.EdGraphPin_43272' + End Object + Begin Object Name="EdGraphPin_59691" + PinName="IsA" + Direction=EGPD_Output + PinType=(PinCategory="bool") + End Object + End Object + `, + size: [7.5, 8], + color: Configuration.nodeColors.gray, + icon: SVGIcon.flipflop, + pins: 4, + pinNames: ["A", "B", "Is A"], + delegate: false, + development: false, + additionalTest: async node => { + expect(await node.evaluate(node => node.entity.Class.type)) + .toBe("/Script/BlueprintGraph.K2Node_MacroInstance") + expect(await node.evaluate(node => node.entity.MacroGraphReference.MacroGraph.type)) + .toBe("/Script/Engine.EdGraph") + expect(await node.evaluate(node => node.entity.MacroGraphReference.MacroGraph.path)) + .toBe("/Engine/EditorBlueprintResources/StandardMacros.StandardMacros:FlipFlop") + expect(await node.evaluate(node => node.entity.MacroGraphReference.GraphBlueprint.type)) + .toBe("/Script/Engine.Blueprint") + expect(await node.evaluate(node => node.entity.MacroGraphReference.GraphBlueprint.path)) + .toBe("/Engine/EditorBlueprintResources/StandardMacros.StandardMacros") + expect(await node.evaluate( + (node, subObjectAttributeNamePrefix) => Object.keys(node.entity) + .filter(k => k.startsWith(subObjectAttributeNamePrefix)) + .map(k => /** @type {ObjectEntity} */(node.entity[k])) + .filter(v => v.Class) + .map(objectEntity => objectEntity.getType()) + , + Configuration.subObjectAttributeNamePrefix + )) + .toStrictEqual(Array(4).fill(Configuration.paths.edGraphPinDeprecated)) + expect(await node.evaluate(node => node.getPinEntities().length)).toBe(4) + } + }, + ]) + } +} diff --git a/tests/resources/MaterialNodes.js b/tests/resources/MaterialNodes.js new file mode 100644 index 0000000..a32d100 --- /dev/null +++ b/tests/resources/MaterialNodes.js @@ -0,0 +1,415 @@ +import { expect } from "../fixtures/test.js" +import Configuration from "../../js/Configuration.js" +import IntegerEntity from "../../js/entity/IntegerEntity.js" +import NodeTests from "./NodeTests.js" +import PinElement from "../../js/element/PinElement.js" +import RBSerializationVector2DEntity from "../../js/entity/RBSerializationVector2DEntity.js" +import Utility from "../../js/Utility.js" +import VectorEntity from "../../js/entity/VectorEntity.js" + +export default class MaterialNodes extends NodeTests { + static { + this.set([ + { + name: "Comment", + value: String.raw` + Begin Object Class=/Script/UnrealEd.MaterialGraphNode_Comment Name="MaterialGraphNode_Comment_0" ExportPath=/Script/UnrealEd.MaterialGraphNode_Comment'"/Engine/Transient.M_CobbleStone_Smooth:MaterialGraph_0.MaterialGraphNode_Comment_0"' + Begin Object Class=/Script/Engine.MaterialExpressionComment Name="MaterialExpressionComment_0" ExportPath=/Script/Engine.MaterialExpressionComment'"/Engine/Transient.M_CobbleStone_Smooth:MaterialGraph_0.MaterialGraphNode_Comment_0.MaterialExpressionComment_0"' + End Object + Begin Object Name="MaterialExpressionComment_0" ExportPath=/Script/Engine.MaterialExpressionComment'"/Engine/Transient.M_CobbleStone_Smooth:MaterialGraph_0.MaterialGraphNode_Comment_0.MaterialExpressionComment_0"' + SizeX=249 + SizeY=165 + Text="Comment" + MaterialExpressionEditorX=-5920 + MaterialExpressionEditorY=-704 + MaterialExpressionGuid=E21961B2B09144CF8607171C9D1E3489 + End Object + MaterialExpressionComment=/Script/Engine.MaterialExpressionComment'"MaterialExpressionComment_0"' + bCommentBubbleVisible_InDetailsPanel=False + NodePosX=-5920 + NodePosY=-704 + NodeWidth=249 + NodeHeight=165 + bCommentBubblePinned=False + bCommentBubbleVisible=False + NodeComment="Comment" + NodeGuid=A04CE0EEECF047A4918AC9B13818854E + End Object + `, + delegate: false, + development: false, + }, + { + name: "Constant", + title: "1e+04", + value: String.raw` + Begin Object Class=/Script/UnrealEd.MaterialGraphNode Name="MaterialGraphNode_41" ExportPath=/Script/UnrealEd.MaterialGraphNode'"/Engine/Transient.M_Brick_Cut_Stone:MaterialGraph_0.MaterialGraphNode_41"' + Begin Object Class=/Script/Engine.MaterialExpressionConstant Name="MaterialExpressionConstant_0" ExportPath=/Script/Engine.MaterialExpressionConstant'"/Engine/Transient.M_Brick_Cut_Stone:MaterialGraph_0.MaterialGraphNode_41.MaterialExpressionConstant_0"' + End Object + Begin Object Name="MaterialExpressionConstant_0" ExportPath=/Script/Engine.MaterialExpressionConstant'"/Engine/Transient.M_Brick_Cut_Stone:MaterialGraph_0.MaterialGraphNode_41.MaterialExpressionConstant_0"' + R=10000.000000 + MaterialExpressionEditorX=-1328 + MaterialExpressionEditorY=-880 + MaterialExpressionGuid=1149D6828E794743B8343514F4B5E579 + Material=/Script/UnrealEd.PreviewMaterial'"/Engine/Transient.M_Brick_Cut_Stone"' + bCollapsed=False + End Object + MaterialExpression=/Script/Engine.MaterialExpressionConstant'"MaterialExpressionConstant_0"' + NodePosX=-1328 + NodePosY=-880 + NodeGuid=087DAB628E1148BE89BB1DBC720109F1 + CustomProperties Pin (PinId=A4EA20596A6C410598615F5328D298C4,PinName="Value",PinType.PinCategory="optional",PinType.PinSubCategory="red",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,DefaultValue="10000.0",PersistentGuid=00000000000000000000000000000000,bHidden=False,bNotConnectable=True,bDefaultValueIsReadOnly=False,bDefaultValueIsIgnored=False,bAdvancedView=False,bOrphanedPin=False,) + CustomProperties Pin (PinId=99BE24A176124E02830C5F17A7DEF554,PinName="Output",PinFriendlyName=NSLOCTEXT("MaterialGraphNode", "Space", " "),Direction="EGPD_Output",PinType.PinCategory="",PinType.PinSubCategory="",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 + `, + color: Configuration.nodeColors.green, + icon: null, + pins: 2, + pinNames: ["Value"], + delegate: false, + development: false, + additionalTest: async node => { + const value = 10000.0 + /** @type {Locator>} */ + const pin = node.locator("ueb-pin").first() + expect(await pin.evaluate(pin => pin.getDefaultValue())).toBeCloseTo(value) + await expect(node.locator("ueb-input")).toHaveText([Utility.printNumber(value)]) + } + }, + { + name: "Constance2Vector", + title: "0.1,23.9", + value: String.raw` + Begin Object Class=/Script/UnrealEd.MaterialGraphNode Name="MaterialGraphNode_42" ExportPath=/Script/UnrealEd.MaterialGraphNode'"/Engine/Transient.M_Brick_Cut_Stone:MaterialGraph_0.MaterialGraphNode_42"' + Begin Object Class=/Script/Engine.MaterialExpressionConstant2Vector Name="MaterialExpressionConstant2Vector_1" ExportPath=/Script/Engine.MaterialExpressionConstant2Vector'"/Engine/Transient.M_Brick_Cut_Stone:MaterialGraph_0.MaterialGraphNode_42.MaterialExpressionConstant2Vector_1"' + End Object + Begin Object Name="MaterialExpressionConstant2Vector_1" ExportPath=/Script/Engine.MaterialExpressionConstant2Vector'"/Engine/Transient.M_Brick_Cut_Stone:MaterialGraph_0.MaterialGraphNode_42.MaterialExpressionConstant2Vector_1"' + R=0.100000 + G=23.888880 + MaterialExpressionEditorX=-1312 + MaterialExpressionEditorY=-1312 + MaterialExpressionGuid=E1302404B22A4D66BB39F9C2652EA0A5 + Material=/Script/UnrealEd.PreviewMaterial'"/Engine/Transient.M_Brick_Cut_Stone"' + End Object + MaterialExpression=/Script/Engine.MaterialExpressionConstant2Vector'"MaterialExpressionConstant2Vector_1"' + NodePosX=-1312 + NodePosY=-1312 + NodeGuid=50998E65A4E54B04A39EADA323DEEEE0 + CustomProperties Pin (PinId=F0B9EDE0763E414096FA82A0C1D3B3D3,PinName="X",PinType.PinCategory="optional",PinType.PinSubCategory="red",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,DefaultValue="0.1",PersistentGuid=00000000000000000000000000000000,bHidden=False,bNotConnectable=True,bDefaultValueIsReadOnly=False,bDefaultValueIsIgnored=False,bAdvancedView=False,bOrphanedPin=False,) + CustomProperties Pin (PinId=A5A2FCBE348D4075A3F7FCAD9299C9CB,PinName="Y",PinType.PinCategory="optional",PinType.PinSubCategory="red",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,DefaultValue="23.88888",PersistentGuid=00000000000000000000000000000000,bHidden=False,bNotConnectable=True,bDefaultValueIsReadOnly=False,bDefaultValueIsIgnored=False,bAdvancedView=False,bOrphanedPin=False,) + CustomProperties Pin (PinId=FF6B0DF61B3849DEA00B539430E73C90,PinName="Output",PinFriendlyName=NSLOCTEXT("MaterialGraphNode", "Space", " "),Direction="EGPD_Output",PinType.PinCategory="mask",PinType.PinSubCategory="",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,) + CustomProperties Pin (PinId=68FF49DB3534433CB8A7486036E434B7,PinName="Output2",PinFriendlyName=NSLOCTEXT("MaterialGraphNode", "Space", " "),Direction="EGPD_Output",PinType.PinCategory="mask",PinType.PinSubCategory="red",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,) + CustomProperties Pin (PinId=A98F7CB8EB5D467D8E2217BF4A1AFA71,PinName="Output3",PinFriendlyName=NSLOCTEXT("MaterialGraphNode", "Space", " "),Direction="EGPD_Output",PinType.PinCategory="mask",PinType.PinSubCategory="green",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 + `, + color: Configuration.nodeColors.yellow, + icon: null, + pins: 5, + pinNames: ["X", "Y"], + delegate: false, + development: false, + additionalTest: async node => { + const x = 0.1 + const y = 23.88888 + /** @type {Locator>} */ + const xPin = node.locator("ueb-pin").nth(0) + /** @type {Locator>} */ + const yPin = node.locator("ueb-pin").nth(1) + expect(await xPin.evaluate(pin => pin.getDefaultValue())).toBeCloseTo(x) + expect(await yPin.evaluate(pin => pin.getDefaultValue())).toBeCloseTo(y) + await expect(node.locator("ueb-input")).toHaveText([Utility.printNumber(x), Utility.printNumber(y)]) + } + }, + { + name: "Constant3Vector", + title: "0.00432,123,7.66e+09", + value: String.raw` + Begin Object Class=/Script/UnrealEd.MaterialGraphNode Name="MaterialGraphNode_40" ExportPath=/Script/UnrealEd.MaterialGraphNode'"/Engine/Transient.M_Brick_Cut_Stone:MaterialGraph_0.MaterialGraphNode_40"' + Begin Object Class=/Script/Engine.MaterialExpressionConstant3Vector Name="MaterialExpressionConstant3Vector_1" ExportPath=/Script/Engine.MaterialExpressionConstant3Vector'"/Engine/Transient.M_Brick_Cut_Stone:MaterialGraph_0.MaterialGraphNode_40.MaterialExpressionConstant3Vector_1"' + End Object + Begin Object Name="MaterialExpressionConstant3Vector_1" ExportPath=/Script/Engine.MaterialExpressionConstant3Vector'"/Engine/Transient.M_Brick_Cut_Stone:MaterialGraph_0.MaterialGraphNode_40.MaterialExpressionConstant3Vector_1"' + Constant=(R=0.004320,G=123.199997,B=7657650176.000000,A=0.000000) + MaterialExpressionEditorX=-2592 + MaterialExpressionEditorY=-688 + MaterialExpressionGuid=6854D92803B449F79902FC5BE6D244F9 + Material=/Script/UnrealEd.PreviewMaterial'"/Engine/Transient.M_Brick_Cut_Stone"' + End Object + MaterialExpression=/Script/Engine.MaterialExpressionConstant3Vector'"MaterialExpressionConstant3Vector_1"' + NodePosX=-2592 + NodePosY=-688 + NodeGuid=A166C6EF5D5D4C298F8549BFCD353E30 + CustomProperties Pin (PinId=8CFCA073717A4E7795F803C9A3F3ADA6,PinName="Constant",PinType.PinCategory="optional",PinType.PinSubCategory="rgb",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,DefaultValue="0.00432,123.199997,7657650176.0",PersistentGuid=00000000000000000000000000000000,bHidden=False,bNotConnectable=True,bDefaultValueIsReadOnly=False,bDefaultValueIsIgnored=False,bAdvancedView=False,bOrphanedPin=False,) + CustomProperties Pin (PinId=CD2387366A1745BA9A1F861F7698480A,PinName="Output",PinFriendlyName=NSLOCTEXT("MaterialGraphNode", "Space", " "),Direction="EGPD_Output",PinType.PinCategory="mask",PinType.PinSubCategory="",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,) + CustomProperties Pin (PinId=F1B3B937A4074949AA46A2D9743D51A1,PinName="Output2",PinFriendlyName=NSLOCTEXT("MaterialGraphNode", "Space", " "),Direction="EGPD_Output",PinType.PinCategory="mask",PinType.PinSubCategory="red",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,) + CustomProperties Pin (PinId=2EE41C91F9B841ADA834AA42D10ADE20,PinName="Output3",PinFriendlyName=NSLOCTEXT("MaterialGraphNode", "Space", " "),Direction="EGPD_Output",PinType.PinCategory="mask",PinType.PinSubCategory="green",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,) + CustomProperties Pin (PinId=A4B265999B284DB0A5175E969C471A17,PinName="Output4",PinFriendlyName=NSLOCTEXT("MaterialGraphNode", "Space", " "),Direction="EGPD_Output",PinType.PinCategory="mask",PinType.PinSubCategory="blue",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 + `, + color: Configuration.nodeColors.yellow, + icon: null, + pins: 5, + pinNames: ["Constant"], + delegate: false, + development: false, + additionalTest: async node => { + /** @type {Locator>} */ + const input = node.locator("ueb-pin").first() + const values = await input.evaluate(pin => pin.getDefaultValue().toArray()) + const expected = [0.00432, 123.199997, 7657650176.0] + expected.forEach((v, i) => expect(v).toBeCloseTo(values[i])) + await expect(input.locator("ueb-input")).toHaveText(expected.map(v => Utility.printNumber(v))) + } + }, + { + name: "Constant4Vector", + title: "4,10.5,2.5e+03,0.33", + value: String.raw` + Begin Object Class=/Script/UnrealEd.MaterialGraphNode Name="MaterialGraphNode_45" ExportPath=/Script/UnrealEd.MaterialGraphNode'"/Engine/Transient.M_Brick_Cut_Stone:MaterialGraph_0.MaterialGraphNode_45"' + Begin Object Class=/Script/Engine.MaterialExpressionConstant4Vector Name="MaterialExpressionConstant4Vector_1" ExportPath=/Script/Engine.MaterialExpressionConstant4Vector'"/Engine/Transient.M_Brick_Cut_Stone:MaterialGraph_0.MaterialGraphNode_45.MaterialExpressionConstant4Vector_1"' + End Object + Begin Object Name="MaterialExpressionConstant4Vector_1" ExportPath=/Script/Engine.MaterialExpressionConstant4Vector'"/Engine/Transient.M_Brick_Cut_Stone:MaterialGraph_0.MaterialGraphNode_45.MaterialExpressionConstant4Vector_1"' + Constant=(R=4.000000,G=10.500000,B=2500.669922,A=0.330000) + MaterialExpressionEditorX=-2864 + MaterialExpressionEditorY=-1600 + MaterialExpressionGuid=FA680399FB1F40299DCCD649976E2007 + Material=/Script/UnrealEd.PreviewMaterial'"/Engine/Transient.M_Brick_Cut_Stone"' + End Object + MaterialExpression=/Script/Engine.MaterialExpressionConstant4Vector'"MaterialExpressionConstant4Vector_1"' + NodePosX=-2864 + NodePosY=-1600 + NodeGuid=E48583AF6A9443409451AADB2BB950D8 + CustomProperties Pin (PinId=053AE05C1AE341DA9DF315E7AD1C181C,PinName="Constant",PinType.PinCategory="optional",PinType.PinSubCategory="rgba",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,DefaultValue="(R=4.000000,G=10.500000,B=2500.669922,A=0.330000)",PersistentGuid=00000000000000000000000000000000,bHidden=False,bNotConnectable=True,bDefaultValueIsReadOnly=False,bDefaultValueIsIgnored=False,bAdvancedView=False,bOrphanedPin=False,) + CustomProperties Pin (PinId=DE4B35BE73EA4746848199EF88522E9F,PinName="Output",PinFriendlyName=NSLOCTEXT("MaterialGraphNode", "Space", " "),Direction="EGPD_Output",PinType.PinCategory="mask",PinType.PinSubCategory="rgba",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,) + CustomProperties Pin (PinId=68ECEB1DC6FD474285DCD24084C6791D,PinName="Output2",PinFriendlyName=NSLOCTEXT("MaterialGraphNode", "Space", " "),Direction="EGPD_Output",PinType.PinCategory="mask",PinType.PinSubCategory="red",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,) + CustomProperties Pin (PinId=4781E87620764899BAFA52A198FBD3CD,PinName="Output3",PinFriendlyName=NSLOCTEXT("MaterialGraphNode", "Space", " "),Direction="EGPD_Output",PinType.PinCategory="mask",PinType.PinSubCategory="green",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,) + CustomProperties Pin (PinId=447371DFAD4C468993232380A3E37707,PinName="Output4",PinFriendlyName=NSLOCTEXT("MaterialGraphNode", "Space", " "),Direction="EGPD_Output",PinType.PinCategory="mask",PinType.PinSubCategory="blue",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,) + CustomProperties Pin (PinId=AFCF5ADE766948A2889F0FAC51FDA44D,PinName="Output5",PinFriendlyName=NSLOCTEXT("MaterialGraphNode", "Space", " "),Direction="EGPD_Output",PinType.PinCategory="mask",PinType.PinSubCategory="alpha",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 + `, + color: Configuration.nodeColors.yellow, + icon: null, + pins: 6, + pinNames: ["Constant"], + delegate: false, + development: false, + additionalTest: async (node, pins) => { + const r = 4.0 + const g = 10.5 + const b = 2500.669922 + const a = 0.33 + /** @type {Locator>} */ + const pin = pins[0] + const rgba = await pin.evaluate(node => node.getDefaultValue().toArray()) + expect(rgba[0]).toBeCloseTo(r) + expect(rgba[1]).toBeCloseTo(g) + expect(rgba[2]).toBeCloseTo(b) + expect(rgba[3]).toBeCloseTo(a) + } + }, + { + name: "Sqrt", + value: String.raw` + Begin Object Class=/Script/UnrealEd.MaterialGraphNode Name="MaterialGraphNode_24" ExportPath=/Script/UnrealEd.MaterialGraphNode'"/Engine/Transient.M_CobbleStone_Pebble:MaterialGraph_0.MaterialGraphNode_24"' + Begin Object Class=/Script/Engine.MaterialExpressionSquareRoot Name="MaterialExpressionSquareRoot_0" ExportPath=/Script/Engine.MaterialExpressionSquareRoot'"/Engine/Transient.M_CobbleStone_Pebble:MaterialGraph_0.MaterialGraphNode_24.MaterialExpressionSquareRoot_0"' + End Object + Begin Object Name="MaterialExpressionSquareRoot_0" ExportPath=/Script/Engine.MaterialExpressionSquareRoot'"/Engine/Transient.M_CobbleStone_Pebble:MaterialGraph_0.MaterialGraphNode_24.MaterialExpressionSquareRoot_0"' + MaterialExpressionEditorX=-1552 + MaterialExpressionEditorY=-416 + MaterialExpressionGuid=3F37EEB301AE4B0192673A114358C546 + Material=/Script/UnrealEd.PreviewMaterial'"/Engine/Transient.M_CobbleStone_Pebble"' + bCollapsed=False + End Object + MaterialExpression=/Script/Engine.MaterialExpressionSquareRoot'"MaterialExpressionSquareRoot_0"' + NodePosX=-1552 + NodePosY=-416 + NodeGuid=5DB895BECADE486CB5F8A40B72C64637 + CustomProperties Pin (PinId=9BEA4A9DE7DE411EB9590041B6137505,PinName="Input",PinFriendlyName=NSLOCTEXT("MaterialGraphNode", "Space", " "),PinType.PinCategory="required",PinType.PinSubCategory="",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,) + CustomProperties Pin (PinId=4F7BCB72BB064C5FA9EDFC004EEF3591,PinName="Output",PinFriendlyName=NSLOCTEXT("MaterialGraphNode", "Space", " "),Direction="EGPD_Output",PinType.PinCategory="",PinType.PinSubCategory="",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 + `, + color: Configuration.nodeColors.green, + icon: null, + pins: 2, + pinNames: [], + delegate: false, + development: false, + }, + { + name: "Log10", + value: String.raw` + Begin Object Class=/Script/UnrealEd.MaterialGraphNode Name="MaterialGraphNode_26" ExportPath=/Script/UnrealEd.MaterialGraphNode'"/Engine/Transient.M_CobbleStone_Pebble:MaterialGraph_0.MaterialGraphNode_26"' + Begin Object Class=/Script/Engine.MaterialExpressionLogarithm10 Name="MaterialExpressionLogarithm10_0" ExportPath=/Script/Engine.MaterialExpressionLogarithm10'"/Engine/Transient.M_CobbleStone_Pebble:MaterialGraph_0.MaterialGraphNode_26.MaterialExpressionLogarithm10_0"' + End Object + Begin Object Name="MaterialExpressionLogarithm10_0" ExportPath=/Script/Engine.MaterialExpressionLogarithm10'"/Engine/Transient.M_CobbleStone_Pebble:MaterialGraph_0.MaterialGraphNode_26.MaterialExpressionLogarithm10_0"' + MaterialExpressionEditorX=-1699 + MaterialExpressionEditorY=-366 + MaterialExpressionGuid=D6C0D0C0B1C241C7BC5CAE85C32A967E + Material=/Script/UnrealEd.PreviewMaterial'"/Engine/Transient.M_CobbleStone_Pebble"' + End Object + MaterialExpression=/Script/Engine.MaterialExpressionLogarithm10'"MaterialExpressionLogarithm10_0"' + NodePosX=-1699 + NodePosY=-366 + NodeGuid=7432C0BB32F74D54B23EB5FFEB9D7255 + CustomProperties Pin (PinId=C3E922C93B644E5781F1C76FD70CA87D,PinName="X",PinType.PinCategory="required",PinType.PinSubCategory="",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,) + CustomProperties Pin (PinId=48EB102C92F74A7E817286C32A8D217A,PinName="Output",PinFriendlyName=NSLOCTEXT("MaterialGraphNode", "Space", " "),Direction="EGPD_Output",PinType.PinCategory="",PinType.PinSubCategory="",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 + `, + color: Configuration.nodeColors.green, + icon: null, + pins: 2, + pinNames: ["X"], + delegate: false, + development: false, + }, + { + name: "Log2", + value: String.raw` + Begin Object Class=/Script/UnrealEd.MaterialGraphNode Name="MaterialGraphNode_25" ExportPath=/Script/UnrealEd.MaterialGraphNode'"/Engine/Transient.M_CobbleStone_Pebble:MaterialGraph_0.MaterialGraphNode_25"' + Begin Object Class=/Script/Engine.MaterialExpressionLogarithm2 Name="MaterialExpressionLogarithm2_0" ExportPath=/Script/Engine.MaterialExpressionLogarithm2'"/Engine/Transient.M_CobbleStone_Pebble:MaterialGraph_0.MaterialGraphNode_25.MaterialExpressionLogarithm2_0"' + End Object + Begin Object Name="MaterialExpressionLogarithm2_0" ExportPath=/Script/Engine.MaterialExpressionLogarithm2'"/Engine/Transient.M_CobbleStone_Pebble:MaterialGraph_0.MaterialGraphNode_25.MaterialExpressionLogarithm2_0"' + MaterialExpressionEditorX=-1343 + MaterialExpressionEditorY=-380 + MaterialExpressionGuid=DFB490DA67CD4FED91729623FA6F76F9 + Material=/Script/UnrealEd.PreviewMaterial'"/Engine/Transient.M_CobbleStone_Pebble"' + End Object + MaterialExpression=/Script/Engine.MaterialExpressionLogarithm2'"MaterialExpressionLogarithm2_0"' + NodePosX=-1343 + NodePosY=-380 + NodeGuid=C413E5EDE2484269AB5BB8E6E14FD5DC + CustomProperties Pin (PinId=AA0DC6E48E864B2483F3F5239FDBC26D,PinName="X",PinType.PinCategory="required",PinType.PinSubCategory="",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,) + CustomProperties Pin (PinId=7E2CEF20073B4A8DBCA5AEAFBEA3BE0B,PinName="Output",PinFriendlyName=NSLOCTEXT("MaterialGraphNode", "Space", " "),Direction="EGPD_Output",PinType.PinCategory="",PinType.PinSubCategory="",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 + `, + color: Configuration.nodeColors.green, + icon: null, + pins: 2, + pinNames: ["X"], + delegate: false, + development: false, + }, + { + name: "Ln", + value: String.raw` + Begin Object Class=/Script/UnrealEd.MaterialGraphNode Name="MaterialGraphNode_27" ExportPath=/Script/UnrealEd.MaterialGraphNode'"/Engine/Transient.M_CobbleStone_Pebble:MaterialGraph_0.MaterialGraphNode_27"' + Begin Object Class=/Script/InterchangeImport.MaterialExpressionLogarithm Name="MaterialExpressionLogarithm_0" ExportPath=/Script/InterchangeImport.MaterialExpressionLogarithm'"/Engine/Transient.M_CobbleStone_Pebble:MaterialGraph_0.MaterialGraphNode_27.MaterialExpressionLogarithm_0"' + End Object + Begin Object Name="MaterialExpressionLogarithm_0" ExportPath=/Script/InterchangeImport.MaterialExpressionLogarithm'"/Engine/Transient.M_CobbleStone_Pebble:MaterialGraph_0.MaterialGraphNode_27.MaterialExpressionLogarithm_0"' + MaterialExpressionEditorX=-1808 + MaterialExpressionEditorY=-384 + MaterialExpressionGuid=A88BE2DBB50544539F7C340F1C521570 + Material=/Script/UnrealEd.PreviewMaterial'"/Engine/Transient.M_CobbleStone_Pebble"' + End Object + MaterialExpression=/Script/InterchangeImport.MaterialExpressionLogarithm'"MaterialExpressionLogarithm_0"' + NodePosX=-1808 + NodePosY=-384 + NodeGuid=7BC7C5E93F8F47BAB3C0086F9C2AE036 + CustomProperties Pin (PinId=DCCD2C267163472C98FFD44B5AC004DD,PinName="Input",PinFriendlyName=NSLOCTEXT("MaterialGraphNode", "Space", " "),PinType.PinCategory="required",PinType.PinSubCategory="",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,) + CustomProperties Pin (PinId=D0ACD287FE494F0D8CB682DC7EABDD07,PinName="Output",PinFriendlyName=NSLOCTEXT("MaterialGraphNode", "Space", " "),Direction="EGPD_Output",PinType.PinCategory="",PinType.PinSubCategory="",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 + `, + color: Configuration.nodeColors.green, + icon: null, + pins: 2, + pinNames: [], + delegate: false, + development: false, + }, + { + name: "Texture Sample", + value: String.raw` + Begin Object Class=/Script/UnrealEd.MaterialGraphNode Name="MaterialGraphNode_11" ExportPath=/Script/UnrealEd.MaterialGraphNode'"/Engine/Transient.M_CobbleStone_Pebble:MaterialGraph_0.MaterialGraphNode_11"' + Begin Object Class=/Script/Engine.MaterialExpressionTextureSample Name="MaterialExpressionTextureSample_8" ExportPath=/Script/Engine.MaterialExpressionTextureSample'"/Engine/Transient.M_CobbleStone_Pebble:MaterialGraph_0.MaterialGraphNode_11.MaterialExpressionTextureSample_8"' + End Object + Begin Object Name="MaterialExpressionTextureSample_8" ExportPath=/Script/Engine.MaterialExpressionTextureSample'"/Engine/Transient.M_CobbleStone_Pebble:MaterialGraph_0.MaterialGraphNode_11.MaterialExpressionTextureSample_8"' + Coordinates=(Expression=/Script/Engine.MaterialExpressionMultiply'"MaterialExpressionMultiply_12"') + Texture=/Script/Engine.Texture2D'"/Game/StarterContent/Textures/T_MacroVariation.T_MacroVariation"' + MaterialExpressionEditorX=-1056 + MaterialExpressionEditorY=-1392 + MaterialExpressionGuid=8A9B66F54B20419B8A09B9A31EEE0326 + Material=/Script/UnrealEd.PreviewMaterial'"/Engine/Transient.M_CobbleStone_Pebble"' + End Object + MaterialExpression=/Script/Engine.MaterialExpressionTextureSample'"MaterialExpressionTextureSample_8"' + NodePosX=-1056 + NodePosY=-1392 + AdvancedPinDisplay=Shown + NodeGuid=ABB48A5BD2DD43FFA097F233839224B4 + CustomProperties Pin (PinId=57F9CF0C528346ACBF859D991A2977C8,PinName="UVs",PinType.PinCategory="optional",PinType.PinSubCategory="byte",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,DefaultValue="0",LinkedTo=(MaterialGraphNode_13 103847E51C494723BAC2A040FB53291F,),PersistentGuid=00000000000000000000000000000000,bHidden=False,bNotConnectable=False,bDefaultValueIsReadOnly=False,bDefaultValueIsIgnored=False,bAdvancedView=False,bOrphanedPin=False,) + CustomProperties Pin (PinId=04074338E0FB457FB39F2F8737202A9D,PinName="Tex",PinType.PinCategory="optional",PinType.PinSubCategory="",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,) + CustomProperties Pin (PinId=B6216A82E662464E9547EAF8F7C9156B,PinName="Apply View MipBias",PinType.PinCategory="optional",PinType.PinSubCategory="",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,) + CustomProperties Pin (PinId=86F88FBB9F4744ABAF530B1699FD5C45,PinName="MipValueMode",PinType.PinCategory="optional",PinType.PinSubCategory="byte",PinType.PinSubCategoryObject=/Script/CoreUObject.Enum'"/Script/Engine.ETextureMipValueMode"',PinType.PinSubCategoryMemberReference=(),PinType.PinValueType=(),PinType.ContainerType=None,PinType.bIsReference=False,PinType.bIsConst=False,PinType.bIsWeakPointer=False,PinType.bIsUObjectWrapper=False,PinType.bSerializeAsSinglePrecisionFloat=False,DefaultValue="None (use computed mip level)",PersistentGuid=00000000000000000000000000000000,bHidden=False,bNotConnectable=True,bDefaultValueIsReadOnly=False,bDefaultValueIsIgnored=False,bAdvancedView=True,bOrphanedPin=False,) + CustomProperties Pin (PinId=F971048A6287441491B3F431F9204643,PinName="Sampler Source",PinType.PinCategory="optional",PinType.PinSubCategory="byte",PinType.PinSubCategoryObject=/Script/CoreUObject.Enum'"/Script/Engine.ESamplerSourceMode"',PinType.PinSubCategoryMemberReference=(),PinType.PinValueType=(),PinType.ContainerType=None,PinType.bIsReference=False,PinType.bIsConst=False,PinType.bIsWeakPointer=False,PinType.bIsUObjectWrapper=False,PinType.bSerializeAsSinglePrecisionFloat=False,DefaultValue="From texture asset",PersistentGuid=00000000000000000000000000000000,bHidden=False,bNotConnectable=True,bDefaultValueIsReadOnly=False,bDefaultValueIsIgnored=False,bAdvancedView=True,bOrphanedPin=False,) + CustomProperties Pin (PinId=57AE297DD9B641D49F96DE01DE60352D,PinName="Sampler Type",PinType.PinCategory="optional",PinType.PinSubCategory="byte",PinType.PinSubCategoryObject=/Script/CoreUObject.Enum'"/Script/Engine.EMaterialSamplerType"',PinType.PinSubCategoryMemberReference=(),PinType.PinValueType=(),PinType.ContainerType=None,PinType.bIsReference=False,PinType.bIsConst=False,PinType.bIsWeakPointer=False,PinType.bIsUObjectWrapper=False,PinType.bSerializeAsSinglePrecisionFloat=False,DefaultValue="Color",PersistentGuid=00000000000000000000000000000000,bHidden=False,bNotConnectable=True,bDefaultValueIsReadOnly=False,bDefaultValueIsIgnored=False,bAdvancedView=True,bOrphanedPin=False,) + CustomProperties Pin (PinId=5EB251794C274FE29D545A848C25061A,PinName="RGB",Direction="EGPD_Output",PinType.PinCategory="mask",PinType.PinSubCategory="",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,) + CustomProperties Pin (PinId=22B624FB96F2457AB5199C9AC8D6FED7,PinName="R",Direction="EGPD_Output",PinType.PinCategory="mask",PinType.PinSubCategory="red",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,LinkedTo=(MaterialGraphNode_14 F0018EB452FE4F1C8A7A713AB4FBB4BA,),PersistentGuid=00000000000000000000000000000000,bHidden=False,bNotConnectable=False,bDefaultValueIsReadOnly=False,bDefaultValueIsIgnored=False,bAdvancedView=False,bOrphanedPin=False,) + CustomProperties Pin (PinId=0193BCA3C4A04EA3B71604FC23D817AB,PinName="G",Direction="EGPD_Output",PinType.PinCategory="mask",PinType.PinSubCategory="green",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,) + CustomProperties Pin (PinId=3105CB21DB34441582786D8B5FCB9B5E,PinName="B",Direction="EGPD_Output",PinType.PinCategory="mask",PinType.PinSubCategory="blue",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,) + CustomProperties Pin (PinId=057FD07998624E67B613294C0E91FDB0,PinName="A",Direction="EGPD_Output",PinType.PinCategory="mask",PinType.PinSubCategory="alpha",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,) + CustomProperties Pin (PinId=168889DC9D5D4F22B2F581DB425812EA,PinName="RGBA",Direction="EGPD_Output",PinType.PinCategory="mask",PinType.PinSubCategory="rgba",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 + `, + color: Configuration.nodeColors.darkTurquoise, + icon: null, + pins: 12, + pinNames: [ + "UVs", + "Tex", + "Apply View Mip Bias", + "Mip Value Mode", + "Sampler Source", + "Sampler Type", + "RGB", + "R", + "G", + "B", + "A", + "RGBA" + ], + delegate: false, + development: false, + }, + { + name: "Temporal Sobol", + value: String.raw` + Begin Object Class=/Script/UnrealEd.MaterialGraphNode Name="MaterialGraphNode_9" ExportPath=/Script/UnrealEd.MaterialGraphNode'"/Engine/Transient.NewMaterial:MaterialGraph_0.MaterialGraphNode_9"' + Begin Object Class=/Script/Engine.MaterialExpressionTemporalSobol Name="MaterialExpressionTemporalSobol_0" ExportPath=/Script/Engine.MaterialExpressionTemporalSobol'"/Engine/Transient.NewMaterial:MaterialGraph_0.MaterialGraphNode_9.MaterialExpressionTemporalSobol_0"' + End Object + Begin Object Name="MaterialExpressionTemporalSobol_0" ExportPath=/Script/Engine.MaterialExpressionTemporalSobol'"/Engine/Transient.NewMaterial:MaterialGraph_0.MaterialGraphNode_9.MaterialExpressionTemporalSobol_0"' + "ConstIndex"=4 + "ConstSeed"=(X=77.000000,Y=55.000000) + "MaterialExpressionEditorX"=-345 + "MaterialExpressionEditorY"=225 + "MaterialExpressionGuid"=D1A3B12340EE27538A3109B7B3D0E119 + "Material"=/Script/UnrealEd.PreviewMaterial'"/Engine/Transient.NewMaterial"' + End Object + "MaterialExpression"=/Script/Engine.MaterialExpressionTemporalSobol'"MaterialExpressionTemporalSobol_0"' + "NodePosX"=-345 + "NodePosY"=225 + "NodeGuid"=5BE5108B48EB26B6366D4DA6AF99285D + CustomProperties Pin (PinId=E9B08066434FD243EF8856B11A08588D,PinName="Index",PinType.PinCategory="optional",PinType.PinSubCategory="int",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,DefaultValue="4",PersistentGuid=00000000000000000000000000000000,bHidden=False,bNotConnectable=False,bDefaultValueIsReadOnly=False,bDefaultValueIsIgnored=False,bAdvancedView=False,bOrphanedPin=False,) + CustomProperties Pin (PinId=4EB376FB4105AA0CFA52D990C82FE284,PinName="Seed",PinType.PinCategory="optional",PinType.PinSubCategory="rg",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,DefaultValue="X=77.000 Y=55.000",PersistentGuid=00000000000000000000000000000000,bHidden=False,bNotConnectable=False,bDefaultValueIsReadOnly=False,bDefaultValueIsIgnored=False,bAdvancedView=False,bOrphanedPin=False,) + CustomProperties Pin (PinId=4A57DE0448EEA04661E83AA561BE2D94,PinName="Output",PinFriendlyName=NSLOCTEXT("MaterialGraphNode", "Space", " "),Direction="EGPD_Output",PinType.PinCategory="",PinType.PinSubCategory="",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 + `, + color: Configuration.nodeColors.green, + icon: null, + pins: 3, + pinNames: [ + "Index", + "Seed" + ], + delegate: false, + development: false, + additionalTest: async node => { + /** @type {Locator>} */ + const indexPin = node.locator("ueb-pin").nth(0) + /** @type {Locator>} */ + const seedPin = node.locator("ueb-pin").nth(1) + expect(await indexPin.evaluate(pin => pin.getDefaultValue().value)).toBe(4) + const values = await seedPin.evaluate(pin => pin.getDefaultValue().toArray()) + expect(values).toStrictEqual([77, 55]) + } + }, + ]) + } +} diff --git a/tests/resources/NodeTests.js b/tests/resources/NodeTests.js new file mode 100644 index 0000000..c4a5731 --- /dev/null +++ b/tests/resources/NodeTests.js @@ -0,0 +1,71 @@ +/** + * @typedef {{ + * name: String, + * title?: String, + * subtitle?: String, + * value: String, + * size?: Number[], + * color?: CSSResult, + * icon?: TemplateResult, + * pins?: Number, + * pinNames?: String[], + * delegate: Boolean, + * development: Boolean, + * variadic?: Boolean, + * additionalTest?: (node: Locator, pins: Locator[]) => void, + * }} TestData + */ + +export default class NodeTests { + /** @type {TestData[]} */ + static testsData + + /** @param {TestData[]} testsData */ + static set(testsData) { + this.testsData = testsData + } + static get() { + return this.testsData + } +} + +async function highlightClickPosition(page, x, y) { + await page.evaluate((elem, { x, y }) => { + const highlightElement = document.createElement('div') + highlightElement.style.position = 'absolute' + highlightElement.style.border = '2px solid red' + highlightElement.style.borderRadius = '50%' + highlightElement.style.width = '10px' + highlightElement.style.height = '10px' + highlightElement.style.transform = 'translate(-50%, -50%)' + highlightElement.style.pointerEvents = 'none' // Ensures click-through + highlightElement.style.zIndex = '9999' + highlightElement.style.left = `${x}px` + highlightElement.style.top = `${y}px` + + document.body.appendChild(highlightElement) + + // Automatically remove the highlight after a delay + setTimeout(() => document.body.removeChild(highlightElement), 100000) // Adjust delay as needed + }, { x, y }) +} + +/** + * @param {import("@playwright/test").Mouse} mouse + * @param {Locator} element + * @param {Coordinates} offset + */ +export async function dragAndDrop(mouse, element, offset) { + let { x, y } = await element.boundingBox() + x += 5 + y += 5 + await mouse.move(x, y) + await element.hover({ position: { x: 5, y: 5 } }) + await highlightClickPosition(element, x, y) + await mouse.down() + x += offset[0] + y += offset[1] + await mouse.move(x, y, { steps: 10 }) + await highlightClickPosition(element, x, y) + await mouse.up() +} diff --git a/tests/resources/OperationsNodes.js b/tests/resources/OperationsNodes.js new file mode 100644 index 0000000..e323c88 --- /dev/null +++ b/tests/resources/OperationsNodes.js @@ -0,0 +1,500 @@ +import { expect } from "../fixtures/test.js" +import NodeTests from "./NodeTests.js" +import PinElement from "../../js/element/PinElement.js" +import SVGIcon from "../../js/SVGIcon.js" + +export default class OperationsNodes extends NodeTests { + static { + this.set([ + { + name: "Less", + title: "<", + value: String.raw` + Begin Object Class=/Script/BlueprintGraph.K2Node_PromotableOperator Name="K2Node_PromotableOperator_0" ExportPath=/Script/BlueprintGraph.K2Node_PromotableOperator'"/Temp/Untitled_1.Untitled_1:PersistentLevel.Untitled.EventGraph.K2Node_PromotableOperator_0"' + bIsPureFunc=True + FunctionReference=(MemberParent=/Script/CoreUObject.Class'"/Script/Engine.KismetMathLibrary"',MemberName="Less_TimespanTimespan") + NodePosX=-192 + NodeGuid=2CF3423BF9604C71957BE3EFDFD9DAFF + CustomProperties Pin (PinId=84732B8AE02247EB898E6FB149457E6A,PinName="A",PinType.PinCategory="wildcard",PinType.PinSubCategory="",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,) + CustomProperties Pin (PinId=8218DDBA01704149AD5FE655CE9FAD07,PinName="B",PinType.PinCategory="wildcard",PinType.PinSubCategory="",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,) + CustomProperties Pin (PinId=680CD9CFA7924525AFE30B703BD20BD6,PinName="ReturnValue",Direction="EGPD_Output",PinType.PinCategory="bool",PinType.PinSubCategory="",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: [7.5, 4], + pins: 3, + delegate: false, + development: false, + additionalTest: async (node, pins) => { + for (const pin of pins) { + expect(await pin.evaluate(pin => pin.template.renderIcon().strings.join(""))) + .toStrictEqual(SVGIcon.operationPin.strings.join("")) + } + } + }, + { + name: "Less Equal", + title: "<=", + value: String.raw` + Begin Object Class=/Script/BlueprintGraph.K2Node_PromotableOperator Name="K2Node_PromotableOperator_6" ExportPath=/Script/BlueprintGraph.K2Node_PromotableOperator'"/Temp/Untitled_1.Untitled_1:PersistentLevel.Untitled.EventGraph.K2Node_PromotableOperator_6"' + bIsPureFunc=True + FunctionReference=(MemberParent=/Script/CoreUObject.Class'"/Script/Engine.KismetMathLibrary"',MemberName="LessEqual_DoubleDouble") + NodePosX=-128 + NodePosY=-128 + NodeGuid=BE4FB00052224A8AA7695069C0A4A6C0 + CustomProperties Pin (PinId=B83E6D436D73468087242654C1E71F11,PinName="A",PinToolTip="A\nWildcard",PinType.PinCategory="wildcard",PinType.PinSubCategory="",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,) + CustomProperties Pin (PinId=25C2CC62A0834A07B81E770F3BD41493,PinName="B",PinToolTip="B\nWildcard",PinType.PinCategory="wildcard",PinType.PinSubCategory="",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,) + CustomProperties Pin (PinId=3E135915A0FE467CBC499FDCAAB3906A,PinName="ReturnValue",PinToolTip="Return Value\nBoolean\n\nReturns true if A is Less than or equal to B (A <= B)",Direction="EGPD_Output",PinType.PinCategory="bool",PinType.PinSubCategory="",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,) + CustomProperties Pin (PinId=708C4E7324034655B5677DAAE057220D,PinName="ErrorTolerance",PinToolTip="Error Tolerance\nWildcard",PinType.PinCategory="wildcard",PinType.PinSubCategory="",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=True,bNotConnectable=False,bDefaultValueIsReadOnly=False,bDefaultValueIsIgnored=False,bAdvancedView=False,bOrphanedPin=False,) + End Object + `, + size: [9, 4], + pins: 3, + delegate: false, + development: false, + additionalTest: async (node, pins) => { + for (const pin of pins) { + expect(await pin.evaluate(pin => pin.template.renderIcon().strings.join(""))) + .toStrictEqual(SVGIcon.operationPin.strings.join("")) + } + } + }, + { + name: "Equal", + title: "==", + value: String.raw` + Begin Object Class=/Script/BlueprintGraph.K2Node_PromotableOperator Name="K2Node_PromotableOperator_0" + bIsPureFunc=True + FunctionReference=(MemberParent=/Script/CoreUObject.Class'"/Script/UMG.SlateBlueprintLibrary"',MemberName="EqualEqual_SlateBrush") + NodePosX=704 + NodePosY=-320 + NodeGuid=F0C20233151743A3A37807274CF6DF61 + CustomProperties Pin (PinId=4E90C9A1D4034AE68B26FF54DEDF4764,PinName="A",PinToolTip="A\nWildcard",PinType.PinCategory="wildcard",PinType.PinSubCategory="",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,) + CustomProperties Pin (PinId=1E4802AFBB51467083225499C8967FA5,PinName="B",PinToolTip="B\nWildcard",PinType.PinCategory="wildcard",PinType.PinSubCategory="",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,) + CustomProperties Pin (PinId=F34B818F900A4222BCC1DE111C2C7816,PinName="ReturnValue",PinToolTip="Return Value\nBoolean\n\nReturns whether brushes A and B are identical.",Direction="EGPD_Output",PinType.PinCategory="bool",PinType.PinSubCategory="",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, 4], + pins: 3, + delegate: false, + development: false, + additionalTest: async (node, pins) => { + for (const pin of pins) { + expect(await pin.evaluate(pin => pin.template.renderIcon().strings.join(""))) + .toStrictEqual(SVGIcon.operationPin.strings.join("")) + } + } + }, + { + name: "Greater", + title: ">", + value: String.raw` + Begin Object Class=/Script/BlueprintGraph.K2Node_PromotableOperator Name="K2Node_PromotableOperator_3" ExportPath=/Script/BlueprintGraph.K2Node_PromotableOperator'"/Temp/Untitled_1.Untitled_1:PersistentLevel.Untitled.EventGraph.K2Node_PromotableOperator_3"' + "bIsPureFunc"=True + "FunctionReference"=(MemberParent=/Script/CoreUObject.Class'"/Script/Engine.KismetMathLibrary"',MemberName="Greater_TimespanTimespan") + "NodePosX"=-288 + "NodeGuid"=F7FABC9C44966BAAC491D4AE6E588CCC + CustomProperties Pin (PinId=E5B7684F4812610A60F5E8A1217BD592,PinName="A",PinType.PinCategory="wildcard",PinType.PinSubCategory="",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,) + CustomProperties Pin (PinId=62516570444A943984F804A683C737A1,PinName="B",PinType.PinCategory="wildcard",PinType.PinSubCategory="",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,) + CustomProperties Pin (PinId=58F3E9EC42933068D0F9B493EB7C1F16,PinName="ReturnValue",Direction="EGPD_Output",PinType.PinCategory="bool",PinType.PinSubCategory="",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: [7.5, 4], + pins: 3, + delegate: false, + development: false, + additionalTest: async (node, pins) => { + for (const pin of pins) { + expect(await pin.evaluate(pin => pin.template.renderIcon().strings.join(""))) + .toStrictEqual(SVGIcon.operationPin.strings.join("")) + } + } + }, + { + name: "Greater Equal", + title: ">=", + value: String.raw` + Begin Object Class=/Script/BlueprintGraph.K2Node_PromotableOperator Name="K2Node_PromotableOperator_8" ExportPath=/Script/BlueprintGraph.K2Node_PromotableOperator'"/Temp/Untitled_1.Untitled_1:PersistentLevel.Untitled.EventGraph.K2Node_PromotableOperator_8"' + bIsPureFunc=True + FunctionReference=(MemberParent=/Script/CoreUObject.Class'"/Script/Engine.KismetMathLibrary"',MemberName="GreaterEqual_ByteByte") + NodePosX=-128 + NodePosY=128 + NodeGuid=97ABB121B7F6446CA7C5A0D2BB35D9CB + CustomProperties Pin (PinId=9DC86E2C7B5E4D499EDD11C26E0CE2F0,PinName="A",PinToolTip="A\nWildcard",PinType.PinCategory="wildcard",PinType.PinSubCategory="",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,) + CustomProperties Pin (PinId=C4C29B972BCE479681067C79A8B45C55,PinName="B",PinToolTip="B\nWildcard",PinType.PinCategory="wildcard",PinType.PinSubCategory="",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,) + CustomProperties Pin (PinId=BC0F5E45AED74808A59F5E7ACF749DA7,PinName="ReturnValue",PinToolTip="Return Value\nBoolean\n\nReturns true if A is greater than or equal to B (A >= B)",Direction="EGPD_Output",PinType.PinCategory="bool",PinType.PinSubCategory="",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,) + CustomProperties Pin (PinId=D231C63140CC4A37946C69DA21245F1C,PinName="ErrorTolerance",PinToolTip="Error Tolerance\nWildcard",PinType.PinCategory="wildcard",PinType.PinSubCategory="",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=True,bNotConnectable=False,bDefaultValueIsReadOnly=False,bDefaultValueIsIgnored=False,bAdvancedView=False,bOrphanedPin=False,) + End Object + `, + size: [9, 4], + pins: 3, + delegate: false, + development: false, + additionalTest: async (node, pins) => { + for (const pin of pins) { + expect(await pin.evaluate(pin => pin.template.renderIcon().strings.join(""))) + .toStrictEqual(SVGIcon.operationPin.strings.join("")) + } + } + }, + { + name: "AND", + value: String.raw` + Begin Object Class=/Script/BlueprintGraph.K2Node_CommutativeAssociativeBinaryOperator Name="K2Node_CommutativeAssociativeBinaryOperator_0" ExportPath=/Script/BlueprintGraph.K2Node_CommutativeAssociativeBinaryOperator'"/Temp/Untitled_1.Untitled_1:PersistentLevel.Untitled.EventGraph.K2Node_CommutativeAssociativeBinaryOperator_0"' + bIsPureFunc=True + FunctionReference=(MemberParent=/Script/CoreUObject.Class'"/Script/Engine.KismetMathLibrary"',MemberName="BooleanAND") + NodePosX=-128 + NodePosY=240 + NodeGuid=9E1635738D62423D9FD5F68526C4C6BF + CustomProperties Pin (PinId=DDE978511D404B33BC2B8FE6546ED348,PinName="self",PinFriendlyName=NSLOCTEXT("K2Node", "Target", "Target"),PinToolTip="Target\nKismet Math Library Object Reference",PinType.PinCategory="object",PinType.PinSubCategory="",PinType.PinSubCategoryObject=/Script/CoreUObject.Class'"/Script/Engine.KismetMathLibrary"',PinType.PinSubCategoryMemberReference=(),PinType.PinValueType=(),PinType.ContainerType=None,PinType.bIsReference=False,PinType.bIsConst=False,PinType.bIsWeakPointer=False,PinType.bIsUObjectWrapper=False,PinType.bSerializeAsSinglePrecisionFloat=False,DefaultObject="/Script/Engine.Default__KismetMathLibrary",PersistentGuid=00000000000000000000000000000000,bHidden=True,bNotConnectable=False,bDefaultValueIsReadOnly=False,bDefaultValueIsIgnored=False,bAdvancedView=False,bOrphanedPin=False,) + CustomProperties Pin (PinId=651536110BC540B8902A00F40231EC0E,PinName="A",PinToolTip="A\nBoolean",PinType.PinCategory="bool",PinType.PinSubCategory="",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,DefaultValue="false",AutogeneratedDefaultValue="false",PersistentGuid=00000000000000000000000000000000,bHidden=False,bNotConnectable=False,bDefaultValueIsReadOnly=False,bDefaultValueIsIgnored=False,bAdvancedView=False,bOrphanedPin=False,) + CustomProperties Pin (PinId=AD6A19CF20A24DAB9D04A29222CFC7A4,PinName="B",PinToolTip="B\nBoolean",PinType.PinCategory="bool",PinType.PinSubCategory="",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,DefaultValue="false",AutogeneratedDefaultValue="false",PersistentGuid=00000000000000000000000000000000,bHidden=False,bNotConnectable=False,bDefaultValueIsReadOnly=False,bDefaultValueIsIgnored=False,bAdvancedView=False,bOrphanedPin=False,) + CustomProperties Pin (PinId=6CB3B4F8E6B245FDAC6C8EBB4C7255CA,PinName="ReturnValue",PinToolTip="Return Value\nBoolean\n\nReturns the logical AND of two values (A AND B)",Direction="EGPD_Output",PinType.PinCategory="bool",PinType.PinSubCategory="",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,DefaultValue="false",AutogeneratedDefaultValue="false",PersistentGuid=00000000000000000000000000000000,bHidden=False,bNotConnectable=False,bDefaultValueIsReadOnly=False,bDefaultValueIsIgnored=False,bAdvancedView=False,bOrphanedPin=False,) + End Object + `, + size: [12, 5], + pins: 3, + delegate: false, + development: false, + variadic: true, + additionalTest: async (node, pins) => { + for (const pin of pins) { + expect(await pin.evaluate(pin => pin.template.renderIcon().strings.join(""))) + .toStrictEqual(SVGIcon.operationPin.strings.join("")) + } + } + }, + { + name: "NAND", + value: String.raw` + Begin Object Class=/Script/BlueprintGraph.K2Node_CommutativeAssociativeBinaryOperator Name="K2Node_CommutativeAssociativeBinaryOperator_1" ExportPath=/Script/BlueprintGraph.K2Node_CommutativeAssociativeBinaryOperator'"/Temp/Untitled_1.Untitled_1:PersistentLevel.Untitled.EventGraph.K2Node_CommutativeAssociativeBinaryOperator_1"' + bIsPureFunc=True + FunctionReference=(MemberParent=/Script/CoreUObject.Class'"/Script/Engine.KismetMathLibrary"',MemberName="BooleanNAND") + NodePosX=128 + NodePosY=256 + NodeGuid=04151C35334346F485A72260148E3683 + CustomProperties Pin (PinId=DA6F57B8405A454CB732191CC8E1DA8C,PinName="self",PinFriendlyName=NSLOCTEXT("K2Node", "Target", "Target"),PinToolTip="Target\nKismet Math Library Object Reference",PinType.PinCategory="object",PinType.PinSubCategory="",PinType.PinSubCategoryObject=/Script/CoreUObject.Class'"/Script/Engine.KismetMathLibrary"',PinType.PinSubCategoryMemberReference=(),PinType.PinValueType=(),PinType.ContainerType=None,PinType.bIsReference=False,PinType.bIsConst=False,PinType.bIsWeakPointer=False,PinType.bIsUObjectWrapper=False,PinType.bSerializeAsSinglePrecisionFloat=False,DefaultObject="/Script/Engine.Default__KismetMathLibrary",PersistentGuid=00000000000000000000000000000000,bHidden=True,bNotConnectable=False,bDefaultValueIsReadOnly=False,bDefaultValueIsIgnored=False,bAdvancedView=False,bOrphanedPin=False,) + CustomProperties Pin (PinId=FE1504B885304718AFBB1F25A267B0E5,PinName="A",PinToolTip="A\nBoolean",PinType.PinCategory="bool",PinType.PinSubCategory="",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,DefaultValue="false",AutogeneratedDefaultValue="false",PersistentGuid=00000000000000000000000000000000,bHidden=False,bNotConnectable=False,bDefaultValueIsReadOnly=False,bDefaultValueIsIgnored=False,bAdvancedView=False,bOrphanedPin=False,) + CustomProperties Pin (PinId=C86F9F7461DF492F90491C54C15531AC,PinName="B",PinToolTip="B\nBoolean",PinType.PinCategory="bool",PinType.PinSubCategory="",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,DefaultValue="false",AutogeneratedDefaultValue="false",PersistentGuid=00000000000000000000000000000000,bHidden=False,bNotConnectable=False,bDefaultValueIsReadOnly=False,bDefaultValueIsIgnored=False,bAdvancedView=False,bOrphanedPin=False,) + CustomProperties Pin (PinId=61F2A8E28586405D8CFF9713B457A9DC,PinName="ReturnValue",PinToolTip="Return Value\nBoolean\n\nReturns the logical NAND of two values (A AND B)",Direction="EGPD_Output",PinType.PinCategory="bool",PinType.PinSubCategory="",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,DefaultValue="false",AutogeneratedDefaultValue="false",PersistentGuid=00000000000000000000000000000000,bHidden=False,bNotConnectable=False,bDefaultValueIsReadOnly=False,bDefaultValueIsIgnored=False,bAdvancedView=False,bOrphanedPin=False,) + End Object + `, + size: [13, 5], + pins: 3, + delegate: false, + development: false, + variadic: true, + additionalTest: async (node, pins) => { + for (const pin of pins) { + expect(await pin.evaluate(pin => pin.template.renderIcon().strings.join(""))) + .toStrictEqual(SVGIcon.operationPin.strings.join("")) + } + } + }, + { + name: "Bitwise AND 1", + title: "&", + value: String.raw` + Begin Object Class=/Script/BlueprintGraph.K2Node_CommutativeAssociativeBinaryOperator Name="K2Node_CommutativeAssociativeBinaryOperator_7" ExportPath=/Script/BlueprintGraph.K2Node_CommutativeAssociativeBinaryOperator'"/Temp/Untitled_1.Untitled_1:PersistentLevel.Untitled.EventGraph.K2Node_CommutativeAssociativeBinaryOperator_7"' + bIsPureFunc=True + FunctionReference=(MemberParent=/Script/CoreUObject.Class'"/Script/Engine.KismetMathLibrary"',MemberName="And_IntInt") + NodePosX=-128 + NodePosY=-128 + NodeGuid=31C7173497E64F959674B9541C5E5E6A + CustomProperties Pin (PinId=D5A01DF5C9D84769BB13CAC3B62612C6,PinName="self",PinFriendlyName=NSLOCTEXT("K2Node", "Target", "Target"),PinToolTip="Target\nKismet Math Library Object Reference",PinType.PinCategory="object",PinType.PinSubCategory="",PinType.PinSubCategoryObject=/Script/CoreUObject.Class'"/Script/Engine.KismetMathLibrary"',PinType.PinSubCategoryMemberReference=(),PinType.PinValueType=(),PinType.ContainerType=None,PinType.bIsReference=False,PinType.bIsConst=False,PinType.bIsWeakPointer=False,PinType.bIsUObjectWrapper=False,PinType.bSerializeAsSinglePrecisionFloat=False,DefaultObject="/Script/Engine.Default__KismetMathLibrary",PersistentGuid=00000000000000000000000000000000,bHidden=True,bNotConnectable=False,bDefaultValueIsReadOnly=False,bDefaultValueIsIgnored=False,bAdvancedView=False,bOrphanedPin=False,) + CustomProperties Pin (PinId=EF6F926F005143BB8C751D2ED71FD820,PinName="A",PinToolTip="A\nInteger",PinType.PinCategory="int",PinType.PinSubCategory="",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,DefaultValue="0",AutogeneratedDefaultValue="0",PersistentGuid=00000000000000000000000000000000,bHidden=False,bNotConnectable=False,bDefaultValueIsReadOnly=False,bDefaultValueIsIgnored=False,bAdvancedView=False,bOrphanedPin=False,) + CustomProperties Pin (PinId=4DFFC112D90C4E59B1D8B4A8278E6BE5,PinName="B",PinToolTip="B\nInteger",PinType.PinCategory="int",PinType.PinSubCategory="",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,DefaultValue="0",AutogeneratedDefaultValue="0",PersistentGuid=00000000000000000000000000000000,bHidden=False,bNotConnectable=False,bDefaultValueIsReadOnly=False,bDefaultValueIsIgnored=False,bAdvancedView=False,bOrphanedPin=False,) + CustomProperties Pin (PinId=4B661B544EA44016B03B498A7606DA99,PinName="ReturnValue",PinToolTip="Return Value\nInteger\n\nBitwise AND (A & B)",Direction="EGPD_Output",PinType.PinCategory="int",PinType.PinSubCategory="",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,DefaultValue="0",AutogeneratedDefaultValue="0",PersistentGuid=00000000000000000000000000000000,bHidden=False,bNotConnectable=False,bDefaultValueIsReadOnly=False,bDefaultValueIsIgnored=False,bAdvancedView=False,bOrphanedPin=False,) + End Object + `, + size: [9, 5], + pins: 3, + delegate: false, + development: false, + variadic: true, + additionalTest: async (node, pins) => { + for (const pin of pins) { + expect(await pin.evaluate(pin => pin.template.renderIcon().strings.join(""))) + .toStrictEqual(SVGIcon.operationPin.strings.join("")) + } + } + }, + { + name: "Bitwise AND 2", + title: "&", + value: String.raw` + Begin Object Class=/Script/BlueprintGraph.K2Node_CommutativeAssociativeBinaryOperator Name="K2Node_CommutativeAssociativeBinaryOperator_8" ExportPath=/Script/BlueprintGraph.K2Node_CommutativeAssociativeBinaryOperator'"/Temp/Untitled_1.Untitled_1:PersistentLevel.Untitled.EventGraph.K2Node_CommutativeAssociativeBinaryOperator_8"' + bIsPureFunc=True + FunctionReference=(MemberParent=/Script/CoreUObject.Class'"/Script/Engine.KismetMathLibrary"',MemberName="And_Int64Int64") + NodePosX=128 + NodePosY=-128 + NodeGuid=48CCB97A110B4A6F8D54A95E138ABCE3 + CustomProperties Pin (PinId=A9992AAF8CFA4349A77A5BAE866884D3,PinName="self",PinFriendlyName=NSLOCTEXT("K2Node", "Target", "Target"),PinToolTip="Target\nKismet Math Library Object Reference",PinType.PinCategory="object",PinType.PinSubCategory="",PinType.PinSubCategoryObject=/Script/CoreUObject.Class'"/Script/Engine.KismetMathLibrary"',PinType.PinSubCategoryMemberReference=(),PinType.PinValueType=(),PinType.ContainerType=None,PinType.bIsReference=False,PinType.bIsConst=False,PinType.bIsWeakPointer=False,PinType.bIsUObjectWrapper=False,PinType.bSerializeAsSinglePrecisionFloat=False,DefaultObject="/Script/Engine.Default__KismetMathLibrary",PersistentGuid=00000000000000000000000000000000,bHidden=True,bNotConnectable=False,bDefaultValueIsReadOnly=False,bDefaultValueIsIgnored=False,bAdvancedView=False,bOrphanedPin=False,) + CustomProperties Pin (PinId=7433EDE1E9CE4293BC3C8D73BC9D9E65,PinName="A",PinToolTip="A\nInteger64",PinType.PinCategory="int64",PinType.PinSubCategory="",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,DefaultValue="0",AutogeneratedDefaultValue="0",PersistentGuid=00000000000000000000000000000000,bHidden=False,bNotConnectable=False,bDefaultValueIsReadOnly=False,bDefaultValueIsIgnored=False,bAdvancedView=False,bOrphanedPin=False,) + CustomProperties Pin (PinId=C5CCE51FCE554859A66EDCA66875B382,PinName="B",PinToolTip="B\nInteger64",PinType.PinCategory="int64",PinType.PinSubCategory="",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,DefaultValue="0",AutogeneratedDefaultValue="0",PersistentGuid=00000000000000000000000000000000,bHidden=False,bNotConnectable=False,bDefaultValueIsReadOnly=False,bDefaultValueIsIgnored=False,bAdvancedView=False,bOrphanedPin=False,) + CustomProperties Pin (PinId=A4753BC402474CDFB5A2513A2D7FC8A5,PinName="ReturnValue",PinToolTip="Return Value\nInteger64\n\nBitwise AND (A & B)",Direction="EGPD_Output",PinType.PinCategory="int64",PinType.PinSubCategory="",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,DefaultValue="0",AutogeneratedDefaultValue="0",PersistentGuid=00000000000000000000000000000000,bHidden=False,bNotConnectable=False,bDefaultValueIsReadOnly=False,bDefaultValueIsIgnored=False,bAdvancedView=False,bOrphanedPin=False,) + End Object + `, + size: [9, 5], + pins: 3, + delegate: false, + development: false, + variadic: true, + additionalTest: async (node, pins) => { + for (const pin of pins) { + expect(await pin.evaluate(pin => pin.template.renderIcon().strings.join(""))) + .toStrictEqual(SVGIcon.operationPin.strings.join("")) + } + } + }, + { + name: "Bitwise OR 1", + title: "|", + value: String.raw` + Begin Object Class=/Script/BlueprintGraph.K2Node_CommutativeAssociativeBinaryOperator Name="K2Node_CommutativeAssociativeBinaryOperator_9" ExportPath=/Script/BlueprintGraph.K2Node_CommutativeAssociativeBinaryOperator'"/Temp/Untitled_1.Untitled_1:PersistentLevel.Untitled.EventGraph.K2Node_CommutativeAssociativeBinaryOperator_9"' + NumAdditionalInputs=3 + bIsPureFunc=True + FunctionReference=(MemberParent=/Script/CoreUObject.Class'"/Script/Engine.KismetMathLibrary"',MemberName="Or_IntInt") + NodePosX=-128 + NodeGuid=06CD76925AB9409989EA7D87CE23D6F5 + CustomProperties Pin (PinId=F8954C94C4174CDD84E8B12E07AF3C8E,PinName="self",PinFriendlyName=NSLOCTEXT("K2Node", "Target", "Target"),PinToolTip="Target\nKismet Math Library Object Reference",PinType.PinCategory="object",PinType.PinSubCategory="",PinType.PinSubCategoryObject=/Script/CoreUObject.Class'"/Script/Engine.KismetMathLibrary"',PinType.PinSubCategoryMemberReference=(),PinType.PinValueType=(),PinType.ContainerType=None,PinType.bIsReference=False,PinType.bIsConst=False,PinType.bIsWeakPointer=False,PinType.bIsUObjectWrapper=False,PinType.bSerializeAsSinglePrecisionFloat=False,DefaultObject="/Script/Engine.Default__KismetMathLibrary",PersistentGuid=00000000000000000000000000000000,bHidden=True,bNotConnectable=False,bDefaultValueIsReadOnly=False,bDefaultValueIsIgnored=False,bAdvancedView=False,bOrphanedPin=False,) + CustomProperties Pin (PinId=13660D801D69401399CD1A1F5A35433B,PinName="A",PinToolTip="A\nInteger",PinType.PinCategory="int",PinType.PinSubCategory="",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,DefaultValue="0",AutogeneratedDefaultValue="0",PersistentGuid=00000000000000000000000000000000,bHidden=False,bNotConnectable=False,bDefaultValueIsReadOnly=False,bDefaultValueIsIgnored=False,bAdvancedView=False,bOrphanedPin=False,) + CustomProperties Pin (PinId=D3721D48AE4545B59E01352B68C5D5AE,PinName="B",PinToolTip="B\nInteger",PinType.PinCategory="int",PinType.PinSubCategory="",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,DefaultValue="0",AutogeneratedDefaultValue="0",PersistentGuid=00000000000000000000000000000000,bHidden=False,bNotConnectable=False,bDefaultValueIsReadOnly=False,bDefaultValueIsIgnored=False,bAdvancedView=False,bOrphanedPin=False,) + CustomProperties Pin (PinId=D6418AD11A2E4FD4A3E691DCDD9ED5C2,PinName="ReturnValue",PinToolTip="Return Value\nInteger\n\nBitwise OR (A | B)",Direction="EGPD_Output",PinType.PinCategory="int",PinType.PinSubCategory="",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,DefaultValue="0",AutogeneratedDefaultValue="0",PersistentGuid=00000000000000000000000000000000,bHidden=False,bNotConnectable=False,bDefaultValueIsReadOnly=False,bDefaultValueIsIgnored=False,bAdvancedView=False,bOrphanedPin=False,) + CustomProperties Pin (PinId=54F9F4C9334341C6B393DDD94521C7F0,PinName="C",PinType.PinCategory="int",PinType.PinSubCategory="",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,) + CustomProperties Pin (PinId=428ED3DA8C334D96B16D2660499AAD64,PinName="D",PinType.PinCategory="int",PinType.PinSubCategory="",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,) + CustomProperties Pin (PinId=2B26090C03C7442CB4706D0757901B53,PinName="E",PinType.PinCategory="int",PinType.PinSubCategory="",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, 11], + pins: 6, + delegate: false, + development: false, + variadic: true, + additionalTest: async (node, pins) => { + for (const pin of pins) { + expect(await pin.evaluate(pin => pin.template.renderIcon().strings.join(""))) + .toStrictEqual(SVGIcon.operationPin.strings.join("")) + } + } + }, + { + name: "Bitwise OR 2", + title: "|", + value: String.raw` + Begin Object Class=/Script/BlueprintGraph.K2Node_CommutativeAssociativeBinaryOperator Name="K2Node_CommutativeAssociativeBinaryOperator_10" ExportPath=/Script/BlueprintGraph.K2Node_CommutativeAssociativeBinaryOperator'"/Temp/Untitled_1.Untitled_1:PersistentLevel.Untitled.EventGraph.K2Node_CommutativeAssociativeBinaryOperator_10"' + NumAdditionalInputs=1 + bIsPureFunc=True + FunctionReference=(MemberParent=/Script/CoreUObject.Class'"/Script/Engine.KismetMathLibrary"',MemberName="Or_Int64Int64") + NodePosX=128 + NodeGuid=490A54B477EA44128BA4024490F503F3 + CustomProperties Pin (PinId=EE1E4196F1554E14A0288F9F68BF25D9,PinName="self",PinFriendlyName=NSLOCTEXT("K2Node", "Target", "Target"),PinToolTip="Target\nKismet Math Library Object Reference",PinType.PinCategory="object",PinType.PinSubCategory="",PinType.PinSubCategoryObject=/Script/CoreUObject.Class'"/Script/Engine.KismetMathLibrary"',PinType.PinSubCategoryMemberReference=(),PinType.PinValueType=(),PinType.ContainerType=None,PinType.bIsReference=False,PinType.bIsConst=False,PinType.bIsWeakPointer=False,PinType.bIsUObjectWrapper=False,PinType.bSerializeAsSinglePrecisionFloat=False,DefaultObject="/Script/Engine.Default__KismetMathLibrary",PersistentGuid=00000000000000000000000000000000,bHidden=True,bNotConnectable=False,bDefaultValueIsReadOnly=False,bDefaultValueIsIgnored=False,bAdvancedView=False,bOrphanedPin=False,) + CustomProperties Pin (PinId=64AB191561114DA58FA423353A7EAA14,PinName="A",PinToolTip="A\nInteger64",PinType.PinCategory="int64",PinType.PinSubCategory="",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,DefaultValue="0",AutogeneratedDefaultValue="0",PersistentGuid=00000000000000000000000000000000,bHidden=False,bNotConnectable=False,bDefaultValueIsReadOnly=False,bDefaultValueIsIgnored=False,bAdvancedView=False,bOrphanedPin=False,) + CustomProperties Pin (PinId=4B572FB2A58647ED8869D587215EF6D2,PinName="B",PinToolTip="B\nInteger64",PinType.PinCategory="int64",PinType.PinSubCategory="",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,DefaultValue="0",AutogeneratedDefaultValue="0",PersistentGuid=00000000000000000000000000000000,bHidden=False,bNotConnectable=False,bDefaultValueIsReadOnly=False,bDefaultValueIsIgnored=False,bAdvancedView=False,bOrphanedPin=False,) + CustomProperties Pin (PinId=BBC01569CA1C4C378917FF3FC42EA6DA,PinName="ReturnValue",PinToolTip="Return Value\nInteger64\n\nBitwise OR (A | B)",Direction="EGPD_Output",PinType.PinCategory="int64",PinType.PinSubCategory="",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,DefaultValue="0",AutogeneratedDefaultValue="0",PersistentGuid=00000000000000000000000000000000,bHidden=False,bNotConnectable=False,bDefaultValueIsReadOnly=False,bDefaultValueIsIgnored=False,bAdvancedView=False,bOrphanedPin=False,) + CustomProperties Pin (PinId=C00EE5428FE0454B970846CBEEFD5B73,PinName="C",PinType.PinCategory="int64",PinType.PinSubCategory="",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, 7], + pins: 4, + delegate: false, + development: false, + variadic: true, + additionalTest: async (node, pins) => { + for (const pin of pins) { + expect(await pin.evaluate(pin => pin.template.renderIcon().strings.join(""))) + .toStrictEqual(SVGIcon.operationPin.strings.join("")) + } + } + }, + { + name: "Bitwise NOT 1", + title: "~", + value: String.raw` + Begin Object Class=/Script/BlueprintGraph.K2Node_CallFunction Name="K2Node_CallFunction_10" ExportPath=/Script/BlueprintGraph.K2Node_CallFunction'"/Temp/Untitled_1.Untitled_1:PersistentLevel.Untitled.EventGraph.K2Node_CallFunction_10"' + bIsPureFunc=True + FunctionReference=(MemberParent=/Script/CoreUObject.Class'"/Script/Engine.KismetMathLibrary"',MemberName="Not_Int") + NodePosX=-128 + NodePosY=-128 + NodeGuid=8EFCE5FB3D8847FC9B7A157358B52801 + CustomProperties Pin (PinId=C52BB542DF824EA7A7F89CE345326ACD,PinName="self",PinFriendlyName=NSLOCTEXT("K2Node", "Target", "Target"),PinToolTip="Target\nKismet Math Library Object Reference",PinType.PinCategory="object",PinType.PinSubCategory="",PinType.PinSubCategoryObject=/Script/CoreUObject.Class'"/Script/Engine.KismetMathLibrary"',PinType.PinSubCategoryMemberReference=(),PinType.PinValueType=(),PinType.ContainerType=None,PinType.bIsReference=False,PinType.bIsConst=False,PinType.bIsWeakPointer=False,PinType.bIsUObjectWrapper=False,PinType.bSerializeAsSinglePrecisionFloat=False,DefaultObject="/Script/Engine.Default__KismetMathLibrary",PersistentGuid=00000000000000000000000000000000,bHidden=True,bNotConnectable=False,bDefaultValueIsReadOnly=False,bDefaultValueIsIgnored=False,bAdvancedView=False,bOrphanedPin=False,) + CustomProperties Pin (PinId=46BB4962971443EB8B7FB532FADAB165,PinName="A",PinToolTip="A\nInteger",PinType.PinCategory="int",PinType.PinSubCategory="",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,DefaultValue="0",AutogeneratedDefaultValue="0",PersistentGuid=00000000000000000000000000000000,bHidden=False,bNotConnectable=False,bDefaultValueIsReadOnly=False,bDefaultValueIsIgnored=False,bAdvancedView=False,bOrphanedPin=False,) + CustomProperties Pin (PinId=64C43A0B4D1641688CB90B1706F3CE1F,PinName="ReturnValue",PinToolTip="Return Value\nInteger\n\nBitwise NOT (~A)",Direction="EGPD_Output",PinType.PinCategory="int",PinType.PinSubCategory="",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,DefaultValue="0",AutogeneratedDefaultValue="0",PersistentGuid=00000000000000000000000000000000,bHidden=False,bNotConnectable=False,bDefaultValueIsReadOnly=False,bDefaultValueIsIgnored=False,bAdvancedView=False,bOrphanedPin=False,) + End Object + `, + size: [9, 3], + pins: 2, + delegate: false, + development: false, + variadic: false, + additionalTest: async (node, pins) => { + for (const pin of pins) { + expect(await pin.evaluate(pin => pin.template.renderIcon().strings.join(""))) + .toStrictEqual(SVGIcon.operationPin.strings.join("")) + } + } + }, + { + name: "Bitwise NOT 2", + title: "~", + value: String.raw` + Begin Object Class=/Script/BlueprintGraph.K2Node_CallFunction Name="K2Node_CallFunction_11" ExportPath=/Script/BlueprintGraph.K2Node_CallFunction'"/Temp/Untitled_1.Untitled_1:PersistentLevel.Untitled.EventGraph.K2Node_CallFunction_11"' + bIsPureFunc=True + FunctionReference=(MemberParent=/Script/CoreUObject.Class'"/Script/Engine.KismetMathLibrary"',MemberName="Not_Int64") + NodePosX=112 + NodePosY=-128 + NodeGuid=F3857767A96A4FD9A8E4FE678DA89BC7 + CustomProperties Pin (PinId=AB8568CF0A4B4E88A88E988A3B45EA37,PinName="self",PinFriendlyName=NSLOCTEXT("K2Node", "Target", "Target"),PinToolTip="Target\nKismet Math Library Object Reference",PinType.PinCategory="object",PinType.PinSubCategory="",PinType.PinSubCategoryObject=/Script/CoreUObject.Class'"/Script/Engine.KismetMathLibrary"',PinType.PinSubCategoryMemberReference=(),PinType.PinValueType=(),PinType.ContainerType=None,PinType.bIsReference=False,PinType.bIsConst=False,PinType.bIsWeakPointer=False,PinType.bIsUObjectWrapper=False,PinType.bSerializeAsSinglePrecisionFloat=False,DefaultObject="/Script/Engine.Default__KismetMathLibrary",PersistentGuid=00000000000000000000000000000000,bHidden=True,bNotConnectable=False,bDefaultValueIsReadOnly=False,bDefaultValueIsIgnored=False,bAdvancedView=False,bOrphanedPin=False,) + CustomProperties Pin (PinId=FFD7B2F660CA480C835AB2EB846EC468,PinName="A",PinToolTip="A\nInteger64",PinType.PinCategory="int64",PinType.PinSubCategory="",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,DefaultValue="0",AutogeneratedDefaultValue="0",PersistentGuid=00000000000000000000000000000000,bHidden=False,bNotConnectable=False,bDefaultValueIsReadOnly=False,bDefaultValueIsIgnored=False,bAdvancedView=False,bOrphanedPin=False,) + CustomProperties Pin (PinId=52C04C277D1348A6A507F01E8D31DE96,PinName="ReturnValue",PinToolTip="Return Value\nInteger64\n\nBitwise NOT (~A)",Direction="EGPD_Output",PinType.PinCategory="int64",PinType.PinSubCategory="",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,DefaultValue="0",AutogeneratedDefaultValue="0",PersistentGuid=00000000000000000000000000000000,bHidden=False,bNotConnectable=False,bDefaultValueIsReadOnly=False,bDefaultValueIsIgnored=False,bAdvancedView=False,bOrphanedPin=False,) + End Object + `, + size: [9, 3], + pins: 2, + delegate: false, + development: false, + variadic: false, + additionalTest: async (node, pins) => { + for (const pin of pins) { + expect(await pin.evaluate(pin => pin.template.renderIcon().strings.join(""))) + .toStrictEqual(SVGIcon.operationPin.strings.join("")) + } + } + }, + { + name: "Bitwise XOR 1", + title: "^", + value: String.raw` + Begin Object Class=/Script/BlueprintGraph.K2Node_CallFunction Name="K2Node_CallFunction_12" ExportPath=/Script/BlueprintGraph.K2Node_CallFunction'"/Temp/Untitled_1.Untitled_1:PersistentLevel.Untitled.EventGraph.K2Node_CallFunction_12"' + bIsPureFunc=True + FunctionReference=(MemberParent=/Script/CoreUObject.Class'"/Script/Engine.KismetMathLibrary"',MemberName="Xor_IntInt") + NodePosX=-128 + NodeGuid=81529F08A6E045D6BD6C8BF368729C14 + CustomProperties Pin (PinId=1C2B19C61AC54A92835DDA0AD0750F2E,PinName="self",PinFriendlyName=NSLOCTEXT("K2Node", "Target", "Target"),PinToolTip="Target\nKismet Math Library Object Reference",PinType.PinCategory="object",PinType.PinSubCategory="",PinType.PinSubCategoryObject=/Script/CoreUObject.Class'"/Script/Engine.KismetMathLibrary"',PinType.PinSubCategoryMemberReference=(),PinType.PinValueType=(),PinType.ContainerType=None,PinType.bIsReference=False,PinType.bIsConst=False,PinType.bIsWeakPointer=False,PinType.bIsUObjectWrapper=False,PinType.bSerializeAsSinglePrecisionFloat=False,DefaultObject="/Script/Engine.Default__KismetMathLibrary",PersistentGuid=00000000000000000000000000000000,bHidden=True,bNotConnectable=False,bDefaultValueIsReadOnly=False,bDefaultValueIsIgnored=False,bAdvancedView=False,bOrphanedPin=False,) + CustomProperties Pin (PinId=153EAE01EAD44FBC9A23A088F3F2BCDD,PinName="A",PinToolTip="A\nInteger",PinType.PinCategory="int",PinType.PinSubCategory="",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,DefaultValue="0",AutogeneratedDefaultValue="0",PersistentGuid=00000000000000000000000000000000,bHidden=False,bNotConnectable=False,bDefaultValueIsReadOnly=False,bDefaultValueIsIgnored=False,bAdvancedView=False,bOrphanedPin=False,) + CustomProperties Pin (PinId=59E8178A4C394862BEF24B2D3DF9D919,PinName="B",PinToolTip="B\nInteger",PinType.PinCategory="int",PinType.PinSubCategory="",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,DefaultValue="0",AutogeneratedDefaultValue="0",PersistentGuid=00000000000000000000000000000000,bHidden=False,bNotConnectable=False,bDefaultValueIsReadOnly=False,bDefaultValueIsIgnored=False,bAdvancedView=False,bOrphanedPin=False,) + CustomProperties Pin (PinId=63037115949747768EF0E3164D7C52AD,PinName="ReturnValue",PinToolTip="Return Value\nInteger\n\nBitwise XOR (A ^ B)",Direction="EGPD_Output",PinType.PinCategory="int",PinType.PinSubCategory="",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,DefaultValue="0",AutogeneratedDefaultValue="0",PersistentGuid=00000000000000000000000000000000,bHidden=False,bNotConnectable=False,bDefaultValueIsReadOnly=False,bDefaultValueIsIgnored=False,bAdvancedView=False,bOrphanedPin=False,) + End Object + + `, + size: [9, 5], + pins: 3, + delegate: false, + development: false, + variadic: false, + additionalTest: async (node, pins) => { + for (const pin of pins) { + expect(await pin.evaluate(pin => pin.template.renderIcon().strings.join(""))) + .toStrictEqual(SVGIcon.operationPin.strings.join("")) + } + } + }, + { + name: "Bitwise XOR 2", + title: "^", + value: String.raw` + Begin Object Class=/Script/BlueprintGraph.K2Node_CallFunction Name="K2Node_CallFunction_13" ExportPath=/Script/BlueprintGraph.K2Node_CallFunction'"/Temp/Untitled_1.Untitled_1:PersistentLevel.Untitled.EventGraph.K2Node_CallFunction_13"' + bIsPureFunc=True + FunctionReference=(MemberParent=/Script/CoreUObject.Class'"/Script/Engine.KismetMathLibrary"',MemberName="Xor_Int64Int64") + NodePosX=128 + NodeGuid=A95FABA8132C4BC0B4E35D2CAB877B7D + CustomProperties Pin (PinId=93AD25D5F9E846CFA01F5684AA015EFA,PinName="self",PinFriendlyName=NSLOCTEXT("K2Node", "Target", "Target"),PinToolTip="Target\nKismet Math Library Object Reference",PinType.PinCategory="object",PinType.PinSubCategory="",PinType.PinSubCategoryObject=/Script/CoreUObject.Class'"/Script/Engine.KismetMathLibrary"',PinType.PinSubCategoryMemberReference=(),PinType.PinValueType=(),PinType.ContainerType=None,PinType.bIsReference=False,PinType.bIsConst=False,PinType.bIsWeakPointer=False,PinType.bIsUObjectWrapper=False,PinType.bSerializeAsSinglePrecisionFloat=False,DefaultObject="/Script/Engine.Default__KismetMathLibrary",PersistentGuid=00000000000000000000000000000000,bHidden=True,bNotConnectable=False,bDefaultValueIsReadOnly=False,bDefaultValueIsIgnored=False,bAdvancedView=False,bOrphanedPin=False,) + CustomProperties Pin (PinId=06FE8043E6454053B2F89474C4C028B5,PinName="A",PinToolTip="A\nInteger64",PinType.PinCategory="int64",PinType.PinSubCategory="",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,DefaultValue="0",AutogeneratedDefaultValue="0",PersistentGuid=00000000000000000000000000000000,bHidden=False,bNotConnectable=False,bDefaultValueIsReadOnly=False,bDefaultValueIsIgnored=False,bAdvancedView=False,bOrphanedPin=False,) + CustomProperties Pin (PinId=E025E8CC7D21449A8FF29F755BC2180B,PinName="B",PinToolTip="B\nInteger64",PinType.PinCategory="int64",PinType.PinSubCategory="",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,DefaultValue="0",AutogeneratedDefaultValue="0",PersistentGuid=00000000000000000000000000000000,bHidden=False,bNotConnectable=False,bDefaultValueIsReadOnly=False,bDefaultValueIsIgnored=False,bAdvancedView=False,bOrphanedPin=False,) + CustomProperties Pin (PinId=F43AEAD2428E400BB22DEAD9F4D05BCF,PinName="ReturnValue",PinToolTip="Return Value\nInteger64\n\nBitwise XOR (A ^ B)",Direction="EGPD_Output",PinType.PinCategory="int64",PinType.PinSubCategory="",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,DefaultValue="0",AutogeneratedDefaultValue="0",PersistentGuid=00000000000000000000000000000000,bHidden=False,bNotConnectable=False,bDefaultValueIsReadOnly=False,bDefaultValueIsIgnored=False,bAdvancedView=False,bOrphanedPin=False,) + End Object + `, + size: [9, 5], + pins: 3, + delegate: false, + development: false, + variadic: false, + additionalTest: async (node, pins) => { + for (const pin of pins) { + expect(await pin.evaluate(pin => pin.template.renderIcon().strings.join(""))) + .toStrictEqual(SVGIcon.operationPin.strings.join("")) + } + } + }, + { + name: "SIN", + value: String.raw` + Begin Object Class=/Script/BlueprintGraph.K2Node_CallFunction Name="K2Node_CallFunction_26" ExportPath=/Script/BlueprintGraph.K2Node_CallFunction'"/Temp/Untitled_1.Untitled_1:PersistentLevel.Untitled.EventGraph.K2Node_CallFunction_26"' + bIsPureFunc=True + FunctionReference=(MemberParent=/Script/CoreUObject.Class'"/Script/Engine.KismetMathLibrary"',MemberName="Sin") + NodePosX=-256 + NodePosY=-256 + NodeGuid=FE2CD3AF6DF14671A45FB273B5DDDF8E + CustomProperties Pin (PinId=E48C5BE04F244CCFA93C5DF17AA41727,PinName="self",PinFriendlyName=NSLOCTEXT("K2Node", "Target", "Target"),PinToolTip="Target\nKismet Math Library Object Reference",PinType.PinCategory="object",PinType.PinSubCategory="",PinType.PinSubCategoryObject=/Script/CoreUObject.Class'"/Script/Engine.KismetMathLibrary"',PinType.PinSubCategoryMemberReference=(),PinType.PinValueType=(),PinType.ContainerType=None,PinType.bIsReference=False,PinType.bIsConst=False,PinType.bIsWeakPointer=False,PinType.bIsUObjectWrapper=False,PinType.bSerializeAsSinglePrecisionFloat=False,DefaultObject="/Script/Engine.Default__KismetMathLibrary",PersistentGuid=00000000000000000000000000000000,bHidden=True,bNotConnectable=False,bDefaultValueIsReadOnly=False,bDefaultValueIsIgnored=False,bAdvancedView=False,bOrphanedPin=False,) + CustomProperties Pin (PinId=ED71A80DC02B45518D8D016209E95FB6,PinName="A",PinToolTip="A\nFloat (double-precision)",PinType.PinCategory="real",PinType.PinSubCategory="double",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,DefaultValue="0.0",AutogeneratedDefaultValue="0.0",PersistentGuid=00000000000000000000000000000000,bHidden=False,bNotConnectable=False,bDefaultValueIsReadOnly=False,bDefaultValueIsIgnored=False,bAdvancedView=False,bOrphanedPin=False,) + CustomProperties Pin (PinId=B89EE79C0898454BB00D8335BE922ED3,PinName="ReturnValue",PinToolTip="Return Value\nFloat (double-precision)\n\nReturns the sine of A (expects Radians)",Direction="EGPD_Output",PinType.PinCategory="real",PinType.PinSubCategory="double",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,DefaultValue="0.0",AutogeneratedDefaultValue="0.0",PersistentGuid=00000000000000000000000000000000,bHidden=False,bNotConnectable=False,bDefaultValueIsReadOnly=False,bDefaultValueIsIgnored=False,bAdvancedView=False,bOrphanedPin=False,) + End Object + `, + size: [12, 3], + pins: 2, + delegate: false, + development: false, + variadic: false, + additionalTest: async (node, pins) => { + for (const pin of pins) { + expect(await pin.evaluate(pin => pin.template.renderIcon().strings.join(""))) + .toStrictEqual(SVGIcon.operationPin.strings.join("")) + } + } + }, + { + name: "Not Equal", + title: "!=", + value: String.raw` + Begin Object Class=/Script/BlueprintGraph.K2Node_PromotableOperator Name="K2Node_PromotableOperator_0" ExportPath=/Script/BlueprintGraph.K2Node_PromotableOperator'"/Temp/Untitled_1.Untitled_1:PersistentLevel.Untitled.EventGraph.K2Node_PromotableOperator_0"' + "bIsPureFunc"=True + "FunctionReference"=(MemberParent=/Script/CoreUObject.Class'"/Script/GameplayTags.BlueprintGameplayTagLibrary"',MemberName="NotEqual_GameplayTagContainer") + "NodePosX"=-256 + "NodeGuid"=29F5E14B4509543D59F652854F3B6AB6 + CustomProperties Pin (PinId=815D7F344EC326D3E021F68BB4D9B3AD,PinName="A",PinToolTip="A\nWildcard",PinType.PinCategory="wildcard",PinType.PinSubCategory="",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,) + CustomProperties Pin (PinId=3B762DCB4AA262D90BA202939BDB049D,PinName="B",PinToolTip="B\nWildcard",PinType.PinCategory="wildcard",PinType.PinSubCategory="",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,) + CustomProperties Pin (PinId=6DACCB8046585A22DA055FA2ECE67712,PinName="ReturnValue",PinToolTip="Return Value\nBoolean\n\nReturns true if the values are not equal (A != B)",Direction="EGPD_Output",PinType.PinCategory="bool",PinType.PinSubCategory="",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, 4], + pins: 3, + delegate: false, + development: false, + variadic: false, + additionalTest: async (node, pins) => { + for (const pin of pins) { + expect(await pin.evaluate(pin => pin.template.renderIcon().strings.join(""))) + .toStrictEqual(SVGIcon.operationPin.strings.join("")) + } + } + }, + { + name: "Equal 2", + title: "==", + value: String.raw` + Begin Object Class=/Script/BlueprintGraph.K2Node_PromotableOperator Name="K2Node_PromotableOperator_1" ExportPath=/Script/BlueprintGraph.K2Node_PromotableOperator'"/Temp/Untitled_1.Untitled_1:PersistentLevel.Untitled.EventGraph.K2Node_PromotableOperator_1"' + "bIsPureFunc"=True + "FunctionReference"=(MemberParent=/Script/CoreUObject.Class'"/Script/Engine.KismetMathLibrary"',MemberName="EqualEqual_ByteByte") + "NodePosX"=-256 + "NodePosY"=128 + "NodeGuid"=219043694FA6E83CD69DD791FB1C08AE + CustomProperties Pin (PinId=8E6EE9EB47FF4B99F5092CAA5DC364D2,PinName="A",PinToolTip="A\nByte",PinType.PinCategory="byte",PinType.PinSubCategory="",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,LinkedTo=(K2Node_ForEachElementInEnum_0 E892F26242AA3EDCB057699DC234F057,),PersistentGuid=00000000000000000000000000000000,bHidden=False,bNotConnectable=False,bDefaultValueIsReadOnly=False,bDefaultValueIsIgnored=False,bAdvancedView=False,bOrphanedPin=False,) + CustomProperties Pin (PinId=6A74B02D468CF910E233A48E38EDDDD8,PinName="B",PinToolTip="B\nByte",PinType.PinCategory="byte",PinType.PinSubCategory="",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,) + CustomProperties Pin (PinId=1D70EDE14002E5290A451090FC8D747B,PinName="ReturnValue",PinToolTip="Return Value\nBoolean\n\nReturns true if A is equal to B (A == B)",Direction="EGPD_Output",PinType.PinCategory="bool",PinType.PinSubCategory="",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,) + CustomProperties Pin (PinId=503CA95B4180C28504ECE5AE43FA118B,PinName="ErrorTolerance",PinToolTip="Error Tolerance\n",PinType.PinCategory="",PinType.PinSubCategory="",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=True,bNotConnectable=False,bDefaultValueIsReadOnly=False,bDefaultValueIsIgnored=False,bAdvancedView=False,bOrphanedPin=False,) + End Object + `, + size: [10, 4], + pins: 3, + delegate: false, + development: false, + variadic: false, + additionalTest: async (node, pins) => { + for (const pin of pins) { + expect(await pin.evaluate(pin => pin.template.renderIcon().strings.join(""))) + .toStrictEqual(SVGIcon.operationPin.strings.join("")) + } + } + }, + ]) + } +} diff --git a/tests/resources/OtherNodes.js b/tests/resources/OtherNodes.js new file mode 100644 index 0000000..0124370 --- /dev/null +++ b/tests/resources/OtherNodes.js @@ -0,0 +1,527 @@ +import Configuration from "../../js/Configuration.js" +import NodeTests from "./NodeTests.js" +import SVGIcon from "../../js/SVGIcon.js" + +export default class OtherNodes extends NodeTests { + static { + this.set([ + { + name: "Has Matching Gameplay Tag", + subtitle: "Target is Gameplay Tag Asset Interface", + value: String.raw` + Begin Object Class=/Script/BlueprintGraph.K2Node_Message Name="K2Node_Message_0" + bIsPureFunc=True + bIsConstFunc=True + bIsInterfaceCall=True + FunctionReference=(MemberParent=/Script/CoreUObject.Class'"/Script/GameplayTags.GameplayTagAssetInterface"',MemberName="HasMatchingGameplayTag") + NodePosX=-848 + NodePosY=-16 + NodeGuid=1A6F45D8B6C5452A87596976F23B84E6 + CustomProperties Pin (PinId=0BE7D0A19E49412380B3DC930CFAB511,PinName="execute",PinToolTip="\nExec",PinType.PinCategory="exec",PinType.PinSubCategory="",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,) + CustomProperties Pin (PinId=1F51344A80C541309418234B6CD92251,PinName="then",PinToolTip="\nExec",Direction="EGPD_Output",PinType.PinCategory="exec",PinType.PinSubCategory="",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,) + CustomProperties Pin (PinId=ADA8C6785AA94026882EEBBE42AA0B02,PinName="self",PinFriendlyName=NSLOCTEXT("K2Node", "Target", "Target"),PinToolTip="Target\nObject Reference",PinType.PinCategory="object",PinType.PinSubCategory="",PinType.PinSubCategoryObject=/Script/CoreUObject.Class'"/Script/CoreUObject.Object"',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=True,bAdvancedView=False,bOrphanedPin=False,) + CustomProperties Pin (PinId=7EDFDB02E67941018F24BBBEE5702B45,PinName="TagToCheck",PinToolTip="Tag to Check\nGameplay Tag Structure\n\nTag to check for a match",PinType.PinCategory="struct",PinType.PinSubCategory="",PinType.PinSubCategoryObject=/Script/CoreUObject.ScriptStruct'"/Script/GameplayTags.GameplayTag"',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=55131057064742A6860304B1D06BEFAC,PinName="ReturnValue",PinToolTip="Return Value\nBoolean\n\nTrue if the asset has a gameplay tag that matches, false if not",Direction="EGPD_Output",PinType.PinCategory="bool",PinType.PinSubCategory="",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,DefaultValue="false",AutogeneratedDefaultValue="false",PersistentGuid=00000000000000000000000000000000,bHidden=False,bNotConnectable=False,bDefaultValueIsReadOnly=False,bDefaultValueIsIgnored=False,bAdvancedView=False,bOrphanedPin=False,) + End Object + `, + color: Configuration.nodeColors.green, + icon: SVGIcon.functionSymbol, + pins: 5, + pinNames: ["Target", "Tag to Check", "Return Value"], + delegate: false, + development: false, + }, + { + name: "Can Jump", + subtitle: "Target is Character", + value: String.raw` + Begin Object Class=/Script/BlueprintGraph.K2Node_CallFunction Name="K2Node_CallFunction_8" + bIsPureFunc=True + bIsConstFunc=True + FunctionReference=(MemberParent=/Script/CoreUObject.Class'"/Script/Engine.Character"',MemberName="CanJump") + NodePosX=-672 + NodePosY=192 + NodeGuid=B02C8FE6AC8446D0841E7AC6539684A9 + CustomProperties Pin (PinId=B561A480CA65436A864A12201A469A6A,PinName="self",PinFriendlyName=NSLOCTEXT("K2Node", "Target", "Target"),PinToolTip="Target\nCharacter Object Reference",PinType.PinCategory="object",PinType.PinSubCategory="",PinType.PinSubCategoryObject=/Script/CoreUObject.Class'"/Script/Engine.Character"',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=446739D0F2FB4ADD99427D3361351BFF,PinName="ReturnValue",PinToolTip="Return Value\nBoolean\n\nWhether the character can jump in the current state.",Direction="EGPD_Output",PinType.PinCategory="bool",PinType.PinSubCategory="",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,DefaultValue="false",AutogeneratedDefaultValue="false",PersistentGuid=00000000000000000000000000000000,bHidden=False,bNotConnectable=False,bDefaultValueIsReadOnly=False,bDefaultValueIsIgnored=False,bAdvancedView=False,bOrphanedPin=False,) + End Object + `, + color: Configuration.nodeColors.green, + icon: SVGIcon.functionSymbol, + pins: 2, + pinNames: ["Target", "Return Value"], + delegate: false, + development: false, + }, + { + name: "Set Finish On Message", + subtitle: "Target is BTTask Blueprint Base", + value: String.raw` + Begin Object Class=/Script/BlueprintGraph.K2Node_CallFunction Name="K2Node_CallFunction_9" + FunctionReference=(MemberParent=/Script/CoreUObject.Class'"/Script/AIModule.BTTask_BlueprintBase"',MemberName="SetFinishOnMessage") + NodePosX=-752 + NodePosY=32 + NodeGuid=152AE61522404C4FB8A984E22233BA90 + CustomProperties Pin (PinId=AA65F714245245BBABEAC9DB0D30A1B8,PinName="execute",PinToolTip="\nExec",PinType.PinCategory="exec",PinType.PinSubCategory="",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,) + CustomProperties Pin (PinId=E65D6A14850B4C3099B184E2718A253D,PinName="then",PinToolTip="\nExec",Direction="EGPD_Output",PinType.PinCategory="exec",PinType.PinSubCategory="",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,) + CustomProperties Pin (PinId=B28838C8FD994D8B9CF9F9F5D1C60BF2,PinName="self",PinFriendlyName=NSLOCTEXT("K2Node", "Target", "Target"),PinToolTip="Target\nBTTask Blueprint Base Object Reference",PinType.PinCategory="object",PinType.PinSubCategory="",PinType.PinSubCategoryObject=/Script/CoreUObject.Class'"/Script/AIModule.BTTask_BlueprintBase"',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=E31CB815EF3E418A89CAED51C9798597,PinName="MessageName",PinToolTip="Message Name\nName",PinType.PinCategory="name",PinType.PinSubCategory="",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,DefaultValue="None",AutogeneratedDefaultValue="None",PersistentGuid=00000000000000000000000000000000,bHidden=False,bNotConnectable=False,bDefaultValueIsReadOnly=False,bDefaultValueIsIgnored=False,bAdvancedView=False,bOrphanedPin=False,) + End Object + `, + color: Configuration.nodeColors.blue, + icon: SVGIcon.functionSymbol, + pins: 4, + pinNames: ["Target", "Message Name"], + delegate: false, + development: false, + }, + { + name: "Line Trace By Channel", + value: String.raw` + Begin Object Class=/Script/BlueprintGraph.K2Node_CallFunction Name="K2Node_CallFunction_0" + FunctionReference=(MemberParent=/Script/CoreUObject.Class'"/Script/Engine.KismetSystemLibrary"',MemberName="LineTraceSingle") + NodePosX=-480 + NodePosY=-144 + AdvancedPinDisplay=Shown + NodeGuid=F842A7449F24455B8B1198B11345DB9C + CustomProperties Pin (PinId=BFABF69DBB914DE38D163751AAB70E4B,PinName="execute",PinToolTip="\nExec",PinType.PinCategory="exec",PinType.PinSubCategory="",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,) + CustomProperties Pin (PinId=EDFC912BE807488599E27B717CAD40AD,PinName="then",PinToolTip="\nExec",Direction="EGPD_Output",PinType.PinCategory="exec",PinType.PinSubCategory="",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,) + CustomProperties Pin (PinId=B3716E637CD048418CE6D5D8D0C2A799,PinName="self",PinFriendlyName=NSLOCTEXT("K2Node", "Target", "Target"),PinToolTip="Target\nKismet System Library Object Reference",PinType.PinCategory="object",PinType.PinSubCategory="",PinType.PinSubCategoryObject=/Script/CoreUObject.Class'"/Script/Engine.KismetSystemLibrary"',PinType.PinSubCategoryMemberReference=(),PinType.PinValueType=(),PinType.ContainerType=None,PinType.bIsReference=False,PinType.bIsConst=False,PinType.bIsWeakPointer=False,PinType.bIsUObjectWrapper=False,PinType.bSerializeAsSinglePrecisionFloat=False,DefaultObject="/Script/Engine.Default__KismetSystemLibrary",PersistentGuid=00000000000000000000000000000000,bHidden=True,bNotConnectable=False,bDefaultValueIsReadOnly=False,bDefaultValueIsIgnored=False,bAdvancedView=False,bOrphanedPin=False,) + CustomProperties Pin (PinId=9DA3C37CCD4A417A9F2DCE2A71232D6F,PinName="WorldContextObject",PinToolTip="World Context Object\nObject Reference",PinType.PinCategory="object",PinType.PinSubCategory="",PinType.PinSubCategoryObject=/Script/CoreUObject.Class'"/Script/CoreUObject.Object"',PinType.PinSubCategoryMemberReference=(),PinType.PinValueType=(),PinType.ContainerType=None,PinType.bIsReference=False,PinType.bIsConst=True,PinType.bIsWeakPointer=False,PinType.bIsUObjectWrapper=False,PinType.bSerializeAsSinglePrecisionFloat=False,PersistentGuid=00000000000000000000000000000000,bHidden=True,bNotConnectable=False,bDefaultValueIsReadOnly=False,bDefaultValueIsIgnored=False,bAdvancedView=False,bOrphanedPin=False,) + CustomProperties Pin (PinId=A3053BF0111F468789C77E9EADCB1331,PinName="Start",PinToolTip="Start\nVector\n\nStart of line segment.",PinType.PinCategory="struct",PinType.PinSubCategory="",PinType.PinSubCategoryObject=/Script/CoreUObject.ScriptStruct'"/Script/CoreUObject.Vector"',PinType.PinSubCategoryMemberReference=(),PinType.PinValueType=(),PinType.ContainerType=None,PinType.bIsReference=False,PinType.bIsConst=True,PinType.bIsWeakPointer=False,PinType.bIsUObjectWrapper=False,PinType.bSerializeAsSinglePrecisionFloat=False,DefaultValue="0, 0, 0",AutogeneratedDefaultValue="0, 0, 0",PersistentGuid=00000000000000000000000000000000,bHidden=False,bNotConnectable=False,bDefaultValueIsReadOnly=False,bDefaultValueIsIgnored=False,bAdvancedView=False,bOrphanedPin=False,) + CustomProperties Pin (PinId=9D71C42C3FA94EE68623F50EDF0A3ED7,PinName="End",PinToolTip="End\nVector\n\nEnd of line segment.",PinType.PinCategory="struct",PinType.PinSubCategory="",PinType.PinSubCategoryObject=/Script/CoreUObject.ScriptStruct'"/Script/CoreUObject.Vector"',PinType.PinSubCategoryMemberReference=(),PinType.PinValueType=(),PinType.ContainerType=None,PinType.bIsReference=False,PinType.bIsConst=True,PinType.bIsWeakPointer=False,PinType.bIsUObjectWrapper=False,PinType.bSerializeAsSinglePrecisionFloat=False,DefaultValue="0, 0, 0",AutogeneratedDefaultValue="0, 0, 0",PersistentGuid=00000000000000000000000000000000,bHidden=False,bNotConnectable=False,bDefaultValueIsReadOnly=False,bDefaultValueIsIgnored=False,bAdvancedView=False,bOrphanedPin=False,) + CustomProperties Pin (PinId=93DD1DFD330C48E785CC19B0ED37F0B8,PinName="TraceChannel",PinToolTip="Trace Channel\nETraceTypeQuery Enum",PinType.PinCategory="byte",PinType.PinSubCategory="",PinType.PinSubCategoryObject=/Script/CoreUObject.Enum'"/Script/Engine.ETraceTypeQuery"',PinType.PinSubCategoryMemberReference=(),PinType.PinValueType=(),PinType.ContainerType=None,PinType.bIsReference=False,PinType.bIsConst=False,PinType.bIsWeakPointer=False,PinType.bIsUObjectWrapper=False,PinType.bSerializeAsSinglePrecisionFloat=False,DefaultValue="TraceTypeQuery1",PersistentGuid=00000000000000000000000000000000,bHidden=False,bNotConnectable=False,bDefaultValueIsReadOnly=False,bDefaultValueIsIgnored=False,bAdvancedView=False,bOrphanedPin=False,) + CustomProperties Pin (PinId=DCF9ABA98358461099ED15E9DBD71D16,PinName="bTraceComplex",PinToolTip="Trace Complex\nBoolean\n\nTrue to test against complex collision, false to test against simplified collision.",PinType.PinCategory="bool",PinType.PinSubCategory="",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,DefaultValue="false",AutogeneratedDefaultValue="false",PersistentGuid=00000000000000000000000000000000,bHidden=False,bNotConnectable=False,bDefaultValueIsReadOnly=False,bDefaultValueIsIgnored=False,bAdvancedView=False,bOrphanedPin=False,) + CustomProperties Pin (PinId=C8F98AFBD7D24416A6EBC9E5F99D71C0,PinName="ActorsToIgnore",PinToolTip="Actors to Ignore\nArray of Actor Object References",PinType.PinCategory="object",PinType.PinSubCategory="",PinType.PinSubCategoryObject=/Script/CoreUObject.Class'"/Script/Engine.Actor"',PinType.PinSubCategoryMemberReference=(),PinType.PinValueType=(),PinType.ContainerType=Array,PinType.bIsReference=True,PinType.bIsConst=True,PinType.bIsWeakPointer=False,PinType.bIsUObjectWrapper=False,PinType.bSerializeAsSinglePrecisionFloat=False,PersistentGuid=00000000000000000000000000000000,bHidden=False,bNotConnectable=False,bDefaultValueIsReadOnly=False,bDefaultValueIsIgnored=True,bAdvancedView=False,bOrphanedPin=False,) + CustomProperties Pin (PinId=BA6811254B84450382EA2A6113BB0805,PinName="DrawDebugType",PinToolTip="Draw Debug Type\nEDrawDebugTrace Enum",PinType.PinCategory="byte",PinType.PinSubCategory="",PinType.PinSubCategoryObject=/Script/CoreUObject.Enum'"/Script/Engine.EDrawDebugTrace"',PinType.PinSubCategoryMemberReference=(),PinType.PinValueType=(),PinType.ContainerType=None,PinType.bIsReference=False,PinType.bIsConst=False,PinType.bIsWeakPointer=False,PinType.bIsUObjectWrapper=False,PinType.bSerializeAsSinglePrecisionFloat=False,DefaultValue="None",PersistentGuid=00000000000000000000000000000000,bHidden=False,bNotConnectable=False,bDefaultValueIsReadOnly=False,bDefaultValueIsIgnored=False,bAdvancedView=False,bOrphanedPin=False,) + CustomProperties Pin (PinId=899C9DB84C70423285DE65B2CA053FCB,PinName="OutHit",PinToolTip="Out Hit\nHit Result Structure\n\nProperties of the trace hit.",Direction="EGPD_Output",PinType.PinCategory="struct",PinType.PinSubCategory="",PinType.PinSubCategoryObject=/Script/CoreUObject.ScriptStruct'"/Script/Engine.HitResult"',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=8D886907D6AD42C3B6EEBF4C843E2007,PinName="bIgnoreSelf",PinToolTip="Ignore Self\nBoolean",PinType.PinCategory="bool",PinType.PinSubCategory="",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,DefaultValue="true",AutogeneratedDefaultValue="true",PersistentGuid=00000000000000000000000000000000,bHidden=False,bNotConnectable=False,bDefaultValueIsReadOnly=False,bDefaultValueIsIgnored=False,bAdvancedView=False,bOrphanedPin=False,) + CustomProperties Pin (PinId=A8976968AE0046C493C612AF2B433D39,PinName="TraceColor",PinToolTip="Trace Color\nLinear Color Structure",PinType.PinCategory="struct",PinType.PinSubCategory="",PinType.PinSubCategoryObject=/Script/CoreUObject.ScriptStruct'"/Script/CoreUObject.LinearColor"',PinType.PinSubCategoryMemberReference=(),PinType.PinValueType=(),PinType.ContainerType=None,PinType.bIsReference=False,PinType.bIsConst=False,PinType.bIsWeakPointer=False,PinType.bIsUObjectWrapper=False,PinType.bSerializeAsSinglePrecisionFloat=False,DefaultValue="(R=1.000000,G=0.000000,B=0.000000,A=1.000000)",AutogeneratedDefaultValue="(R=1.000000,G=0.000000,B=0.000000,A=1.000000)",PersistentGuid=00000000000000000000000000000000,bHidden=False,bNotConnectable=False,bDefaultValueIsReadOnly=False,bDefaultValueIsIgnored=False,bAdvancedView=True,bOrphanedPin=False,) + CustomProperties Pin (PinId=1AE4B506C8174ACE9CD51E2638B16661,PinName="TraceHitColor",PinToolTip="Trace Hit Color\nLinear Color Structure",PinType.PinCategory="struct",PinType.PinSubCategory="",PinType.PinSubCategoryObject=/Script/CoreUObject.ScriptStruct'"/Script/CoreUObject.LinearColor"',PinType.PinSubCategoryMemberReference=(),PinType.PinValueType=(),PinType.ContainerType=None,PinType.bIsReference=False,PinType.bIsConst=False,PinType.bIsWeakPointer=False,PinType.bIsUObjectWrapper=False,PinType.bSerializeAsSinglePrecisionFloat=False,DefaultValue="(R=0.000000,G=1.000000,B=0.000000,A=1.000000)",AutogeneratedDefaultValue="(R=0.000000,G=1.000000,B=0.000000,A=1.000000)",PersistentGuid=00000000000000000000000000000000,bHidden=False,bNotConnectable=False,bDefaultValueIsReadOnly=False,bDefaultValueIsIgnored=False,bAdvancedView=True,bOrphanedPin=False,) + CustomProperties Pin (PinId=B7E84F13C2E44C0F9D5C967D0C2200A2,PinName="DrawTime",PinToolTip="Draw Time\nFloat (single-precision)",PinType.PinCategory="real",PinType.PinSubCategory="float",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,DefaultValue="5.000000",AutogeneratedDefaultValue="5.000000",PersistentGuid=00000000000000000000000000000000,bHidden=False,bNotConnectable=False,bDefaultValueIsReadOnly=False,bDefaultValueIsIgnored=False,bAdvancedView=True,bOrphanedPin=False,) + CustomProperties Pin (PinId=87EB3263DE5C4297AAFBAB07A960C352,PinName="ReturnValue",PinToolTip="Return Value\nBoolean\n\nTrue if there was a hit, false otherwise.",Direction="EGPD_Output",PinType.PinCategory="bool",PinType.PinSubCategory="",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,DefaultValue="false",AutogeneratedDefaultValue="false",PersistentGuid=00000000000000000000000000000000,bHidden=False,bNotConnectable=False,bDefaultValueIsReadOnly=False,bDefaultValueIsIgnored=False,bAdvancedView=False,bOrphanedPin=False,) + End Object + `, + color: Configuration.nodeColors.blue, + icon: SVGIcon.functionSymbol, + pins: 14, + pinNames: ["Start", "End", "Trace Channel", "Trace Complex", "Actors to Ignore", "Draw Debug Type", "Ignore Self", "Trace Color", "Trace Hit Color", "Draw Time", "Out Hit", "Return Value"], + delegate: false, + development: false, + }, + { + name: "Line Trace By Profile", + value: String.raw` + Begin Object Class=/Script/BlueprintGraph.K2Node_CallFunction Name="K2Node_CallFunction_21" + FunctionReference=(MemberParent=/Script/CoreUObject.Class'"/Script/Engine.KismetSystemLibrary"',MemberName="LineTraceSingleByProfile") + NodePosX=-672 + NodePosY=-1600 + AdvancedPinDisplay=Hidden + NodeGuid=D8472647289146CCBC7857EF1A9AE666 + CustomProperties Pin (PinId=9BDB78D31C0743B09A5CFFC6330A952C,PinName="execute",PinToolTip="\nExec",PinType.PinCategory="exec",PinType.PinSubCategory="",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,) + CustomProperties Pin (PinId=048F5710FF65448EBB67C4E0E6FB3CF6,PinName="then",PinToolTip="\nExec",Direction="EGPD_Output",PinType.PinCategory="exec",PinType.PinSubCategory="",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,) + CustomProperties Pin (PinId=221C53FC10AF40EA9F03C2E240F62F26,PinName="self",PinFriendlyName=NSLOCTEXT("K2Node", "Target", "Target"),PinToolTip="Target\nKismet System Library Object Reference",PinType.PinCategory="object",PinType.PinSubCategory="",PinType.PinSubCategoryObject=/Script/CoreUObject.Class'"/Script/Engine.KismetSystemLibrary"',PinType.PinSubCategoryMemberReference=(),PinType.PinValueType=(),PinType.ContainerType=None,PinType.bIsReference=False,PinType.bIsConst=False,PinType.bIsWeakPointer=False,PinType.bIsUObjectWrapper=False,PinType.bSerializeAsSinglePrecisionFloat=False,DefaultObject="/Script/Engine.Default__KismetSystemLibrary",PersistentGuid=00000000000000000000000000000000,bHidden=True,bNotConnectable=False,bDefaultValueIsReadOnly=False,bDefaultValueIsIgnored=False,bAdvancedView=False,bOrphanedPin=False,) + CustomProperties Pin (PinId=209531A0061F4F6DBC094F90D19FCEB1,PinName="WorldContextObject",PinToolTip="World Context Object\nObject Reference",PinType.PinCategory="object",PinType.PinSubCategory="",PinType.PinSubCategoryObject=/Script/CoreUObject.Class'"/Script/CoreUObject.Object"',PinType.PinSubCategoryMemberReference=(),PinType.PinValueType=(),PinType.ContainerType=None,PinType.bIsReference=False,PinType.bIsConst=True,PinType.bIsWeakPointer=False,PinType.bIsUObjectWrapper=False,PinType.bSerializeAsSinglePrecisionFloat=False,PersistentGuid=00000000000000000000000000000000,bHidden=True,bNotConnectable=False,bDefaultValueIsReadOnly=False,bDefaultValueIsIgnored=False,bAdvancedView=False,bOrphanedPin=False,) + CustomProperties Pin (PinId=AE9C2442EBBC433D84165E0D424C7228,PinName="Start",PinToolTip="Start\nVector\n\nStart of line segment.",PinType.PinCategory="struct",PinType.PinSubCategory="",PinType.PinSubCategoryObject=/Script/CoreUObject.ScriptStruct'"/Script/CoreUObject.Vector"',PinType.PinSubCategoryMemberReference=(),PinType.PinValueType=(),PinType.ContainerType=None,PinType.bIsReference=False,PinType.bIsConst=True,PinType.bIsWeakPointer=False,PinType.bIsUObjectWrapper=False,PinType.bSerializeAsSinglePrecisionFloat=False,DefaultValue="0, 0, 0",AutogeneratedDefaultValue="0, 0, 0",PersistentGuid=00000000000000000000000000000000,bHidden=False,bNotConnectable=False,bDefaultValueIsReadOnly=False,bDefaultValueIsIgnored=False,bAdvancedView=False,bOrphanedPin=False,) + CustomProperties Pin (PinId=10A25344350C48D9A0AEFA65BB528F26,PinName="End",PinToolTip="End\nVector\n\nEnd of line segment.",PinType.PinCategory="struct",PinType.PinSubCategory="",PinType.PinSubCategoryObject=/Script/CoreUObject.ScriptStruct'"/Script/CoreUObject.Vector"',PinType.PinSubCategoryMemberReference=(),PinType.PinValueType=(),PinType.ContainerType=None,PinType.bIsReference=False,PinType.bIsConst=True,PinType.bIsWeakPointer=False,PinType.bIsUObjectWrapper=False,PinType.bSerializeAsSinglePrecisionFloat=False,DefaultValue="0, 0, 0",AutogeneratedDefaultValue="0, 0, 0",PersistentGuid=00000000000000000000000000000000,bHidden=False,bNotConnectable=False,bDefaultValueIsReadOnly=False,bDefaultValueIsIgnored=False,bAdvancedView=False,bOrphanedPin=False,) + CustomProperties Pin (PinId=B0CC397419234E8EB505CC49655B4AF9,PinName="ProfileName",PinToolTip="Profile Name\nName\n\nThe \'profile\' used to determine which components to hit",PinType.PinCategory="name",PinType.PinSubCategory="",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,DefaultValue="None",AutogeneratedDefaultValue="None",PersistentGuid=00000000000000000000000000000000,bHidden=False,bNotConnectable=False,bDefaultValueIsReadOnly=False,bDefaultValueIsIgnored=False,bAdvancedView=False,bOrphanedPin=False,) + CustomProperties Pin (PinId=36237D5C776B4C8EA106EF6C4AD9FCE5,PinName="bTraceComplex",PinToolTip="Trace Complex\nBoolean\n\nTrue to test against complex collision, false to test against simplified collision.",PinType.PinCategory="bool",PinType.PinSubCategory="",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,DefaultValue="false",AutogeneratedDefaultValue="false",PersistentGuid=00000000000000000000000000000000,bHidden=False,bNotConnectable=False,bDefaultValueIsReadOnly=False,bDefaultValueIsIgnored=False,bAdvancedView=False,bOrphanedPin=False,) + CustomProperties Pin (PinId=952F86C97CDC4D198448C5964FFB8C6A,PinName="ActorsToIgnore",PinToolTip="Actors to Ignore\nArray of Actor Object References",PinType.PinCategory="object",PinType.PinSubCategory="",PinType.PinSubCategoryObject=/Script/CoreUObject.Class'"/Script/Engine.Actor"',PinType.PinSubCategoryMemberReference=(),PinType.PinValueType=(),PinType.ContainerType=Array,PinType.bIsReference=True,PinType.bIsConst=True,PinType.bIsWeakPointer=False,PinType.bIsUObjectWrapper=False,PinType.bSerializeAsSinglePrecisionFloat=False,PersistentGuid=00000000000000000000000000000000,bHidden=False,bNotConnectable=False,bDefaultValueIsReadOnly=False,bDefaultValueIsIgnored=True,bAdvancedView=False,bOrphanedPin=False,) + CustomProperties Pin (PinId=9E783D0881F54373A454F020BB737545,PinName="DrawDebugType",PinToolTip="Draw Debug Type\nEDrawDebugTrace Enum",PinType.PinCategory="byte",PinType.PinSubCategory="",PinType.PinSubCategoryObject=/Script/CoreUObject.Enum'"/Script/Engine.EDrawDebugTrace"',PinType.PinSubCategoryMemberReference=(),PinType.PinValueType=(),PinType.ContainerType=None,PinType.bIsReference=False,PinType.bIsConst=False,PinType.bIsWeakPointer=False,PinType.bIsUObjectWrapper=False,PinType.bSerializeAsSinglePrecisionFloat=False,DefaultValue="None",PersistentGuid=00000000000000000000000000000000,bHidden=False,bNotConnectable=False,bDefaultValueIsReadOnly=False,bDefaultValueIsIgnored=False,bAdvancedView=False,bOrphanedPin=False,) + CustomProperties Pin (PinId=9380611C5EC6421EAE830F811AE4CA9B,PinName="OutHit",PinToolTip="Out Hit\nHit Result Structure\n\nProperties of the trace hit.",Direction="EGPD_Output",PinType.PinCategory="struct",PinType.PinSubCategory="",PinType.PinSubCategoryObject=/Script/CoreUObject.ScriptStruct'"/Script/Engine.HitResult"',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=F50E8E483801451EA367DEE291EDB9C0,PinName="bIgnoreSelf",PinToolTip="Ignore Self\nBoolean",PinType.PinCategory="bool",PinType.PinSubCategory="",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,DefaultValue="true",AutogeneratedDefaultValue="true",PersistentGuid=00000000000000000000000000000000,bHidden=False,bNotConnectable=False,bDefaultValueIsReadOnly=False,bDefaultValueIsIgnored=False,bAdvancedView=False,bOrphanedPin=False,) + CustomProperties Pin (PinId=C34949E571254F43840B72ADAA5EB1C1,PinName="TraceColor",PinToolTip="Trace Color\nLinear Color Structure",PinType.PinCategory="struct",PinType.PinSubCategory="",PinType.PinSubCategoryObject=/Script/CoreUObject.ScriptStruct'"/Script/CoreUObject.LinearColor"',PinType.PinSubCategoryMemberReference=(),PinType.PinValueType=(),PinType.ContainerType=None,PinType.bIsReference=False,PinType.bIsConst=False,PinType.bIsWeakPointer=False,PinType.bIsUObjectWrapper=False,PinType.bSerializeAsSinglePrecisionFloat=False,DefaultValue="(R=1.000000,G=0.000000,B=0.000000,A=1.000000)",AutogeneratedDefaultValue="(R=1.000000,G=0.000000,B=0.000000,A=1.000000)",PersistentGuid=00000000000000000000000000000000,bHidden=False,bNotConnectable=False,bDefaultValueIsReadOnly=False,bDefaultValueIsIgnored=False,bAdvancedView=True,bOrphanedPin=False,) + CustomProperties Pin (PinId=9AADB2287BF1491984DB8C5BEFA60B91,PinName="TraceHitColor",PinToolTip="Trace Hit Color\nLinear Color Structure",PinType.PinCategory="struct",PinType.PinSubCategory="",PinType.PinSubCategoryObject=/Script/CoreUObject.ScriptStruct'"/Script/CoreUObject.LinearColor"',PinType.PinSubCategoryMemberReference=(),PinType.PinValueType=(),PinType.ContainerType=None,PinType.bIsReference=False,PinType.bIsConst=False,PinType.bIsWeakPointer=False,PinType.bIsUObjectWrapper=False,PinType.bSerializeAsSinglePrecisionFloat=False,DefaultValue="(R=0.000000,G=1.000000,B=0.000000,A=1.000000)",AutogeneratedDefaultValue="(R=0.000000,G=1.000000,B=0.000000,A=1.000000)",PersistentGuid=00000000000000000000000000000000,bHidden=False,bNotConnectable=False,bDefaultValueIsReadOnly=False,bDefaultValueIsIgnored=False,bAdvancedView=True,bOrphanedPin=False,) + CustomProperties Pin (PinId=28D9F3ADA25044D08C614D119047BAB6,PinName="DrawTime",PinToolTip="Draw Time\nFloat (single-precision)",PinType.PinCategory="real",PinType.PinSubCategory="float",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,DefaultValue="5.000000",AutogeneratedDefaultValue="5.000000",PersistentGuid=00000000000000000000000000000000,bHidden=False,bNotConnectable=False,bDefaultValueIsReadOnly=False,bDefaultValueIsIgnored=False,bAdvancedView=True,bOrphanedPin=False,) + CustomProperties Pin (PinId=3720AA15FE9045F2A7A6D99A87C90A77,PinName="ReturnValue",PinToolTip="Return Value\nBoolean\n\nTrue if there was a hit, false otherwise.",Direction="EGPD_Output",PinType.PinCategory="bool",PinType.PinSubCategory="",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,DefaultValue="false",AutogeneratedDefaultValue="false",PersistentGuid=00000000000000000000000000000000,bHidden=False,bNotConnectable=False,bDefaultValueIsReadOnly=False,bDefaultValueIsIgnored=False,bAdvancedView=False,bOrphanedPin=False,) + End Object + `, + color: Configuration.nodeColors.blue, + icon: SVGIcon.functionSymbol, + pins: 14, + pinNames: ["Start", "End", "Profile Name", "Trace Complex", "Actors to Ignore", "Draw Debug Type", "Ignore Self", "Trace Color", "Trace Hit Color", "Draw Time", "Out Hit", "Return Value"], + delegate: false, + development: false, + }, + { + name: "Line Trace Component", + subtitle: "Target is Primitive Component", + value: String.raw` + Begin Object Class=/Script/BlueprintGraph.K2Node_CallFunction Name="K2Node_CallFunction_2" + FunctionReference=(MemberParent=/Script/CoreUObject.Class'"/Script/Engine.PrimitiveComponent"',MemberName="K2_LineTraceComponent") + NodePosX=-480 + NodePosY=-96 + NodeGuid=AD1BECF7AEFB48418C321FACE1F6FEE6 + CustomProperties Pin (PinId=71E725C8BA2C4CDC9AD4A7666F88BC95,PinName="execute",PinToolTip="\nExec",PinType.PinCategory="exec",PinType.PinSubCategory="",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,) + CustomProperties Pin (PinId=02915C65578D498983A1236076974343,PinName="then",PinToolTip="\nExec",Direction="EGPD_Output",PinType.PinCategory="exec",PinType.PinSubCategory="",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,) + CustomProperties Pin (PinId=01035373F7D74828B1AF9F3A2D55BD1D,PinName="self",PinFriendlyName=NSLOCTEXT("K2Node", "Target", "Target"),PinToolTip="Target\nPrimitive Component Object Reference",PinType.PinCategory="object",PinType.PinSubCategory="",PinType.PinSubCategoryObject=/Script/CoreUObject.Class'"/Script/Engine.PrimitiveComponent"',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=AC73F75AC0F444458C8F245E2434ADB7,PinName="TraceStart",PinToolTip="Trace Start\nVector\n\nThe start of the trace in world-space",PinType.PinCategory="struct",PinType.PinSubCategory="",PinType.PinSubCategoryObject=/Script/CoreUObject.ScriptStruct'"/Script/CoreUObject.Vector"',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, 0",AutogeneratedDefaultValue="0, 0, 0",PersistentGuid=00000000000000000000000000000000,bHidden=False,bNotConnectable=False,bDefaultValueIsReadOnly=False,bDefaultValueIsIgnored=False,bAdvancedView=False,bOrphanedPin=False,) + CustomProperties Pin (PinId=FB1F08A845BD487C94E7D77544D6DFAD,PinName="TraceEnd",PinToolTip="Trace End\nVector\n\nThe end of the trace in world-space",PinType.PinCategory="struct",PinType.PinSubCategory="",PinType.PinSubCategoryObject=/Script/CoreUObject.ScriptStruct'"/Script/CoreUObject.Vector"',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, 0",AutogeneratedDefaultValue="0, 0, 0",PersistentGuid=00000000000000000000000000000000,bHidden=False,bNotConnectable=False,bDefaultValueIsReadOnly=False,bDefaultValueIsIgnored=False,bAdvancedView=False,bOrphanedPin=False,) + CustomProperties Pin (PinId=789D51671D014297856F0396DD3E4BC3,PinName="bTraceComplex",PinToolTip="Trace Complex\nBoolean\n\nWhether or not to trace the complex physics representation or just the simple representation",PinType.PinCategory="bool",PinType.PinSubCategory="",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,DefaultValue="true",AutogeneratedDefaultValue="true",PersistentGuid=00000000000000000000000000000000,bHidden=False,bNotConnectable=False,bDefaultValueIsReadOnly=False,bDefaultValueIsIgnored=False,bAdvancedView=False,bOrphanedPin=False,) + CustomProperties Pin (PinId=0CBD953C86A544FE98C066F4FEB320EC,PinName="bShowTrace",PinToolTip="Show Trace\nBoolean\n\nWhether or not to draw the trace in the world (for debugging)",PinType.PinCategory="bool",PinType.PinSubCategory="",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,DefaultValue="false",AutogeneratedDefaultValue="false",PersistentGuid=00000000000000000000000000000000,bHidden=False,bNotConnectable=False,bDefaultValueIsReadOnly=False,bDefaultValueIsIgnored=False,bAdvancedView=False,bOrphanedPin=False,) + CustomProperties Pin (PinId=782378B513EC4329A7E00BBBCA9190CC,PinName="bPersistentShowTrace",PinToolTip="Persistent Show Trace\nBoolean\n\nWhether or not to make the debugging draw stay in the world permanently",PinType.PinCategory="bool",PinType.PinSubCategory="",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,DefaultValue="false",AutogeneratedDefaultValue="false",PersistentGuid=00000000000000000000000000000000,bHidden=False,bNotConnectable=False,bDefaultValueIsReadOnly=False,bDefaultValueIsIgnored=False,bAdvancedView=False,bOrphanedPin=False,) + CustomProperties Pin (PinId=F077B022655742FF891ACDF37D15F1BA,PinName="HitLocation",PinToolTip="Hit Location\nVector",Direction="EGPD_Output",PinType.PinCategory="struct",PinType.PinSubCategory="",PinType.PinSubCategoryObject=/Script/CoreUObject.ScriptStruct'"/Script/CoreUObject.Vector"',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, 0",AutogeneratedDefaultValue="0, 0, 0",PersistentGuid=00000000000000000000000000000000,bHidden=False,bNotConnectable=False,bDefaultValueIsReadOnly=False,bDefaultValueIsIgnored=False,bAdvancedView=False,bOrphanedPin=False,) + CustomProperties Pin (PinId=6D8B46698B1547D187E949DB90482C78,PinName="HitNormal",PinToolTip="Hit Normal\nVector",Direction="EGPD_Output",PinType.PinCategory="struct",PinType.PinSubCategory="",PinType.PinSubCategoryObject=/Script/CoreUObject.ScriptStruct'"/Script/CoreUObject.Vector"',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, 0",AutogeneratedDefaultValue="0, 0, 0",PersistentGuid=00000000000000000000000000000000,bHidden=False,bNotConnectable=False,bDefaultValueIsReadOnly=False,bDefaultValueIsIgnored=False,bAdvancedView=False,bOrphanedPin=False,) + CustomProperties Pin (PinId=158EB11340C84CA5958FE7B4F296076B,PinName="BoneName",PinToolTip="Bone Name\nName",Direction="EGPD_Output",PinType.PinCategory="name",PinType.PinSubCategory="",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,DefaultValue="None",AutogeneratedDefaultValue="None",PersistentGuid=00000000000000000000000000000000,bHidden=False,bNotConnectable=False,bDefaultValueIsReadOnly=False,bDefaultValueIsIgnored=False,bAdvancedView=False,bOrphanedPin=False,) + CustomProperties Pin (PinId=13AD4AE0297E43639A30413D3F65407D,PinName="OutHit",PinToolTip="Out Hit\nHit Result Structure",Direction="EGPD_Output",PinType.PinCategory="struct",PinType.PinSubCategory="",PinType.PinSubCategoryObject=/Script/CoreUObject.ScriptStruct'"/Script/Engine.HitResult"',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=963914D01EDF49EDA30FBB91F2CF493C,PinName="ReturnValue",PinToolTip="Return Value\nBoolean",Direction="EGPD_Output",PinType.PinCategory="bool",PinType.PinSubCategory="",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,DefaultValue="false",AutogeneratedDefaultValue="false",PersistentGuid=00000000000000000000000000000000,bHidden=False,bNotConnectable=False,bDefaultValueIsReadOnly=False,bDefaultValueIsIgnored=False,bAdvancedView=False,bOrphanedPin=False,) + End Object + `, + color: Configuration.nodeColors.blue, + icon: SVGIcon.functionSymbol, + pins: 13, + pinNames: ["Target", "Trace Start", "Trace End", "Trace Complex", "Show Trace", "Persistent Show Trace", "Hit Location", "Hit Normal", "Bone Name", "Out Hit", "Return Value"], + delegate: false, + development: false, + }, + { + name: "Delay", + value: String.raw` + Begin Object Class=/Script/BlueprintGraph.K2Node_CallFunction Name="K2Node_CallFunction_17" + FunctionReference=(MemberParent=/Script/CoreUObject.Class'"/Script/Engine.KismetSystemLibrary"',MemberName="Delay") + NodePosX=-224 + NodePosY=-336 + NodeGuid=8CDD81286D894EBA8414B5DEBA780D9E + CustomProperties Pin (PinId=B2476CF3411C6290BC6D97B714E207D4,PinName="execute",PinToolTip="\nExec",PinType.PinCategory="exec",PinType.PinSubCategory="",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,LinkedTo=(K2Node_CallFunction_19 9C174E82466ECE8521C95FBF22ED4A68,),PersistentGuid=00000000000000000000000000000000,bHidden=False,bNotConnectable=False,bDefaultValueIsReadOnly=False,bDefaultValueIsIgnored=False,bAdvancedView=False,bOrphanedPin=False,) + CustomProperties Pin (PinId=69F8184E4070B5FBDEF06A94677454D5,PinName="then",PinFriendlyName="Completed",PinToolTip="Completed\nExec",Direction="EGPD_Output",PinType.PinCategory="exec",PinType.PinSubCategory="",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,LinkedTo=(K2Node_CallFunction_18 1F53F0D240A7547201D59D8C9A37290B,),PersistentGuid=00000000000000000000000000000000,bHidden=False,bNotConnectable=False,bDefaultValueIsReadOnly=False,bDefaultValueIsIgnored=False,bAdvancedView=False,bOrphanedPin=False,) + CustomProperties Pin (PinId=BA6B7D3B429FDD4C250237BD54D75099,PinName="self",PinFriendlyName=NSLOCTEXT("K2Node", "Target", "Target"),PinToolTip="Target\nKismet System Library Object Reference",PinType.PinCategory="object",PinType.PinSubCategory="",PinType.PinSubCategoryObject=/Script/CoreUObject.Class'"/Script/Engine.KismetSystemLibrary"',PinType.PinSubCategoryMemberReference=(),PinType.PinValueType=(),PinType.ContainerType=None,PinType.bIsReference=False,PinType.bIsConst=False,PinType.bIsWeakPointer=False,PinType.bIsUObjectWrapper=False,PinType.bSerializeAsSinglePrecisionFloat=False,DefaultObject="/Script/Engine.Default__KismetSystemLibrary",PersistentGuid=00000000000000000000000000000000,bHidden=True,bNotConnectable=False,bDefaultValueIsReadOnly=False,bDefaultValueIsIgnored=False,bAdvancedView=False,bOrphanedPin=False,) + CustomProperties Pin (PinId=A2E27ABE4A7EE373C1983487B550FCA1,PinName="WorldContextObject",PinToolTip="World Context Object\nObject Reference",PinType.PinCategory="object",PinType.PinSubCategory="",PinType.PinSubCategoryObject=/Script/CoreUObject.Class'"/Script/CoreUObject.Object"',PinType.PinSubCategoryMemberReference=(),PinType.PinValueType=(),PinType.ContainerType=None,PinType.bIsReference=False,PinType.bIsConst=True,PinType.bIsWeakPointer=False,PinType.bIsUObjectWrapper=False,PinType.bSerializeAsSinglePrecisionFloat=False,PersistentGuid=00000000000000000000000000000000,bHidden=True,bNotConnectable=False,bDefaultValueIsReadOnly=False,bDefaultValueIsIgnored=False,bAdvancedView=False,bOrphanedPin=False,) + CustomProperties Pin (PinId=AEB97A71428D31E899D38F9E30243F68,PinName="Duration",PinToolTip="Duration\nFloat (single-precision)\n\nlength of delay (in seconds).",PinType.PinCategory="real",PinType.PinSubCategory="float",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,DefaultValue="0.2",AutogeneratedDefaultValue="0.2",LinkedTo=(K2Node_VariableGet_8 7F1D5C3A40DB0725BEC01192B06FE830,),PersistentGuid=00000000000000000000000000000000,bHidden=False,bNotConnectable=False,bDefaultValueIsReadOnly=False,bDefaultValueIsIgnored=False,bAdvancedView=False,bOrphanedPin=False,) + CustomProperties Pin (PinId=D95C20784C876E9AFC7E4BB3C3CCE773,PinName="LatentInfo",PinToolTip="Latent Info\nLatent Action Info Structure\n\nThe latent action.",PinType.PinCategory="struct",PinType.PinSubCategory="",PinType.PinSubCategoryObject=/Script/CoreUObject.ScriptStruct'"/Script/Engine.LatentActionInfo"',PinType.PinSubCategoryMemberReference=(),PinType.PinValueType=(),PinType.ContainerType=None,PinType.bIsReference=False,PinType.bIsConst=False,PinType.bIsWeakPointer=False,PinType.bIsUObjectWrapper=False,PinType.bSerializeAsSinglePrecisionFloat=False,DefaultValue="(Linkage=-1,UUID=-1,ExecutionFunction=\"\",CallbackTarget=None)",AutogeneratedDefaultValue="LatentInfo",PersistentGuid=00000000000000000000000000000000,bHidden=True,bNotConnectable=False,bDefaultValueIsReadOnly=False,bDefaultValueIsIgnored=False,bAdvancedView=False,bOrphanedPin=False,) + End Object + `, + color: Configuration.nodeColors.blue, + icon: SVGIcon.functionSymbol, + pins: 3, + pinNames: ["Duration", "Completed"], + delegate: false, + development: false, + }, + { + name: "Literal enum EARLineTraceChannels", + value: String.raw` + Begin Object Class=/Script/BlueprintGraph.K2Node_EnumLiteral Name="K2Node_EnumLiteral_0" + Enum=/Script/CoreUObject.Enum'"/Script/AugmentedReality.EARLineTraceChannels"' + NodePosX=-864 + NodePosY=-1856 + NodeGuid=50A89C411ADB4A4388E2CDE22CBEF9B0 + CustomProperties Pin (PinId=BEEA33BA22304D868E6E7C78C7E4BE6A,PinName="Enum",PinType.PinCategory="byte",PinType.PinSubCategory="",PinType.PinSubCategoryObject=/Script/CoreUObject.Enum'"/Script/AugmentedReality.EARLineTraceChannels"',PinType.PinSubCategoryMemberReference=(),PinType.PinValueType=(),PinType.ContainerType=None,PinType.bIsReference=False,PinType.bIsConst=False,PinType.bIsWeakPointer=False,PinType.bIsUObjectWrapper=False,PinType.bSerializeAsSinglePrecisionFloat=False,DefaultValue="None",PersistentGuid=00000000000000000000000000000000,bHidden=False,bNotConnectable=False,bDefaultValueIsReadOnly=False,bDefaultValueIsIgnored=False,bAdvancedView=False,bOrphanedPin=False,) + CustomProperties Pin (PinId=B682278698A545E79A232FCCA7C1EB4D,PinName="ReturnValue",Direction="EGPD_Output",PinType.PinCategory="byte",PinType.PinSubCategory="",PinType.PinSubCategoryObject=/Script/CoreUObject.Enum'"/Script/AugmentedReality.EARLineTraceChannels"',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 + `, + color: Configuration.nodeColors.green, + icon: SVGIcon.enum, + pins: 2, + pinNames: ["Enum", "Return Value"], + delegate: false, + development: false, + }, + { + name: "Create Event", + value: String.raw` + Begin Object Class=/Script/BlueprintGraph.K2Node_CreateDelegate Name="K2Node_CreateDelegate_1" + NodePosX=368 + NodePosY=-224 + NodeGuid=0FA4EE58928C4CF285441256561E250A + CustomProperties Pin (PinId=4735A6AC4F9F7A3AFD64B2801F623052,PinName="self",PinFriendlyName=NSLOCTEXT("K2Node", "CreateDelegate_ObjectInputName", "Object"),PinType.PinCategory="object",PinType.PinSubCategory="",PinType.PinSubCategoryObject=/Script/CoreUObject.Class'"/Script/CoreUObject.Object"',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=0A66F49740A5DDD42C1AECA040844EBF,PinName="OutputDelegate",PinFriendlyName=NSLOCTEXT("K2Node", "CreateDelegate_DelegateOutName", "Event"),Direction="EGPD_Output",PinType.PinCategory="delegate",PinType.PinSubCategory="",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 + `, + color: Configuration.nodeColors.green, + icon: SVGIcon.node, + pins: 2, + pinNames: ["Object", "Event"], + delegate: false, + development: false, + }, + { + name: "SpawnActor NONE", + value: String.raw` + Begin Object Class=/Script/BlueprintGraph.K2Node_SpawnActorFromClass Name="K2Node_SpawnActorFromClass_1" ExportPath=/Script/BlueprintGraph.K2Node_SpawnActorFromClass'"/Temp/Untitled_1.Untitled_1:PersistentLevel.Untitled.EventGraph.K2Node_SpawnActorFromClass_1"' + NodePosX=-256 + NodePosY=-128 + AdvancedPinDisplay=Shown + NodeGuid=24B049D9DB0F44D882AFE6C80BCFD6D7 + CustomProperties Pin (PinId=DAD2D02C89FA40C2816217E9926FE015,PinName="execute",PinType.PinCategory="exec",PinType.PinSubCategory="",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,) + CustomProperties Pin (PinId=16CEF4A26976499C8D28A51FC5D5FC06,PinName="then",Direction="EGPD_Output",PinType.PinCategory="exec",PinType.PinSubCategory="",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,) + CustomProperties Pin (PinId=FCDCE4268C464334BEDFD7166183C92E,PinName="Class",PinToolTip="Actor Class Reference Class\nThe object class you want to construct",PinType.PinCategory="class",PinType.PinSubCategory="",PinType.PinSubCategoryObject=/Script/CoreUObject.Class'"/Script/Engine.Actor"',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=431A4F3F9A9444FAB27C9A4FF1F5DF75,PinName="ReturnValue",PinToolTip="Actor Object Reference Return Value\nThe constructed object",Direction="EGPD_Output",PinType.PinCategory="object",PinType.PinSubCategory="",PinType.PinSubCategoryObject=/Script/CoreUObject.Class'"/Script/Engine.Actor"',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=0A8BF8604B274EC6A2FC38665C78179C,PinName="SpawnTransform",PinToolTip="Spawn Transform\nTransform\n\nThe transform to spawn the Actor with",PinType.PinCategory="struct",PinType.PinSubCategory="",PinType.PinSubCategoryObject=/Script/CoreUObject.ScriptStruct'"/Script/CoreUObject.Transform"',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=22A7ADCDABD041C78907E027D38A3972,PinName="CollisionHandlingOverride",PinToolTip="Collision Handling Override\nESpawnActorCollisionHandlingMethod Enum\n\nSpecifies how to handle collisions at the spawn point. If undefined, uses actor class settings.",PinType.PinCategory="byte",PinType.PinSubCategory="",PinType.PinSubCategoryObject=/Script/CoreUObject.Enum'"/Script/Engine.ESpawnActorCollisionHandlingMethod"',PinType.PinSubCategoryMemberReference=(),PinType.PinValueType=(),PinType.ContainerType=None,PinType.bIsReference=False,PinType.bIsConst=False,PinType.bIsWeakPointer=False,PinType.bIsUObjectWrapper=False,PinType.bSerializeAsSinglePrecisionFloat=False,DefaultValue="Undefined",PersistentGuid=00000000000000000000000000000000,bHidden=False,bNotConnectable=False,bDefaultValueIsReadOnly=False,bDefaultValueIsIgnored=False,bAdvancedView=False,bOrphanedPin=False,) + CustomProperties Pin (PinId=7C7F74180B6B464F946E79A8AF068F97,PinName="TransformScaleMethod",PinType.PinCategory="byte",PinType.PinSubCategory="",PinType.PinSubCategoryObject=/Script/CoreUObject.Enum'"/Script/Engine.ESpawnActorScaleMethod"',PinType.PinSubCategoryMemberReference=(),PinType.PinValueType=(),PinType.ContainerType=None,PinType.bIsReference=False,PinType.bIsConst=False,PinType.bIsWeakPointer=False,PinType.bIsUObjectWrapper=False,PinType.bSerializeAsSinglePrecisionFloat=False,DefaultValue="MultiplyWithRoot",PersistentGuid=00000000000000000000000000000000,bHidden=False,bNotConnectable=False,bDefaultValueIsReadOnly=False,bDefaultValueIsIgnored=False,bAdvancedView=True,bOrphanedPin=False,) + CustomProperties Pin (PinId=A8322AFB4361415CB589F9F97A1AEAF7,PinName="Owner",PinToolTip="Owner\nActor Object Reference\n\nCan be left empty; primarily used for replication (bNetUseOwnerRelevancy and bOnlyRelevantToOwner), or visibility (PrimitiveComponent\'s bOwnerNoSee/bOnlyOwnerSee)",PinType.PinCategory="object",PinType.PinSubCategory="",PinType.PinSubCategoryObject=/Script/CoreUObject.Class'"/Script/Engine.Actor"',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=True,bOrphanedPin=False,) + End Object + `, + color: Configuration.nodeColors.blue, + icon: SVGIcon.spawnActor, + pins: 8, + pinNames: ["Class", "Spawn Transform", "Collision Handling Override", "Transform Scale Method", "Owner", "Return Value"], + delegate: false, + development: false, + }, + { + name: "SpawnActor Point Light", + value: String.raw` + Begin Object Class=/Script/BlueprintGraph.K2Node_SpawnActorFromClass Name="K2Node_SpawnActorFromClass_0" ExportPath=/Script/BlueprintGraph.K2Node_SpawnActorFromClass'"/Temp/Untitled_1.Untitled_1:PersistentLevel.Untitled.EventGraph.K2Node_SpawnActorFromClass_0"' + NodePosX=-560 + NodePosY=-96 + AdvancedPinDisplay=Shown + NodeGuid=339A61F4C503440C93AB7A8B8B464A42 + CustomProperties Pin (PinId=BEEE0AE5F4F24EE2A0CC153B52844919,PinName="execute",PinType.PinCategory="exec",PinType.PinSubCategory="",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,) + CustomProperties Pin (PinId=CFA5506C331541C0B35739F95ACCC110,PinName="then",Direction="EGPD_Output",PinType.PinCategory="exec",PinType.PinSubCategory="",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,) + CustomProperties Pin (PinId=C9088BD19473494B8426AAE584D5F5F6,PinName="Class",PinToolTip="Actor Class Reference Class\nThe object class you want to construct",PinType.PinCategory="class",PinType.PinSubCategory="",PinType.PinSubCategoryObject=/Script/CoreUObject.Class'"/Script/Engine.Actor"',PinType.PinSubCategoryMemberReference=(),PinType.PinValueType=(),PinType.ContainerType=None,PinType.bIsReference=False,PinType.bIsConst=False,PinType.bIsWeakPointer=False,PinType.bIsUObjectWrapper=False,PinType.bSerializeAsSinglePrecisionFloat=False,DefaultObject="/Script/Engine.PointLight",PersistentGuid=00000000000000000000000000000000,bHidden=False,bNotConnectable=False,bDefaultValueIsReadOnly=False,bDefaultValueIsIgnored=False,bAdvancedView=False,bOrphanedPin=False,) + CustomProperties Pin (PinId=8A9DB62EE64D4E9987578479E0E83C0B,PinName="ReturnValue",PinToolTip="Point Light Object Reference Return Value\nThe constructed object",Direction="EGPD_Output",PinType.PinCategory="object",PinType.PinSubCategory="",PinType.PinSubCategoryObject=/Script/CoreUObject.Class'"/Script/Engine.PointLight"',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=9038EC19A2F74900AC57B4BD05146E2C,PinName="SpawnTransform",PinToolTip="Spawn Transform\nTransform\n\nThe transform to spawn the Actor with",PinType.PinCategory="struct",PinType.PinSubCategory="",PinType.PinSubCategoryObject=/Script/CoreUObject.ScriptStruct'"/Script/CoreUObject.Transform"',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=DF50478D9FF04AA393E8D08D8EC8D6EF,PinName="CollisionHandlingOverride",PinToolTip="Collision Handling Override\nESpawnActorCollisionHandlingMethod Enum\n\nSpecifies how to handle collisions at the spawn point. If undefined, uses actor class settings.",PinType.PinCategory="byte",PinType.PinSubCategory="",PinType.PinSubCategoryObject=/Script/CoreUObject.Enum'"/Script/Engine.ESpawnActorCollisionHandlingMethod"',PinType.PinSubCategoryMemberReference=(),PinType.PinValueType=(),PinType.ContainerType=None,PinType.bIsReference=False,PinType.bIsConst=False,PinType.bIsWeakPointer=False,PinType.bIsUObjectWrapper=False,PinType.bSerializeAsSinglePrecisionFloat=False,DefaultValue="AdjustIfPossibleButDontSpawnIfColliding",PersistentGuid=00000000000000000000000000000000,bHidden=False,bNotConnectable=False,bDefaultValueIsReadOnly=False,bDefaultValueIsIgnored=False,bAdvancedView=False,bOrphanedPin=False,) + CustomProperties Pin (PinId=BBEB70384DE441AFB752C06D2484260A,PinName="TransformScaleMethod",PinType.PinCategory="byte",PinType.PinSubCategory="",PinType.PinSubCategoryObject=/Script/CoreUObject.Enum'"/Script/Engine.ESpawnActorScaleMethod"',PinType.PinSubCategoryMemberReference=(),PinType.PinValueType=(),PinType.ContainerType=None,PinType.bIsReference=False,PinType.bIsConst=False,PinType.bIsWeakPointer=False,PinType.bIsUObjectWrapper=False,PinType.bSerializeAsSinglePrecisionFloat=False,DefaultValue="MultiplyWithRoot",PersistentGuid=00000000000000000000000000000000,bHidden=False,bNotConnectable=False,bDefaultValueIsReadOnly=False,bDefaultValueIsIgnored=False,bAdvancedView=True,bOrphanedPin=False,) + CustomProperties Pin (PinId=C6D5782B0BD64B5E89E2FC5ED3402871,PinName="Owner",PinToolTip="Owner\nActor Object Reference\n\nCan be left empty; primarily used for replication (bNetUseOwnerRelevancy and bOnlyRelevantToOwner), or visibility (PrimitiveComponent\'s bOwnerNoSee/bOnlyOwnerSee)",PinType.PinCategory="object",PinType.PinSubCategory="",PinType.PinSubCategoryObject=/Script/CoreUObject.Class'"/Script/Engine.Actor"',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=True,bOrphanedPin=False,) + CustomProperties Pin (PinId=C6F3F40366F54FCAB1071FC6838BA4BD,PinName="Instigator",PinToolTip="Instigator\nPawn Object Reference\n\nPawn responsible for damage and other gameplay events caused by this actor.",PinType.PinCategory="object",PinType.PinSubCategory="",PinType.PinSubCategoryObject=/Script/CoreUObject.Class'"/Script/Engine.Pawn"',PinType.PinSubCategoryMemberReference=(),PinType.PinValueType=(),PinType.ContainerType=None,PinType.bIsReference=False,PinType.bIsConst=False,PinType.bIsWeakPointer=False,PinType.bIsUObjectWrapper=True,PinType.bSerializeAsSinglePrecisionFloat=False,AutogeneratedDefaultValue="None",PersistentGuid=00000000000000000000000000000000,bHidden=False,bNotConnectable=False,bDefaultValueIsReadOnly=False,bDefaultValueIsIgnored=False,bAdvancedView=False,bOrphanedPin=False,) + End Object + `, + color: Configuration.nodeColors.blue, + icon: SVGIcon.spawnActor, + pins: 9, + pinNames: [ + "Class", + "Spawn Transform", + "Collision Handling Override", + "Transform Scale Method", + "Owner", + "Instigator", + "Return Value" + ], + delegate: false, + development: false, + }, + { + name: "Line Trace For Objects", + value: String.raw` + Begin Object Class=/Script/BlueprintGraph.K2Node_CallFunction Name="K2Node_CallFunction_8" + FunctionReference=(MemberParent=/Script/CoreUObject.Class'"/Script/Engine.KismetSystemLibrary"',MemberName="LineTraceSingleForObjects") + NodePosX=-208 + NodePosY=-352 + AdvancedPinDisplay=Shown + ErrorType=1 + NodeGuid=3EE71DDB1BD944DE961519875B895319 + CustomProperties Pin (PinId=96A094494D762C998E774ABB929EB41C,PinName="execute",PinToolTip="\nExec",PinType.PinCategory="exec",PinType.PinSubCategory="",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,) + CustomProperties Pin (PinId=718E43E94384B5B10074D6BD04E74488,PinName="then",PinToolTip="\nExec",Direction="EGPD_Output",PinType.PinCategory="exec",PinType.PinSubCategory="",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,) + CustomProperties Pin (PinId=0DB3EEE24A4161EE635A9A9D33EC9512,PinName="self",PinFriendlyName=NSLOCTEXT("K2Node", "Target", "Target"),PinToolTip="Target\nKismet System Library Object Reference",PinType.PinCategory="object",PinType.PinSubCategory="",PinType.PinSubCategoryObject=/Script/CoreUObject.Class'"/Script/Engine.KismetSystemLibrary"',PinType.PinSubCategoryMemberReference=(),PinType.PinValueType=(),PinType.ContainerType=None,PinType.bIsReference=False,PinType.bIsConst=False,PinType.bIsWeakPointer=False,PinType.bIsUObjectWrapper=False,PinType.bSerializeAsSinglePrecisionFloat=False,DefaultObject="/Script/Engine.Default__KismetSystemLibrary",PersistentGuid=00000000000000000000000000000000,bHidden=True,bNotConnectable=False,bDefaultValueIsReadOnly=False,bDefaultValueIsIgnored=False,bAdvancedView=False,bOrphanedPin=False,) + CustomProperties Pin (PinId=124D88C54AF09D670C3A42A2576E8454,PinName="WorldContextObject",PinToolTip="World Context Object\nObject Reference",PinType.PinCategory="object",PinType.PinSubCategory="",PinType.PinSubCategoryObject=/Script/CoreUObject.Class'"/Script/CoreUObject.Object"',PinType.PinSubCategoryMemberReference=(),PinType.PinValueType=(),PinType.ContainerType=None,PinType.bIsReference=False,PinType.bIsConst=True,PinType.bIsWeakPointer=False,PinType.bIsUObjectWrapper=False,PinType.bSerializeAsSinglePrecisionFloat=False,PersistentGuid=00000000000000000000000000000000,bHidden=True,bNotConnectable=False,bDefaultValueIsReadOnly=False,bDefaultValueIsIgnored=False,bAdvancedView=False,bOrphanedPin=False,) + CustomProperties Pin (PinId=9884A8D5423FB15AE0A4ECA2C08F258E,PinName="Start",PinToolTip="Start\nVector\n\nStart of line segment.",PinType.PinCategory="struct",PinType.PinSubCategory="",PinType.PinSubCategoryObject=/Script/CoreUObject.ScriptStruct'"/Script/CoreUObject.Vector"',PinType.PinSubCategoryMemberReference=(),PinType.PinValueType=(),PinType.ContainerType=None,PinType.bIsReference=False,PinType.bIsConst=True,PinType.bIsWeakPointer=False,PinType.bIsUObjectWrapper=False,PinType.bSerializeAsSinglePrecisionFloat=False,DefaultValue="0, 0, 0",AutogeneratedDefaultValue="0, 0, 0",PersistentGuid=00000000000000000000000000000000,bHidden=False,bNotConnectable=False,bDefaultValueIsReadOnly=False,bDefaultValueIsIgnored=False,bAdvancedView=False,bOrphanedPin=False,) + CustomProperties Pin (PinId=A4C186FF494EFAF15578EF9A0453DB39,PinName="End",PinToolTip="End\nVector\n\nEnd of line segment.",PinType.PinCategory="struct",PinType.PinSubCategory="",PinType.PinSubCategoryObject=/Script/CoreUObject.ScriptStruct'"/Script/CoreUObject.Vector"',PinType.PinSubCategoryMemberReference=(),PinType.PinValueType=(),PinType.ContainerType=None,PinType.bIsReference=False,PinType.bIsConst=True,PinType.bIsWeakPointer=False,PinType.bIsUObjectWrapper=False,PinType.bSerializeAsSinglePrecisionFloat=False,DefaultValue="0, 0, 0",AutogeneratedDefaultValue="0, 0, 0",PersistentGuid=00000000000000000000000000000000,bHidden=False,bNotConnectable=False,bDefaultValueIsReadOnly=False,bDefaultValueIsIgnored=False,bAdvancedView=False,bOrphanedPin=False,) + CustomProperties Pin (PinId=4BED576E40A832A6F31237AEFBACBB71,PinName="ObjectTypes",PinToolTip="Object Types\nArray of EObjectTypeQuery Enums\n\nArray of Object Types to trace",PinType.PinCategory="byte",PinType.PinSubCategory="",PinType.PinSubCategoryObject=/Script/CoreUObject.Enum'"/Script/Engine.EObjectTypeQuery"',PinType.PinSubCategoryMemberReference=(),PinType.PinValueType=(),PinType.ContainerType=Array,PinType.bIsReference=True,PinType.bIsConst=True,PinType.bIsWeakPointer=False,PinType.bIsUObjectWrapper=False,PinType.bSerializeAsSinglePrecisionFloat=False,DefaultValue="ObjectTypeQuery1",PersistentGuid=00000000000000000000000000000000,bHidden=False,bNotConnectable=False,bDefaultValueIsReadOnly=False,bDefaultValueIsIgnored=True,bAdvancedView=False,bOrphanedPin=False,) + CustomProperties Pin (PinId=A8296F984AFE64743DAB3E897CC3DF47,PinName="bTraceComplex",PinToolTip="Trace Complex\nBoolean\n\nTrue to test against complex collision, false to test against simplified collision.",PinType.PinCategory="bool",PinType.PinSubCategory="",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,DefaultValue="false",AutogeneratedDefaultValue="false",PersistentGuid=00000000000000000000000000000000,bHidden=False,bNotConnectable=False,bDefaultValueIsReadOnly=False,bDefaultValueIsIgnored=False,bAdvancedView=False,bOrphanedPin=False,) + CustomProperties Pin (PinId=A19DB65F47B607A3AAF50EA382815B7D,PinName="ActorsToIgnore",PinToolTip="Actors to Ignore\nArray of Actor Object References",PinType.PinCategory="object",PinType.PinSubCategory="",PinType.PinSubCategoryObject=/Script/CoreUObject.Class'"/Script/Engine.Actor"',PinType.PinSubCategoryMemberReference=(),PinType.PinValueType=(),PinType.ContainerType=Array,PinType.bIsReference=True,PinType.bIsConst=True,PinType.bIsWeakPointer=False,PinType.bIsUObjectWrapper=False,PinType.bSerializeAsSinglePrecisionFloat=False,PersistentGuid=00000000000000000000000000000000,bHidden=False,bNotConnectable=False,bDefaultValueIsReadOnly=False,bDefaultValueIsIgnored=True,bAdvancedView=False,bOrphanedPin=False,) + CustomProperties Pin (PinId=A3E482A7474A05E0E58F6AAA6E4734CD,PinName="DrawDebugType",PinToolTip="Draw Debug Type\nEDrawDebugTrace Enum",PinType.PinCategory="byte",PinType.PinSubCategory="",PinType.PinSubCategoryObject=/Script/CoreUObject.Enum'"/Script/Engine.EDrawDebugTrace"',PinType.PinSubCategoryMemberReference=(),PinType.PinValueType=(),PinType.ContainerType=None,PinType.bIsReference=False,PinType.bIsConst=False,PinType.bIsWeakPointer=False,PinType.bIsUObjectWrapper=False,PinType.bSerializeAsSinglePrecisionFloat=False,DefaultValue="ForOneFrame",PersistentGuid=00000000000000000000000000000000,bHidden=False,bNotConnectable=False,bDefaultValueIsReadOnly=False,bDefaultValueIsIgnored=False,bAdvancedView=False,bOrphanedPin=False,) + CustomProperties Pin (PinId=FE2B25154C824BB9EAF9E9A2ADA5943E,PinName="OutHit",PinToolTip="Out Hit\nHit Result Structure\n\nProperties of the trace hit.",Direction="EGPD_Output",PinType.PinCategory="struct",PinType.PinSubCategory="",PinType.PinSubCategoryObject=/Script/CoreUObject.ScriptStruct'"/Script/Engine.HitResult"',PinType.PinSubCategoryMemberReference=(),PinType.PinValueType=(),PinType.ContainerType=None,PinType.bIsReference=False,PinType.bIsConst=False,PinType.bIsWeakPointer=False,PinType.bIsUObjectWrapper=False,PinType.bSerializeAsSinglePrecisionFloat=False,SubPins=(K2Node_CallFunction_8 D06FD3BB41F114BBF8C89DB38EAC0761,K2Node_CallFunction_8 B45FC53E42E98D2933D7A6A33722F4D8,K2Node_CallFunction_8 4DB0E6CC46E5A3C80AC6C1A5FA3E5129,K2Node_CallFunction_8 3A3C030840A593D2D379B2B716F271AB,K2Node_CallFunction_8 4466B24F480077A3458BF49C92FC9BAA,K2Node_CallFunction_8 F25B18164D6964B12DFEABADDB74919E,K2Node_CallFunction_8 71CB4433415AB77E32B1709BBD6573C4,K2Node_CallFunction_8 7AA02A024FF3C7D1429BE89272EB95A9,K2Node_CallFunction_8 4520C8C14542EBD0F7E6F49B25374A3A,K2Node_CallFunction_8 0D36352148C729A423CAD69546B499D3,K2Node_CallFunction_8 70B373F6489AD4ACF61A95BA7D172DA8,K2Node_CallFunction_8 70B601B342FDB51653A3069BE9ED80C1,K2Node_CallFunction_8 B0B9765C4B5539AC163A42B1C71EB743,K2Node_CallFunction_8 64F90D394DB9CA34EB4EA09AFF22C35B,K2Node_CallFunction_8 421966B241843C5AC06C179E9FDCBF59,K2Node_CallFunction_8 F2AC86054C34D620A396B48266CE6555,K2Node_CallFunction_8 C6128AA849ED10F1A91BB78A480187B4,K2Node_CallFunction_8 0624877E4E2FE8DEFAD2BB848F637811,),PersistentGuid=00000000000000000000000000000000,bHidden=True,bNotConnectable=False,bDefaultValueIsReadOnly=False,bDefaultValueIsIgnored=False,bAdvancedView=False,bOrphanedPin=False,) + CustomProperties Pin (PinId=D06FD3BB41F114BBF8C89DB38EAC0761,PinName="OutHit_bBlockingHit",PinFriendlyName=LOCGEN_FORMAT_NAMED(NSLOCTEXT("KismetSchema", "SplitPinFriendlyNameFormat", "{PinDisplayName} {ProtoPinDisplayName}"), "PinDisplayName", "Out Hit", "ProtoPinDisplayName", "Blocking Hit"),PinToolTip="Out Hit Blocking Hit\nBoolean",Direction="EGPD_Output",PinType.PinCategory="bool",PinType.PinSubCategory="",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,DefaultValue="false",AutogeneratedDefaultValue="false",ParentPin=K2Node_CallFunction_8 FE2B25154C824BB9EAF9E9A2ADA5943E,PersistentGuid=00000000000000000000000000000000,bHidden=False,bNotConnectable=False,bDefaultValueIsReadOnly=False,bDefaultValueIsIgnored=False,bAdvancedView=False,bOrphanedPin=False,) + CustomProperties Pin (PinId=B45FC53E42E98D2933D7A6A33722F4D8,PinName="OutHit_bInitialOverlap",PinFriendlyName=LOCGEN_FORMAT_NAMED(NSLOCTEXT("KismetSchema", "SplitPinFriendlyNameFormat", "{PinDisplayName} {ProtoPinDisplayName}"), "PinDisplayName", "Out Hit", "ProtoPinDisplayName", "Initial Overlap"),PinToolTip="Out Hit Initial Overlap\nBoolean",Direction="EGPD_Output",PinType.PinCategory="bool",PinType.PinSubCategory="",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,DefaultValue="false",AutogeneratedDefaultValue="false",ParentPin=K2Node_CallFunction_8 FE2B25154C824BB9EAF9E9A2ADA5943E,PersistentGuid=00000000000000000000000000000000,bHidden=False,bNotConnectable=False,bDefaultValueIsReadOnly=False,bDefaultValueIsIgnored=False,bAdvancedView=False,bOrphanedPin=False,) + CustomProperties Pin (PinId=4DB0E6CC46E5A3C80AC6C1A5FA3E5129,PinName="OutHit_Time",PinFriendlyName=LOCGEN_FORMAT_NAMED(NSLOCTEXT("KismetSchema", "SplitPinFriendlyNameFormat", "{PinDisplayName} {ProtoPinDisplayName}"), "PinDisplayName", "Out Hit", "ProtoPinDisplayName", "Time"),PinToolTip="Out Hit Time\nFloat (single-precision)",Direction="EGPD_Output",PinType.PinCategory="real",PinType.PinSubCategory="float",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,DefaultValue="0.0",AutogeneratedDefaultValue="0.0",ParentPin=K2Node_CallFunction_8 FE2B25154C824BB9EAF9E9A2ADA5943E,PersistentGuid=00000000000000000000000000000000,bHidden=False,bNotConnectable=False,bDefaultValueIsReadOnly=False,bDefaultValueIsIgnored=False,bAdvancedView=False,bOrphanedPin=False,) + CustomProperties Pin (PinId=3A3C030840A593D2D379B2B716F271AB,PinName="OutHit_Distance",PinFriendlyName=LOCGEN_FORMAT_NAMED(NSLOCTEXT("KismetSchema", "SplitPinFriendlyNameFormat", "{PinDisplayName} {ProtoPinDisplayName}"), "PinDisplayName", "Out Hit", "ProtoPinDisplayName", "Distance"),PinToolTip="Out Hit Distance\nFloat (single-precision)",Direction="EGPD_Output",PinType.PinCategory="real",PinType.PinSubCategory="float",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,DefaultValue="0.0",AutogeneratedDefaultValue="0.0",ParentPin=K2Node_CallFunction_8 FE2B25154C824BB9EAF9E9A2ADA5943E,PersistentGuid=00000000000000000000000000000000,bHidden=False,bNotConnectable=False,bDefaultValueIsReadOnly=False,bDefaultValueIsIgnored=False,bAdvancedView=False,bOrphanedPin=False,) + CustomProperties Pin (PinId=4466B24F480077A3458BF49C92FC9BAA,PinName="OutHit_Location",PinFriendlyName=LOCGEN_FORMAT_NAMED(NSLOCTEXT("KismetSchema", "SplitPinFriendlyNameFormat", "{PinDisplayName} {ProtoPinDisplayName}"), "PinDisplayName", "Out Hit", "ProtoPinDisplayName", "Location"),PinToolTip="Out Hit Location\nVector",Direction="EGPD_Output",PinType.PinCategory="struct",PinType.PinSubCategory="",PinType.PinSubCategoryObject=/Script/CoreUObject.ScriptStruct'"/Script/CoreUObject.Vector"',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, 0",AutogeneratedDefaultValue="0, 0, 0",ParentPin=K2Node_CallFunction_8 FE2B25154C824BB9EAF9E9A2ADA5943E,PersistentGuid=00000000000000000000000000000000,bHidden=False,bNotConnectable=False,bDefaultValueIsReadOnly=False,bDefaultValueIsIgnored=False,bAdvancedView=False,bOrphanedPin=False,) + CustomProperties Pin (PinId=F25B18164D6964B12DFEABADDB74919E,PinName="OutHit_ImpactPoint",PinFriendlyName=LOCGEN_FORMAT_NAMED(NSLOCTEXT("KismetSchema", "SplitPinFriendlyNameFormat", "{PinDisplayName} {ProtoPinDisplayName}"), "PinDisplayName", "Out Hit", "ProtoPinDisplayName", "Impact Point"),PinToolTip="Out Hit Impact Point\nVector",Direction="EGPD_Output",PinType.PinCategory="struct",PinType.PinSubCategory="",PinType.PinSubCategoryObject=/Script/CoreUObject.ScriptStruct'"/Script/CoreUObject.Vector"',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, 0",AutogeneratedDefaultValue="0, 0, 0",ParentPin=K2Node_CallFunction_8 FE2B25154C824BB9EAF9E9A2ADA5943E,PersistentGuid=00000000000000000000000000000000,bHidden=False,bNotConnectable=False,bDefaultValueIsReadOnly=False,bDefaultValueIsIgnored=False,bAdvancedView=False,bOrphanedPin=False,) + CustomProperties Pin (PinId=71CB4433415AB77E32B1709BBD6573C4,PinName="OutHit_Normal",PinFriendlyName=LOCGEN_FORMAT_NAMED(NSLOCTEXT("KismetSchema", "SplitPinFriendlyNameFormat", "{PinDisplayName} {ProtoPinDisplayName}"), "PinDisplayName", "Out Hit", "ProtoPinDisplayName", "Normal"),PinToolTip="Out Hit Normal\nVector",Direction="EGPD_Output",PinType.PinCategory="struct",PinType.PinSubCategory="",PinType.PinSubCategoryObject=/Script/CoreUObject.ScriptStruct'"/Script/CoreUObject.Vector"',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, 0",AutogeneratedDefaultValue="0, 0, 0",ParentPin=K2Node_CallFunction_8 FE2B25154C824BB9EAF9E9A2ADA5943E,PersistentGuid=00000000000000000000000000000000,bHidden=False,bNotConnectable=False,bDefaultValueIsReadOnly=False,bDefaultValueIsIgnored=False,bAdvancedView=False,bOrphanedPin=False,) + CustomProperties Pin (PinId=7AA02A024FF3C7D1429BE89272EB95A9,PinName="OutHit_ImpactNormal",PinFriendlyName=LOCGEN_FORMAT_NAMED(NSLOCTEXT("KismetSchema", "SplitPinFriendlyNameFormat", "{PinDisplayName} {ProtoPinDisplayName}"), "PinDisplayName", "Out Hit", "ProtoPinDisplayName", "Impact Normal"),PinToolTip="Out Hit Impact Normal\nVector",Direction="EGPD_Output",PinType.PinCategory="struct",PinType.PinSubCategory="",PinType.PinSubCategoryObject=/Script/CoreUObject.ScriptStruct'"/Script/CoreUObject.Vector"',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, 0",AutogeneratedDefaultValue="0, 0, 0",ParentPin=K2Node_CallFunction_8 FE2B25154C824BB9EAF9E9A2ADA5943E,PersistentGuid=00000000000000000000000000000000,bHidden=False,bNotConnectable=False,bDefaultValueIsReadOnly=False,bDefaultValueIsIgnored=False,bAdvancedView=False,bOrphanedPin=False,) + CustomProperties Pin (PinId=4520C8C14542EBD0F7E6F49B25374A3A,PinName="OutHit_PhysMat",PinFriendlyName=LOCGEN_FORMAT_NAMED(NSLOCTEXT("KismetSchema", "SplitPinFriendlyNameFormat", "{PinDisplayName} {ProtoPinDisplayName}"), "PinDisplayName", "Out Hit", "ProtoPinDisplayName", "Phys Mat"),PinToolTip="Out Hit Phys Mat\nPhysical Material Object Reference",Direction="EGPD_Output",PinType.PinCategory="object",PinType.PinSubCategory="",PinType.PinSubCategoryObject=/Script/CoreUObject.Class'"/Script/PhysicsCore.PhysicalMaterial"',PinType.PinSubCategoryMemberReference=(),PinType.PinValueType=(),PinType.ContainerType=None,PinType.bIsReference=False,PinType.bIsConst=False,PinType.bIsWeakPointer=False,PinType.bIsUObjectWrapper=False,PinType.bSerializeAsSinglePrecisionFloat=False,ParentPin=K2Node_CallFunction_8 FE2B25154C824BB9EAF9E9A2ADA5943E,PersistentGuid=00000000000000000000000000000000,bHidden=False,bNotConnectable=False,bDefaultValueIsReadOnly=False,bDefaultValueIsIgnored=False,bAdvancedView=False,bOrphanedPin=False,) + CustomProperties Pin (PinId=0D36352148C729A423CAD69546B499D3,PinName="OutHit_HitActor",PinFriendlyName=LOCGEN_FORMAT_NAMED(NSLOCTEXT("KismetSchema", "SplitPinFriendlyNameFormat", "{PinDisplayName} {ProtoPinDisplayName}"), "PinDisplayName", "Out Hit", "ProtoPinDisplayName", "Hit Actor"),PinToolTip="Out Hit Hit Actor\nActor Object Reference",Direction="EGPD_Output",PinType.PinCategory="object",PinType.PinSubCategory="",PinType.PinSubCategoryObject=/Script/CoreUObject.Class'"/Script/Engine.Actor"',PinType.PinSubCategoryMemberReference=(),PinType.PinValueType=(),PinType.ContainerType=None,PinType.bIsReference=False,PinType.bIsConst=False,PinType.bIsWeakPointer=False,PinType.bIsUObjectWrapper=False,PinType.bSerializeAsSinglePrecisionFloat=False,ParentPin=K2Node_CallFunction_8 FE2B25154C824BB9EAF9E9A2ADA5943E,PersistentGuid=00000000000000000000000000000000,bHidden=False,bNotConnectable=False,bDefaultValueIsReadOnly=False,bDefaultValueIsIgnored=False,bAdvancedView=False,bOrphanedPin=False,) + CustomProperties Pin (PinId=70B373F6489AD4ACF61A95BA7D172DA8,PinName="OutHit_HitComponent",PinFriendlyName=LOCGEN_FORMAT_NAMED(NSLOCTEXT("KismetSchema", "SplitPinFriendlyNameFormat", "{PinDisplayName} {ProtoPinDisplayName}"), "PinDisplayName", "Out Hit", "ProtoPinDisplayName", "Hit Component"),PinToolTip="Out Hit Hit Component\nPrimitive Component Object Reference",Direction="EGPD_Output",PinType.PinCategory="object",PinType.PinSubCategory="",PinType.PinSubCategoryObject=/Script/CoreUObject.Class'"/Script/Engine.PrimitiveComponent"',PinType.PinSubCategoryMemberReference=(),PinType.PinValueType=(),PinType.ContainerType=None,PinType.bIsReference=False,PinType.bIsConst=False,PinType.bIsWeakPointer=False,PinType.bIsUObjectWrapper=False,PinType.bSerializeAsSinglePrecisionFloat=False,ParentPin=K2Node_CallFunction_8 FE2B25154C824BB9EAF9E9A2ADA5943E,PersistentGuid=00000000000000000000000000000000,bHidden=False,bNotConnectable=False,bDefaultValueIsReadOnly=False,bDefaultValueIsIgnored=False,bAdvancedView=False,bOrphanedPin=False,) + CustomProperties Pin (PinId=70B601B342FDB51653A3069BE9ED80C1,PinName="OutHit_HitBoneName",PinFriendlyName=LOCGEN_FORMAT_NAMED(NSLOCTEXT("KismetSchema", "SplitPinFriendlyNameFormat", "{PinDisplayName} {ProtoPinDisplayName}"), "PinDisplayName", "Out Hit", "ProtoPinDisplayName", "Hit Bone Name"),PinToolTip="Out Hit Hit Bone Name\nName",Direction="EGPD_Output",PinType.PinCategory="name",PinType.PinSubCategory="",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,DefaultValue="None",AutogeneratedDefaultValue="None",ParentPin=K2Node_CallFunction_8 FE2B25154C824BB9EAF9E9A2ADA5943E,PersistentGuid=00000000000000000000000000000000,bHidden=False,bNotConnectable=False,bDefaultValueIsReadOnly=False,bDefaultValueIsIgnored=False,bAdvancedView=False,bOrphanedPin=False,) + CustomProperties Pin (PinId=B0B9765C4B5539AC163A42B1C71EB743,PinName="OutHit_BoneName",PinFriendlyName=LOCGEN_FORMAT_NAMED(NSLOCTEXT("KismetSchema", "SplitPinFriendlyNameFormat", "{PinDisplayName} {ProtoPinDisplayName}"), "PinDisplayName", "Out Hit", "ProtoPinDisplayName", "Bone Name"),PinToolTip="Out Hit Bone Name\nName",Direction="EGPD_Output",PinType.PinCategory="name",PinType.PinSubCategory="",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,DefaultValue="None",AutogeneratedDefaultValue="None",ParentPin=K2Node_CallFunction_8 FE2B25154C824BB9EAF9E9A2ADA5943E,PersistentGuid=00000000000000000000000000000000,bHidden=False,bNotConnectable=False,bDefaultValueIsReadOnly=False,bDefaultValueIsIgnored=False,bAdvancedView=False,bOrphanedPin=False,) + CustomProperties Pin (PinId=64F90D394DB9CA34EB4EA09AFF22C35B,PinName="OutHit_HitItem",PinFriendlyName=LOCGEN_FORMAT_NAMED(NSLOCTEXT("KismetSchema", "SplitPinFriendlyNameFormat", "{PinDisplayName} {ProtoPinDisplayName}"), "PinDisplayName", "Out Hit", "ProtoPinDisplayName", "Hit Item"),PinToolTip="Out Hit Hit Item\nInteger",Direction="EGPD_Output",PinType.PinCategory="int",PinType.PinSubCategory="",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,DefaultValue="0",AutogeneratedDefaultValue="0",ParentPin=K2Node_CallFunction_8 FE2B25154C824BB9EAF9E9A2ADA5943E,PersistentGuid=00000000000000000000000000000000,bHidden=False,bNotConnectable=False,bDefaultValueIsReadOnly=False,bDefaultValueIsIgnored=False,bAdvancedView=False,bOrphanedPin=False,) + CustomProperties Pin (PinId=421966B241843C5AC06C179E9FDCBF59,PinName="OutHit_ElementIndex",PinFriendlyName=LOCGEN_FORMAT_NAMED(NSLOCTEXT("KismetSchema", "SplitPinFriendlyNameFormat", "{PinDisplayName} {ProtoPinDisplayName}"), "PinDisplayName", "Out Hit", "ProtoPinDisplayName", "Element Index"),PinToolTip="Out Hit Element Index\nInteger",Direction="EGPD_Output",PinType.PinCategory="int",PinType.PinSubCategory="",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,DefaultValue="0",AutogeneratedDefaultValue="0",ParentPin=K2Node_CallFunction_8 FE2B25154C824BB9EAF9E9A2ADA5943E,PersistentGuid=00000000000000000000000000000000,bHidden=False,bNotConnectable=False,bDefaultValueIsReadOnly=False,bDefaultValueIsIgnored=False,bAdvancedView=False,bOrphanedPin=False,) + CustomProperties Pin (PinId=F2AC86054C34D620A396B48266CE6555,PinName="OutHit_FaceIndex",PinFriendlyName=LOCGEN_FORMAT_NAMED(NSLOCTEXT("KismetSchema", "SplitPinFriendlyNameFormat", "{PinDisplayName} {ProtoPinDisplayName}"), "PinDisplayName", "Out Hit", "ProtoPinDisplayName", "Face Index"),PinToolTip="Out Hit Face Index\nInteger",Direction="EGPD_Output",PinType.PinCategory="int",PinType.PinSubCategory="",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,DefaultValue="0",AutogeneratedDefaultValue="0",ParentPin=K2Node_CallFunction_8 FE2B25154C824BB9EAF9E9A2ADA5943E,PersistentGuid=00000000000000000000000000000000,bHidden=False,bNotConnectable=False,bDefaultValueIsReadOnly=False,bDefaultValueIsIgnored=False,bAdvancedView=False,bOrphanedPin=False,) + CustomProperties Pin (PinId=C6128AA849ED10F1A91BB78A480187B4,PinName="OutHit_TraceStart",PinFriendlyName=LOCGEN_FORMAT_NAMED(NSLOCTEXT("KismetSchema", "SplitPinFriendlyNameFormat", "{PinDisplayName} {ProtoPinDisplayName}"), "PinDisplayName", "Out Hit", "ProtoPinDisplayName", "Trace Start"),PinToolTip="Out Hit Trace Start\nVector",Direction="EGPD_Output",PinType.PinCategory="struct",PinType.PinSubCategory="",PinType.PinSubCategoryObject=/Script/CoreUObject.ScriptStruct'"/Script/CoreUObject.Vector"',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, 0",AutogeneratedDefaultValue="0, 0, 0",ParentPin=K2Node_CallFunction_8 FE2B25154C824BB9EAF9E9A2ADA5943E,PersistentGuid=00000000000000000000000000000000,bHidden=False,bNotConnectable=False,bDefaultValueIsReadOnly=False,bDefaultValueIsIgnored=False,bAdvancedView=False,bOrphanedPin=False,) + CustomProperties Pin (PinId=0624877E4E2FE8DEFAD2BB848F637811,PinName="OutHit_TraceEnd",PinFriendlyName=LOCGEN_FORMAT_NAMED(NSLOCTEXT("KismetSchema", "SplitPinFriendlyNameFormat", "{PinDisplayName} {ProtoPinDisplayName}"), "PinDisplayName", "Out Hit", "ProtoPinDisplayName", "Trace End"),PinToolTip="Out Hit Trace End\nVector",Direction="EGPD_Output",PinType.PinCategory="struct",PinType.PinSubCategory="",PinType.PinSubCategoryObject=/Script/CoreUObject.ScriptStruct'"/Script/CoreUObject.Vector"',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, 0",AutogeneratedDefaultValue="0, 0, 0",ParentPin=K2Node_CallFunction_8 FE2B25154C824BB9EAF9E9A2ADA5943E,PersistentGuid=00000000000000000000000000000000,bHidden=False,bNotConnectable=False,bDefaultValueIsReadOnly=False,bDefaultValueIsIgnored=False,bAdvancedView=False,bOrphanedPin=False,) + CustomProperties Pin (PinId=297204E248B1AE9336367F9F0A184BC8,PinName="bIgnoreSelf",PinToolTip="Ignore Self\nBoolean",PinType.PinCategory="bool",PinType.PinSubCategory="",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,DefaultValue="true",AutogeneratedDefaultValue="true",PersistentGuid=00000000000000000000000000000000,bHidden=False,bNotConnectable=False,bDefaultValueIsReadOnly=False,bDefaultValueIsIgnored=False,bAdvancedView=False,bOrphanedPin=False,) + CustomProperties Pin (PinId=DAB5394745AA51AAE6033EB7CCF1C095,PinName="TraceColor",PinToolTip="Trace Color\nLinear Color Structure",PinType.PinCategory="struct",PinType.PinSubCategory="",PinType.PinSubCategoryObject=/Script/CoreUObject.ScriptStruct'"/Script/CoreUObject.LinearColor"',PinType.PinSubCategoryMemberReference=(),PinType.PinValueType=(),PinType.ContainerType=None,PinType.bIsReference=False,PinType.bIsConst=False,PinType.bIsWeakPointer=False,PinType.bIsUObjectWrapper=False,PinType.bSerializeAsSinglePrecisionFloat=False,DefaultValue="(R=1.000000,G=0.000000,B=0.000000,A=1.000000)",AutogeneratedDefaultValue="(R=1.000000,G=0.000000,B=0.000000,A=1.000000)",PersistentGuid=00000000000000000000000000000000,bHidden=False,bNotConnectable=False,bDefaultValueIsReadOnly=False,bDefaultValueIsIgnored=False,bAdvancedView=True,bOrphanedPin=False,) + CustomProperties Pin (PinId=8CD5CC5E4F927E9CBBFF58B0872C0546,PinName="TraceHitColor",PinToolTip="Trace Hit Color\nLinear Color Structure",PinType.PinCategory="struct",PinType.PinSubCategory="",PinType.PinSubCategoryObject=/Script/CoreUObject.ScriptStruct'"/Script/CoreUObject.LinearColor"',PinType.PinSubCategoryMemberReference=(),PinType.PinValueType=(),PinType.ContainerType=None,PinType.bIsReference=False,PinType.bIsConst=False,PinType.bIsWeakPointer=False,PinType.bIsUObjectWrapper=False,PinType.bSerializeAsSinglePrecisionFloat=False,DefaultValue="(R=0.000000,G=1.000000,B=0.000000,A=1.000000)",AutogeneratedDefaultValue="(R=0.000000,G=1.000000,B=0.000000,A=1.000000)",PersistentGuid=00000000000000000000000000000000,bHidden=False,bNotConnectable=False,bDefaultValueIsReadOnly=False,bDefaultValueIsIgnored=False,bAdvancedView=True,bOrphanedPin=False,) + CustomProperties Pin (PinId=FB76ED6F40844C82A75DA4A4A5A73820,PinName="DrawTime",PinToolTip="Draw Time\nFloat (single-precision)",PinType.PinCategory="real",PinType.PinSubCategory="float",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,DefaultValue="5.000000",AutogeneratedDefaultValue="5.000000",PersistentGuid=00000000000000000000000000000000,bHidden=False,bNotConnectable=False,bDefaultValueIsReadOnly=False,bDefaultValueIsIgnored=False,bAdvancedView=True,bOrphanedPin=False,) + CustomProperties Pin (PinId=54F6EF174A02D88C99CAFFBCF1E05B6E,PinName="ReturnValue",PinToolTip="Return Value\nBoolean\n\nTrue if there was a hit, false otherwise.",Direction="EGPD_Output",PinType.PinCategory="bool",PinType.PinSubCategory="",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,DefaultValue="false",AutogeneratedDefaultValue="false",PersistentGuid=00000000000000000000000000000000,bHidden=False,bNotConnectable=False,bDefaultValueIsReadOnly=False,bDefaultValueIsIgnored=False,bAdvancedView=False,bOrphanedPin=False,) + End Object + `, + color: Configuration.nodeColors.blue, + icon: SVGIcon.functionSymbol, + pins: 31, + pinNames: [ + "Start", + "End", + "Object Types", + "Trace Complex", + "Actors to Ignore", + "Draw Debug Type", + "Ignore Self", + "Trace Color", + "Trace Hit Color", + "Draw Time", + "Out Hit Blocking Hit", + "Out Hit Initial Overlap", + "Out Hit Time", + "Out Hit Distance", + "Out Hit Location", + "Out Hit Impact Point", + "Out Hit Normal", + "Out Hit Impact Normal", + "Out Hit Phys Mat", + "Out Hit Hit Actor", + "Out Hit Hit Component", + "Out Hit Hit Bone Name", + "Out Hit Bone Name", + "Out Hit Hit Item", + "Out Hit Element Index", + "Out Hit Face Index", + "Out Hit Trace Start", + "Out Hit Trace End", + "Return Value", + ], + delegate: false, + development: false, + }, + { + name: "Timeline", + value: String.raw` + Begin Object Class=/Script/BlueprintGraph.K2Node_Timeline Name="K2Node_Timeline_0" + TimelineName="Timeline" + TimelineGuid=5A2932A3D7004616A4F233DB24D4E31F + NodePosX=-1136 + NodePosY=-464 + bCanRenameNode=True + NodeGuid=FAA474FEEE534CAB9F8E0828CDE95892 + CustomProperties Pin (PinId=73D6A2B467F9472C8069BAB3E3245EE0,PinName="Play",PinType.PinCategory="exec",PinType.PinSubCategory="",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,) + CustomProperties Pin (PinId=A65D68F22BC7446998845F65C262B4AA,PinName="PlayFromStart",PinType.PinCategory="exec",PinType.PinSubCategory="",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,) + CustomProperties Pin (PinId=D1CF97026F034CF3A79C6E6F90C348BA,PinName="Stop",PinType.PinCategory="exec",PinType.PinSubCategory="",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,) + CustomProperties Pin (PinId=16A43012A9A14EB2B917962FD24731A7,PinName="Reverse",PinType.PinCategory="exec",PinType.PinSubCategory="",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,) + CustomProperties Pin (PinId=74C2E50D186D4230B6ED2327D08FDA34,PinName="ReverseFromEnd",PinType.PinCategory="exec",PinType.PinSubCategory="",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,) + CustomProperties Pin (PinId=434043688FB5451293945CA3C0E2D202,PinName="Update",Direction="EGPD_Output",PinType.PinCategory="exec",PinType.PinSubCategory="",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,LinkedTo=(K2Node_CallFunction_35 585A3CD5A0BA42569102B28820988070,),PersistentGuid=00000000000000000000000000000000,bHidden=False,bNotConnectable=False,bDefaultValueIsReadOnly=False,bDefaultValueIsIgnored=False,bAdvancedView=False,bOrphanedPin=False,) + CustomProperties Pin (PinId=296FA705872C4598BD613C68751387E3,PinName="Finished",Direction="EGPD_Output",PinType.PinCategory="exec",PinType.PinSubCategory="",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,) + CustomProperties Pin (PinId=95467DD3FD76493FB981FCD2B8287EA7,PinName="SetNewTime",PinType.PinCategory="exec",PinType.PinSubCategory="",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,) + CustomProperties Pin (PinId=48F9B48502CC484CA433FB1497A341E0,PinName="NewTime",PinType.PinCategory="real",PinType.PinSubCategory="float",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,DefaultValue="0.0",AutogeneratedDefaultValue="0.0",PersistentGuid=00000000000000000000000000000000,bHidden=False,bNotConnectable=False,bDefaultValueIsReadOnly=False,bDefaultValueIsIgnored=False,bAdvancedView=False,bOrphanedPin=False,) + CustomProperties Pin (PinId=5B2BC8D35A154CCE87AEA274C4CACED6,PinName="Direction",Direction="EGPD_Output",PinType.PinCategory="byte",PinType.PinSubCategory="",PinType.PinSubCategoryObject=/Script/CoreUObject.Enum'"/Script/Engine.ETimelineDirection"',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 + `, + color: Configuration.nodeColors.yellow, + icon: SVGIcon.timer, + pins: 10, + pinNames: [ + "Play", + "Play From Start", // No info in the graph that "from" is lower case + "Stop", + "Reverse", + "Reverse From End", // No info in the graph that "from" is lower case + "Set New Time", + "New Time", + "Update", + "Finished", + "Direction", + ], + delegate: false, + development: false, + }, + { + name: "Construction Script", + value: String.raw` + Begin Object Class=/Script/BlueprintGraph.K2Node_FunctionEntry Name="K2Node_FunctionEntry_11" + bEnforceConstCorrectness=False + FunctionReference=(MemberParent=/Script/CoreUObject.Class'"/Script/Engine.Actor"',MemberName="UserConstructionScript") + NodePosX=16 + NodePosY=-32 + NodeGuid=521B69F742A30F8EA5B92B8CC131AB54 + CustomProperties Pin (PinId=DE073CBD9EE44F4AA43C9BE239BBCB33,PinName="then",Direction="EGPD_Output",PinType.PinCategory="exec",PinType.PinSubCategory="",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,LinkedTo=(K2Node_CallFunction_4248 064F1F38F42D43ADA53BC41AFC6FBE9F,),PersistentGuid=00000000000000000000000000000000,bHidden=False,bNotConnectable=False,bDefaultValueIsReadOnly=False,bDefaultValueIsIgnored=False,bAdvancedView=False,bOrphanedPin=False,) + End Object + `, + color: Configuration.nodeColors.violet, + icon: SVGIcon.node, + pins: 1, + delegate: false, + development: false, + }, + { + name: "Set Relative Rotation", + subtitle: "Target is Scene Component", + value: String.raw` + Begin Object Class=/Script/BlueprintGraph.K2Node_CallFunction Name="K2Node_CallFunction_5" ExportPath=/Script/BlueprintGraph.K2Node_CallFunction'"/Temp/Untitled_1.Untitled_1:PersistentLevel.Untitled.EventGraph.K2Node_CallFunction_5"' + FunctionReference=(MemberParent=/Script/CoreUObject.Class'"/Script/Engine.SceneComponent"',MemberName="K2_SetRelativeRotation") + NodePosX=512 + NodePosY=-48 + AdvancedPinDisplay=Hidden + NodeGuid=2140E0AA9D8F4C5FB89F5CA378A9B56D + CustomProperties Pin (PinId=C347AFEE7AFC4848A63B99FF6167F73F,PinName="execute",PinToolTip="\nExec",PinType.PinCategory="exec",PinType.PinSubCategory="",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,) + CustomProperties Pin (PinId=F3E0EED07DD54370A2DA0FD76353286B,PinName="then",PinToolTip="\nExec",Direction="EGPD_Output",PinType.PinCategory="exec",PinType.PinSubCategory="",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,) + CustomProperties Pin (PinId=7EB45B16ED954F929722FBCD91A187A8,PinName="self",PinFriendlyName=NSLOCTEXT("K2Node", "Target", "Target"),PinToolTip="Target\nScene Component Object Reference",PinType.PinCategory="object",PinType.PinSubCategory="",PinType.PinSubCategoryObject=/Script/CoreUObject.Class'"/Script/Engine.SceneComponent"',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=AE73B4E46A094DD788D04725FD7C6DF9,PinName="NewRotation",PinToolTip="New Rotation\nRotator\n\nNew rotation of the component relative to its parent",PinType.PinCategory="struct",PinType.PinSubCategory="",PinType.PinSubCategoryObject=/Script/CoreUObject.ScriptStruct'"/Script/CoreUObject.Rotator"',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, 0",AutogeneratedDefaultValue="0, 0, 0",SubPins=(K2Node_CallFunction_5 F82B6140AD50485E8955369B735BC627,K2Node_CallFunction_5 0A417B3EA3074164B7DC605B7F85AF05,K2Node_CallFunction_5 8539DDEA84C24BE48F9D84B629FEA410,),PersistentGuid=00000000000000000000000000000000,bHidden=True,bNotConnectable=False,bDefaultValueIsReadOnly=False,bDefaultValueIsIgnored=False,bAdvancedView=False,bOrphanedPin=False,) + CustomProperties Pin (PinId=F82B6140AD50485E8955369B735BC627,PinName="NewRotation_Roll",PinFriendlyName=LOCGEN_FORMAT_NAMED(NSLOCTEXT("KismetSchema", "SplitPinFriendlyNameFormat", "{PinDisplayName} {ProtoPinDisplayName}"), "PinDisplayName", NSLOCTEXT("", "8F133E70437642249A31E409DD1E3852", "New Rotation"), "ProtoPinDisplayName", NSLOCTEXT("", "751A9C34B79E4E7F94E2F02DB922AFCE", "X (Roll)")),PinType.PinCategory="real",PinType.PinSubCategory="float",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,DefaultValue="0.0",AutogeneratedDefaultValue="0.0",ParentPin=K2Node_CallFunction_5 AE73B4E46A094DD788D04725FD7C6DF9,PersistentGuid=00000000000000000000000000000000,bHidden=False,bNotConnectable=False,bDefaultValueIsReadOnly=False,bDefaultValueIsIgnored=False,bAdvancedView=False,bOrphanedPin=False,) + CustomProperties Pin (PinId=0A417B3EA3074164B7DC605B7F85AF05,PinName="NewRotation_Pitch",PinFriendlyName=LOCGEN_FORMAT_NAMED(NSLOCTEXT("KismetSchema", "SplitPinFriendlyNameFormat", "{PinDisplayName} {ProtoPinDisplayName}"), "PinDisplayName", NSLOCTEXT("", "26BC4556F421494A8E68A42D38A23EF1", "New Rotation"), "ProtoPinDisplayName", NSLOCTEXT("", "105B6B68DAF74E6CAD83079F9E795ECF", "Y (Pitch)")),PinType.PinCategory="real",PinType.PinSubCategory="float",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,DefaultValue="0.0",AutogeneratedDefaultValue="0.0",ParentPin=K2Node_CallFunction_5 AE73B4E46A094DD788D04725FD7C6DF9,PersistentGuid=00000000000000000000000000000000,bHidden=False,bNotConnectable=False,bDefaultValueIsReadOnly=False,bDefaultValueIsIgnored=False,bAdvancedView=False,bOrphanedPin=False,) + CustomProperties Pin (PinId=8539DDEA84C24BE48F9D84B629FEA410,PinName="NewRotation_Yaw",PinFriendlyName=LOCGEN_FORMAT_NAMED(NSLOCTEXT("KismetSchema", "SplitPinFriendlyNameFormat", "{PinDisplayName} {ProtoPinDisplayName}"), "PinDisplayName", NSLOCTEXT("", "DE7AB5AB52D84405922E28EE72ABBB26", "New Rotation"), "ProtoPinDisplayName", NSLOCTEXT("", "1462F96F7C0B4D68B082EBA02E99F1EC", "Z (Yaw)")),PinType.PinCategory="real",PinType.PinSubCategory="float",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,DefaultValue="0.0",AutogeneratedDefaultValue="0.0",ParentPin=K2Node_CallFunction_5 AE73B4E46A094DD788D04725FD7C6DF9,PersistentGuid=00000000000000000000000000000000,bHidden=False,bNotConnectable=False,bDefaultValueIsReadOnly=False,bDefaultValueIsIgnored=False,bAdvancedView=False,bOrphanedPin=False,) + CustomProperties Pin (PinId=E9652915F52D465E993222AC59ABBEDF,PinName="bSweep",PinToolTip="Sweep\nBoolean\n\nWhether we sweep to the destination (currently not supported for rotation).",PinType.PinCategory="bool",PinType.PinSubCategory="",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,DefaultValue="false",AutogeneratedDefaultValue="false",PersistentGuid=00000000000000000000000000000000,bHidden=False,bNotConnectable=False,bDefaultValueIsReadOnly=False,bDefaultValueIsIgnored=False,bAdvancedView=True,bOrphanedPin=False,) + CustomProperties Pin (PinId=3EE87DFBA5AB473F93F003AC9F8A2DED,PinName="SweepHitResult",PinToolTip="Sweep Hit Result\nHit Result Structure\n\nHit result from any impact if sweep is true.",Direction="EGPD_Output",PinType.PinCategory="struct",PinType.PinSubCategory="",PinType.PinSubCategoryObject=/Script/CoreUObject.ScriptStruct'"/Script/Engine.HitResult"',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=True,bOrphanedPin=False,) + CustomProperties Pin (PinId=649255CFBCB9480E8DC1AA214F9FCE6B,PinName="bTeleport",PinToolTip="Teleport\nBoolean\n\nWhether we teleport the physics state (if physics collision is enabled for this object). If true, physics velocity for this object is unchanged (so ragdoll parts are not affected by change in location). If false, physics velocity is updated based on the change in position (affecting ragdoll parts).",PinType.PinCategory="bool",PinType.PinSubCategory="",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,DefaultValue="false",AutogeneratedDefaultValue="false",PersistentGuid=00000000000000000000000000000000,bHidden=False,bNotConnectable=False,bDefaultValueIsReadOnly=False,bDefaultValueIsIgnored=False,bAdvancedView=True,bOrphanedPin=False,) + End Object + `, + size: [15, 16.5], + color: Configuration.nodeColors.blue, + icon: SVGIcon.functionSymbol, + pins: 9, + pinNames: [ + "Target", + "New Rotation X (Roll)", + "New Rotation Y (Pitch)", + "New Rotation Z (Yaw)", + "Sweep", + "Teleport", + "Sweep Hit Result", + ], + delegate: false, + development: false, + }, + { + name: "Async Change Bundle State For Matching Primary Assets", + value: String.raw` + Begin Object Class=/Script/BlueprintGraph.K2Node_AsyncAction Name="K2Node_AsyncAction_0" ExportPath=/Script/BlueprintGraph.K2Node_AsyncAction'"/Temp/Untitled_1.Untitled_1:PersistentLevel.Untitled.EventGraph.K2Node_AsyncAction_0"' + ProxyFactoryFunctionName="AsyncChangeBundleStateForMatchingPrimaryAssets" + ProxyFactoryClass=/Script/CoreUObject.Class'"/Script/Engine.AsyncActionChangePrimaryAssetBundles"' + ProxyClass=/Script/CoreUObject.Class'"/Script/Engine.AsyncActionChangePrimaryAssetBundles"' + NodePosX=-384 + NodePosY=-1152 + NodeGuid=BE2398EE906341DFBF4027C551933479 + CustomProperties Pin (PinId=0ADB80D7303A4B70A271609DEF026A74,PinName="execute",PinToolTip="\nExec",PinType.PinCategory="exec",PinType.PinSubCategory="",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,) + CustomProperties Pin (PinId=982E6A6405014809B46CA263AA26EBE3,PinName="then",Direction="EGPD_Output",PinType.PinCategory="exec",PinType.PinSubCategory="",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,) + CustomProperties Pin (PinId=58B7B76B29454FAD99B90931BD676CAB,PinName="Completed",PinFriendlyName=NSLOCTEXT("UObjectDisplayNames", "AsyncActionChangePrimaryAssetBundles:Completed", "Completed"),Direction="EGPD_Output",PinType.PinCategory="exec",PinType.PinSubCategory="",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,) + CustomProperties Pin (PinId=FD58E0E4210D4714AFB0A5D049BF57D0,PinName="WorldContextObject",PinToolTip="World Context Object\nObject Reference",PinType.PinCategory="object",PinType.PinSubCategory="",PinType.PinSubCategoryObject=/Script/CoreUObject.Class'"/Script/CoreUObject.Object"',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=True,bNotConnectable=False,bDefaultValueIsReadOnly=False,bDefaultValueIsIgnored=False,bAdvancedView=False,bOrphanedPin=False,) + CustomProperties Pin (PinId=C97FE20A5B2D450CA45CE0313CF86D19,PinName="NewBundles",PinToolTip="New Bundles\nArray of Names",PinType.PinCategory="name",PinType.PinSubCategory="",PinType.PinSubCategoryObject=None,PinType.PinSubCategoryMemberReference=(),PinType.PinValueType=(),PinType.ContainerType=Array,PinType.bIsReference=True,PinType.bIsConst=True,PinType.bIsWeakPointer=False,PinType.bIsUObjectWrapper=False,PinType.bSerializeAsSinglePrecisionFloat=False,PersistentGuid=00000000000000000000000000000000,bHidden=False,bNotConnectable=False,bDefaultValueIsReadOnly=False,bDefaultValueIsIgnored=True,bAdvancedView=False,bOrphanedPin=False,) + CustomProperties Pin (PinId=94C2A7BB42E8416B8F275FC59D536272,PinName="OldBundles",PinToolTip="Old Bundles\nArray of Names",PinType.PinCategory="name",PinType.PinSubCategory="",PinType.PinSubCategoryObject=None,PinType.PinSubCategoryMemberReference=(),PinType.PinValueType=(),PinType.ContainerType=Array,PinType.bIsReference=True,PinType.bIsConst=True,PinType.bIsWeakPointer=False,PinType.bIsUObjectWrapper=False,PinType.bSerializeAsSinglePrecisionFloat=False,PersistentGuid=00000000000000000000000000000000,bHidden=False,bNotConnectable=False,bDefaultValueIsReadOnly=False,bDefaultValueIsIgnored=True,bAdvancedView=False,bOrphanedPin=False,) + End Object + `, + size: [24.5, 7.5], + color: Configuration.nodeColors.blue, + icon: SVGIcon.node, + pins: 5, + pinNames: ["New Bundles", "Old Bundles", "Completed"], + delegate: false, + development: false, + }, + { + name: "Make Some_§-AStruct", + value: String.raw` + Begin Object Class=/Script/BlueprintGraph.K2Node_MakeStruct Name="K2Node_MakeStruct_1" ExportPath=/Script/BlueprintGraph.K2Node_MakeStruct'"/Temp/Untitled_1.Untitled_1:PersistentLevel.Untitled.EventGraph.K2Node_MakeStruct_1"' + "bMadeAfterOverridePinRemoval"=True + "ShowPinForProperties"(0)=(PropertyName="FirstVariable_1_13DD7A0E491E619509C7408F7D8C4071",PropertyFriendlyName="First.Variable",bShowPin=True,bCanToggleVisibility=True) + "ShowPinForProperties"(1)=(PropertyName="Second-Variable_5_B897B051478F270D20FF29B3BC3B5A8C",PropertyFriendlyName="Second-Variable",bShowPin=True,bCanToggleVisibility=True) + "StructType"=/Script/Engine.UserDefinedStruct'"/Game/StarterContent/Blueprints/Some_§-AStruct.Some_§-AStruct"' + "NodePosX"=384 + "NodePosY"=144 + "NodeGuid"=118962B441E9282349A21EA43ADEE816 + CustomProperties Pin (PinId=3DD8E64049B1CD7AF21517B9C9C0E52E,PinName="Some_§-AStruct",Direction="EGPD_Output",PinType.PinCategory="struct",PinType.PinSubCategory="",PinType.PinSubCategoryObject=/Script/Engine.UserDefinedStruct'"/Game/StarterContent/Blueprints/Some_§-AStruct.Some_§-AStruct"',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=97BAE50C41A8924F13A6E9B6EB9F83C8,PinName="FirstVariable_1_13DD7A0E491E619509C7408F7D8C4071",PinFriendlyName="First.Variable",PinToolTip="First. Variable\nBoolean",PinType.PinCategory="bool",PinType.PinSubCategory="",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,DefaultValue="False",AutogeneratedDefaultValue="False",PersistentGuid=13DD7A0E491E619509C7408F7D8C4071,bHidden=False,bNotConnectable=False,bDefaultValueIsReadOnly=False,bDefaultValueIsIgnored=False,bAdvancedView=False,bOrphanedPin=False,) + CustomProperties Pin (PinId=94B8DE014A527EBDC91E48A6E95D8D2E,PinName="Second-Variable_5_B897B051478F270D20FF29B3BC3B5A8C",PinFriendlyName="Second-Variable",PinToolTip="Second- Variable\nArray of Transforms",PinType.PinCategory="struct",PinType.PinSubCategory="",PinType.PinSubCategoryObject=/Script/CoreUObject.ScriptStruct'"/Script/CoreUObject.Transform"',PinType.PinSubCategoryMemberReference=(),PinType.PinValueType=(),PinType.ContainerType=Array,PinType.bIsReference=False,PinType.bIsConst=False,PinType.bIsWeakPointer=False,PinType.bIsUObjectWrapper=False,PinType.bSerializeAsSinglePrecisionFloat=False,PersistentGuid=B897B051478F270D20FF29B3BC3B5A8C,bHidden=False,bNotConnectable=False,bDefaultValueIsReadOnly=False,bDefaultValueIsIgnored=True,bAdvancedView=False,bOrphanedPin=False,) + End Object + `, + size: [17.5, 6], + color: Configuration.nodeColors.darkBlue, + icon: SVGIcon.makeStruct, + pins: 3, + pinNames: ["First.Variable", "Second-Variable", "Some_§-AStruct"], + delegate: false, + development: false, + }, + ]) + } +} diff --git a/tests/resources/PCGNodes.js b/tests/resources/PCGNodes.js new file mode 100644 index 0000000..e2dfb22 --- /dev/null +++ b/tests/resources/PCGNodes.js @@ -0,0 +1,97 @@ +import { expect } from "../fixtures/test.js" +import Configuration from "../../js/Configuration.js" +import NodeTests from "./NodeTests.js" +import SVGIcon from "../../js/SVGIcon.js" + +export default class PCGNodes extends NodeTests { + static { + this.set([ + { + name: "Execute Blueprint", + value: String.raw` + Begin Object Class=/Script/PCGEditor.PCGEditorGraphNode Name="PCGEditorGraphNode_2" ExportPath=/Script/PCGEditor.PCGEditorGraphNode'"/Game/NewPCGGraph.NewPCGGraph:PCGEditorGraph_1.PCGEditorGraphNode_2"' + Begin Object Class=/Script/PCG.PCGNode Name="ExecuteBlueprint_7" ExportPath=/Script/PCG.PCGNode'"/Game/NewPCGGraph.NewPCGGraph:PCGEditorGraph_1.PCGEditorGraphNode_2.ExecuteBlueprint_7"' + Begin Object Class=/Script/PCG.PCGBlueprintSettings Name="PCGBlueprintSettings_0" ExportPath=/Script/PCG.PCGBlueprintSettings'"/Game/NewPCGGraph.NewPCGGraph:PCGEditorGraph_1.PCGEditorGraphNode_2.ExecuteBlueprint_7.PCGBlueprintSettings_0"' + End Object + Begin Object Class=/Script/PCG.PCGPin Name="PCGPin_0" ExportPath=/Script/PCG.PCGPin'"/Game/NewPCGGraph.NewPCGGraph:PCGEditorGraph_1.PCGEditorGraphNode_2.ExecuteBlueprint_7.PCGPin_0"' + End Object + Begin Object Class=/Script/PCG.PCGPin Name="PCGPin_1" ExportPath=/Script/PCG.PCGPin'"/Game/NewPCGGraph.NewPCGGraph:PCGEditorGraph_1.PCGEditorGraphNode_2.ExecuteBlueprint_7.PCGPin_1"' + End Object + Begin Object Class=/Script/PCG.PCGPin Name="PCGPin_2" ExportPath=/Script/PCG.PCGPin'"/Game/NewPCGGraph.NewPCGGraph:PCGEditorGraph_1.PCGEditorGraphNode_2.ExecuteBlueprint_7.PCGPin_2"' + End Object + Begin Object Class=/Script/PCG.PCGPin Name="PCGPin_3" ExportPath=/Script/PCG.PCGPin'"/Game/NewPCGGraph.NewPCGGraph:PCGEditorGraph_1.PCGEditorGraphNode_2.ExecuteBlueprint_7.PCGPin_3"' + End Object + End Object + Begin Object Name="ExecuteBlueprint_7" ExportPath=/Script/PCG.PCGNode'"/Game/NewPCGGraph.NewPCGGraph:PCGEditorGraph_1.PCGEditorGraphNode_2.ExecuteBlueprint_7"' + Begin Object Name="PCGBlueprintSettings_0" ExportPath=/Script/PCG.PCGBlueprintSettings'"/Game/NewPCGGraph.NewPCGGraph:PCGEditorGraph_1.PCGEditorGraphNode_2.ExecuteBlueprint_7.PCGBlueprintSettings_0"' + "Seed"=-1282097489 + "bExposeToLibrary"=False + "CachedOverridableParams"(0)=(Label="Seed",PropertiesNames=("Seed"),PropertyClass=/Script/CoreUObject.Class'"/Script/PCG.PCGBlueprintSettings"') + End Object + Begin Object Name="PCGPin_0" ExportPath=/Script/PCG.PCGPin'"/Game/NewPCGGraph.NewPCGGraph:PCGEditorGraph_1.PCGEditorGraphNode_2.ExecuteBlueprint_7.PCGPin_0"' + "Node"=/Script/PCG.PCGNode'"PCGEditorGraphNode_2.ExecuteBlueprint_7"' + "Properties"=(Label="In") + End Object + Begin Object Name="PCGPin_1" ExportPath=/Script/PCG.PCGPin'"/Game/NewPCGGraph.NewPCGGraph:PCGEditorGraph_1.PCGEditorGraphNode_2.ExecuteBlueprint_7.PCGPin_1"' + "Node"=/Script/PCG.PCGNode'"PCGEditorGraphNode_2.ExecuteBlueprint_7"' + "Properties"=(Label="Overrides",AllowedTypes=Param,bAdvancedPin=True,Tooltip=NSLOCTEXT("PCGSettings", "GlobalParamPinTooltip", "Atribute Set containing multiple parameters to override. Names must match perfectly.")) + End Object + Begin Object Name="PCGPin_2" ExportPath=/Script/PCG.PCGPin'"/Game/NewPCGGraph.NewPCGGraph:PCGEditorGraph_1.PCGEditorGraphNode_2.ExecuteBlueprint_7.PCGPin_2"' + "Node"=/Script/PCG.PCGNode'"PCGEditorGraphNode_2.ExecuteBlueprint_7"' + "Properties"=(Label="Seed",AllowedTypes=Param,bAllowMultipleData=False,bAllowMultipleConnections=False,bAdvancedPin=True,Tooltip=LOCGEN_FORMAT_ORDERED(NSLOCTEXT("PCGSettings", "OverridableParamPinTooltip", "{0}Attribute type is \"{1}\" and its exact name is \"{2}\""), "", "int32", "Seed")) + End Object + Begin Object Name="PCGPin_3" ExportPath=/Script/PCG.PCGPin'"/Game/NewPCGGraph.NewPCGGraph:PCGEditorGraph_1.PCGEditorGraphNode_2.ExecuteBlueprint_7.PCGPin_3"' + "Node"=/Script/PCG.PCGNode'"PCGEditorGraphNode_2.ExecuteBlueprint_7"' + "Properties"=(Label="Out",AllowedTypes=Spatial) + End Object + "PositionX"=768 + "PositionY"=128 + "SettingsInterface"=/Script/PCG.PCGBlueprintSettings'"PCGBlueprintSettings_0"' + "InputPins"(0)=/Script/PCG.PCGPin'"PCGPin_0"' + "InputPins"(1)=/Script/PCG.PCGPin'"PCGPin_1"' + "InputPins"(2)=/Script/PCG.PCGPin'"PCGPin_2"' + "OutputPins"(0)=/Script/PCG.PCGPin'"PCGPin_3"' + End Object + "PCGNode"=/Script/PCG.PCGNode'"ExecuteBlueprint_7"' + "NodePosX"=768 + "NodePosY"=128 + "AdvancedPinDisplay"=Shown + "bUserSetEnabledState"=True + "NodeGuid"=510EDA9C48C94C29D834BDBC2E6698A5 + CustomProperties Pin (PinId=84EFEAC94F4D8F7B54DBA39777ACE90B,PinName="In",PinFriendlyName="In",PinType.PinCategory="",PinType.PinSubCategory="",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,) + CustomProperties Pin (PinId=14D4F997473AFF411CEB30824798BF16,PinName="Overrides",PinFriendlyName="Overrides",PinType.PinCategory="Attribute Set",PinType.PinSubCategory="",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=True,bOrphanedPin=False,) + CustomProperties Pin (PinId=B534894344C992A0A4DA798A15D1C438,PinName="Seed",PinFriendlyName="Seed",PinType.PinCategory="Attribute Set",PinType.PinSubCategory="",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=True,bOrphanedPin=False,) + CustomProperties Pin (PinId=A6E46EE44272FFAB9F2E1B944ADC28CB,PinName="Out",PinFriendlyName="Out",Direction="EGPD_Output",PinType.PinCategory="Spatial Data",PinType.PinSubCategory="",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: [10, 9], + pins: 4, + pinNames: ["In", "Overrides", "Seed", "Out"], + delegate: false, + development: false, + additionalTest: async node => { + /** @type {Locator} */ + const inPin = node.locator('ueb-pin:has-text("In")') + /** @type {Locator} */ + const overridesPin = node.locator('ueb-pin:has-text("Overrides")') + /** @type {Locator} */ + const seedPin = node.locator('ueb-pin:has-text("Seed")') + /** @type {Locator} */ + const outPin = node.locator('ueb-pin:has-text("Out")') + await expect(inPin).toBeVisible() + await expect(overridesPin).toBeVisible() + await expect(seedPin).toBeVisible() + await expect(outPin).toBeVisible() + expect(await inPin.evaluate(pin => pin.template.renderIcon().strings.join(""))) + .toEqual(SVGIcon.pcgStackPin.strings.join("")) + expect(await overridesPin.evaluate(pin => pin.template.renderIcon().strings.join(""))) + .toEqual(SVGIcon.pcgParamPin.strings.join("")) + expect(await seedPin.evaluate(pin => pin.template.renderIcon().strings.join(""))) + .toEqual(SVGIcon.pcgParamPin.strings.join("")) + expect(await outPin.evaluate(pin => pin.template.renderIcon().strings.join(""))) + .toEqual(SVGIcon.pcgSpatialPin.strings.join("")) + } + }, + ]) + } +} diff --git a/cypress/fixtures/serializedEntity2.js b/tests/resources/serializedEntity2.js similarity index 100% rename from cypress/fixtures/serializedEntity2.js rename to tests/resources/serializedEntity2.js diff --git a/cypress/fixtures/serializedEntity3.js b/tests/resources/serializedEntity3.js similarity index 97% rename from cypress/fixtures/serializedEntity3.js rename to tests/resources/serializedEntity3.js index 202175f..7239bfe 100644 --- a/cypress/fixtures/serializedEntity3.js +++ b/tests/resources/serializedEntity3.js @@ -14,6 +14,7 @@ export default `[[ november: 0 oscar: Entity1(a=8, b=9) papa: Entity1(a=12, b=13) + quebec: 6 romeo.a: 8 romeo.b: 9 sierra.someNumber: 567 diff --git a/cypress/fixtures/serializedEntity4.js b/tests/resources/serializedEntity4.js similarity index 82% rename from cypress/fixtures/serializedEntity4.js rename to tests/resources/serializedEntity4.js index 9a67fd1..2c7320d 100644 --- a/cypress/fixtures/serializedEntity4.js +++ b/tests/resources/serializedEntity4.js @@ -12,8 +12,8 @@ export default `Begin \${first.kilo} => (True,False,False,True,True,) \${first.mike} => "Bar" \${first.november} => 0 - \${first.oscar} => Entity1(a=8, b=9) - \${first.papa} => Entity1(a=12, b=13) + \${first.oscar} => E1[A:8 - B:9] + \${first.papa} => E1[A:12 - B:13] \${first.romeo.a} => 8 \${first.romeo.b} => 9 \${first.sierra.someNumber} => 567 @@ -23,8 +23,8 @@ export default `Begin \${first.sierra.someBoolean2} => False \${first.sierra.someObjectString} => "gamma" \${first.sierra.someArray} => (400,500,600,700,800,) - \${first.sierra.someEntity} => Entity1(a=8, b=9) + \${first.sierra.someEntity} => E1[A:8 - B:9] \${second(0).a} => 1 \${second(0).b} => 2 - \${second(1)} => Entity1(a=11, b=22) + \${second(1)} => E1[A:11 - B:22] End` diff --git a/cypress/fixtures/serializedEntity5-1.js b/tests/resources/serializedEntity5-1.js similarity index 100% rename from cypress/fixtures/serializedEntity5-1.js rename to tests/resources/serializedEntity5-1.js diff --git a/tests/utility.spec.js b/tests/utility.spec.js new file mode 100644 index 0000000..a1fd4d0 --- /dev/null +++ b/tests/utility.spec.js @@ -0,0 +1,220 @@ +import Utility from "../js/Utility.js" +import { expect, test } from "./fixtures/test.js" + +test("clamp method test", () => { + expect(Utility.clamp(5, 1, 11)).toBe(5) + expect(Utility.clamp(5, 1, 6)).toBe(5) + expect(Utility.clamp(5, 1, 5)).toBe(5) + expect(Utility.clamp(5, 1, 4)).toBe(4) + expect(Utility.clamp(5, 1, 3)).toBe(3) + expect(Utility.clamp(-4, -3)).toBe(-3) + expect(Utility.clamp(-4, -3, -1)).toBe(-3) + expect(Utility.clamp(-1, -3, -2)).toBe(-2) + expect(Utility.clamp(12, 11, 30)).toBe(12) + expect(Utility.clamp(12, 12, 30)).toBe(12) + expect(Utility.clamp(12, 13, 30)).toBe(13) +}) + +test("minDecimals method test", () => { + expect(Utility.minDecimals(3.1, 3)).toBe("3.100") + expect(Utility.minDecimals(-100, 2)).toBe("-100.00") + expect(Utility.minDecimals(0.43, 0)).toBe("0.43") + expect(Utility.minDecimals(0.43, 1)).toBe("0.43") + expect(Utility.minDecimals(0.43, 2)).toBe("0.43") + expect(Utility.minDecimals(0.43, 3)).toBe("0.430") + expect(Utility.minDecimals(-2, 0)).toBe("-2") +}) + +test("roundDecimals method test", () => { + expect(Utility.roundDecimals(8.543943, 0)).toBeCloseTo(9, 6) + expect(Utility.roundDecimals(8.543943, 1)).toBeCloseTo(8.5, 6) + expect(Utility.roundDecimals(8.543943, 2)).toBeCloseTo(8.54, 6) + expect(Utility.roundDecimals(8.543943, 3)).toBeCloseTo(8.544, 6) + expect(Utility.roundDecimals(-2.192837, 0)).toBeCloseTo(-2, 6) + expect(Utility.roundDecimals(-2.192837, 1)).toBeCloseTo(-2.2, 6) + expect(Utility.roundDecimals(-2.192837, 2)).toBeCloseTo(-2.19, 6) + expect(Utility.roundDecimals(-2.192837, 3)).toBeCloseTo(-2.193, 6) + expect(Utility.roundDecimals(-2.192837, 4)).toBeCloseTo(-2.1928, 6) + expect(Utility.roundDecimals(-2.192837, 5)).toBeCloseTo(-2.19284, 6) + expect(Utility.roundDecimals(-2.192837, 6)).toBeCloseTo(-2.192837, 6) + expect(Utility.roundDecimals(-2.192837, 7)).toBeCloseTo(-2.192837, 6) + expect(Utility.roundDecimals(-2.192837, 8)).toBeCloseTo(-2.192837, 6) +}) + +test("approximatelyEqual method test", () => { + expect(Utility.approximatelyEqual(0.2 + 0.1, 0.3)).toBeTruthy() + expect(Utility.approximatelyEqual(-0.2 - 0.1, -0.3)).toBeTruthy() + expect(Utility.approximatelyEqual(0.1000001, 0.1)).toBeFalsy() + expect(Utility.approximatelyEqual(40.1 + 0.2, 40.3)).toBeTruthy() + expect(Utility.approximatelyEqual(2, 3)).toBeFalsy() +}) + +test("equals method test", () => { + expect(Utility.equals(0.2, 0.2)).toBeTruthy() + expect(Utility.equals(new Number(0.7), 0.7)).toBeTruthy() + expect(Utility.equals(-40.3, new Number(-40.3))).toBeTruthy() + expect(Utility.equals(new Number(-40.3), new Number(-40.3))).toBeTruthy() + expect(Utility.equals(0.2 + 0.1, 0.3)).toBeFalsy() // Strict equality + expect(Utility.equals(null, undefined)).toBeFalsy() + expect(Utility.equals(undefined, null)).toBeFalsy() + expect(Utility.equals(0, false)).toBeFalsy() + expect(Utility.equals(false, false)).toBeTruthy() + expect(Utility.equals(2n, 2)).toBeTruthy() + expect(Utility.equals(-6845, -6845n)).toBeTruthy() + expect(Utility.equals(7735n, 7736)).toBeFalsy() + expect(Utility.equals("abc", "abc")).toBeTruthy() + expect(Utility.equals(new String("abc"), new String("abc"))).toBeTruthy() + expect(Utility.equals("abc", "aBc")).toBeFalsy() + expect(Utility.equals( + [-2, "alpha", new String("beta"), new Number(40), [1, 2, 3]], + [new Number(-2), new String("alpha"), new String("beta"), new Number(40), new Array(1, 2, 3)] + )).toBeTruthy() + expect(Utility.equals( + [-2.1, "alpha", new String("beta"), new Number(40), [1, 2, 3]], + [new Number(-2), new String("alpha"), new String("beta"), new Number(40), new Array(1, 2, 3)] + )).toBeFalsy() // First element is different + expect(Utility.equals( + [-2, "Alpha", new String("beta"), new Number(40), [1, 2, 3]], + [new Number(-2), new String("alpha"), new String("beta"), new Number(40), new Array(1, 2, 3)] + )).toBeFalsy() // Second element is different +}) + +test("isValueOfType method test", () => { + expect(Utility.isValueOfType(34, Number)).toBeTruthy() + expect(Utility.isValueOfType(new Number(34), Number)).toBeTruthy() + expect(Utility.isValueOfType("34", String)).toBeTruthy() + expect(Utility.isValueOfType("34", Number)).toBeFalsy() +}) + +test("mergeArrays method test", () => { + expect(Utility.mergeArrays( + [], + [] + )).toStrictEqual( + [] + ) + expect(Utility.mergeArrays( + ["alpba", "beta"], + [] + )).toStrictEqual( + ["alpba", "beta"] + ) + expect(Utility.mergeArrays( + [], + ["alpba", "beta"] + )).toStrictEqual( + ["alpba", "beta"] + ) + expect(Utility.mergeArrays( + [1, 3, 5, 7, 9], + [1, 2, 3, 4, 5] + )).toStrictEqual( + [1, 2, 3, 4, 5, 7, 9] + ) + expect(Utility.mergeArrays( + [6, 7, 8], + [1, 2, 3] + )).toStrictEqual( + [6, 7, 8, 1, 2, 3] + ) + expect(Utility.mergeArrays( + ["e", "f", "g", "h"], + ["a", "b", "c", "d"] + )).toStrictEqual( + ["e", "f", "g", "h", "a", "b", "c", "d"] + ) + expect(Utility.mergeArrays( + ["e", "f", "g", "h"], + ["a", "b", "c", "d", "e"] + )).toStrictEqual( + ["a", "b", "c", "d", "e", "f", "g", "h"] + ) + expect(Utility.mergeArrays( + ["d", "e", "f", "g", "h"], + ["a", "b", "c", "d"] + )).toStrictEqual( + ["a", "b", "c", "d", "e", "f", "g", "h"] + ) + expect(Utility.mergeArrays( + [2, 4, 6, 8], + [6, 4, 2] + )).toStrictEqual( + [2, 4, 6, 8] + ) + expect(Utility.mergeArrays( + [2, 4, 6, 8], + [4, 5, 6, 8, 1, 2] + )).toStrictEqual( + [2, 4, 5, 6, 8, 1] + ) +}) + +test("capitalFirstLetter method test", () => { + expect(Utility.capitalFirstLetter("")).toBe("") + expect(Utility.capitalFirstLetter("hello world")).toBe("Hello world") +}) + +test("range method test", () => { + expect(Utility.range()).toStrictEqual([]) + expect(Utility.range(5, 5)).toStrictEqual([]) + expect(Utility.range(5, 6)).toStrictEqual([5]) + expect(Utility.range(1, 10, 3)).toStrictEqual([1, 4, 7]) + expect(Utility.range(0, -3)).toStrictEqual([0, -1, -2]) + expect(Utility.range(7, -7, -4)).toStrictEqual([7, 3, -1, -5]) +}) + +test("String escaping methods test", () => { + expect(Utility.escapeString("")).toBe("") + expect(Utility.unescapeString("")).toBe("") + + expect(Utility.escapeString('"')).toBe('\\"') + expect(Utility.unescapeString('\\"')).toBe('"') + + expect(Utility.escapeString("'")).toBe("\\'") + expect(Utility.unescapeString("\\'")).toBe("'") + + expect(Utility.escapeString(String.raw`\"`)).toBe(String.raw`\\\"`) + expect(Utility.unescapeString(String.raw`\"`)).toBe('"') + + expect(Utility.escapeString(String.raw`\'`)).toBe(String.raw`\\\'`) + expect(Utility.unescapeString(String.raw`\'`)).toBe("'") + + expect(Utility.escapeString(String.raw`Hello \"World\"`)).toBe(String.raw`Hello \\\"World\\\"`) + expect(Utility.unescapeString(String.raw`Hello \"World\"`)).toBe('Hello "World"') + + expect(Utility.escapeString(String.raw`Those "\\" are two backslash`)) + .toBe(String.raw`Those \"\\\\\" are two backslash`) + expect(Utility.unescapeString(String.raw`Those "\\" are two backslash`)) + .toBe(String.raw`Those "\" are two backslash`) + + expect(Utility.escapeString(String.raw`Alpha\Beta`)).toBe(String.raw`Alpha\\Beta`) + expect(Utility.unescapeString(String.raw`Alpha\Beta`)).toBe(String.raw`Alpha\Beta`) + + expect(Utility.escapeString(String.raw`Alpha\\Beta`)).toBe(String.raw`Alpha\\\\Beta`) + expect(Utility.unescapeString(String.raw`Alpha\\Beta`)).toBe(String.raw`Alpha\Beta`) + + expect(Utility.escapeString(String.raw`Alpha\\\Beta`)).toBe(String.raw`Alpha\\\\\\Beta`) + expect(Utility.unescapeString(String.raw`Alpha\\\Beta`)).toBe(String.raw`Alpha\\Beta`) + + expect(Utility.escapeString(String.raw`Alpha\\\\Beta`)).toBe(String.raw`Alpha\\\\\\\\Beta`) + expect(Utility.unescapeString(String.raw`Alpha\\\\Beta`)).toBe(String.raw`Alpha\\Beta`) + + expect(Utility.escapeString(String.raw`Alpha\\\\\Beta`)).toBe(String.raw`Alpha\\\\\\\\\\Beta`) + expect(Utility.unescapeString(String.raw`Alpha\\\\\Beta`)).toBe(String.raw`Alpha\\\Beta`) + + expect(Utility.escapeString(String.raw`Alpha\\\\\\Beta`)).toBe(String.raw`Alpha\\\\\\\\\\\\Beta`) + expect(Utility.unescapeString(String.raw`Alpha\\\\\\Beta`)).toBe(String.raw`Alpha\\\Beta`) + + expect(Utility.escapeString(String.raw`Alpha \"Beta\"`)).toBe(String.raw`Alpha \\\"Beta\\\"`) + expect(Utility.unescapeString(String.raw`Alpha \"Beta\"`)).toBe(String.raw`Alpha "Beta"`) + + expect(Utility.escapeString(String.raw`Alpha \\"Beta\\"`)).toBe(String.raw`Alpha \\\\\"Beta\\\\\"`) + expect(Utility.unescapeString(String.raw`Alpha \\"Beta\\"`)).toBe(String.raw`Alpha \"Beta\"`) + + expect(Utility.escapeString('Alpha\nBravo\\Charlie\n"Delta"')).toBe( + String.raw`Alpha\nBravo\\Charlie\n\"Delta\"` + ) + expect(Utility.unescapeString(String.raw`Alpha\nBravo\\Charlie\n\"Delta\"`)).toBe( + `Alpha\nBravo\\Charlie\n"Delta"` + ) +}) diff --git a/types.js b/types.js new file mode 100644 index 0000000..310e92b --- /dev/null +++ b/types.js @@ -0,0 +1,216 @@ +/** @typedef {[Number, Number]} Coordinates */ +/** + * @typedef {IEntity | String | Number | BigInt | Boolean | Array} TerminalAttribute + * @typedef {TerminalAttribute | MirroredEntity} Attribute + * @typedef {( + * AttributeConstructor | AttributeConstructor[] + * | MirroredEntity | Union | Union[] | ComputedType + * )} AttributeTypeDescription + * @typedef {(entity: IEntity) => Attribute} ValueSupplier + */ +/** +* @template T +* @typedef {new (...args: any) => T} AnyConstructor +*/ +/** + * @template {Attribute} T + * @typedef {AnyConstructor & EntityConstructor | StringConstructor | NumberConstructor | BigIntConstructor + * | BooleanConstructor | ArrayConstructor | MirroredEntityConstructor} AttributeConstructor + */ +/** + * @template {Attribute} T + * @typedef {T extends String + * ? StringConstructor + * : T extends Number + * ? NumberConstructor + * : T extends BigInt + * ? BigIntConstructor + * : T extends Boolean + * ? BooleanConstructor + * : T extends Array + * ? ArrayConstructor + * : T extends MirroredEntity + * ? MirroredEntityConstructor + * : T extends IEntity + * ? AnyConstructor & EntityConstructor + * : any + * } ConstructorType + */ +/** + * @template T + * @typedef {T extends StringConstructor + * ? String + * : T extends NumberConstructor + * ? Number + * : T extends BigIntConstructor + * ? BigInt + * : T extends BooleanConstructor + * ? Boolean + * : T extends ArrayConstructor + * ? Array + * : T extends MirroredEntity + * ? MirroredEntity + * : T extends AnyConstructor + * ? R + * : any + * } ConstructedType + */ +/** + * @typedef {{ + * type?: AttributeTypeDescription, + * default?: Attribute | ValueSupplier, + * nullable?: Boolean, + * ignored?: Boolean, + * serialized?: Boolean, + * expected?: Boolean, + * inlined?: Boolean, + * quoted?: Boolean, + * predicate?: (value: Attribute) => Boolean, + * }} AttributeInformation + * @typedef {{ [key: String]: AttributeInformation }} AttributeDeclarations + */ +/** + * @typedef {CustomEvent<{ value: Coordinates }>} UEBDragEvent + */ +/** + * @template T + * @typedef {{ + * (value: Boolean): BooleanConstructor, + * (value: Number): NumberConstructor, + * (value: String): StringConstructor, + * (value: BigInt): BigIntConstructor, + * (value: T): typeof value.constructor, + * }} TypeGetter + */ +/** + * @typedef {typeof import("./js/Blueprint.js").default} BlueprintConstructor + * @typedef {typeof import("./js/element/LinkElement.js").default} LinkElementConstructor + * @typedef {typeof import("./js/element/NodeElement.js").default} NodeElementConstructor + * @typedef {typeof import("./js/element/PinElement.js").default} PinElementConstructor + * @typedef {typeof import("./js/element/WindowElement.js").default} WindowElementConstructor + * @typedef {typeof import("./js/entity/IEntity.js").default} EntityConstructor + * @typedef {typeof import("./js/entity/ObjectEntity.js").default} ObjectEntityConstructor + */ +/** + * @typedef {import("./js/Blueprint.js").default} Blueprint + * @typedef {import("./js/element/ColorHandlerElement.js").default} ColorHandlerElement + * @typedef {import("./js/element/ColorSliderElement.js").default} ColorSliderElement + * @typedef {import("./js/element/DropdownElement.js").default} DropdownElement + * @typedef {import("./js/element/ElementFactory.js").default} ElementFactory + * @typedef {import("./js/element/IDraggableControlElement.js").default} IDraggableControlElement + * @typedef {import("./js/element/IDraggableElement.js").default} IDraggableElement + * @typedef {import("./js/element/IElement.js").default} IElement + * @typedef {import("./js/element/IFromToPositionedElement.js").default} IFromToPositionedElement + * @typedef {import("./js/element/InputElement.js").default} InputElement + * @typedef {import("./js/element/ISelectableDraggableElement.js").default} ISelectableDraggableElement + * @typedef {import("./js/element/LinkElement.js").default} LinkElement + * @typedef {import("./js/element/NodeElement.js").default} NodeElement + * @typedef {import("./js/element/PinElement.js").default} PinElement + * @typedef {import("./js/element/SelectorElement.js").default} SelectorElement + * @typedef {import("./js/element/WindowElement.js").default} WindowElement + * @typedef {import("./js/entity/Base64ObjectsEncoded.js").default} Base64ObjectsEncoded + * @typedef {import("./js/entity/ByteEntity.js").default} ByteEntity + * @typedef {import("./js/entity/ColorChannelEntity.js").default} ColorChannelEntity + * @typedef {import("./js/entity/ComputedType.js").default} ComputedType + * @typedef {import("./js/entity/EnumDisplayValueEntity.js").default} EnumDisplayValueEntity + * @typedef {import("./js/entity/EnumEntity.js").default} EnumEntity + * @typedef {import("./js/entity/FormatTextEntity.js").default} FormatTextEntity + * @typedef {import("./js/entity/FunctionReferenceEntity.js").default} FunctionReferenceEntity + * @typedef {import("./js/entity/GuidEntity.js").default} GuidEntity + * @typedef {import("./js/entity/IdentifierEntity.js").default} IdentifierEntity + * @typedef {import("./js/entity/IEntity.js").default} IEntity + * @typedef {import("./js/entity/Integer64Entity.js").default} Integer64Entity + * @typedef {import("./js/entity/IntegerEntity.js").default} IntegerEntity + * @typedef {import("./js/entity/InvariantTextEntity.js").default} InvariantTextEntity + * @typedef {import("./js/entity/KeyBindingEntity.js").default} KeyBindingEntity + * @typedef {import("./js/entity/LinearColorEntity.js").default} LinearColorEntity + * @typedef {import("./js/entity/LocalizedTextEntity.js").default} LocalizedTextEntity + * @typedef {import("./js/entity/MacroGraphReferenceEntity.js").default} MacroGraphReferenceEntity + * @typedef {import("./js/entity/NaturalNumberEntity.js").default} NaturalNumberEntity + * @typedef {import("./js/entity/ObjectEntity.js").default} ObjectEntity + * @typedef {import("./js/entity/ObjectReferenceEntity.js").default} ObjectReferenceEntity + * @typedef {import("./js/entity/objects/KnotEntity.js").default} KnotEntity + * @typedef {import("./js/entity/PathSymbolEntity.js").default} PathSymbolEntity + * @typedef {import("./js/entity/PinEntity.js").default} PinEntity + * @typedef {import("./js/entity/PinReferenceEntity.js").default} PinReferenceEntity + * @typedef {import("./js/entity/PinTypeEntity.js").default} PinTypeEntity + * @typedef {import("./js/entity/RBSerializationVector2DEntity.js").default} RBSerializationVector2DEntity + * @typedef {import("./js/entity/RotatorEntity.js").default} RotatorEntity + * @typedef {import("./js/entity/SimpleSerializationRotatorEntity.js").default} SimpleSerializationRotatorEntity + * @typedef {import("./js/entity/SimpleSerializationVector2DEntity.js").default} SimpleSerializationVector2DEntity + * @typedef {import("./js/entity/SimpleSerializationVectorEntity.js").default} SimpleSerializationVectorEntity + * @typedef {import("./js/entity/SymbolEntity.js").default} SymbolEntity + * @typedef {import("./js/entity/TerminalTypeEntity.js").default} TerminalTypeEntity + * @typedef {import("./js/entity/Union.js").default} Union + * @typedef {import("./js/entity/UnknownKeysEntity.js").default} UnknownKeysEntity + * @typedef {import("./js/entity/UnknownPinEntity.js").default} UnknownPinEntity + * @typedef {import("./js/entity/VariableReferenceEntity.js").default} VariableReferenceEntity + * @typedef {import("./js/entity/Vector2DEntity.js").default} Vector2DEntity + * @typedef {import("./js/entity/VectorEntity.js").default} VectorEntity + * @typedef {import("./js/input/IInput.js").default} IInput + * @typedef {import("./js/input/keyboard/KeyboardShortcut.js").default} KeyboardShortcut + * @typedef {import("./js/input/mouse/MouseMoveDraggable.js").default} MouseMoveDraggable + * @typedef {import("./js/template/BlueprintTemplate.js").default} BlueprintTemplate + * @typedef {import("./js/template/ColorHandlerTemplate.js").default} ColorHandlerTemplate + * @typedef {import("./js/template/ColorSliderTemplate.js").default} ColorSliderTemplate + * @typedef {import("./js/template/IDraggableControlTemplate.js").default} IDraggableControlTemplate + * @typedef {import("./js/template/IDraggablePositionedTemplate.js").default} IDraggablePositionedTemplate + * @typedef {import("./js/template/IDraggableTemplate.js").default} IDraggableTemplate + * @typedef {import("./js/template/IFromToPositionedTemplate.js").default} IFromToPositionedTemplate + * @typedef {import("./js/template/IResizeableTemplate.js").default} IResizeableTemplate + * @typedef {import("./js/template/ISelectableDraggableTemplate.js").default} ISelectableDraggableTemplate + * @typedef {import("./js/template/ITemplate.js").default} ITemplate + * @typedef {import("./js/template/LinkTemplate.js").default} LinkTemplate + * @typedef {import("./js/template/node/CommentNodeTemplate.js").default} CommentNodeTemplate + * @typedef {import("./js/template/node/EventNodeTemplate.js").default} EventNodeTemplate + * @typedef {import("./js/template/node/KnotNodeTemplate.js").default} KnotNodeTemplate + * @typedef {import("./js/template/node/NodeTemplate.js").default} NodeTemplate + * @typedef {import("./js/template/node/VariableAccessNodeTemplate.js").default} VariableAccessNodeTemplate + * @typedef {import("./js/template/node/VariableConversionNodeTemplate.js").default} VariableConversionNodeTemplate + * @typedef {import("./js/template/node/VariableMangementNodeTemplate.js").default} VariableMangementNodeTemplate + * @typedef {import("./js/template/node/VariableOperationNodeTemplate.js").default} VariableOperationNodeTemplate + * @typedef {import("./js/template/pin/BoolPinTemplate.js").default} BoolPinTemplate + * @typedef {import("./js/template/pin/DropdownTemplate.js").default} DropdownTemplate + * @typedef {import("./js/template/pin/EnumPinTemplate.js").default} EnumPinTemplate + * @typedef {import("./js/template/pin/ExecPinTemplate.js").default} ExecPinTemplate + * @typedef {import("./js/template/pin/IInputPinTemplate.js").default} IInputPinTemplate + * @typedef {import("./js/template/pin/InputTemplate.js").default} InputTemplate + * @typedef {import("./js/template/pin/Int64PinTemplate.js").default} Int64PinTemplate + * @typedef {import("./js/template/pin/IntPinTemplate.js").default} IntPinTemplate + * @typedef {import("./js/template/pin/INumericPinTemplate.js").default} INumericPinTemplate + * @typedef {import("./js/template/pin/KnotPinTemplate.js").default} KnotPinTemplate + * @typedef {import("./js/template/pin/LinearColorPinTemplate.js").default} LinearColorPinTemplate + * @typedef {import("./js/template/pin/MinimalPinTemplate.js").default} MinimalPinTemplate + * @typedef {import("./js/template/pin/NamePinTemplate.js").default} NamePinTemplate + * @typedef {import("./js/template/pin/RealPinTemplate.js").default} RealPinTemplate + * @typedef {import("./js/template/pin/ReferencePinTemplate.js").default} ReferencePinTemplate + * @typedef {import("./js/template/pin/RotatorPinTemplate.js").default} RotatorPinTemplate + * @typedef {import("./js/template/pin/StringPinTemplate.js").default} StringPinTemplate + * @typedef {import("./js/template/pin/Vector2DPinTemplate.js").default} Vector2DPinTemplate + * @typedef {import("./js/template/pin/VectorPinTemplate.js").default} VectorPinTemplate + * @typedef {import("./js/template/SelectorTemplate.js").default} SelectorTemplate + * @typedef {import("./js/template/window/ColorPickerWindowTemplate.js").default} ColorPickerWindowTemplate + * @typedef {import("./js/template/window/WindowTemplate.js").default} WindowTemplate + * @typedef {import("lit").CSSResult} CSSResult + * @typedef {import("lit").PropertyValues} PropertyValues + * @typedef {import("lit").TemplateResult} TemplateResult + */ +/** + * @template {AttributeConstructor} T + * @typedef {import("./js/serialization/Serializer.js").default} Serializer + */ +/** + * @template {Attribute} T + * @typedef {import("./js/entity/MirroredEntity.js").default} MirroredEntity + */ +/** + * @template {Attribute} T + * @typedef {typeof import("./js/entity/MirroredEntity.js").default} MirroredEntityConstructor + */ +/** + * @template T + * @typedef {{ +* evaluate(pageFunction: (node: T, arg: Arg) => R, arg: Arg, options?: { timeout?: number }): Promise +* evaluate(pageFunction: (node: T) => R, options?: { timeout?: number }): Promise +* } & import("@playwright/test").Locator} Locator +*/