diff --git a/.gitignore b/.gitignore old mode 100644 new mode 100755 diff --git a/.vscode/extensions.json b/.vscode/extensions.json old mode 100644 new mode 100755 diff --git a/.vscode/launch.json b/.vscode/launch.json old mode 100644 new mode 100755 diff --git a/.vscode/settings.json b/.vscode/settings.json old mode 100644 new mode 100755 diff --git a/CONTRIBUTING.md b/CONTRIBUTING.md old mode 100644 new mode 100755 diff --git a/LICENSE b/LICENSE old mode 100644 new mode 100755 diff --git a/README.md b/README.md old mode 100644 new mode 100755 diff --git a/assets/fonts/roboto-bold.woff2 b/assets/fonts/roboto-bold.woff2 old mode 100644 new mode 100755 diff --git a/assets/fonts/roboto-condensed-bold.woff2 b/assets/fonts/roboto-condensed-bold.woff2 old mode 100644 new mode 100755 diff --git a/assets/fonts/roboto-light.woff2 b/assets/fonts/roboto-light.woff2 old mode 100644 new mode 100755 diff --git a/assets/fonts/roboto-regular.woff2 b/assets/fonts/roboto-regular.woff2 old mode 100644 new mode 100755 diff --git a/dist/css/ueb-style.css b/dist/css/ueb-style.css old mode 100644 new mode 100755 index 830d4aa..a07deb3 --- a/dist/css/ueb-style.css +++ b/dist/css/ueb-style.css @@ -43,7 +43,7 @@ ueb-blueprint svg { } } .ueb-zoom-changed .ueb-viewport-zoom { - animation: 600ms ueb-zoom-animation; + animation: 1500ms ueb-zoom-animation; } .ueb-viewport-zoom { @@ -176,9 +176,7 @@ ueb-node.ueb-node-style-minimal[data-selected=true] .ueb-node-border { ueb-link { position: absolute; --ueb-link-color: rgb(var(--ueb-link-color-rgb)); - --ueb-from-input-coefficient: calc(2 * var(--ueb-from-input) - 1); /* when from-y > to-y */ - --ueb-y-reflected: clamp(0, var(--ueb-from-y) - var(--ueb-to-y) - 1, 1); display: block; margin-left: calc(var(--ueb-link-start) * -1px); min-width: calc(var(--ueb-link-min-width) * 1px); @@ -190,12 +188,11 @@ ueb-link { } ueb-link > svg { - --ueb-y-reflected-coefficient: calc(2 * var(--ueb-y-reflected) - 1); position: absolute; width: 100% !important; height: 100% !important; min-height: 1px !important; - transform: scaleY(calc(var(--ueb-y-reflected-coefficient) * var(--ueb-from-input-coefficient))); + transform: scaleX(var(--ueb-link-scale-x)) scaleY(var(--ueb-link-scale-y)); z-index: 1; } @@ -222,10 +219,12 @@ ueb-link[data-dragging=true] .ueb-link-message { } .ueb-link-message { + --ueb-link-message-top: calc(50% * (var(--ueb-link-scale-y) + 1) + 22px); + --ueb-link-message-left: calc(100% - var(--ueb-start-percentage) + 15px); display: none; position: absolute; - top: calc(100% * (1 - var(--ueb-y-reflected)) + 22px); - left: calc((1 - var(--ueb-from-input)) * 100% + (var(--ueb-from-input-coefficient)) * var(--ueb-start-percentage) + 15px); + top: var(--ueb-link-message-top); + left: var(--ueb-link-message-left); border: 1px solid #000; border-radius: 2px; background: linear-gradient(to bottom, #2a2a2a 0, #151515 50%, #2a2a2a 100%); @@ -234,6 +233,11 @@ ueb-link[data-dragging=true] .ueb-link-message { z-index: 1000000; } +ueb-link[data-from-input=true] .ueb-link-message { + --ueb-link-message-top: calc(-50% * (var(--ueb-link-scale-y) - 1) + 22px); + --ueb-link-message-left: calc(var(--ueb-start-percentage) + 15px); +} + .ueb-link-message-icon { display: inline-block; padding: 4px; @@ -811,6 +815,23 @@ ueb-node[data-type="/Script/BlueprintGraph.K2Node_VariableSet"] ueb-pin[data-dir outline: none; } +.ueb-pin-input[type=checkbox] { + display: grid; + place-content: center; + appearance: none; + width: 18px; + height: 18px; + border: 1px solid #353535; + background: #0f0f0f; +} +.ueb-pin-input[type=checkbox]:checked::before { + content: ""; + height: 0.7em; + width: 0.8em; + clip-path: polygon(14% 44%, 0 65%, 50% 100%, 100% 16%, 80% 0%, 43% 62%); + background: #0070e0; +} + ueb-pin[data-linked=true] .ueb-pin-input, ueb-pin[data-linked=true] .ueb-pin-input-wrapper { display: none; diff --git a/dist/css/ueb-style.css.map b/dist/css/ueb-style.css.map old mode 100644 new mode 100755 index 16800ed..d4619ea --- a/dist/css/ueb-style.css.map +++ b/dist/css/ueb-style.css.map @@ -1 +1 @@ -{"version":3,"sourceRoot":"","sources":["../../scss/style.scss","../../scss/ueb-knot.scss","../../scss/ueb-link.scss","../../scss/ueb-node.scss","../../scss/ueb-pin.scss","../../scss/ueb-ui-controls.scss","../../scss/ueb-window.scss"],"names":[],"mappings":"AAAA;EACI;EACA;EACA;;AAGJ;EACI;EACA;EACA;;AAGJ;EACI;EACA;EACA;EACA;EACA;EACA;EACA;EACA;;;AAGJ;EACI;EACA;;;AAGJ;EACI;EACA;EACA;EACA;EACA;EACA;EACA;;;AAGJ;EACI;IACI;;EAGJ;IACI;;;AAIR;EACI;;;AAGJ;EACI;EACA;EACA;AACA;EACA;EACA;EACA;;;AAGJ;EACI;EACA;EACA;EACA;;;AAGJ;EACI;EACA;EACA;EACA;EACA;EACA;EACA;EACA,kBAEI;EA0BJ,iBAEI;EAQJ;EACA;EACA;EACA;EACA;;;AAGJ;EACI;;;AAGJ;EACI;;;AAGJ;EACI;EACA;;;AAGJ;EACI;;;AAGJ;EACI;;;AAGJ;EACI;EACA;EACA;EACA;;;AAGJ;EACI;EACA;;;AAGJ;EACI;;;AAGJ;EACI;EACA;EACA;EACA;EACA;EACA;EACA;EACA,kBAEI;EAmDJ,iBAEI;EAWJ,qBAEI;EAOJ;;;AAGJ;EACI;;;AAIJ;EACI;;;AAGJ;EACI;EACA;EACA;;;ACjQJ;EACI;;;AAGJ;EACI;EACA;EACA;;;AAGJ;EACI;;;AAGJ;EACI;EACA;;;AAGJ;EACI;EACA;;;AAGJ;EACI;;;ACvBJ;EACI;EACA;EACA;AACA;EACA;EACA;EACA;EACA;AACA;AAAA;AAAA;AAAA;EAIA;;;AAGJ;EACI;EACA;EACA;EACA;EACA;EACA;EACA;;;AAGJ;EACI;EACA;EACA;EACA;;;AAGJ;EACI;EACA;;;AAGJ;AAAA;EAEI;;;AAGJ;EACI;EACA;;;AAGJ;EACI;EACA;EACA;EACA;EAOA;EACA;EACA;EACA;EACA;EACA;;;AAGJ;EACI;EACA;EACA;EACA;EACA;;;AAGJ;EACI;EACA;EACA;;;AAGJ;EACI;EACA;;;ACrFJ;EACI;EACA;EACA;EACA;EACA;EACA;;;AAGJ;AAAA;EAEI;;;AAGJ;EACI;;;AAGJ;EACI;EACA;EACA;;;AAGJ;EACI;EACA;;;AAGJ;EACI,kBACI;EAIJ;EACA;EACA;;;AAGJ;EACI;EACA;;;AAGJ;EACI;;;AAGJ;EACI;EACA,eACI;EAOJ;EACA;EACA;EACA;EACA;EACA;EACA;;;AAGJ;EACI;EACA;EACA;;;AAGJ;EACI;;;AAGJ;EACI;EACA;;;AAGJ;EACI;EACA;;;AAGJ;EACI;;;AAGJ;EACI;EACA;EACA;;;AAGJ;EACI;EACA;AACA;EACA;EACA;EACA;EACA;;;AAGJ;EACI;;;AAGJ;EACI;;;AAGJ;EACI;EACA;EACA;EACA;;;AAGJ;EACI;EACA,YACI;EAEJ;EACA,YACI;;;AAIR;EACI;;;AAGJ;EACI;;;AAGJ;EACI;EACA;EACA;EACA;EACA;;;AAGJ;EACI;;;AAGJ;EACI;;;AAGJ;EACI;;;AAGJ;EACI;;;AAGJ;EACI;EACA;EACA;EACA;EACA;;;AAGJ;EACI;;;AAGJ;EACI;;;AAGJ;EACI;EACA;AACA;EACA;EACA;EACA;EACA;;;AAGJ;EACI;;;AAGJ;EACI;EACA;;;AAGJ;EACI;;;AAGJ;AAAA;EAEI;;;AAGJ;EACI;EACA;EACA;EACA;EACA;EACA;EACA;;;AAGJ;EACI;EACA;EACA;EACA;EAMA;EAMA;;;AAGJ;EACI;EACA;EACA;EACA;;;AAGJ;EACI;;;AAGJ;EACI;EACA;EACA;;;AAGJ;EACI;;;AAGJ;EACI;EACA;;;AAGJ;EACI;;;AAGJ;AAAA;EAEI;EACA;EACA;;;AAGJ;EACI;;;AAGJ;AAAA;AAAA;EAGI;EACA;;;AAGJ;EACI;EACA;EACA;EACA,YACI;EAEJ;EACA;;;AAGJ;EACI;EACA;;;AAGJ;EACI;EACA;;;AAGJ;AAAA;EAEI;EACA;EACA;EACA;;;AAGJ;EACI;;;AAGJ;EACI;EACA;EACA;EACA;AACA;EACA;EACA;EACA;EACA;;;AAGJ;EACI;EACA;;;AAGJ;EACI;;;AAGJ;EACI;;;AAGJ;EACI;EACA;EACA;;;AAGJ;EACI;EACA;EACA;;;AAOJ;AAAA;EAEI;;;AAGJ;EACI;;;AAGJ;EACI;EACA;EACA;EACA;;;AAGJ;EACI;;;AAGJ;EACI;;;AAGJ;EACI;EACA;EACA;EACA;EACA;EACA;;AAEA;EACI;EACA;EACA;EACA;EACA;EACA;EACA;EACA;;;AAgBR;EACI;EACA;EACA;EACA;EACA;EACA;EACA;AACA;EACA;EACA;EACA;EACA;;;AAGJ;EACI;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;;;AC1bJ;EACI;;;AAGJ;EACI;AAAA;AAAA;AAAA;AAAA;AAAA;EAMA;EACA;;;AAGJ;AAAA;EAEI;;;AAGJ;EACI;EACA;;;AAGJ;EACI;EACA;;;AAGJ;EACI;;;AAGJ;EACI;;;AAGJ;EACI;EACA;EACA;EACA;EACA;;;AAGJ;EACI;;;AAGJ;EACI;;;AAGJ;EACI;EACA;EACA;;;AAGJ;EACI;EACA;;;AAGJ;EACI;;;AAGJ;EACI;EACA;;;AAGJ;EACI;;;AAGJ;EACI;EACA;;;AAGJ;EACI;;;AAGJ;EACI;;;AAGJ;EACI;;;AAGJ;EACI;;;AAGJ;EACI;;;AAGJ;EACI;EACA;EACA;;;AAGJ;EACI;;;AAGJ;EACI;;;AAGJ;EACI;EACA;;AAEA;EACI;EACA;EACA;EACA;EACA;EACA;EACA;EACA;;;AAQR;EACI;;;AAGJ;EACI;;;AAGJ;EACI;EACA;;;AAGJ;EACI;EACA;EACA;EACA;EACA;;AAEA;EAII;EACA;;;AAIR;AAAA;EAEI;;;AAGJ;EACI;EACA;EACA;EACA;EACA;EACA;;;AAGJ;EACI;;;AAGJ;EACI;EACA;EACA;EACA;EACA;EACA;;;AAGJ;EACI;;;AAGJ;EACI;EACA;;;AAGJ;EACI;;;AAGJ;EACI;EACA;EACA;EACA;EACA;EACA;EACA;AACA;EACA;EACA;EACA;EACA;EACA;;AAEA;EACI;EACA;;AAGJ;EACI;EACA;EACA;;AAGJ;EACI;;;AAIR;EACI;;;AAGJ;EACI;;;AAGJ;EACI;EACA;EACA;EACA;EACA;;;AAGJ;EACI;EACA;EACA;EACA;EACA;EACA;EACA;;;ACpQJ;EACI;EACA;EACA;EACA;EACA;EACA;EACA;;AAEA;EACI;;;AAIR;EACI;EACA;EACA;EACA;;;AAGJ;EACI;EACA;;AAEA;EAEI;EACA;EACA;EACA;EACA;EACA;;AAGJ;EACI;EACA;;AAGJ;EACI;EACA;;;AAIR;AAAA;EAEI;EACA;EACA;EACA;;;AAGJ;EACI;EACA;;AAEA;EACI;;;AAIR;EACI;;;AAGJ;EACI;EACA;EACA;EACA;EACA;;;AAGJ;EACI;EACA;EACA;EACA;;;AAKA;EACI;EACA;EACA;EACA;EACA;EACA;;AAGJ;EACI;;;AAIR;AAAA;AAAA;EAGI;EACA;EACA;;;AAGJ;EACI;EACA;EACA;;;AAGJ;EACI;EACA;EACA;;;AAGJ;EACI;EACA;EACA;;;AAGJ;EACI;EACA;EACA;EACA;EACA;EACA;;;AAGJ;AAAA;AAAA;EAGI;EACA;EACA;EACA;;;AAGJ;EACI;EACA;;;AAGJ;EACI;EACA;EACA;;;AAGJ;EACI;EACA;EACA;;;AAGJ;EACI;EACA;EACA;EACA;EACA;EACA;;;ACnKJ;EACI;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;;;AAGJ;EACI;EACA;EACA;EACA;EACA;EACA;;;AAGJ;EACI;EACA;;;AAGJ;EACI;EACA;EACA;;;AAGJ;EACI;EACA;EACA;EACA;;;AAGJ;AAAA;EAEI;EACA;;;AAGJ;EACI;EACA;;;AAGJ;EACI;EACA;EACA;EACA;EACA,YACI;;;AAWR;EACI;EACA;EACA;EACA;EACA;EACA;EACA;EACA;;;AAGJ;EACI;EACA;;;AAGJ;AAAA;EAEI;EACA;EACA;;;AAGJ;EACI;EACA;;;AAGJ;EACI;EACA;;;AAGJ;EACI;;;AAGJ;EACI;;;AAGJ;EACI;;;AAGJ;EACI;EACA;;AAEA;EAEI;EACA;EACA;EACA;EACA;EACA;;AAGJ;EACI;;;AAIR;AAAA;EAEI;EACA;;;AAGJ;EACI;;;AAGJ;AAAA;EAEI;;;AAGJ;EACI;EACA;EACA;;;AAGJ;EACI;EACA;EACA;EACA;EACA;;;AAGJ;EACI;EACA;EACA;;AAEA;EACI;;;AAIR;EACI;;;AAGJ;EACI;;;AAGJ;EACI;;;AAGJ;EACI;;;AAGJ;EACI;;;AAGJ;EACI;;;AAGJ;EACI;;;AAGJ;EACI;;;AAGJ;EACI;;;AAGJ;EACI;;;AAGJ;EACI;;;AAGJ;EACI;EACA;;;AAGJ;EACI;EACA;EACA;EACA","file":"ueb-style.css"} \ No newline at end of file +{"version":3,"sourceRoot":"","sources":["../../scss/style.scss","../../scss/ueb-knot.scss","../../scss/ueb-link.scss","../../scss/ueb-node.scss","../../scss/ueb-pin.scss","../../scss/ueb-ui-controls.scss","../../scss/ueb-window.scss"],"names":[],"mappings":"AAAA;EACI;EACA;EACA;;AAGJ;EACI;EACA;EACA;;AAGJ;EACI;EACA;EACA;EACA;EACA;EACA;EACA;EACA;;;AAGJ;EACI;EACA;;;AAGJ;EACI;EACA;EACA;EACA;EACA;EACA;EACA;;;AAGJ;EACI;IACI;;EAGJ;IACI;;;AAIR;EACI;;;AAGJ;EACI;EACA;EACA;AACA;EACA;EACA;EACA;;;AAGJ;EACI;EACA;EACA;EACA;;;AAGJ;EACI;EACA;EACA;EACA;EACA;EACA;EACA;EACA,kBAEI;EA0BJ,iBAEI;EAQJ;EACA;EACA;EACA;EACA;;;AAGJ;EACI;;;AAGJ;EACI;;;AAGJ;EACI;EACA;;;AAGJ;EACI;;;AAGJ;EACI;;;AAGJ;EACI;EACA;EACA;EACA;;;AAGJ;EACI;EACA;;;AAGJ;EACI;;;AAGJ;EACI;EACA;EACA;EACA;EACA;EACA;EACA;EACA,kBAEI;EAmDJ,iBAEI;EAWJ,qBAEI;EAOJ;;;AAGJ;EACI;;;AAIJ;EACI;;;AAGJ;EACI;EACA;EACA;;;ACjQJ;EACI;;;AAGJ;EACI;EACA;EACA;;;AAGJ;EACI;;;AAGJ;EACI;EACA;;;AAGJ;EACI;EACA;;;AAGJ;EACI;;;ACvBJ;EACI;EACA;AACA;EACA;EACA;EACA;AACA;AAAA;AAAA;AAAA;EAIA;;;AAGJ;EACI;EACA;EACA;EACA;EACA;EACA;;;AAGJ;EACI;EACA;EACA;EACA;;;AAGJ;EACI;EACA;;;AAGJ;AAAA;EAEI;;;AAGJ;EACI;EACA;;;AAGJ;EACI;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;;;AAGJ;EACI;EACA;;;AAGJ;EACI;EACA;EACA;EACA;EACA;;;AAGJ;EACI;EACA;EACA;;;AAGJ;EACI;EACA;;;ACnFJ;EACI;EACA;EACA;EACA;EACA;EACA;;;AAGJ;AAAA;EAEI;;;AAGJ;EACI;;;AAGJ;EACI;EACA;EACA;;;AAGJ;EACI;EACA;;;AAGJ;EACI,kBACI;EAIJ;EACA;EACA;;;AAGJ;EACI;EACA;;;AAGJ;EACI;;;AAGJ;EACI;EACA,eACI;EAOJ;EACA;EACA;EACA;EACA;EACA;EACA;;;AAGJ;EACI;EACA;EACA;;;AAGJ;EACI;;;AAGJ;EACI;EACA;;;AAGJ;EACI;EACA;;;AAGJ;EACI;;;AAGJ;EACI;EACA;EACA;;;AAGJ;EACI;EACA;AACA;EACA;EACA;EACA;EACA;;;AAGJ;EACI;;;AAGJ;EACI;;;AAGJ;EACI;EACA;EACA;EACA;;;AAGJ;EACI;EACA,YACI;EAEJ;EACA,YACI;;;AAIR;EACI;;;AAGJ;EACI;;;AAGJ;EACI;EACA;EACA;EACA;EACA;;;AAGJ;EACI;;;AAGJ;EACI;;;AAGJ;EACI;;;AAGJ;EACI;;;AAGJ;EACI;EACA;EACA;EACA;EACA;;;AAGJ;EACI;;;AAGJ;EACI;;;AAGJ;EACI;EACA;AACA;EACA;EACA;EACA;EACA;;;AAGJ;EACI;;;AAGJ;EACI;EACA;;;AAGJ;EACI;;;AAGJ;AAAA;EAEI;;;AAGJ;EACI;EACA;EACA;EACA;EACA;EACA;EACA;;;AAGJ;EACI;EACA;EACA;EACA;EAMA;EAMA;;;AAGJ;EACI;EACA;EACA;EACA;;;AAGJ;EACI;;;AAGJ;EACI;EACA;EACA;;;AAGJ;EACI;;;AAGJ;EACI;EACA;;;AAGJ;EACI;;;AAGJ;AAAA;EAEI;EACA;EACA;;;AAGJ;EACI;;;AAGJ;AAAA;AAAA;EAGI;EACA;;;AAGJ;EACI;EACA;EACA;EACA,YACI;EAEJ;EACA;;;AAGJ;EACI;EACA;;;AAGJ;EACI;EACA;;;AAGJ;AAAA;EAEI;EACA;EACA;EACA;;;AAGJ;EACI;;;AAGJ;EACI;EACA;EACA;EACA;AACA;EACA;EACA;EACA;EACA;;;AAGJ;EACI;EACA;;;AAGJ;EACI;;;AAGJ;EACI;;;AAGJ;EACI;EACA;EACA;;;AAGJ;EACI;EACA;EACA;;;AAOJ;AAAA;EAEI;;;AAGJ;EACI;;;AAGJ;EACI;EACA;EACA;EACA;;;AAGJ;EACI;;;AAGJ;EACI;;;AAGJ;EACI;EACA;EACA;EACA;EACA;EACA;;AAEA;EACI;EACA;EACA;EACA;EACA;EACA;EACA;EACA;;;AAgBR;EACI;EACA;EACA;EACA;EACA;EACA;EACA;AACA;EACA;EACA;EACA;EACA;;;AAGJ;EACI;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;;;AC1bJ;EACI;;;AAGJ;EACI;AAAA;AAAA;AAAA;AAAA;AAAA;EAMA;EACA;;;AAGJ;AAAA;EAEI;;;AAGJ;EACI;EACA;;;AAGJ;EACI;EACA;;;AAGJ;EACI;;;AAGJ;EACI;;;AAGJ;EACI;EACA;EACA;EACA;EACA;;;AAGJ;EACI;;;AAGJ;EACI;;;AAGJ;EACI;EACA;EACA;;;AAGJ;EACI;EACA;;;AAGJ;EACI;;;AAGJ;EACI;EACA;;;AAGJ;EACI;;;AAGJ;EACI;EACA;;;AAGJ;EACI;;;AAGJ;EACI;;;AAGJ;EACI;;;AAGJ;EACI;;;AAGJ;EACI;;;AAGJ;EACI;EACA;EACA;;;AAGJ;EACI;;;AAGJ;EACI;;;AAGJ;EACI;EACA;;AAEA;EACI;EACA;EACA;EACA;EACA;EACA;EACA;EACA;;;AAQR;EACI;;;AAGJ;EACI;;;AAGJ;EACI;EACA;;;AAGJ;EACI;EACA;EACA;EACA;EACA;;AAEA;EAII;EACA;;;AAIR;EACI;EACA;EACA;EACA;EACA;EACA;EACA;;AAEA;EACI;EACA;EACA;EACA;EACA;;;AAKR;AAAA;EAEI;;;AAGJ;EACI;EACA;EACA;EACA;EACA;EACA;;;AAGJ;EACI;;;AAGJ;EACI;EACA;EACA;EACA;EACA;EACA;;;AAGJ;EACI;;;AAGJ;EACI;EACA;;;AAGJ;EACI;;;AAGJ;EACI;EACA;EACA;EACA;EACA;EACA;EACA;AACA;EACA;EACA;EACA;EACA;EACA;;AAEA;EACI;EACA;;AAGJ;EACI;EACA;EACA;;AAGJ;EACI;;;AAIR;EACI;;;AAGJ;EACI;;;AAGJ;EACI;EACA;EACA;EACA;EACA;;;AAGJ;EACI;EACA;EACA;EACA;EACA;EACA;EACA;;;ACvRJ;EACI;EACA;EACA;EACA;EACA;EACA;EACA;;AAEA;EACI;;;AAIR;EACI;EACA;EACA;EACA;;;AAGJ;EACI;EACA;;AAEA;EAEI;EACA;EACA;EACA;EACA;EACA;;AAGJ;EACI;EACA;;AAGJ;EACI;EACA;;;AAIR;AAAA;EAEI;EACA;EACA;EACA;;;AAGJ;EACI;EACA;;AAEA;EACI;;;AAIR;EACI;;;AAGJ;EACI;EACA;EACA;EACA;EACA;;;AAGJ;EACI;EACA;EACA;EACA;;;AAKA;EACI;EACA;EACA;EACA;EACA;EACA;;AAGJ;EACI;;;AAIR;AAAA;AAAA;EAGI;EACA;EACA;;;AAGJ;EACI;EACA;EACA;;;AAGJ;EACI;EACA;EACA;;;AAGJ;EACI;EACA;EACA;;;AAGJ;EACI;EACA;EACA;EACA;EACA;EACA;;;AAGJ;AAAA;AAAA;EAGI;EACA;EACA;EACA;;;AAGJ;EACI;EACA;;;AAGJ;EACI;EACA;EACA;;;AAGJ;EACI;EACA;EACA;;;AAGJ;EACI;EACA;EACA;EACA;EACA;EACA;;;ACnKJ;EACI;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;;;AAGJ;EACI;EACA;EACA;EACA;EACA;EACA;;;AAGJ;EACI;EACA;;;AAGJ;EACI;EACA;EACA;;;AAGJ;EACI;EACA;EACA;EACA;;;AAGJ;AAAA;EAEI;EACA;;;AAGJ;EACI;EACA;;;AAGJ;EACI;EACA;EACA;EACA;EACA,YACI;;;AAWR;EACI;EACA;EACA;EACA;EACA;EACA;EACA;EACA;;;AAGJ;EACI;EACA;;;AAGJ;AAAA;EAEI;EACA;EACA;;;AAGJ;EACI;EACA;;;AAGJ;EACI;EACA;;;AAGJ;EACI;;;AAGJ;EACI;;;AAGJ;EACI;;;AAGJ;EACI;EACA;;AAEA;EAEI;EACA;EACA;EACA;EACA;EACA;;AAGJ;EACI;;;AAIR;AAAA;EAEI;EACA;;;AAGJ;EACI;;;AAGJ;AAAA;EAEI;;;AAGJ;EACI;EACA;EACA;;;AAGJ;EACI;EACA;EACA;EACA;EACA;;;AAGJ;EACI;EACA;EACA;;AAEA;EACI;;;AAIR;EACI;;;AAGJ;EACI;;;AAGJ;EACI;;;AAGJ;EACI;;;AAGJ;EACI;;;AAGJ;EACI;;;AAGJ;EACI;;;AAGJ;EACI;;;AAGJ;EACI;;;AAGJ;EACI;;;AAGJ;EACI;;;AAGJ;EACI;EACA;;;AAGJ;EACI;EACA;EACA;EACA","file":"ueb-style.css"} \ No newline at end of file diff --git a/dist/css/ueb-style.min.css b/dist/css/ueb-style.min.css old mode 100644 new mode 100755 index 2b47963..03be2d4 --- a/dist/css/ueb-style.min.css +++ b/dist/css/ueb-style.min.css @@ -1 +1 @@ -@font-face{font-family:"Roboto";font-weight:normal;src:url("../font/roboto-regular.woff2") format("woff2")}@font-face{font-family:"Roboto";font-stretch:condensed;src:url("../font/roboto-condensed-regular.woff2") format("woff2")}ueb-blueprint{--ueb-scale: 1;--ueb-grid-actual-size: var(--ueb-grid-size);display:block;position:relative;font-family:Roboto,Noto,Oxygen,Ubuntu,"Open Sans","Helvetica Neue",sans-serif;font-size:var(--ueb-font-size);color:#fff;user-select:none}ueb-blueprint svg{overflow:visible !important;max-width:none !important}.ueb-viewport-header{display:flex;position:absolute;top:0;right:0;left:0;background:rgba(0,0,0,.5);z-index:1}@keyframes ueb-zoom-animation{0%{color:#7f7f7f}100%{color:#2b2b2b}}.ueb-zoom-changed .ueb-viewport-zoom{animation:600ms ueb-zoom-animation}.ueb-viewport-zoom{margin-left:auto;padding:5px;color:#2b2b2b;font-size:154%;font-weight:bold;letter-spacing:-1px}.ueb-viewport-body{position:relative;height:var(--ueb-height, 30rem);overflow:hidden;scrollbar-width:0}.ueb-grid{--ueb-grid-line-actual-width: calc(var(--ueb-grid-line-width) / var(--ueb-scale));position:absolute;min-width:100%;min-height:100%;width:calc((100% + 2*var(--ueb-grid-expand))/var(--ueb-scale));height:calc((100% + 2*var(--ueb-grid-expand))/var(--ueb-scale));background-color:#262626;background-image:linear-gradient(var(--ueb-grid-axis-line-color), var(--ueb-grid-axis-line-color)),linear-gradient(var(--ueb-grid-axis-line-color), var(--ueb-grid-axis-line-color)),linear-gradient(to right, var(--ueb-grid-set-line-color), var(--ueb-grid-set-line-color) var(--ueb-grid-line-actual-width), transparent var(--ueb-grid-line-actual-width), transparent),linear-gradient(to bottom, var(--ueb-grid-set-line-color), var(--ueb-grid-set-line-color) var(--ueb-grid-line-actual-width), transparent var(--ueb-grid-line-actual-width), transparent),linear-gradient(to right, var(--ueb-grid-line-color), var(--ueb-grid-line-color) var(--ueb-grid-line-actual-width), transparent var(--ueb-grid-line-actual-width), transparent),linear-gradient(to bottom, var(--ueb-grid-line-color), var(--ueb-grid-line-color) var(--ueb-grid-line-actual-width), transparent var(--ueb-grid-line-actual-width), transparent);background-size:100% var(--ueb-grid-line-actual-width),var(--ueb-grid-line-actual-width) 100%,calc(var(--ueb-grid-set)*var(--ueb-grid-actual-size)) calc(var(--ueb-grid-set)*var(--ueb-grid-actual-size)),calc(var(--ueb-grid-set)*var(--ueb-grid-actual-size)) calc(var(--ueb-grid-set)*var(--ueb-grid-actual-size)),var(--ueb-grid-actual-size) var(--ueb-grid-actual-size),var(--ueb-grid-actual-size) var(--ueb-grid-actual-size);background-position:calc(var(--ueb-translate-x)*1px) calc(var(--ueb-translate-y)*1px);background-repeat:repeat-x,repeat-y,repeat,repeat,repeat,repeat;scale:var(--ueb-scale) var(--ueb-scale);transform-origin:0 0;overflow:hidden}ueb-blueprint[data-scrolling=true] .ueb-grid{cursor:grabbing}ueb-blueprint[data-scrolling=false] .ueb-grid{cursor:default}ueb-blueprint.ueb-zoom--4{--ueb-grid-actual-size: calc(var(--ueb-grid-size) * 2);--ueb-node-radius: 0 !important}ueb-blueprint.ueb-zoom--6{--ueb-grid-actual-size: calc(var(--ueb-grid-size) * 3)}ueb-blueprint.ueb-zoom--11{--ueb-grid-actual-size: calc(var(--ueb-grid-size) * 6)}.ueb-grid-content{position:relative;width:0;height:0;transform:translateX(calc(var(--ueb-translate-x) * 1px)) translateY(calc(var(--ueb-translate-y) * 1px))}.ueb-grid-content>div{width:0;height:0}.ueb-positioned,ueb-blueprint[data-selecting=true] ueb-selector{position:absolute}ueb-selector{display:block;position:absolute;visibility:hidden;top:0;left:0;width:0;height:0;background-image:repeating-linear-gradient(90deg, transparent, transparent calc(1px / var(--ueb-scale)), white calc(2px / var(--ueb-scale)), white calc(7px / var(--ueb-scale)), transparent calc(7px / var(--ueb-scale)), transparent calc(11px / var(--ueb-scale))),repeating-linear-gradient(90deg, black, black calc(8px / var(--ueb-scale)), transparent calc(9px / var(--ueb-scale)), transparent calc(11px / var(--ueb-scale))),repeating-linear-gradient(90deg, transparent, transparent calc(1px / var(--ueb-scale)), white calc(2px / var(--ueb-scale)), white calc(7px / var(--ueb-scale)), transparent calc(7px / var(--ueb-scale)), transparent calc(11px / var(--ueb-scale))),repeating-linear-gradient(90deg, black, black calc(8px / var(--ueb-scale)), transparent calc(9px / var(--ueb-scale)), transparent calc(11px / var(--ueb-scale))),repeating-linear-gradient(180deg, transparent, transparent calc(1px / var(--ueb-scale)), white calc(1px / var(--ueb-scale)), white calc(7px / var(--ueb-scale)), transparent calc(7px / var(--ueb-scale)), transparent calc(11px / var(--ueb-scale))),repeating-linear-gradient(180deg, black, black calc(8px / var(--ueb-scale)), transparent calc(9px / var(--ueb-scale)), transparent calc(11px / var(--ueb-scale))),repeating-linear-gradient(0deg, transparent, transparent calc(1px / var(--ueb-scale)), white calc(2px / var(--ueb-scale)), white calc(7px / var(--ueb-scale)), transparent calc(7px / var(--ueb-scale)), transparent calc(11px / var(--ueb-scale))),repeating-linear-gradient(0deg, black, black calc(8px / var(--ueb-scale)), transparent calc(9px / var(--ueb-scale)), transparent calc(11px / var(--ueb-scale)));background-size:100% calc(1px/var(--ueb-scale)),100% calc(3px/var(--ueb-scale)),100% calc(1px/var(--ueb-scale)),100% calc(3px/var(--ueb-scale)),calc(1px/var(--ueb-scale)) 100%,calc(3px/var(--ueb-scale)) 100%,calc(1px/var(--ueb-scale)) 100%,calc(3px/var(--ueb-scale)) 100%;background-position:0 calc(1px/var(--ueb-scale)),0 0,0 calc(100% - 1px/var(--ueb-scale)),0 100%,calc(1px/var(--ueb-scale)) 0,0 0,calc(100% - 1px/var(--ueb-scale)) 0,100% 0;background-repeat:no-repeat}ueb-blueprint[data-selecting=true] ueb-selector{visibility:visible}ueb-selector>*{visibility:visible}.ueb-ellipsis-nowrap-text{white-space:nowrap;text-overflow:ellipsis;overflow:hidden}ueb-node.ueb-node-style-minimal{box-shadow:none}ueb-node.ueb-node-style-minimal ueb-pin{margin:0;padding:0;min-height:0}ueb-node.ueb-node-style-minimal ueb-pin[data-direction=input]{display:none}ueb-node.ueb-node-style-minimal .ueb-node-border{padding:8px 16px;background:none !important}ueb-node.ueb-node-style-minimal .ueb-pin-wrapper{margin:0;padding:4px 6px}ueb-node.ueb-node-style-minimal[data-selected=true] .ueb-node-border{box-shadow:inset 0 0 0px 6px #d29e07}ueb-link{position:absolute;--ueb-link-color: rgb(var(--ueb-link-color-rgb));--ueb-from-input-coefficient: calc(2 * var(--ueb-from-input) - 1);--ueb-y-reflected: clamp(0, var(--ueb-from-y) - var(--ueb-to-y) - 1, 1);display:block;margin-left:calc(var(--ueb-link-start)*-1px);min-width:calc(var(--ueb-link-min-width)*1px);visibility:hidden}ueb-link>svg{--ueb-y-reflected-coefficient: calc(2 * var(--ueb-y-reflected) - 1);position:absolute;width:100% !important;height:100% !important;min-height:1px !important;transform:scaleY(calc(var(--ueb-y-reflected-coefficient) * var(--ueb-from-input-coefficient)));z-index:1}ueb-link .ueb-link-path{visibility:visible;stroke:var(--ueb-link-color);stroke-width:calc(1.5px/var(--ueb-scale));transition:stroke-width .8s}ueb-link .ueb-link-area{visibility:visible;stroke-width:20px}ueb-link[data-dragging=true] .ueb-link-path,.ueb-link-area:hover~.ueb-link-path{stroke-width:calc(6px/var(--ueb-scale))}ueb-link[data-dragging=true] .ueb-link-message{display:block;visibility:visible}.ueb-link-message{display:none;position:absolute;top:calc(100%*(1 - var(--ueb-y-reflected)) + 22px);left:calc((1 - var(--ueb-from-input))*100% + (var(--ueb-from-input-coefficient))*var(--ueb-start-percentage) + 15px);border:1px solid #000;border-radius:2px;background:linear-gradient(to bottom, #2a2a2a 0, #151515 50%, #2a2a2a 100%);color:var(--ueb-pin-dim-color);white-space:nowrap;z-index:1000000}.ueb-link-message-icon{display:inline-block;padding:4px;width:16px;height:16px;vertical-align:middle}.ueb-link-message-text{padding:4px;padding-left:0;vertical-align:middle}.ueb-link-message-icon svg{width:100%;height:100%}ueb-node{display:block;position:absolute;min-width:100px;border-radius:var(--ueb-node-radius);box-shadow:0 0 1px 0 #000,1px 4px 6px 0 rgba(0,0,0,.6);font-weight:lighter}ueb-node.ueb-node-style-minimal,ueb-node.ueb-node-style-comment{min-width:0}.ueb-zoom--2 ueb-node{box-shadow:none}.ueb-node-border{margin:-3px;padding:3px;border-radius:calc(var(--ueb-node-radius)*1.4)}.ueb-zoom--2 .ueb-node-border{margin:0;padding:0}ueb-node[data-selected=true]>.ueb-node-border{background-image:linear-gradient(to right, #f1b000 0%, #f1b000 100%),linear-gradient(to bottom, #f1b000 0%, #cc6700 100%),linear-gradient(to right, #cc6700 0%, #cc6700 100%),linear-gradient(to bottom, #f1b000 0%, #cc6700 100%);background-size:100% 7px,7px 100%,100% 7px,7px 100%;background-position:top,right,bottom,left;background-repeat:repeat-x,repeat-y,repeat-x,repeat-y}.ueb-zoom--2 ueb-node[data-selected=true]>.ueb-node-border{background:none !important;outline:3px solid #ff8d00}.ueb-zoom--10 ueb-node[data-selected=true]>.ueb-node-border{outline-width:8px}.ueb-node-wrapper{display:grid;grid-template:"top top top" min-content "input center output" min-content "input center variadic" 1fr "development development development" min-content "expansion expansion expansion" min-content/min-content auto min-content;justify-items:space-between;padding:1px;box-sizing:border-box;box-shadow:inset 0 0 2px 0 #000;border-radius:var(--ueb-node-radius);background:rgba(14,16,10,.8);overflow:hidden}ueb-node.ueb-node-style-operation .ueb-node-wrapper{grid-template-rows:min-content auto auto min-content min-content;grid-template-columns:50% 0% 1fr;box-shadow:none}.ueb-node-outputs ueb-pin[data-type=exec] .ueb-pin-wrapper{min-height:26px}ueb-node.ueb-node-style-operation.ueb-node-has-inputs .ueb-node-inputs{align-self:center;padding-right:40px}.ueb-node-style-operation:not(.ueb-node-is-variadic) .ueb-node-outputs{grid-row:2/4;align-self:center}ueb-blueprint[data-scrolling=false][data-selecting=false] .ueb-draggable{cursor:move}.ueb-zoom--2 .ueb-node-wrapper{box-shadow:none;padding:0;background:#101010}.ueb-node-top{grid-area:top;color:#d0d0d0;font-size:103%;font-weight:bold;line-height:120%;white-space:nowrap}ueb-node.ueb-node-style-setter .ueb-node-top{max-height:5px}ueb-node.ueb-node-style-comment .ueb-node-top{white-space:normal}ueb-node.ueb-node-style-event .ueb-node-top{display:flex;justify-content:space-between;align-items:center;padding-right:2px}.ueb-node-style-default .ueb-node-top{padding:2px 20px 2px 8px;box-shadow:inset 5px 1px 5px -3px rgba(255,255,255,.2509803922),inset 0 1px 2px 0 rgba(255,255,255,.2509803922);border-radius:var(--ueb-node-radius) var(--ueb-node-radius) 0 0;background:linear-gradient(rgba(255, 255, 255, 0.1882352941) 1px, transparent 1px),linear-gradient(170deg, rgb(var(--ueb-node-color)) 0%, rgb(var(--ueb-node-color)) 50%, transparent 100%)}.ueb-zoom--2 .ueb-node-top{box-shadow:none}.ueb-zoom--2 .ueb-node-style-default .ueb-node-top{background:rgb(var(--ueb-node-color))}.ueb-node-name{display:flex;align-items:center;background:radial-gradient(ellipse 100% 100% at 35% 55%, rgba(0, 0, 0, 0.5) 15%, transparent 50%);margin:-1px -15px;padding:2px 15px}.ueb-node-style-setter .ueb-node-name{justify-content:center}.ueb-node-name:last-child{padding-right:26px}.ueb-zoom--2 .ueb-node-name{background:none}.ueb-zoom--8 .ueb-node-name{visibility:hidden}.ueb-node-name-symbol{align-self:flex-start;margin-right:5px;width:16px;height:16px;color:#74bff2}ueb-node[data-pure-function=true] .ueb-node-name-symbol{color:#aaeda0}.ueb-node-name-symbol path{vertical-align:middle}.ueb-node-subtitle-text{padding-top:1px;padding-right:5px;font-size:calc(.946154*var(--ueb-font-size));font-weight:100;font-style:italic;color:#a9b78f}.ueb-node-inputs{grid-area:input}ueb-node.ueb-node-has-inputs .ueb-node-inputs{padding-right:15px;padding-left:6px}.ueb-node-outputs{grid-area:output}.ueb-node-outputs,.ueb-node-variadic{padding-right:6px}.ueb-node-variadic{grid-area:variadic;margin-top:10px;margin-bottom:5px;align-self:start;justify-self:end;white-space:nowrap;cursor:pointer}.ueb-node-developmentonly{grid-area:development;margin-top:4px;padding:2px;background:repeating-linear-gradient(-45deg, transparent 0, #57590a 1px, #57590a 11px, transparent 12px, transparent 24px);background:repeating-linear-gradient(-45deg, transparent 0, #57590a 1px, #57590a 11px, transparent 12px, transparent 24px);text-align:center}.ueb-node-developmentonly-text{padding:0 10px;letter-spacing:.04em;text-shadow:1px 1px 1px #000;white-space:nowrap}.ueb-zoom--6 .ueb-node-developmentonly-text{visibility:hidden}.ueb-node-expansion{grid-area:expansion;display:none;text-align:center}ueb-node[data-advanced-display] .ueb-node-expansion{display:block}ueb-blueprint[data-scrolling=false][data-selecting=false] .ueb-node-expansion:hover{background-color:#656765;cursor:pointer}.ueb-zoom--8 .ueb-node-expansion{visibility:hidden}.ueb-node-variadic>svg,.ueb-node-expansion>svg{width:16px;height:16px;vertical-align:middle}ueb-node[data-advanced-display=Shown] .ueb-node-expansion>svg{transform:scaleY(-1)}ueb-node.ueb-node-style-glass .ueb-node-wrapper,ueb-node.ueb-node-style-glass .ueb-node-border,ueb-node.ueb-node-style-glass{min-width:128px;border-radius:15px}ueb-node.ueb-node-style-glass .ueb-node-wrapper{border:1px solid #000;box-shadow:0 1px 0 0 rgba(255,255,255,.6) inset;padding:3px;background:linear-gradient(to bottom, rgba(255, 255, 255, 0.3) 0, rgba(255, 255, 255, 0.2) 4px, rgba(0, 0, 0, 0.3) 14px),linear-gradient(to right, transparent 10%, rgba(var(--ueb-node-color), 0.3) 50%, transparent 90%);background-size:100%,100% 28px;background-repeat:repeat,no-repeat}ueb-node.ueb-node-style-glass .ueb-node-name{padding-right:0;padding-left:0}ueb-node[data-selected=true] .ueb-node-border{box-shadow:inset 0 0 0px 6px #ce8700;background:none}ueb-node.ueb-node-style-glass .ueb-node-top,ueb-node.ueb-node-style-glass .ueb-node-name{margin:0;box-shadow:none;border-radius:0;background:none}ueb-node.ueb-node-style-glass .ueb-node-outputs:first-child{padding-left:12px}ueb-node.ueb-node-style-operation .ueb-node-top{grid-area:center;align-self:center;justify-self:center;padding:0;font-size:215%;font-stretch:condensed;font-weight:bold;line-height:100%}ueb-node.ueb-node-style-operation.ueb-node-style-metasound .ueb-node-top{font-size:333%;font-stretch:expanded}ueb-node.ueb-node-style-operation.ueb-node-style-glass .ueb-node-top{z-index:-1}ueb-node.ueb-node-style-operation .ueb-node-outputs{align-self:end}ueb-node.ueb-node-style-operation .ueb-node-variadic{align-self:start;margin-top:12px;margin-left:-100px}ueb-node.ueb-node-style-metasound .ueb-node-wrapper{border:1px solid #000;box-shadow:0 1px 0 0 rgba(255,255,255,.4) inset;background:linear-gradient(to bottom, rgba(52, 55, 52, 0.9) 0, rgba(42, 44, 42, 0.9) 8px, rgba(31, 32, 31, 0.8) 16px, rgba(13, 14, 13, 0.9))}ueb-node.ueb-node-style-metasound .ueb-node-name-text,ueb-node.ueb-node-style-metasound .ueb-node-name-symbol{color:#8cc483}ueb-node.ueb-node-style-metasound.ueb-node-style-operation .ueb-node-name-text{color:#7c7c7c}ueb-node.ueb-node-style-metasound .ueb-node-name{margin:0px;padding:1px 15px;justify-content:center;background:none}ueb-node:not(.ueb-node-style-comment){z-index:10}ueb-node.ueb-node-style-comment .ueb-node-border{height:100%}ueb-node.ueb-node-style-comment .ueb-node-wrapper{position:relative;padding:0;height:100%;border-radius:0;background:rgba(var(--ueb-node-color), 0.35);box-shadow:none}ueb-node.ueb-node-style-comment .ueb-node-wrapper::after{content:"";display:block;position:absolute;right:3px;bottom:3px;width:16px;height:16px;background:linear-gradient(135deg, transparent 50%, #fff 50%, #fff calc(50% + 2px), transparent calc(50% + 2px), transparent calc(50% + 3px), #fff calc(50% + 3px), #fff calc(50% + 5px), transparent calc(50% + 5px), transparent calc(50% + 7px), #fff calc(50% + 7px), #fff calc(50% + 9px), transparent calc(50% + 9px))}ueb-node.ueb-node-style-comment .ueb-node-top{position:relative;margin:3px;padding:3px 10px;box-shadow:none;border-radius:0;background:rgb(var(--ueb-node-color));color:#fff;font-size:185%;text-shadow:2px 1px 1px #444,0 0 2px #bbb;line-height:1.22;z-index:1}ueb-node.ueb-node-style-conversion .ueb-node-wrapper::after{content:"";display:block;grid-area:center;align-self:center;justify-self:center;margin:10px 10px 10px -6px;width:6px;height:6px;border-radius:3px;background:#8f8f8f}ueb-blueprint{--ueb-pin-color-dim: #afafaf}ueb-pin{--ueb-pin-background: linear-gradient(90deg, rgba(var(--ueb-pin-color-rgb), 0.15), rgba(var(--ueb-pin-color-rgb), 0.8) 15%, rgba(var(--ueb-pin-color-rgb), 0.5) 60%, rgba(var(--ueb-pin-color-rgb), 0.35) 95%, transparent);--ueb-pin-color: rgb(var(--ueb-pin-color-rgb));display:block}.ueb-node-inputs ueb-pin,.ueb-node-outputs ueb-pin{margin:6px 0}ueb-pin.ueb-pin-input-wrap .ueb-pin-content{flex-direction:column;align-items:start}.ueb-node-top ueb-pin{min-height:0;margin-left:10px}.ueb-zoom--10 ueb-pin{visibility:hidden}ueb-node[data-advanced-display=Hidden] ueb-pin[data-advanced-view=true][data-linked=false]{display:none}.ueb-pin-wrapper{display:inline-flex;box-sizing:border-box;padding:3px 6px;min-height:24px;align-items:center}ueb-node.ueb-node-style-operation .ueb-pin-wrapper{padding:0}ueb-node.ueb-node-style-minimal .ueb-pin-wrapper{min-height:0}.ueb-node-top .ueb-pin-wrapper{padding:2px 4px 2px 10px;min-height:0;vertical-align:bottom}ueb-blueprint[data-scrolling=false][data-selecting=false] .ueb-pin-wrapper:hover{background:var(--ueb-pin-background);cursor:crosshair}.ueb-zoom--8 .ueb-pin-wrapper:hover{background:none !important}.ueb-pin-content{display:flex;align-items:center}.ueb-node-outputs ueb-pin{text-align:right}.ueb-pin-icon{color:var(--ueb-pin-color);text-align:left}ueb-pin[data-connectable=false] .ueb-pin-icon{visibility:hidden}.ueb-node-inputs .ueb-pin-icon{margin-right:6px}.ueb-node-outputs .ueb-pin-icon{margin-left:4px}.ueb-pin-icon>svg{display:block}ueb-pin[data-direction=output] .ueb-pin-reflect-output{transform:scaleX(-1)}ueb-pin[data-type=exec] .ueb-pin-icon{width:15px;height:15px;--ueb-pin-color: white}ueb-pin[data-linked=true] .ueb-pin-tofill{fill:currentColor}ueb-pin[data-linked=true] .ueb-pin-tostroke{stroke:#000}ueb-pin.ueb-node-variadic-default{position:relative;margin-top:14px}ueb-pin.ueb-node-variadic-default::before{content:"";display:block;position:absolute;width:100%;height:1px;top:-8px;left:6px;background:linear-gradient(90deg, transparent 0, #404240 6px, #404240 calc(100% - 6px), transparent 100%)}.ueb-zoom--6 .ueb-pin-content{visibility:hidden}ueb-node[data-type="/Script/BlueprintGraph.K2Node_VariableSet"] ueb-pin[data-direction=output] .ueb-pin-content{display:none}.ueb-pin-input-wrapper{display:flex;padding-left:8px}.ueb-pin-input{margin-left:5px;border:1px solid #a0a0a0;border-radius:3px;padding:0 4px 0 4px;color:#e0e0e0}.ueb-pin-input:hover,.ueb-pin-input:active,.ueb-pin-input:focus,.ueb-pin-input:focus-within{background:rgba(255,255,255,.2745098039);outline:none}ueb-pin[data-linked=true] .ueb-pin-input,ueb-pin[data-linked=true] .ueb-pin-input-wrapper{display:none}ueb-pin[data-type=bool] .ueb-pin-input{appearance:none;padding:0;height:18px;width:18px;background-color:#0f0f0f;color:var(--ueb-pin-color)}ueb-pin[data-type=bool] .ueb-pin-input:checked{background-image:url('data:image/svg+xml,')}ueb-pin[data-type="/Script/CoreUObject.LinearColor"] .ueb-pin-input{padding:0;width:18px;height:18px;border-color:#505050;border-radius:0;background-color:var(--ueb-linear-color)}.ueb-pin-input-label~.ueb-pin-input{margin-left:2px}.ueb-pin-input-label{margin-left:10px;color:#777}.ueb-pin-input-label:first-child{margin-left:2px}.ueb-pin-input-content{display:block;outline:none;border:none;padding:0;min-width:10px;max-width:400px;max-height:16em;font-size:97%;white-space:nowrap;background:none;color:inherit;overflow:auto}.ueb-pin-input-content::-webkit-scrollbar{width:10px;height:10px}.ueb-pin-input-content::-webkit-scrollbar-thumb{background:rgba(0,0,0,0);border-radius:10px;margin:4px}.ueb-pin-input-content:hover::-webkit-scrollbar-thumb{background:#575757}ueb-blueprint[data-scrolling=false][data-selecting=false] .ueb-pin-input-content:hover{cursor:text}ueb-dropdown{display:block}ueb-dropdown.ueb-pin-input{margin-right:5px;padding-right:10px;background:#101010 !important;color:silver;border-color:#404040}ueb-dropdown.ueb-pin-input .ueb-pin-input-content{padding:6px;width:max(170px,var(--ueb-dropdown-width));max-width:400px;background:none;font-size:10px;letter-spacing:-0.2px;cursor:default !important}.ueb-button{min-width:60px;border:1px solid #0f0f0f;border-radius:4px;padding:2px 10px;background:#383838;text-align:center;cursor:pointer}.ueb-button:hover{background:#575757}.ueb-buttons{display:flex;justify-content:flex-end;gap:10px;margin-top:20px}.ueb-vertical-slider>ueb-ui-slider{position:relative;padding-bottom:10px}.ueb-vertical-slider>ueb-ui-slider::before,.ueb-vertical-slider>ueb-ui-slider::after{content:"";display:block;position:absolute;width:0;height:0;border:5px solid rgba(0,0,0,0)}.ueb-vertical-slider>ueb-ui-slider::before{left:-4px;border-left-color:#e0e0e0}.ueb-vertical-slider>ueb-ui-slider::after{right:-4px;border-right-color:#e0e0e0}.ueb-horizontal-slider,.ueb-text-input{position:relative;border:1px solid #383838;border-radius:6px;background:#0f0f0f}.ueb-horizontal-slider{position:relative;padding:1px}.ueb-horizontal-slider:hover{cursor:ew-resize}ueb-window .ueb-pin-input-content{padding:1px 10px}.ueb-horizontal-slider>ueb-ui-slider{display:block;position:relative;height:20px;border-radius:5px;background:#383838}.ueb-horizontal-slider-text{position:absolute;padding:0 5px;line-height:20px;z-index:1}.ueb-toggle-control::before{content:"";display:inline-block;border-top:5px solid #e0e0e0;border-left:5px solid rgba(0,0,0,0);border-right:5px solid rgba(0,0,0,0);vertical-align:middle}.ueb-toggle-control:hover{cursor:pointer}.ueb-resizeable-top,.ueb-resizeable-top-right,.ueb-resizeable-top-left{position:absolute;top:0;height:10px}.ueb-resizeable-top{right:0;left:0;cursor:ns-resize}.ueb-resizeable-top-right{right:0;width:10px;cursor:nesw-resize}.ueb-resizeable-top-left{left:0;width:10px;cursor:nwse-resize}.ueb-resizeable-right{position:absolute;top:0;right:0;bottom:0;width:10px;cursor:ew-resize}.ueb-resizeable-bottom,.ueb-resizeable-bottom-right,.ueb-resizeable-bottom-left{position:absolute;bottom:-3px;height:10px;cursor:ns-resize}.ueb-resizeable-bottom{right:0;left:0}.ueb-resizeable-bottom-right{right:0;width:10px;cursor:nwse-resize}.ueb-resizeable-bottom-left{left:0;width:10px;cursor:nesw-resize}.ueb-resizeable-left{position:absolute;top:0;bottom:0;left:0;width:10px;cursor:ew-resize}ueb-window{display:block;position:absolute;border:2px solid #101010;top:0;left:0;transform:translateX(calc(var(--ueb-position-x) * 1px)) translateY(calc(var(--ueb-position-y) * 1px));background:#242424;box-shadow:0 0 2px 0 rgba(0,0,0,.6274509804);z-index:1000}.ueb-window-top{display:flex;flex-direction:row;align-items:center;padding:4px 8px;height:30px;background:#1a1a1a}.ueb-window-content{padding:10px;border:1px solid #303030}.ueb-window-name{flex-grow:1;padding-left:28px;text-align:center}.ueb-window-close{padding:8px;height:12px;width:12px;cursor:pointer}.ueb-color-picker-theme,.ueb-color-picker-srgb{display:inline-block;vertical-align:middle}.ueb-color-picker-main{display:grid;grid-template:1fr/auto min-content min-content min-content}.ueb-color-picker-wheel{position:relative;padding-top:100%;min-width:200px;border-radius:100%;background:radial-gradient(white 5%, transparent 85%),conic-gradient(from 90deg, #FF0000 0deg, #FFFF00 60deg, #00FF00 120deg, #00FFFF 180deg, #0000FF 240deg, #FF00FF 300deg, #FF0000 360deg)}ueb-color-handler{display:block;position:absolute;margin-top:-3px;margin-left:-3px;width:4px;height:4px;border:1px solid #000;border-radius:4px}.ueb-color-picker-wheel ueb-color-handler{left:var(--ueb-color-wheel-x);top:var(--ueb-color-wheel-y)}.ueb-color-picker-saturation,.ueb-color-picker-value{margin:0 6px;padding-bottom:10px;width:25px}.ueb-color-picker-saturation{margin-left:25px;background-image:linear-gradient(to bottom, transparent 10px, #FFFFFF 100%)}.ueb-color-picker-value{margin-right:25px;background-image:linear-gradient(to bottom, transparent 10px, #000000 100%)}ueb-ui-slider{display:block}.ueb-color-picker-saturation ueb-ui-slider{top:calc(100% - var(--ueb-color-s)*100%)}.ueb-color-picker-value ueb-ui-slider{top:calc(100% - var(--ueb-color-v)*100%)}.ueb-color-picker-preview{position:relative;align-self:flex-start}.ueb-color-picker-preview::before,.ueb-color-picker-preview::after{content:"";display:block;position:absolute;top:calc(50% - 1px);width:5px;border-top:2px solid #000}.ueb-color-picker-preview::after{right:0}.ueb-color-picker-preview-old,.ueb-color-picker-preview-new{width:100px;height:40px}.ueb-color-picker-preview-new{display:flex}.ueb-color-picker-preview-1,.ueb-color-picker-preview-2{width:50%}.ueb-color-picker-advanced{display:flex;column-gap:10px;padding-top:5px}.ueb-color-picker-advanced .ueb-color-picker-column{display:flex;flex-direction:column;justify-content:space-between;flex-grow:1;width:50%}.ueb-color-picker-advanced .ueb-color-picker-column>div{display:flex;align-items:center;margin-bottom:8px}.ueb-color-picker-advanced .ueb-color-picker-column>div>div{flex-grow:1}.ueb-color-picker-advanced .ueb-horizontal-slider{flex-grow:1}ueb-ui-slider{max-width:100%}.ueb-color-picker-r .ueb-horizontal-slider>ueb-ui-slider{width:calc(var(--ueb-color-r)*100%)}.ueb-color-picker-g .ueb-horizontal-slider>ueb-ui-slider{width:calc(var(--ueb-color-g)*100%)}.ueb-color-picker-b .ueb-horizontal-slider>ueb-ui-slider{width:calc(var(--ueb-color-b)*100%)}.ueb-color-picker-a .ueb-horizontal-slider>ueb-ui-slider{width:calc(var(--ueb-color-a)*100%)}.ueb-color-picker-h .ueb-horizontal-slider>ueb-ui-slider{width:calc(var(--ueb-color-h)*100%)}.ueb-color-picker-s .ueb-horizontal-slider>ueb-ui-slider{width:calc(var(--ueb-color-s)*100%)}.ueb-color-picker-v .ueb-horizontal-slider>ueb-ui-slider{width:calc(var(--ueb-color-v)*100%)}.ueb-color-picker-gradient{height:6px}.ueb-color-control{align-self:flex-end}.ueb-color-control-label{margin-right:5px;color:silver}.ueb-color-control .ueb-pin-input-content{width:8ch;line-height:20px;font-family:monospace;color:silver}/*# sourceMappingURL=ueb-style.min.css.map */ +@font-face{font-family:"Roboto";font-weight:normal;src:url("../font/roboto-regular.woff2") format("woff2")}@font-face{font-family:"Roboto";font-stretch:condensed;src:url("../font/roboto-condensed-regular.woff2") format("woff2")}ueb-blueprint{--ueb-scale: 1;--ueb-grid-actual-size: var(--ueb-grid-size);display:block;position:relative;font-family:Roboto,Noto,Oxygen,Ubuntu,"Open Sans","Helvetica Neue",sans-serif;font-size:var(--ueb-font-size);color:#fff;user-select:none}ueb-blueprint svg{overflow:visible !important;max-width:none !important}.ueb-viewport-header{display:flex;position:absolute;top:0;right:0;left:0;background:rgba(0,0,0,.5);z-index:1}@keyframes ueb-zoom-animation{0%{color:#7f7f7f}100%{color:#2b2b2b}}.ueb-zoom-changed .ueb-viewport-zoom{animation:1500ms ueb-zoom-animation}.ueb-viewport-zoom{margin-left:auto;padding:5px;color:#2b2b2b;font-size:154%;font-weight:bold;letter-spacing:-1px}.ueb-viewport-body{position:relative;height:var(--ueb-height, 30rem);overflow:hidden;scrollbar-width:0}.ueb-grid{--ueb-grid-line-actual-width: calc(var(--ueb-grid-line-width) / var(--ueb-scale));position:absolute;min-width:100%;min-height:100%;width:calc((100% + 2*var(--ueb-grid-expand))/var(--ueb-scale));height:calc((100% + 2*var(--ueb-grid-expand))/var(--ueb-scale));background-color:#262626;background-image:linear-gradient(var(--ueb-grid-axis-line-color), var(--ueb-grid-axis-line-color)),linear-gradient(var(--ueb-grid-axis-line-color), var(--ueb-grid-axis-line-color)),linear-gradient(to right, var(--ueb-grid-set-line-color), var(--ueb-grid-set-line-color) var(--ueb-grid-line-actual-width), transparent var(--ueb-grid-line-actual-width), transparent),linear-gradient(to bottom, var(--ueb-grid-set-line-color), var(--ueb-grid-set-line-color) var(--ueb-grid-line-actual-width), transparent var(--ueb-grid-line-actual-width), transparent),linear-gradient(to right, var(--ueb-grid-line-color), var(--ueb-grid-line-color) var(--ueb-grid-line-actual-width), transparent var(--ueb-grid-line-actual-width), transparent),linear-gradient(to bottom, var(--ueb-grid-line-color), var(--ueb-grid-line-color) var(--ueb-grid-line-actual-width), transparent var(--ueb-grid-line-actual-width), transparent);background-size:100% var(--ueb-grid-line-actual-width),var(--ueb-grid-line-actual-width) 100%,calc(var(--ueb-grid-set)*var(--ueb-grid-actual-size)) calc(var(--ueb-grid-set)*var(--ueb-grid-actual-size)),calc(var(--ueb-grid-set)*var(--ueb-grid-actual-size)) calc(var(--ueb-grid-set)*var(--ueb-grid-actual-size)),var(--ueb-grid-actual-size) var(--ueb-grid-actual-size),var(--ueb-grid-actual-size) var(--ueb-grid-actual-size);background-position:calc(var(--ueb-translate-x)*1px) calc(var(--ueb-translate-y)*1px);background-repeat:repeat-x,repeat-y,repeat,repeat,repeat,repeat;scale:var(--ueb-scale) var(--ueb-scale);transform-origin:0 0;overflow:hidden}ueb-blueprint[data-scrolling=true] .ueb-grid{cursor:grabbing}ueb-blueprint[data-scrolling=false] .ueb-grid{cursor:default}ueb-blueprint.ueb-zoom--4{--ueb-grid-actual-size: calc(var(--ueb-grid-size) * 2);--ueb-node-radius: 0 !important}ueb-blueprint.ueb-zoom--6{--ueb-grid-actual-size: calc(var(--ueb-grid-size) * 3)}ueb-blueprint.ueb-zoom--11{--ueb-grid-actual-size: calc(var(--ueb-grid-size) * 6)}.ueb-grid-content{position:relative;width:0;height:0;transform:translateX(calc(var(--ueb-translate-x) * 1px)) translateY(calc(var(--ueb-translate-y) * 1px))}.ueb-grid-content>div{width:0;height:0}.ueb-positioned,ueb-blueprint[data-selecting=true] ueb-selector{position:absolute}ueb-selector{display:block;position:absolute;visibility:hidden;top:0;left:0;width:0;height:0;background-image:repeating-linear-gradient(90deg, transparent, transparent calc(1px / var(--ueb-scale)), white calc(2px / var(--ueb-scale)), white calc(7px / var(--ueb-scale)), transparent calc(7px / var(--ueb-scale)), transparent calc(11px / var(--ueb-scale))),repeating-linear-gradient(90deg, black, black calc(8px / var(--ueb-scale)), transparent calc(9px / var(--ueb-scale)), transparent calc(11px / var(--ueb-scale))),repeating-linear-gradient(90deg, transparent, transparent calc(1px / var(--ueb-scale)), white calc(2px / var(--ueb-scale)), white calc(7px / var(--ueb-scale)), transparent calc(7px / var(--ueb-scale)), transparent calc(11px / var(--ueb-scale))),repeating-linear-gradient(90deg, black, black calc(8px / var(--ueb-scale)), transparent calc(9px / var(--ueb-scale)), transparent calc(11px / var(--ueb-scale))),repeating-linear-gradient(180deg, transparent, transparent calc(1px / var(--ueb-scale)), white calc(1px / var(--ueb-scale)), white calc(7px / var(--ueb-scale)), transparent calc(7px / var(--ueb-scale)), transparent calc(11px / var(--ueb-scale))),repeating-linear-gradient(180deg, black, black calc(8px / var(--ueb-scale)), transparent calc(9px / var(--ueb-scale)), transparent calc(11px / var(--ueb-scale))),repeating-linear-gradient(0deg, transparent, transparent calc(1px / var(--ueb-scale)), white calc(2px / var(--ueb-scale)), white calc(7px / var(--ueb-scale)), transparent calc(7px / var(--ueb-scale)), transparent calc(11px / var(--ueb-scale))),repeating-linear-gradient(0deg, black, black calc(8px / var(--ueb-scale)), transparent calc(9px / var(--ueb-scale)), transparent calc(11px / var(--ueb-scale)));background-size:100% calc(1px/var(--ueb-scale)),100% calc(3px/var(--ueb-scale)),100% calc(1px/var(--ueb-scale)),100% calc(3px/var(--ueb-scale)),calc(1px/var(--ueb-scale)) 100%,calc(3px/var(--ueb-scale)) 100%,calc(1px/var(--ueb-scale)) 100%,calc(3px/var(--ueb-scale)) 100%;background-position:0 calc(1px/var(--ueb-scale)),0 0,0 calc(100% - 1px/var(--ueb-scale)),0 100%,calc(1px/var(--ueb-scale)) 0,0 0,calc(100% - 1px/var(--ueb-scale)) 0,100% 0;background-repeat:no-repeat}ueb-blueprint[data-selecting=true] ueb-selector{visibility:visible}ueb-selector>*{visibility:visible}.ueb-ellipsis-nowrap-text{white-space:nowrap;text-overflow:ellipsis;overflow:hidden}ueb-node.ueb-node-style-minimal{box-shadow:none}ueb-node.ueb-node-style-minimal ueb-pin{margin:0;padding:0;min-height:0}ueb-node.ueb-node-style-minimal ueb-pin[data-direction=input]{display:none}ueb-node.ueb-node-style-minimal .ueb-node-border{padding:8px 16px;background:none !important}ueb-node.ueb-node-style-minimal .ueb-pin-wrapper{margin:0;padding:4px 6px}ueb-node.ueb-node-style-minimal[data-selected=true] .ueb-node-border{box-shadow:inset 0 0 0px 6px #d29e07}ueb-link{position:absolute;--ueb-link-color: rgb(var(--ueb-link-color-rgb));display:block;margin-left:calc(var(--ueb-link-start)*-1px);min-width:calc(var(--ueb-link-min-width)*1px);visibility:hidden}ueb-link>svg{position:absolute;width:100% !important;height:100% !important;min-height:1px !important;transform:scaleX(var(--ueb-link-scale-x)) scaleY(var(--ueb-link-scale-y));z-index:1}ueb-link .ueb-link-path{visibility:visible;stroke:var(--ueb-link-color);stroke-width:calc(1.5px/var(--ueb-scale));transition:stroke-width .8s}ueb-link .ueb-link-area{visibility:visible;stroke-width:20px}ueb-link[data-dragging=true] .ueb-link-path,.ueb-link-area:hover~.ueb-link-path{stroke-width:calc(6px/var(--ueb-scale))}ueb-link[data-dragging=true] .ueb-link-message{display:block;visibility:visible}.ueb-link-message{--ueb-link-message-top: calc(50% * (var(--ueb-link-scale-y) + 1) + 22px);--ueb-link-message-left: calc(100% - var(--ueb-start-percentage) + 15px);display:none;position:absolute;top:var(--ueb-link-message-top);left:var(--ueb-link-message-left);border:1px solid #000;border-radius:2px;background:linear-gradient(to bottom, #2a2a2a 0, #151515 50%, #2a2a2a 100%);color:var(--ueb-pin-dim-color);white-space:nowrap;z-index:1000000}ueb-link[data-from-input=true] .ueb-link-message{--ueb-link-message-top: calc(-50% * (var(--ueb-link-scale-y) - 1) + 22px);--ueb-link-message-left: calc(var(--ueb-start-percentage) + 15px)}.ueb-link-message-icon{display:inline-block;padding:4px;width:16px;height:16px;vertical-align:middle}.ueb-link-message-text{padding:4px;padding-left:0;vertical-align:middle}.ueb-link-message-icon svg{width:100%;height:100%}ueb-node{display:block;position:absolute;min-width:100px;border-radius:var(--ueb-node-radius);box-shadow:0 0 1px 0 #000,1px 4px 6px 0 rgba(0,0,0,.6);font-weight:lighter}ueb-node.ueb-node-style-minimal,ueb-node.ueb-node-style-comment{min-width:0}.ueb-zoom--2 ueb-node{box-shadow:none}.ueb-node-border{margin:-3px;padding:3px;border-radius:calc(var(--ueb-node-radius)*1.4)}.ueb-zoom--2 .ueb-node-border{margin:0;padding:0}ueb-node[data-selected=true]>.ueb-node-border{background-image:linear-gradient(to right, #f1b000 0%, #f1b000 100%),linear-gradient(to bottom, #f1b000 0%, #cc6700 100%),linear-gradient(to right, #cc6700 0%, #cc6700 100%),linear-gradient(to bottom, #f1b000 0%, #cc6700 100%);background-size:100% 7px,7px 100%,100% 7px,7px 100%;background-position:top,right,bottom,left;background-repeat:repeat-x,repeat-y,repeat-x,repeat-y}.ueb-zoom--2 ueb-node[data-selected=true]>.ueb-node-border{background:none !important;outline:3px solid #ff8d00}.ueb-zoom--10 ueb-node[data-selected=true]>.ueb-node-border{outline-width:8px}.ueb-node-wrapper{display:grid;grid-template:"top top top" min-content "input center output" min-content "input center variadic" 1fr "development development development" min-content "expansion expansion expansion" min-content/min-content auto min-content;justify-items:space-between;padding:1px;box-sizing:border-box;box-shadow:inset 0 0 2px 0 #000;border-radius:var(--ueb-node-radius);background:rgba(14,16,10,.8);overflow:hidden}ueb-node.ueb-node-style-operation .ueb-node-wrapper{grid-template-rows:min-content auto auto min-content min-content;grid-template-columns:50% 0% 1fr;box-shadow:none}.ueb-node-outputs ueb-pin[data-type=exec] .ueb-pin-wrapper{min-height:26px}ueb-node.ueb-node-style-operation.ueb-node-has-inputs .ueb-node-inputs{align-self:center;padding-right:40px}.ueb-node-style-operation:not(.ueb-node-is-variadic) .ueb-node-outputs{grid-row:2/4;align-self:center}ueb-blueprint[data-scrolling=false][data-selecting=false] .ueb-draggable{cursor:move}.ueb-zoom--2 .ueb-node-wrapper{box-shadow:none;padding:0;background:#101010}.ueb-node-top{grid-area:top;color:#d0d0d0;font-size:103%;font-weight:bold;line-height:120%;white-space:nowrap}ueb-node.ueb-node-style-setter .ueb-node-top{max-height:5px}ueb-node.ueb-node-style-comment .ueb-node-top{white-space:normal}ueb-node.ueb-node-style-event .ueb-node-top{display:flex;justify-content:space-between;align-items:center;padding-right:2px}.ueb-node-style-default .ueb-node-top{padding:2px 20px 2px 8px;box-shadow:inset 5px 1px 5px -3px hsla(0,0%,100%,.2509803922),inset 0 1px 2px 0 hsla(0,0%,100%,.2509803922);border-radius:var(--ueb-node-radius) var(--ueb-node-radius) 0 0;background:linear-gradient(rgba(255, 255, 255, 0.1882352941) 1px, transparent 1px),linear-gradient(170deg, rgb(var(--ueb-node-color)) 0%, rgb(var(--ueb-node-color)) 50%, transparent 100%)}.ueb-zoom--2 .ueb-node-top{box-shadow:none}.ueb-zoom--2 .ueb-node-style-default .ueb-node-top{background:rgb(var(--ueb-node-color))}.ueb-node-name{display:flex;align-items:center;background:radial-gradient(ellipse 100% 100% at 35% 55%, rgba(0, 0, 0, 0.5) 15%, transparent 50%);margin:-1px -15px;padding:2px 15px}.ueb-node-style-setter .ueb-node-name{justify-content:center}.ueb-node-name:last-child{padding-right:26px}.ueb-zoom--2 .ueb-node-name{background:none}.ueb-zoom--8 .ueb-node-name{visibility:hidden}.ueb-node-name-symbol{align-self:flex-start;margin-right:5px;width:16px;height:16px;color:#74bff2}ueb-node[data-pure-function=true] .ueb-node-name-symbol{color:#aaeda0}.ueb-node-name-symbol path{vertical-align:middle}.ueb-node-subtitle-text{padding-top:1px;padding-right:5px;font-size:calc(.946154*var(--ueb-font-size));font-weight:100;font-style:italic;color:#a9b78f}.ueb-node-inputs{grid-area:input}ueb-node.ueb-node-has-inputs .ueb-node-inputs{padding-right:15px;padding-left:6px}.ueb-node-outputs{grid-area:output}.ueb-node-outputs,.ueb-node-variadic{padding-right:6px}.ueb-node-variadic{grid-area:variadic;margin-top:10px;margin-bottom:5px;align-self:start;justify-self:end;white-space:nowrap;cursor:pointer}.ueb-node-developmentonly{grid-area:development;margin-top:4px;padding:2px;background:repeating-linear-gradient(-45deg, transparent 0, #57590a 1px, #57590a 11px, transparent 12px, transparent 24px);background:repeating-linear-gradient(-45deg, transparent 0, #57590a 1px, #57590a 11px, transparent 12px, transparent 24px);text-align:center}.ueb-node-developmentonly-text{padding:0 10px;letter-spacing:.04em;text-shadow:1px 1px 1px #000;white-space:nowrap}.ueb-zoom--6 .ueb-node-developmentonly-text{visibility:hidden}.ueb-node-expansion{grid-area:expansion;display:none;text-align:center}ueb-node[data-advanced-display] .ueb-node-expansion{display:block}ueb-blueprint[data-scrolling=false][data-selecting=false] .ueb-node-expansion:hover{background-color:#656765;cursor:pointer}.ueb-zoom--8 .ueb-node-expansion{visibility:hidden}.ueb-node-variadic>svg,.ueb-node-expansion>svg{width:16px;height:16px;vertical-align:middle}ueb-node[data-advanced-display=Shown] .ueb-node-expansion>svg{transform:scaleY(-1)}ueb-node.ueb-node-style-glass .ueb-node-wrapper,ueb-node.ueb-node-style-glass .ueb-node-border,ueb-node.ueb-node-style-glass{min-width:128px;border-radius:15px}ueb-node.ueb-node-style-glass .ueb-node-wrapper{border:1px solid #000;box-shadow:0 1px 0 0 hsla(0,0%,100%,.6) inset;padding:3px;background:linear-gradient(to bottom, rgba(255, 255, 255, 0.3) 0, rgba(255, 255, 255, 0.2) 4px, rgba(0, 0, 0, 0.3) 14px),linear-gradient(to right, transparent 10%, rgba(var(--ueb-node-color), 0.3) 50%, transparent 90%);background-size:100%,100% 28px;background-repeat:repeat,no-repeat}ueb-node.ueb-node-style-glass .ueb-node-name{padding-right:0;padding-left:0}ueb-node[data-selected=true] .ueb-node-border{box-shadow:inset 0 0 0px 6px #ce8700;background:none}ueb-node.ueb-node-style-glass .ueb-node-top,ueb-node.ueb-node-style-glass .ueb-node-name{margin:0;box-shadow:none;border-radius:0;background:none}ueb-node.ueb-node-style-glass .ueb-node-outputs:first-child{padding-left:12px}ueb-node.ueb-node-style-operation .ueb-node-top{grid-area:center;align-self:center;justify-self:center;padding:0;font-size:215%;font-stretch:condensed;font-weight:bold;line-height:100%}ueb-node.ueb-node-style-operation.ueb-node-style-metasound .ueb-node-top{font-size:333%;font-stretch:expanded}ueb-node.ueb-node-style-operation.ueb-node-style-glass .ueb-node-top{z-index:-1}ueb-node.ueb-node-style-operation .ueb-node-outputs{align-self:end}ueb-node.ueb-node-style-operation .ueb-node-variadic{align-self:start;margin-top:12px;margin-left:-100px}ueb-node.ueb-node-style-metasound .ueb-node-wrapper{border:1px solid #000;box-shadow:0 1px 0 0 hsla(0,0%,100%,.4) inset;background:linear-gradient(to bottom, rgba(52, 55, 52, 0.9) 0, rgba(42, 44, 42, 0.9) 8px, rgba(31, 32, 31, 0.8) 16px, rgba(13, 14, 13, 0.9))}ueb-node.ueb-node-style-metasound .ueb-node-name-text,ueb-node.ueb-node-style-metasound .ueb-node-name-symbol{color:#8cc483}ueb-node.ueb-node-style-metasound.ueb-node-style-operation .ueb-node-name-text{color:#7c7c7c}ueb-node.ueb-node-style-metasound .ueb-node-name{margin:0px;padding:1px 15px;justify-content:center;background:none}ueb-node:not(.ueb-node-style-comment){z-index:10}ueb-node.ueb-node-style-comment .ueb-node-border{height:100%}ueb-node.ueb-node-style-comment .ueb-node-wrapper{position:relative;padding:0;height:100%;border-radius:0;background:rgba(var(--ueb-node-color), 0.35);box-shadow:none}ueb-node.ueb-node-style-comment .ueb-node-wrapper::after{content:"";display:block;position:absolute;right:3px;bottom:3px;width:16px;height:16px;background:linear-gradient(135deg, transparent 50%, #fff 50%, #fff calc(50% + 2px), transparent calc(50% + 2px), transparent calc(50% + 3px), #fff calc(50% + 3px), #fff calc(50% + 5px), transparent calc(50% + 5px), transparent calc(50% + 7px), #fff calc(50% + 7px), #fff calc(50% + 9px), transparent calc(50% + 9px))}ueb-node.ueb-node-style-comment .ueb-node-top{position:relative;margin:3px;padding:3px 10px;box-shadow:none;border-radius:0;background:rgb(var(--ueb-node-color));color:#fff;font-size:185%;text-shadow:2px 1px 1px #444,0 0 2px #bbb;line-height:1.22;z-index:1}ueb-node.ueb-node-style-conversion .ueb-node-wrapper::after{content:"";display:block;grid-area:center;align-self:center;justify-self:center;margin:10px 10px 10px -6px;width:6px;height:6px;border-radius:3px;background:#8f8f8f}ueb-blueprint{--ueb-pin-color-dim: #afafaf}ueb-pin{--ueb-pin-background: linear-gradient(90deg, rgba(var(--ueb-pin-color-rgb), 0.15), rgba(var(--ueb-pin-color-rgb), 0.8) 15%, rgba(var(--ueb-pin-color-rgb), 0.5) 60%, rgba(var(--ueb-pin-color-rgb), 0.35) 95%, transparent);--ueb-pin-color: rgb(var(--ueb-pin-color-rgb));display:block}.ueb-node-inputs ueb-pin,.ueb-node-outputs ueb-pin{margin:6px 0}ueb-pin.ueb-pin-input-wrap .ueb-pin-content{flex-direction:column;align-items:start}.ueb-node-top ueb-pin{min-height:0;margin-left:10px}.ueb-zoom--10 ueb-pin{visibility:hidden}ueb-node[data-advanced-display=Hidden] ueb-pin[data-advanced-view=true][data-linked=false]{display:none}.ueb-pin-wrapper{display:inline-flex;box-sizing:border-box;padding:3px 6px;min-height:24px;align-items:center}ueb-node.ueb-node-style-operation .ueb-pin-wrapper{padding:0}ueb-node.ueb-node-style-minimal .ueb-pin-wrapper{min-height:0}.ueb-node-top .ueb-pin-wrapper{padding:2px 4px 2px 10px;min-height:0;vertical-align:bottom}ueb-blueprint[data-scrolling=false][data-selecting=false] .ueb-pin-wrapper:hover{background:var(--ueb-pin-background);cursor:crosshair}.ueb-zoom--8 .ueb-pin-wrapper:hover{background:none !important}.ueb-pin-content{display:flex;align-items:center}.ueb-node-outputs ueb-pin{text-align:right}.ueb-pin-icon{color:var(--ueb-pin-color);text-align:left}ueb-pin[data-connectable=false] .ueb-pin-icon{visibility:hidden}.ueb-node-inputs .ueb-pin-icon{margin-right:6px}.ueb-node-outputs .ueb-pin-icon{margin-left:4px}.ueb-pin-icon>svg{display:block}ueb-pin[data-direction=output] .ueb-pin-reflect-output{transform:scaleX(-1)}ueb-pin[data-type=exec] .ueb-pin-icon{width:15px;height:15px;--ueb-pin-color: white}ueb-pin[data-linked=true] .ueb-pin-tofill{fill:currentColor}ueb-pin[data-linked=true] .ueb-pin-tostroke{stroke:#000}ueb-pin.ueb-node-variadic-default{position:relative;margin-top:14px}ueb-pin.ueb-node-variadic-default::before{content:"";display:block;position:absolute;width:100%;height:1px;top:-8px;left:6px;background:linear-gradient(90deg, transparent 0, #404240 6px, #404240 calc(100% - 6px), transparent 100%)}.ueb-zoom--6 .ueb-pin-content{visibility:hidden}ueb-node[data-type="/Script/BlueprintGraph.K2Node_VariableSet"] ueb-pin[data-direction=output] .ueb-pin-content{display:none}.ueb-pin-input-wrapper{display:flex;padding-left:8px}.ueb-pin-input{margin-left:5px;border:1px solid #a0a0a0;border-radius:3px;padding:0 4px 0 4px;color:#e0e0e0}.ueb-pin-input:hover,.ueb-pin-input:active,.ueb-pin-input:focus,.ueb-pin-input:focus-within{background:hsla(0,0%,100%,.2745098039);outline:none}.ueb-pin-input[type=checkbox]{display:grid;place-content:center;appearance:none;width:18px;height:18px;border:1px solid #353535;background:#0f0f0f}.ueb-pin-input[type=checkbox]:checked::before{content:"";height:.7em;width:.8em;clip-path:polygon(14% 44%, 0 65%, 50% 100%, 100% 16%, 80% 0%, 43% 62%);background:#0070e0}ueb-pin[data-linked=true] .ueb-pin-input,ueb-pin[data-linked=true] .ueb-pin-input-wrapper{display:none}ueb-pin[data-type=bool] .ueb-pin-input{appearance:none;padding:0;height:18px;width:18px;background-color:#0f0f0f;color:var(--ueb-pin-color)}ueb-pin[data-type=bool] .ueb-pin-input:checked{background-image:url('data:image/svg+xml,')}ueb-pin[data-type="/Script/CoreUObject.LinearColor"] .ueb-pin-input{padding:0;width:18px;height:18px;border-color:#505050;border-radius:0;background-color:var(--ueb-linear-color)}.ueb-pin-input-label~.ueb-pin-input{margin-left:2px}.ueb-pin-input-label{margin-left:10px;color:#777}.ueb-pin-input-label:first-child{margin-left:2px}.ueb-pin-input-content{display:block;outline:none;border:none;padding:0;min-width:10px;max-width:400px;max-height:16em;font-size:97%;white-space:nowrap;background:none;color:inherit;overflow:auto}.ueb-pin-input-content::-webkit-scrollbar{width:10px;height:10px}.ueb-pin-input-content::-webkit-scrollbar-thumb{background:rgba(0,0,0,0);border-radius:10px;margin:4px}.ueb-pin-input-content:hover::-webkit-scrollbar-thumb{background:#575757}ueb-blueprint[data-scrolling=false][data-selecting=false] .ueb-pin-input-content:hover{cursor:text}ueb-dropdown{display:block}ueb-dropdown.ueb-pin-input{margin-right:5px;padding-right:10px;background:#101010 !important;color:silver;border-color:#404040}ueb-dropdown.ueb-pin-input .ueb-pin-input-content{padding:6px;width:max(170px,var(--ueb-dropdown-width));max-width:400px;background:none;font-size:10px;letter-spacing:-0.2px;cursor:default !important}.ueb-button{min-width:60px;border:1px solid #0f0f0f;border-radius:4px;padding:2px 10px;background:#383838;text-align:center;cursor:pointer}.ueb-button:hover{background:#575757}.ueb-buttons{display:flex;justify-content:flex-end;gap:10px;margin-top:20px}.ueb-vertical-slider>ueb-ui-slider{position:relative;padding-bottom:10px}.ueb-vertical-slider>ueb-ui-slider::before,.ueb-vertical-slider>ueb-ui-slider::after{content:"";display:block;position:absolute;width:0;height:0;border:5px solid rgba(0,0,0,0)}.ueb-vertical-slider>ueb-ui-slider::before{left:-4px;border-left-color:#e0e0e0}.ueb-vertical-slider>ueb-ui-slider::after{right:-4px;border-right-color:#e0e0e0}.ueb-horizontal-slider,.ueb-text-input{position:relative;border:1px solid #383838;border-radius:6px;background:#0f0f0f}.ueb-horizontal-slider{position:relative;padding:1px}.ueb-horizontal-slider:hover{cursor:ew-resize}ueb-window .ueb-pin-input-content{padding:1px 10px}.ueb-horizontal-slider>ueb-ui-slider{display:block;position:relative;height:20px;border-radius:5px;background:#383838}.ueb-horizontal-slider-text{position:absolute;padding:0 5px;line-height:20px;z-index:1}.ueb-toggle-control::before{content:"";display:inline-block;border-top:5px solid #e0e0e0;border-left:5px solid rgba(0,0,0,0);border-right:5px solid rgba(0,0,0,0);vertical-align:middle}.ueb-toggle-control:hover{cursor:pointer}.ueb-resizeable-top,.ueb-resizeable-top-right,.ueb-resizeable-top-left{position:absolute;top:0;height:10px}.ueb-resizeable-top{right:0;left:0;cursor:ns-resize}.ueb-resizeable-top-right{right:0;width:10px;cursor:nesw-resize}.ueb-resizeable-top-left{left:0;width:10px;cursor:nwse-resize}.ueb-resizeable-right{position:absolute;top:0;right:0;bottom:0;width:10px;cursor:ew-resize}.ueb-resizeable-bottom,.ueb-resizeable-bottom-right,.ueb-resizeable-bottom-left{position:absolute;bottom:-3px;height:10px;cursor:ns-resize}.ueb-resizeable-bottom{right:0;left:0}.ueb-resizeable-bottom-right{right:0;width:10px;cursor:nwse-resize}.ueb-resizeable-bottom-left{left:0;width:10px;cursor:nesw-resize}.ueb-resizeable-left{position:absolute;top:0;bottom:0;left:0;width:10px;cursor:ew-resize}ueb-window{display:block;position:absolute;border:2px solid #101010;top:0;left:0;transform:translateX(calc(var(--ueb-position-x) * 1px)) translateY(calc(var(--ueb-position-y) * 1px));background:#242424;box-shadow:0 0 2px 0 rgba(0,0,0,.6274509804);z-index:1000}.ueb-window-top{display:flex;flex-direction:row;align-items:center;padding:4px 8px;height:30px;background:#1a1a1a}.ueb-window-content{padding:10px;border:1px solid #303030}.ueb-window-name{flex-grow:1;padding-left:28px;text-align:center}.ueb-window-close{padding:8px;height:12px;width:12px;cursor:pointer}.ueb-color-picker-theme,.ueb-color-picker-srgb{display:inline-block;vertical-align:middle}.ueb-color-picker-main{display:grid;grid-template:1fr/auto min-content min-content min-content}.ueb-color-picker-wheel{position:relative;padding-top:100%;min-width:200px;border-radius:100%;background:radial-gradient(white 5%, transparent 85%),conic-gradient(from 90deg, #FF0000 0deg, #FFFF00 60deg, #00FF00 120deg, #00FFFF 180deg, #0000FF 240deg, #FF00FF 300deg, #FF0000 360deg)}ueb-color-handler{display:block;position:absolute;margin-top:-3px;margin-left:-3px;width:4px;height:4px;border:1px solid #000;border-radius:4px}.ueb-color-picker-wheel ueb-color-handler{left:var(--ueb-color-wheel-x);top:var(--ueb-color-wheel-y)}.ueb-color-picker-saturation,.ueb-color-picker-value{margin:0 6px;padding-bottom:10px;width:25px}.ueb-color-picker-saturation{margin-left:25px;background-image:linear-gradient(to bottom, transparent 10px, #FFFFFF 100%)}.ueb-color-picker-value{margin-right:25px;background-image:linear-gradient(to bottom, transparent 10px, #000000 100%)}ueb-ui-slider{display:block}.ueb-color-picker-saturation ueb-ui-slider{top:calc(100% - var(--ueb-color-s)*100%)}.ueb-color-picker-value ueb-ui-slider{top:calc(100% - var(--ueb-color-v)*100%)}.ueb-color-picker-preview{position:relative;align-self:flex-start}.ueb-color-picker-preview::before,.ueb-color-picker-preview::after{content:"";display:block;position:absolute;top:calc(50% - 1px);width:5px;border-top:2px solid #000}.ueb-color-picker-preview::after{right:0}.ueb-color-picker-preview-old,.ueb-color-picker-preview-new{width:100px;height:40px}.ueb-color-picker-preview-new{display:flex}.ueb-color-picker-preview-1,.ueb-color-picker-preview-2{width:50%}.ueb-color-picker-advanced{display:flex;column-gap:10px;padding-top:5px}.ueb-color-picker-advanced .ueb-color-picker-column{display:flex;flex-direction:column;justify-content:space-between;flex-grow:1;width:50%}.ueb-color-picker-advanced .ueb-color-picker-column>div{display:flex;align-items:center;margin-bottom:8px}.ueb-color-picker-advanced .ueb-color-picker-column>div>div{flex-grow:1}.ueb-color-picker-advanced .ueb-horizontal-slider{flex-grow:1}ueb-ui-slider{max-width:100%}.ueb-color-picker-r .ueb-horizontal-slider>ueb-ui-slider{width:calc(var(--ueb-color-r)*100%)}.ueb-color-picker-g .ueb-horizontal-slider>ueb-ui-slider{width:calc(var(--ueb-color-g)*100%)}.ueb-color-picker-b .ueb-horizontal-slider>ueb-ui-slider{width:calc(var(--ueb-color-b)*100%)}.ueb-color-picker-a .ueb-horizontal-slider>ueb-ui-slider{width:calc(var(--ueb-color-a)*100%)}.ueb-color-picker-h .ueb-horizontal-slider>ueb-ui-slider{width:calc(var(--ueb-color-h)*100%)}.ueb-color-picker-s .ueb-horizontal-slider>ueb-ui-slider{width:calc(var(--ueb-color-s)*100%)}.ueb-color-picker-v .ueb-horizontal-slider>ueb-ui-slider{width:calc(var(--ueb-color-v)*100%)}.ueb-color-picker-gradient{height:6px}.ueb-color-control{align-self:flex-end}.ueb-color-control-label{margin-right:5px;color:silver}.ueb-color-control .ueb-pin-input-content{width:8ch;line-height:20px;font-family:monospace;color:silver}/*# sourceMappingURL=ueb-style.min.css.map */ diff --git a/dist/css/ueb-style.min.css.map b/dist/css/ueb-style.min.css.map old mode 100644 new mode 100755 index 90f73e0..90f218f --- a/dist/css/ueb-style.min.css.map +++ b/dist/css/ueb-style.min.css.map @@ -1 +1 @@ -{"version":3,"sourceRoot":"","sources":["../../scss/style.scss","../../scss/ueb-knot.scss","../../scss/ueb-link.scss","../../scss/ueb-node.scss","../../scss/ueb-pin.scss","../../scss/ueb-ui-controls.scss","../../scss/ueb-window.scss"],"names":[],"mappings":"AAAA,WACI,qBACA,mBACA,wDAGJ,WACI,qBACA,uBACA,kEAGJ,cACI,eACA,6CACA,cACA,kBACA,8EACA,+BACA,WACA,iBAGJ,kBACI,4BACA,0BAGJ,qBACI,aACA,kBACA,MACA,QACA,OACA,0BACA,UAGJ,8BACI,GACI,cAGJ,KACI,eAIR,qCACI,mCAGJ,mBACI,iBACA,YACA,cAEA,eACA,iBACA,oBAGJ,mBACI,kBACA,gCACA,gBACA,kBAGJ,UACI,kFACA,kBACA,eACA,gBACA,+DACA,gEACA,yBACA,iBAEI,s3BA0BJ,gBAEI,sZAQJ,sFACA,gEACA,wCACA,qBACA,gBAGJ,6CACI,gBAGJ,8CACI,eAGJ,0BACI,uDACA,gCAGJ,0BACI,uDAGJ,2BACI,uDAGJ,kBACI,kBACA,QACA,SACA,wGAGJ,sBACI,QACA,SAGJ,gEACI,kBAGJ,aACI,cACA,kBACA,kBACA,MACA,OACA,QACA,SACA,iBAEI,wlDAmDJ,gBAEI,gQAWJ,oBAEI,wJAOJ,4BAGJ,gDACI,mBAIJ,eACI,mBAGJ,0BACI,mBACA,uBACA,gBCjQJ,gCACI,gBAGJ,wCACI,SACA,UACA,aAGJ,8DACI,aAGJ,iDACI,iBACA,2BAGJ,iDACI,SACA,gBAGJ,qEACI,qCCvBJ,SACI,kBACA,iDACA,kEAEA,wEACA,cACA,6CACA,8CAKA,kBAGJ,aACI,oEACA,kBACA,sBACA,uBACA,0BACA,+FACA,UAGJ,wBACI,mBACA,6BACA,0CACA,4BAGJ,wBACI,mBACA,kBAGJ,gFAEI,wCAGJ,+CACI,cACA,mBAGJ,kBACI,aACA,kBACA,mDACA,qHAOA,sBACA,kBACA,4EACA,+BACA,mBACA,gBAGJ,uBACI,qBACA,YACA,WACA,YACA,sBAGJ,uBACI,YACA,eACA,sBAGJ,2BACI,WACA,YCrFJ,SACI,cACA,kBACA,gBACA,qCACA,uDACA,oBAGJ,gEAEI,YAGJ,sBACI,gBAGJ,iBACI,YACA,YACA,+CAGJ,8BACI,SACA,UAGJ,8CACI,iBACI,kNAIJ,oDACA,0CACA,sDAGJ,2DACI,2BACA,0BAGJ,4DACI,kBAGJ,kBACI,aACA,cACI,mNAOJ,4BACA,YACA,sBACA,gCACA,qCACA,6BACA,gBAGJ,oDACI,iEACA,iCACA,gBAGJ,2DACI,gBAGJ,uEACI,kBACA,mBAGJ,uEACI,aACA,kBAGJ,yEACI,YAGJ,+BACI,gBACA,UACA,mBAGJ,cACI,cACA,cAEA,eACA,iBACA,iBACA,mBAGJ,6CACI,eAGJ,8CACI,mBAGJ,4CACI,aACA,8BACA,mBACA,kBAGJ,sCACI,yBACA,WACI,qGAEJ,gEACA,WACI,iLAIR,2BACI,gBAGJ,mDACI,sCAGJ,eACI,aACA,mBACA,kGACA,kBACA,iBAGJ,sCACI,uBAGJ,0BACI,mBAGJ,4BACI,gBAGJ,4BACI,kBAGJ,sBACI,sBACA,iBACA,WACA,YACA,cAGJ,wDACI,cAGJ,2BACI,sBAGJ,wBACI,gBACA,kBAEA,6CACA,gBACA,kBACA,cAGJ,iBACI,gBAGJ,8CACI,mBACA,iBAGJ,kBACI,iBAGJ,qCAEI,kBAGJ,mBACI,mBACA,gBACA,kBACA,iBACA,iBACA,mBACA,eAGJ,0BACI,sBACA,eACA,YACA,2HAMA,2HAMA,kBAGJ,+BACI,eACA,qBACA,6BACA,mBAGJ,4CACI,kBAGJ,oBACI,oBACA,aACA,kBAGJ,oDACI,cAGJ,oFACI,yBACA,eAGJ,iCACI,kBAGJ,+CAEI,WACA,YACA,sBAGJ,8DACI,qBAGJ,6HAGI,gBACA,mBAGJ,gDACI,sBACA,gDACA,YACA,WACI,gNAEJ,+BACA,mCAGJ,6CACI,gBACA,eAGJ,8CACI,qCACA,gBAGJ,yFAEI,SACA,gBACA,gBACA,gBAGJ,4DACI,kBAGJ,gDACI,iBACA,kBACA,oBACA,UAEA,eACA,uBACA,iBACA,iBAGJ,yEACI,eACA,sBAGJ,qEACI,WAGJ,oDACI,eAGJ,qDACI,iBACA,gBACA,mBAGJ,oDACI,sBACA,gDACA,6IAOJ,8GAEI,cAGJ,+EACI,cAGJ,iDACI,WACA,iBACA,uBACA,gBAGJ,sCACI,WAGJ,iDACI,YAGJ,kDACI,kBACA,UACA,YACA,gBACA,6CACA,gBAEA,yDACI,WACA,cACA,kBACA,UACA,WACA,WACA,YACA,6TAgBR,8CACI,kBACA,WACA,iBACA,gBACA,gBACA,sCACA,WAEA,eACA,0CACA,iBACA,UAGJ,4DACI,WACA,cACA,iBACA,kBACA,oBACA,2BACA,UACA,WACA,kBACA,mBC1bJ,cACI,6BAGJ,QACI,4NAMA,+CACA,cAGJ,mDAEI,aAGJ,4CACI,sBACA,kBAGJ,sBACI,aACA,iBAGJ,sBACI,kBAGJ,2FACI,aAGJ,iBACI,oBACA,sBACA,gBACA,gBACA,mBAGJ,mDACI,UAGJ,iDACI,aAGJ,+BACI,yBACA,aACA,sBAGJ,iFACI,qCACA,iBAGJ,oCACI,2BAGJ,iBACI,aACA,mBAGJ,0BACI,iBAGJ,cACI,2BACA,gBAGJ,8CACI,kBAGJ,+BACI,iBAGJ,gCACI,gBAGJ,kBACI,cAGJ,uDACI,qBAGJ,sCACI,WACA,YACA,uBAGJ,0CACI,kBAGJ,4CACI,YAGJ,kCACI,kBACA,gBAEA,0CACI,WACA,cACA,kBACA,WACA,WACA,SACA,SACA,0GAQR,8BACI,kBAGJ,gHACI,aAGJ,uBACI,aACA,iBAGJ,eACI,gBACA,yBACA,kBACA,oBACA,cAEA,4FAII,yCACA,aAIR,0FAEI,aAGJ,uCACI,gBACA,UACA,YACA,WACA,yBACA,2BAGJ,+CACI,6OAGJ,oEACI,UACA,WACA,YACA,qBACA,gBACA,yCAGJ,oCACI,gBAGJ,qBACI,iBACA,WAGJ,iCACI,gBAGJ,uBACI,cACA,aACA,YACA,UACA,eACA,gBACA,gBAEA,cACA,mBACA,gBACA,cACA,cAEA,0CACI,WACA,YAGJ,gDACI,yBACA,mBACA,WAGJ,sDACI,mBAIR,uFACI,YAGJ,aACI,cAGJ,2BACI,iBACA,mBACA,8BACA,aACA,qBAGJ,kDACI,YACA,2CACA,gBACA,gBACA,eACA,sBACA,0BCpQJ,YACI,eACA,yBACA,kBACA,iBACA,mBACA,kBACA,eAEA,kBACI,mBAIR,aACI,aACA,yBACA,SACA,gBAGJ,mCACI,kBACA,oBAEA,qFAEI,WACA,cACA,kBACA,QACA,SACA,+BAGJ,2CACI,UACA,0BAGJ,0CACI,WACA,2BAIR,uCAEI,kBACA,yBACA,kBACA,mBAGJ,uBACI,kBACA,YAEA,6BACI,iBAIR,kCACI,iBAGJ,qCACI,cACA,kBACA,YACA,kBACA,mBAGJ,4BACI,kBACA,cACA,iBACA,UAKA,4BACI,WACA,qBACA,6BACA,oCACA,qCACA,sBAGJ,0BACI,eAIR,uEAGI,kBACA,MACA,YAGJ,oBACI,QACA,OACA,iBAGJ,0BACI,QACA,WACA,mBAGJ,yBACI,OACA,WACA,mBAGJ,sBACI,kBACA,MACA,QACA,SACA,WACA,iBAGJ,gFAGI,kBACA,YACA,YACA,iBAGJ,uBACI,QACA,OAGJ,6BACI,QACA,WACA,mBAGJ,4BACI,OACA,WACA,mBAGJ,qBACI,kBACA,MACA,SACA,OACA,WACA,iBCnKJ,WACI,cACA,kBACA,yBACA,MACA,OACA,sGACA,mBACA,6CACA,aAGJ,gBACI,aACA,mBACA,mBACA,gBACA,YACA,mBAGJ,oBACI,aACA,yBAGJ,iBACI,YACA,kBACA,kBAGJ,kBACI,YACA,YACA,WACA,eAGJ,+CAEI,qBACA,sBAGJ,uBACI,aACA,2DAGJ,wBACI,kBACA,iBACA,gBACA,mBACA,WACI,mLAWR,kBACI,cACA,kBACA,gBACA,iBACA,UACA,WACA,sBACA,kBAGJ,0CACI,8BACA,6BAGJ,qDAEI,aACA,oBACA,WAGJ,6BACI,iBACA,4EAGJ,wBACI,kBACA,4EAGJ,cACI,cAGJ,2CACI,yCAGJ,sCACI,yCAGJ,0BACI,kBACA,sBAEA,mEAEI,WACA,cACA,kBACA,oBACA,UACA,0BAGJ,iCACI,QAIR,4DAEI,YACA,YAGJ,8BACI,aAGJ,wDAEI,UAGJ,2BACI,aACA,gBACA,gBAGJ,oDACI,aACA,sBACA,8BACA,YACA,UAGJ,wDACI,aACA,mBACA,kBAEA,4DACI,YAIR,kDACI,YAGJ,cACI,eAGJ,yDACI,oCAGJ,yDACI,oCAGJ,yDACI,oCAGJ,yDACI,oCAGJ,yDACI,oCAGJ,yDACI,oCAGJ,yDACI,oCAGJ,2BACI,WAGJ,mBACI,oBAGJ,yBACI,iBACA,aAGJ,0CACI,UACA,iBACA,sBACA","file":"ueb-style.min.css"} \ No newline at end of file +{"version":3,"sourceRoot":"","sources":["../../scss/style.scss","../../scss/ueb-knot.scss","../../scss/ueb-link.scss","../../scss/ueb-node.scss","../../scss/ueb-pin.scss","../../scss/ueb-ui-controls.scss","../../scss/ueb-window.scss"],"names":[],"mappings":"AAAA,WACI,qBACA,mBACA,wDAGJ,WACI,qBACA,uBACA,kEAGJ,cACI,eACA,6CACA,cACA,kBACA,8EACA,+BACA,WACA,iBAGJ,kBACI,4BACA,0BAGJ,qBACI,aACA,kBACA,MACA,QACA,OACA,0BACA,UAGJ,8BACI,GACI,cAGJ,KACI,eAIR,qCACI,oCAGJ,mBACI,iBACA,YACA,cAEA,eACA,iBACA,oBAGJ,mBACI,kBACA,gCACA,gBACA,kBAGJ,UACI,kFACA,kBACA,eACA,gBACA,+DACA,gEACA,yBACA,iBAEI,s3BA0BJ,gBAEI,sZAQJ,sFACA,gEACA,wCACA,qBACA,gBAGJ,6CACI,gBAGJ,8CACI,eAGJ,0BACI,uDACA,gCAGJ,0BACI,uDAGJ,2BACI,uDAGJ,kBACI,kBACA,QACA,SACA,wGAGJ,sBACI,QACA,SAGJ,gEACI,kBAGJ,aACI,cACA,kBACA,kBACA,MACA,OACA,QACA,SACA,iBAEI,wlDAmDJ,gBAEI,gQAWJ,oBAEI,wJAOJ,4BAGJ,gDACI,mBAIJ,eACI,mBAGJ,0BACI,mBACA,uBACA,gBCjQJ,gCACI,gBAGJ,wCACI,SACA,UACA,aAGJ,8DACI,aAGJ,iDACI,iBACA,2BAGJ,iDACI,SACA,gBAGJ,qEACI,qCCvBJ,SACI,kBACA,iDAEA,cACA,6CACA,8CAKA,kBAGJ,aACI,kBACA,sBACA,uBACA,0BACA,0EACA,UAGJ,wBACI,mBACA,6BACA,0CACA,4BAGJ,wBACI,mBACA,kBAGJ,gFAEI,wCAGJ,+CACI,cACA,mBAGJ,kBACI,yEACA,yEACA,aACA,kBACA,gCACA,kCACA,sBACA,kBACA,4EACA,+BACA,mBACA,gBAGJ,iDACI,0EACA,kEAGJ,uBACI,qBACA,YACA,WACA,YACA,sBAGJ,uBACI,YACA,eACA,sBAGJ,2BACI,WACA,YCnFJ,SACI,cACA,kBACA,gBACA,qCACA,uDACA,oBAGJ,gEAEI,YAGJ,sBACI,gBAGJ,iBACI,YACA,YACA,+CAGJ,8BACI,SACA,UAGJ,8CACI,iBACI,kNAIJ,oDACA,0CACA,sDAGJ,2DACI,2BACA,0BAGJ,4DACI,kBAGJ,kBACI,aACA,cACI,mNAOJ,4BACA,YACA,sBACA,gCACA,qCACA,6BACA,gBAGJ,oDACI,iEACA,iCACA,gBAGJ,2DACI,gBAGJ,uEACI,kBACA,mBAGJ,uEACI,aACA,kBAGJ,yEACI,YAGJ,+BACI,gBACA,UACA,mBAGJ,cACI,cACA,cAEA,eACA,iBACA,iBACA,mBAGJ,6CACI,eAGJ,8CACI,mBAGJ,4CACI,aACA,8BACA,mBACA,kBAGJ,sCACI,yBACA,WACI,iGAEJ,gEACA,WACI,iLAIR,2BACI,gBAGJ,mDACI,sCAGJ,eACI,aACA,mBACA,kGACA,kBACA,iBAGJ,sCACI,uBAGJ,0BACI,mBAGJ,4BACI,gBAGJ,4BACI,kBAGJ,sBACI,sBACA,iBACA,WACA,YACA,cAGJ,wDACI,cAGJ,2BACI,sBAGJ,wBACI,gBACA,kBAEA,6CACA,gBACA,kBACA,cAGJ,iBACI,gBAGJ,8CACI,mBACA,iBAGJ,kBACI,iBAGJ,qCAEI,kBAGJ,mBACI,mBACA,gBACA,kBACA,iBACA,iBACA,mBACA,eAGJ,0BACI,sBACA,eACA,YACA,2HAMA,2HAMA,kBAGJ,+BACI,eACA,qBACA,6BACA,mBAGJ,4CACI,kBAGJ,oBACI,oBACA,aACA,kBAGJ,oDACI,cAGJ,oFACI,yBACA,eAGJ,iCACI,kBAGJ,+CAEI,WACA,YACA,sBAGJ,8DACI,qBAGJ,6HAGI,gBACA,mBAGJ,gDACI,sBACA,8CACA,YACA,WACI,gNAEJ,+BACA,mCAGJ,6CACI,gBACA,eAGJ,8CACI,qCACA,gBAGJ,yFAEI,SACA,gBACA,gBACA,gBAGJ,4DACI,kBAGJ,gDACI,iBACA,kBACA,oBACA,UAEA,eACA,uBACA,iBACA,iBAGJ,yEACI,eACA,sBAGJ,qEACI,WAGJ,oDACI,eAGJ,qDACI,iBACA,gBACA,mBAGJ,oDACI,sBACA,8CACA,6IAOJ,8GAEI,cAGJ,+EACI,cAGJ,iDACI,WACA,iBACA,uBACA,gBAGJ,sCACI,WAGJ,iDACI,YAGJ,kDACI,kBACA,UACA,YACA,gBACA,6CACA,gBAEA,yDACI,WACA,cACA,kBACA,UACA,WACA,WACA,YACA,6TAgBR,8CACI,kBACA,WACA,iBACA,gBACA,gBACA,sCACA,WAEA,eACA,0CACA,iBACA,UAGJ,4DACI,WACA,cACA,iBACA,kBACA,oBACA,2BACA,UACA,WACA,kBACA,mBC1bJ,cACI,6BAGJ,QACI,4NAMA,+CACA,cAGJ,mDAEI,aAGJ,4CACI,sBACA,kBAGJ,sBACI,aACA,iBAGJ,sBACI,kBAGJ,2FACI,aAGJ,iBACI,oBACA,sBACA,gBACA,gBACA,mBAGJ,mDACI,UAGJ,iDACI,aAGJ,+BACI,yBACA,aACA,sBAGJ,iFACI,qCACA,iBAGJ,oCACI,2BAGJ,iBACI,aACA,mBAGJ,0BACI,iBAGJ,cACI,2BACA,gBAGJ,8CACI,kBAGJ,+BACI,iBAGJ,gCACI,gBAGJ,kBACI,cAGJ,uDACI,qBAGJ,sCACI,WACA,YACA,uBAGJ,0CACI,kBAGJ,4CACI,YAGJ,kCACI,kBACA,gBAEA,0CACI,WACA,cACA,kBACA,WACA,WACA,SACA,SACA,0GAQR,8BACI,kBAGJ,gHACI,aAGJ,uBACI,aACA,iBAGJ,eACI,gBACA,yBACA,kBACA,oBACA,cAEA,4FAII,uCACA,aAIR,8BACI,aACA,qBACA,gBACA,WACA,YACA,yBACA,mBAEA,8CACI,WACA,YACA,WACA,uEACA,mBAKR,0FAEI,aAGJ,uCACI,gBACA,UACA,YACA,WACA,yBACA,2BAGJ,+CACI,6OAGJ,oEACI,UACA,WACA,YACA,qBACA,gBACA,yCAGJ,oCACI,gBAGJ,qBACI,iBACA,WAGJ,iCACI,gBAGJ,uBACI,cACA,aACA,YACA,UACA,eACA,gBACA,gBAEA,cACA,mBACA,gBACA,cACA,cAEA,0CACI,WACA,YAGJ,gDACI,yBACA,mBACA,WAGJ,sDACI,mBAIR,uFACI,YAGJ,aACI,cAGJ,2BACI,iBACA,mBACA,8BACA,aACA,qBAGJ,kDACI,YACA,2CACA,gBACA,gBACA,eACA,sBACA,0BCvRJ,YACI,eACA,yBACA,kBACA,iBACA,mBACA,kBACA,eAEA,kBACI,mBAIR,aACI,aACA,yBACA,SACA,gBAGJ,mCACI,kBACA,oBAEA,qFAEI,WACA,cACA,kBACA,QACA,SACA,+BAGJ,2CACI,UACA,0BAGJ,0CACI,WACA,2BAIR,uCAEI,kBACA,yBACA,kBACA,mBAGJ,uBACI,kBACA,YAEA,6BACI,iBAIR,kCACI,iBAGJ,qCACI,cACA,kBACA,YACA,kBACA,mBAGJ,4BACI,kBACA,cACA,iBACA,UAKA,4BACI,WACA,qBACA,6BACA,oCACA,qCACA,sBAGJ,0BACI,eAIR,uEAGI,kBACA,MACA,YAGJ,oBACI,QACA,OACA,iBAGJ,0BACI,QACA,WACA,mBAGJ,yBACI,OACA,WACA,mBAGJ,sBACI,kBACA,MACA,QACA,SACA,WACA,iBAGJ,gFAGI,kBACA,YACA,YACA,iBAGJ,uBACI,QACA,OAGJ,6BACI,QACA,WACA,mBAGJ,4BACI,OACA,WACA,mBAGJ,qBACI,kBACA,MACA,SACA,OACA,WACA,iBCnKJ,WACI,cACA,kBACA,yBACA,MACA,OACA,sGACA,mBACA,6CACA,aAGJ,gBACI,aACA,mBACA,mBACA,gBACA,YACA,mBAGJ,oBACI,aACA,yBAGJ,iBACI,YACA,kBACA,kBAGJ,kBACI,YACA,YACA,WACA,eAGJ,+CAEI,qBACA,sBAGJ,uBACI,aACA,2DAGJ,wBACI,kBACA,iBACA,gBACA,mBACA,WACI,mLAWR,kBACI,cACA,kBACA,gBACA,iBACA,UACA,WACA,sBACA,kBAGJ,0CACI,8BACA,6BAGJ,qDAEI,aACA,oBACA,WAGJ,6BACI,iBACA,4EAGJ,wBACI,kBACA,4EAGJ,cACI,cAGJ,2CACI,yCAGJ,sCACI,yCAGJ,0BACI,kBACA,sBAEA,mEAEI,WACA,cACA,kBACA,oBACA,UACA,0BAGJ,iCACI,QAIR,4DAEI,YACA,YAGJ,8BACI,aAGJ,wDAEI,UAGJ,2BACI,aACA,gBACA,gBAGJ,oDACI,aACA,sBACA,8BACA,YACA,UAGJ,wDACI,aACA,mBACA,kBAEA,4DACI,YAIR,kDACI,YAGJ,cACI,eAGJ,yDACI,oCAGJ,yDACI,oCAGJ,yDACI,oCAGJ,yDACI,oCAGJ,yDACI,oCAGJ,yDACI,oCAGJ,yDACI,oCAGJ,2BACI,WAGJ,mBACI,oBAGJ,yBACI,iBACA,aAGJ,0CACI,UACA,iBACA,sBACA","file":"ueb-style.min.css"} \ No newline at end of file diff --git a/dist/font/roboto-bold.woff b/dist/font/roboto-bold.woff old mode 100644 new mode 100755 diff --git a/dist/font/roboto-bold.woff2 b/dist/font/roboto-bold.woff2 old mode 100644 new mode 100755 diff --git a/dist/font/roboto-condensed-bold.woff2 b/dist/font/roboto-condensed-bold.woff2 old mode 100644 new mode 100755 diff --git a/dist/font/roboto-condensed-regular.woff2 b/dist/font/roboto-condensed-regular.woff2 old mode 100644 new mode 100755 diff --git a/dist/font/roboto-light.woff b/dist/font/roboto-light.woff old mode 100644 new mode 100755 diff --git a/dist/font/roboto-light.woff2 b/dist/font/roboto-light.woff2 old mode 100644 new mode 100755 diff --git a/dist/font/roboto-regular.woff b/dist/font/roboto-regular.woff old mode 100644 new mode 100755 diff --git a/dist/font/roboto-regular.woff2 b/dist/font/roboto-regular.woff2 old mode 100644 new mode 100755 diff --git a/dist/ueblueprint.js b/dist/ueblueprint.js index a4866ed..c0232cb 100755 --- a/dist/ueblueprint.js +++ b/dist/ueblueprint.js @@ -3,42 +3,42 @@ * Copyright 2019 Google LLC * SPDX-License-Identifier: BSD-3-Clause */ -const t$2=window,e$3=t$2.ShadowRoot&&(void 0===t$2.ShadyCSS||t$2.ShadyCSS.nativeShadow)&&"adoptedStyleSheets"in Document.prototype&&"replace"in CSSStyleSheet.prototype,s$3=Symbol(),n$4=new WeakMap;class o$4{constructor(t,e,n){if(this._$cssResult$=!0,n!==s$3)throw Error("CSSResult is not constructable. Use `unsafeCSS` or `css` instead.");this.cssText=t,this.t=e;}get styleSheet(){let t=this.o;const s=this.t;if(e$3&&void 0===t){const e=void 0!==s&&1===s.length;e&&(t=n$4.get(s)),void 0===t&&((this.o=t=new CSSStyleSheet).replaceSync(this.cssText),e&&n$4.set(s,t));}return t}toString(){return this.cssText}}const r$2=t=>new o$4("string"==typeof t?t:t+"",void 0,s$3),i$3=(t,...e)=>{const n=1===t.length?t[0]:e.reduce(((e,s,n)=>e+(t=>{if(!0===t._$cssResult$)return t.cssText;if("number"==typeof t)return t;throw Error("Value passed to 'css' function must be a 'css' function result: "+t+". Use 'unsafeCSS' to pass non-literal values, but take care to ensure page security.")})(s)+t[n+1]),t[0]);return new o$4(n,t,s$3)},S$1=(s,n)=>{e$3?s.adoptedStyleSheets=n.map((t=>t instanceof CSSStyleSheet?t:t.styleSheet)):n.forEach((e=>{const n=document.createElement("style"),o=t$2.litNonce;void 0!==o&&n.setAttribute("nonce",o),n.textContent=e.cssText,s.appendChild(n);}));},c$1=e$3?t=>t:t=>t instanceof CSSStyleSheet?(t=>{let e="";for(const s of t.cssRules)e+=s.cssText;return r$2(e)})(t):t; +const t$2=globalThis,e$3=t$2.ShadowRoot&&(void 0===t$2.ShadyCSS||t$2.ShadyCSS.nativeShadow)&&"adoptedStyleSheets"in Document.prototype&&"replace"in CSSStyleSheet.prototype,s$1=Symbol(),o$3=new WeakMap;class n$3{constructor(t,e,o){if(this._$cssResult$=!0,o!==s$1)throw Error("CSSResult is not constructable. Use `unsafeCSS` or `css` instead.");this.cssText=t,this.t=e;}get styleSheet(){let t=this.o;const s=this.t;if(e$3&&void 0===t){const e=void 0!==s&&1===s.length;e&&(t=o$3.get(s)),void 0===t&&((this.o=t=new CSSStyleSheet).replaceSync(this.cssText),e&&o$3.set(s,t));}return t}toString(){return this.cssText}}const r$3=t=>new n$3("string"==typeof t?t:t+"",void 0,s$1),i$5=(t,...e)=>{const o=1===t.length?t[0]:e.reduce(((e,s,o)=>e+(t=>{if(!0===t._$cssResult$)return t.cssText;if("number"==typeof t)return t;throw Error("Value passed to 'css' function must be a 'css' function result: "+t+". Use 'unsafeCSS' to pass non-literal values, but take care to ensure page security.")})(s)+t[o+1]),t[0]);return new n$3(o,t,s$1)},S$1=(s,o)=>{if(e$3)s.adoptedStyleSheets=o.map((t=>t instanceof CSSStyleSheet?t:t.styleSheet));else for(const e of o){const o=document.createElement("style"),n=t$2.litNonce;void 0!==n&&o.setAttribute("nonce",n),o.textContent=e.cssText,s.appendChild(o);}},c$2=e$3?t=>t:t=>t instanceof CSSStyleSheet?(t=>{let e="";for(const s of t.cssRules)e+=s.cssText;return r$3(e)})(t):t; /** * @license * Copyright 2017 Google LLC * SPDX-License-Identifier: BSD-3-Clause - */var s$2;const e$2=window,r$1=e$2.trustedTypes,h$1=r$1?r$1.emptyScript:"",o$3=e$2.reactiveElementPolyfillSupport,n$3={toAttribute(t,i){switch(i){case Boolean:t=t?h$1:null;break;case Object:case Array:t=null==t?t:JSON.stringify(t);}return t},fromAttribute(t,i){let s=t;switch(i){case Boolean:s=null!==t;break;case Number:s=null===t?null:Number(t);break;case Object:case Array:try{s=JSON.parse(t);}catch(t){s=null;}}return s}},a$1=(t,i)=>i!==t&&(i==i||t==t),l$2={attribute:!0,type:String,converter:n$3,reflect:!1,hasChanged:a$1},d$1="finalized";class u$1 extends HTMLElement{constructor(){super(),this._$Ei=new Map,this.isUpdatePending=!1,this.hasUpdated=!1,this._$El=null,this._$Eu();}static addInitializer(t){var i;this.finalize(),(null!==(i=this.h)&&void 0!==i?i:this.h=[]).push(t);}static get observedAttributes(){this.finalize();const t=[];return this.elementProperties.forEach(((i,s)=>{const e=this._$Ep(s,i);void 0!==e&&(this._$Ev.set(e,s),t.push(e));})),t}static createProperty(t,i=l$2){if(i.state&&(i.attribute=!1),this.finalize(),this.elementProperties.set(t,i),!i.noAccessor&&!this.prototype.hasOwnProperty(t)){const s="symbol"==typeof t?Symbol():"__"+t,e=this.getPropertyDescriptor(t,s,i);void 0!==e&&Object.defineProperty(this.prototype,t,e);}}static getPropertyDescriptor(t,i,s){return {get(){return this[i]},set(e){const r=this[t];this[i]=e,this.requestUpdate(t,r,s);},configurable:!0,enumerable:!0}}static getPropertyOptions(t){return this.elementProperties.get(t)||l$2}static finalize(){if(this.hasOwnProperty(d$1))return !1;this[d$1]=!0;const t=Object.getPrototypeOf(this);if(t.finalize(),void 0!==t.h&&(this.h=[...t.h]),this.elementProperties=new Map(t.elementProperties),this._$Ev=new Map,this.hasOwnProperty("properties")){const t=this.properties,i=[...Object.getOwnPropertyNames(t),...Object.getOwnPropertySymbols(t)];for(const s of i)this.createProperty(s,t[s]);}return this.elementStyles=this.finalizeStyles(this.styles),!0}static finalizeStyles(i){const s=[];if(Array.isArray(i)){const e=new Set(i.flat(1/0).reverse());for(const i of e)s.unshift(c$1(i));}else void 0!==i&&s.push(c$1(i));return s}static _$Ep(t,i){const s=i.attribute;return !1===s?void 0:"string"==typeof s?s:"string"==typeof t?t.toLowerCase():void 0}_$Eu(){var t;this._$E_=new Promise((t=>this.enableUpdating=t)),this._$AL=new Map,this._$Eg(),this.requestUpdate(),null===(t=this.constructor.h)||void 0===t||t.forEach((t=>t(this)));}addController(t){var i,s;(null!==(i=this._$ES)&&void 0!==i?i:this._$ES=[]).push(t),void 0!==this.renderRoot&&this.isConnected&&(null===(s=t.hostConnected)||void 0===s||s.call(t));}removeController(t){var i;null===(i=this._$ES)||void 0===i||i.splice(this._$ES.indexOf(t)>>>0,1);}_$Eg(){this.constructor.elementProperties.forEach(((t,i)=>{this.hasOwnProperty(i)&&(this._$Ei.set(i,this[i]),delete this[i]);}));}createRenderRoot(){var t;const s=null!==(t=this.shadowRoot)&&void 0!==t?t:this.attachShadow(this.constructor.shadowRootOptions);return S$1(s,this.constructor.elementStyles),s}connectedCallback(){var t;void 0===this.renderRoot&&(this.renderRoot=this.createRenderRoot()),this.enableUpdating(!0),null===(t=this._$ES)||void 0===t||t.forEach((t=>{var i;return null===(i=t.hostConnected)||void 0===i?void 0:i.call(t)}));}enableUpdating(t){}disconnectedCallback(){var t;null===(t=this._$ES)||void 0===t||t.forEach((t=>{var i;return null===(i=t.hostDisconnected)||void 0===i?void 0:i.call(t)}));}attributeChangedCallback(t,i,s){this._$AK(t,s);}_$EO(t,i,s=l$2){var e;const r=this.constructor._$Ep(t,s);if(void 0!==r&&!0===s.reflect){const h=(void 0!==(null===(e=s.converter)||void 0===e?void 0:e.toAttribute)?s.converter:n$3).toAttribute(i,s.type);this._$El=t,null==h?this.removeAttribute(r):this.setAttribute(r,h),this._$El=null;}}_$AK(t,i){var s;const e=this.constructor,r=e._$Ev.get(t);if(void 0!==r&&this._$El!==r){const t=e.getPropertyOptions(r),h="function"==typeof t.converter?{fromAttribute:t.converter}:void 0!==(null===(s=t.converter)||void 0===s?void 0:s.fromAttribute)?t.converter:n$3;this._$El=r,this[r]=h.fromAttribute(i,t.type),this._$El=null;}}requestUpdate(t,i,s){let e=!0;void 0!==t&&(((s=s||this.constructor.getPropertyOptions(t)).hasChanged||a$1)(this[t],i)?(this._$AL.has(t)||this._$AL.set(t,i),!0===s.reflect&&this._$El!==t&&(void 0===this._$EC&&(this._$EC=new Map),this._$EC.set(t,s))):e=!1),!this.isUpdatePending&&e&&(this._$E_=this._$Ej());}async _$Ej(){this.isUpdatePending=!0;try{await this._$E_;}catch(t){Promise.reject(t);}const t=this.scheduleUpdate();return null!=t&&await t,!this.isUpdatePending}scheduleUpdate(){return this.performUpdate()}performUpdate(){var t;if(!this.isUpdatePending)return;this.hasUpdated,this._$Ei&&(this._$Ei.forEach(((t,i)=>this[i]=t)),this._$Ei=void 0);let i=!1;const s=this._$AL;try{i=this.shouldUpdate(s),i?(this.willUpdate(s),null===(t=this._$ES)||void 0===t||t.forEach((t=>{var i;return null===(i=t.hostUpdate)||void 0===i?void 0:i.call(t)})),this.update(s)):this._$Ek();}catch(t){throw i=!1,this._$Ek(),t}i&&this._$AE(s);}willUpdate(t){}_$AE(t){var i;null===(i=this._$ES)||void 0===i||i.forEach((t=>{var i;return null===(i=t.hostUpdated)||void 0===i?void 0:i.call(t)})),this.hasUpdated||(this.hasUpdated=!0,this.firstUpdated(t)),this.updated(t);}_$Ek(){this._$AL=new Map,this.isUpdatePending=!1;}get updateComplete(){return this.getUpdateComplete()}getUpdateComplete(){return this._$E_}shouldUpdate(t){return !0}update(t){void 0!==this._$EC&&(this._$EC.forEach(((t,i)=>this._$EO(i,this[i],t))),this._$EC=void 0),this._$Ek();}updated(t){}firstUpdated(t){}}u$1[d$1]=!0,u$1.elementProperties=new Map,u$1.elementStyles=[],u$1.shadowRootOptions={mode:"open"},null==o$3||o$3({ReactiveElement:u$1}),(null!==(s$2=e$2.reactiveElementVersions)&&void 0!==s$2?s$2:e$2.reactiveElementVersions=[]).push("1.6.3"); + */const{is:i$4,defineProperty:e$2,getOwnPropertyDescriptor:r$2,getOwnPropertyNames:h$1,getOwnPropertySymbols:o$2,getPrototypeOf:n$2}=Object,a$1=globalThis,c$1=a$1.trustedTypes,l$1=c$1?c$1.emptyScript:"",p$1=a$1.reactiveElementPolyfillSupport,d$1=(t,s)=>t,u$1={toAttribute(t,s){switch(s){case Boolean:t=t?l$1:null;break;case Object:case Array:t=null==t?t:JSON.stringify(t);}return t},fromAttribute(t,s){let i=t;switch(s){case Boolean:i=null!==t;break;case Number:i=null===t?null:Number(t);break;case Object:case Array:try{i=JSON.parse(t);}catch(t){i=null;}}return i}},f$1=(t,s)=>!i$4(t,s),y$1={attribute:!0,type:String,converter:u$1,reflect:!1,hasChanged:f$1};Symbol.metadata??=Symbol("metadata"),a$1.litPropertyMetadata??=new WeakMap;class b extends HTMLElement{static addInitializer(t){this._$Ei(),(this.l??=[]).push(t);}static get observedAttributes(){return this.finalize(),this._$Eh&&[...this._$Eh.keys()]}static createProperty(t,s=y$1){if(s.state&&(s.attribute=!1),this._$Ei(),this.elementProperties.set(t,s),!s.noAccessor){const i=Symbol(),r=this.getPropertyDescriptor(t,i,s);void 0!==r&&e$2(this.prototype,t,r);}}static getPropertyDescriptor(t,s,i){const{get:e,set:h}=r$2(this.prototype,t)??{get(){return this[s]},set(t){this[s]=t;}};return {get(){return e?.call(this)},set(s){const r=e?.call(this);h.call(this,s),this.requestUpdate(t,r,i);},configurable:!0,enumerable:!0}}static getPropertyOptions(t){return this.elementProperties.get(t)??y$1}static _$Ei(){if(this.hasOwnProperty(d$1("elementProperties")))return;const t=n$2(this);t.finalize(),void 0!==t.l&&(this.l=[...t.l]),this.elementProperties=new Map(t.elementProperties);}static finalize(){if(this.hasOwnProperty(d$1("finalized")))return;if(this.finalized=!0,this._$Ei(),this.hasOwnProperty(d$1("properties"))){const t=this.properties,s=[...h$1(t),...o$2(t)];for(const i of s)this.createProperty(i,t[i]);}const t=this[Symbol.metadata];if(null!==t){const s=litPropertyMetadata.get(t);if(void 0!==s)for(const[t,i]of s)this.elementProperties.set(t,i);}this._$Eh=new Map;for(const[t,s]of this.elementProperties){const i=this._$Eu(t,s);void 0!==i&&this._$Eh.set(i,t);}this.elementStyles=this.finalizeStyles(this.styles);}static finalizeStyles(s){const i=[];if(Array.isArray(s)){const e=new Set(s.flat(1/0).reverse());for(const s of e)i.unshift(c$2(s));}else void 0!==s&&i.push(c$2(s));return i}static _$Eu(t,s){const i=s.attribute;return !1===i?void 0:"string"==typeof i?i:"string"==typeof t?t.toLowerCase():void 0}constructor(){super(),this._$Ep=void 0,this.isUpdatePending=!1,this.hasUpdated=!1,this._$Em=null,this._$Ev();}_$Ev(){this._$ES=new Promise((t=>this.enableUpdating=t)),this._$AL=new Map,this._$E_(),this.requestUpdate(),this.constructor.l?.forEach((t=>t(this)));}addController(t){(this._$EO??=new Set).add(t),void 0!==this.renderRoot&&this.isConnected&&t.hostConnected?.();}removeController(t){this._$EO?.delete(t);}_$E_(){const t=new Map,s=this.constructor.elementProperties;for(const i of s.keys())this.hasOwnProperty(i)&&(t.set(i,this[i]),delete this[i]);t.size>0&&(this._$Ep=t);}createRenderRoot(){const t=this.shadowRoot??this.attachShadow(this.constructor.shadowRootOptions);return S$1(t,this.constructor.elementStyles),t}connectedCallback(){this.renderRoot??=this.createRenderRoot(),this.enableUpdating(!0),this._$EO?.forEach((t=>t.hostConnected?.()));}enableUpdating(t){}disconnectedCallback(){this._$EO?.forEach((t=>t.hostDisconnected?.()));}attributeChangedCallback(t,s,i){this._$AK(t,i);}_$EC(t,s){const i=this.constructor.elementProperties.get(t),e=this.constructor._$Eu(t,i);if(void 0!==e&&!0===i.reflect){const r=(void 0!==i.converter?.toAttribute?i.converter:u$1).toAttribute(s,i.type);this._$Em=t,null==r?this.removeAttribute(e):this.setAttribute(e,r),this._$Em=null;}}_$AK(t,s){const i=this.constructor,e=i._$Eh.get(t);if(void 0!==e&&this._$Em!==e){const t=i.getPropertyOptions(e),r="function"==typeof t.converter?{fromAttribute:t.converter}:void 0!==t.converter?.fromAttribute?t.converter:u$1;this._$Em=e,this[e]=r.fromAttribute(s,t.type),this._$Em=null;}}requestUpdate(t,s,i){if(void 0!==t){if(i??=this.constructor.getPropertyOptions(t),!(i.hasChanged??f$1)(this[t],s))return;this.P(t,s,i);}!1===this.isUpdatePending&&(this._$ES=this._$ET());}P(t,s,i){this._$AL.has(t)||this._$AL.set(t,s),!0===i.reflect&&this._$Em!==t&&(this._$Ej??=new Set).add(t);}async _$ET(){this.isUpdatePending=!0;try{await this._$ES;}catch(t){Promise.reject(t);}const t=this.scheduleUpdate();return null!=t&&await t,!this.isUpdatePending}scheduleUpdate(){return this.performUpdate()}performUpdate(){if(!this.isUpdatePending)return;if(!this.hasUpdated){if(this.renderRoot??=this.createRenderRoot(),this._$Ep){for(const[t,s]of this._$Ep)this[t]=s;this._$Ep=void 0;}const t=this.constructor.elementProperties;if(t.size>0)for(const[s,i]of t)!0!==i.wrapped||this._$AL.has(s)||void 0===this[s]||this.P(s,this[s],i);}let t=!1;const s=this._$AL;try{t=this.shouldUpdate(s),t?(this.willUpdate(s),this._$EO?.forEach((t=>t.hostUpdate?.())),this.update(s)):this._$EU();}catch(s){throw t=!1,this._$EU(),s}t&&this._$AE(s);}willUpdate(t){}_$AE(t){this._$EO?.forEach((t=>t.hostUpdated?.())),this.hasUpdated||(this.hasUpdated=!0,this.firstUpdated(t)),this.updated(t);}_$EU(){this._$AL=new Map,this.isUpdatePending=!1;}get updateComplete(){return this.getUpdateComplete()}getUpdateComplete(){return this._$ES}shouldUpdate(t){return !0}update(t){this._$Ej&&=this._$Ej.forEach((t=>this._$EC(t,this[t]))),this._$EU();}updated(t){}firstUpdated(t){}}b.elementStyles=[],b.shadowRootOptions={mode:"open"},b[d$1("elementProperties")]=new Map,b[d$1("finalized")]=new Map,p$1?.({ReactiveElement:b}),(a$1.reactiveElementVersions??=[]).push("2.0.4"); /** * @license * 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(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}; +const t$1=globalThis,i$3=t$1.trustedTypes,s=i$3?i$3.createPolicy("lit-html",{createHTML:t=>t}):void 0,e$1="$lit$",h=`lit$${Math.random().toFixed(9).slice(2)}$`,o$1="?"+h,n$1=`<${o$1}>`,r$1=document,l=()=>r$1.createComment(""),c=t=>null===t||"object"!=typeof t&&"function"!=typeof t,a=Array.isArray,u=t=>a(t)||"function"==typeof t?.[Symbol.iterator],d="[ \t\n\f\r]",f=/<(?:(!--|\/[^a-zA-Z])|(\/?[a-zA-Z][^>\s]*)|(\/?$))/g,v=/-->/g,_=/>/g,m=RegExp(`>|${d}(?:([^\\s"'>=/]+)(${d}*=${d}*(?:[^ \t\n\f\r"'\`<>=]|("|')|))|$)`,"g"),p=/'/g,g=/"/g,$=/^(?:script|style|textarea|title)$/i,y=t=>(i,...s)=>({_$litType$:t,strings:i,values:s}),x=y(1),T=Symbol.for("lit-noChange"),E=Symbol.for("lit-nothing"),A=new WeakMap,C=r$1.createTreeWalker(r$1,129);function P(t,i){if(!a(t)||!t.hasOwnProperty("raw"))throw Error("invalid template strings array");return void 0!==s?s.createHTML(i):i}const V=(t,i)=>{const s=t.length-1,o=[];let r,l=2===i?"":3===i?"":"",c=f;for(let i=0;i"===u[0]?(c=r??f,d=-1):void 0===u[1]?d=-2:(d=c.lastIndex-u[2].length,a=u[1],c=void 0===u[3]?m:'"'===u[3]?g:p):c===g||c===p?c=m:c===v||c===_?c=f:(c=m,r=void 0);const x=c===m&&t[i+1].startsWith("/>")?" ":"";l+=c===f?s+n$1:d>=0?(o.push(a),s.slice(0,d)+e$1+s.slice(d)+h+x):s+h+(-2===d?i:x);}return [P(t,l+(t[s]||">")+(2===i?"":3===i?"":"")),o]};class N{constructor({strings:t,_$litType$:s},n){let r;this.parts=[];let c=0,a=0;const u=t.length-1,d=this.parts,[f,v]=V(t,s);if(this.el=N.createElement(f,n),C.currentNode=this.el.content,2===s||3===s){const t=this.el.content.firstChild;t.replaceWith(...t.childNodes);}for(;null!==(r=C.nextNode())&&d.length0){r.textContent=i$3?i$3.emptyScript:"";for(let i=0;i2||""!==s[0]||""!==s[1]?(this._$AH=Array(s.length-1).fill(new String),this.strings=s):this._$AH=E;}_$AI(t,i=this,s,e){const h=this.strings;let o=!1;if(void 0===h)t=S(this,t,i,0),o=!c(t)||t!==this._$AH&&t!==T,o&&(this._$AH=t);else {const e=t;let n,r;for(t=h[0],n=0;n{const e=s?.renderBefore??i;let h=e._$litPart$;if(void 0===h){const t=s?.renderBefore??null;e._$litPart$=h=new R(i.insertBefore(l(),t),t,void 0,s??{});}return h._$AI(t),h}; /** * @license * Copyright 2017 Google LLC * SPDX-License-Identifier: BSD-3-Clause - */var l,o$1;class s extends u$1{constructor(){super(...arguments),this.renderOptions={host:this},this._$Do=void 0;}createRenderRoot(){var t,e;const i=super.createRenderRoot();return null!==(t=(e=this.renderOptions).renderBefore)&&void 0!==t||(e.renderBefore=i.firstChild),i}update(t){const i=this.render();this.hasUpdated||(this.renderOptions.isConnected=this.isConnected),super.update(t),this._$Do=D(i,this.renderRoot,this.renderOptions);}connectedCallback(){var t;super.connectedCallback(),null===(t=this._$Do)||void 0===t||t.setConnected(!0);}disconnectedCallback(){var t;super.disconnectedCallback(),null===(t=this._$Do)||void 0===t||t.setConnected(!1);}render(){return T}}s.finalized=!0,s._$litElement$=!0,null===(l=globalThis.litElementHydrateSupport)||void 0===l||l.call(globalThis,{LitElement:s});const n$1=globalThis.litElementPolyfillSupport;null==n$1||n$1({LitElement:s});(null!==(o$1=globalThis.litElementVersions)&&void 0!==o$1?o$1:globalThis.litElementVersions=[]).push("3.3.3"); + */class r extends b{constructor(){super(...arguments),this.renderOptions={host:this},this._$Do=void 0;}createRenderRoot(){const t=super.createRenderRoot();return this.renderOptions.renderBefore??=t.firstChild,t}update(t){const s=this.render();this.hasUpdated||(this.renderOptions.isConnected=this.isConnected),super.update(t),this._$Do=B(s,this.renderRoot,this.renderOptions);}connectedCallback(){super.connectedCallback(),this._$Do?.setConnected(!0);}disconnectedCallback(){super.disconnectedCallback(),this._$Do?.setConnected(!1);}render(){return T}}r._$litElement$=!0,r["finalized"]=!0,globalThis.litElementHydrateSupport?.({LitElement:r});const i$2=globalThis.litElementPolyfillSupport;i$2?.({LitElement:r});(globalThis.litElementVersions??=[]).push("4.1.1"); class Configuration { static nodeColors = { - black: i$3`20, 20, 20`, - blue: i$3`84, 122, 156`, - darkBlue: i$3`32, 80, 128`, - darkerBlue: i$3`18, 18, 130`, - darkTurquoise: i$3`19, 100, 137`, - gray: i$3`150,150,150`, - green: i$3`95, 129, 90`, - intenseGreen: i$3`42, 140, 42`, - lime: i$3`150, 160, 30`, - red: i$3`151, 33, 32`, - turquoise: i$3`46, 104, 106`, - violet: i$3`126, 28, 150`, - yellow: i$3`148, 116, 24`, + black: i$5`20, 20, 20`, + blue: i$5`84, 122, 156`, + darkBlue: i$5`32, 80, 128`, + darkerBlue: i$5`18, 18, 130`, + darkTurquoise: i$5`19, 100, 137`, + gray: i$5`150,150,150`, + green: i$5`95, 129, 90`, + intenseGreen: i$5`42, 140, 42`, + lime: i$5`150, 160, 30`, + red: i$5`151, 33, 32`, + turquoise: i$5`46, 104, 106`, + violet: i$5`126, 28, 150`, + yellow: i$5`148, 116, 24`, } static alphaPattern = "repeating-conic-gradient(#7c8184 0% 25%, #c2c3c4 0% 50%) 50% / 10px 10px" static colorDragEventName = "ueb-color-drag" @@ -47,7 +47,7 @@ class Configuration { static colorWindowName = "Color Picker" static defaultCommentHeight = 96 static defaultCommentWidth = 400 - static distanceThreshold = 5 // px + static distanceThreshold = 20 // px static dragEventName = "ueb-drag" static dragGeneralEventName = "ueb-drag-general" static edgeScrollThreshold = 50 @@ -60,13 +60,13 @@ class Configuration { begin: "blueprint-focus", end: "blueprint-unfocus", } - static fontSize = i$3`13px` - static gridAxisLineColor = i$3`black` + static fontSize = i$5`13px` + static gridAxisLineColor = i$5`black` static gridExpandThreshold = 0.25 // remaining size factor threshold to cause an expansion event - static gridLineColor = i$3`#353535` + static gridLineColor = i$5`#353535` static gridLineWidth = 1 // px static gridSet = 8 - static gridSetLineColor = i$3`#161616` + static gridSetLineColor = i$5`#161616` static gridShrinkThreshold = 4 // exceding size factor threshold to cause a shrink event static gridSize = 16 // px 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*$/ @@ -103,9 +103,13 @@ class Configuration { * @param {Number} c1 * @param {Number} c2 */ - static linkRightSVGPath = (start, c1, c2) => { - let end = 100 - start; - return `M ${start} 0 C ${c1.toFixed(3)} 0, ${c2.toFixed(3)} 0, 50 50 S ${(end - c1 + start).toFixed(3)} 100, ` + static linkRightSVGPath = (start, c1, c2, arc = false) => { + const end = 100 - start; + const mid = arc + ? 50 + (c2 - start) + : 50; + const fin = arc ? end + c1 - start : end - c1 + start; + return `M ${start} 0 C ${c1.toFixed(2)} 0, ${c2.toFixed(2)} 0, ${mid.toFixed(2)} 50 S ${fin.toFixed(2)} 100, ` + `${end.toFixed(3)} 100` } static maxZoom = 7 @@ -202,12 +206,16 @@ class Configuration { multiGate: "/Script/BlueprintGraph.K2Node_MultiGate", niagaraBool: "/Script/Niagara.NiagaraBool", niagaraClipboardContent: "/Script/NiagaraEditor.NiagaraClipboardContent", + niagaraDataInterfaceCollisionQuery: "/Script/Niagara.NiagaraDataInterfaceCollisionQuery", + niagaraDataInterfaceCurlNoise: "/Script/Niagara.NiagaraDataInterfaceCurlNoise", niagaraDataInterfaceVolumeTexture: "/Script/Niagara.NiagaraDataInterfaceVolumeTexture", niagaraFloat: "/Script/Niagara.NiagaraFloat", - niagaraMatrix: "/Script/Niagara.NiagaraMatrix", + niagaraInt32: "/Script/Niagara.NiagaraInt32", + niagaraNodeConvert: "/Script/NiagaraEditor.NiagaraNodeConvert", niagaraNodeFunctionCall: "/Script/NiagaraEditor.NiagaraNodeFunctionCall", + niagaraNodeInput: "/Script/NiagaraEditor.NiagaraNodeInput", niagaraNodeOp: "/Script/NiagaraEditor.NiagaraNodeOp", - niagaraNumeric: "/Script/Niagara.NiagaraNumeric", + niagaraParameterMap: "/Script/Niagara.NiagaraParameterMap", niagaraPosition: "/Script/Niagara.NiagaraPosition", pawn: "/Script/Engine.Pawn", pcgEditorGraphNode: "/Script/PCGEditor.PCGEditorGraphNode", @@ -237,6 +245,7 @@ class Configuration { variableSet: "/Script/BlueprintGraph.K2Node_VariableSet", vector: "/Script/CoreUObject.Vector", vector2D: "/Script/CoreUObject.Vector2D", + vector2f: "/Script/CoreUObject.Vector2f", vector3f: "/Script/CoreUObject.Vector3f", vector4f: "/Script/CoreUObject.Vector4f", whileLoop: "/Engine/EditorBlueprintResources/StandardMacros.StandardMacros:WhileLoop", @@ -524,7 +533,7 @@ class Utility { } /** - * @param {Attribute} entity + * @param {IEntity} entity * @param {String} key * @returns {Boolean} */ @@ -591,29 +600,31 @@ class Utility { /** * @template T - * @param {Array} a - * @param {Array} b + * @param {T[]} reference + * @param {T[]} additional + * @param {(v: T) => void} adding - Process added element * @param {(l: T, r: T) => Boolean} predicate + * @returns {T[]} */ - static mergeArrays(a = [], b = [], predicate = (l, r) => l == r) { + static mergeArrays(reference = [], additional = [], predicate = (l, r) => l == r, adding = v => { }) { let result = []; - a = [...a]; - b = [...b]; + reference = [...reference]; + additional = [...additional]; restart: while (true) { - for (let j = 0; j < b.length; ++j) { - for (let i = 0; i < a.length; ++i) { - if (predicate(a[i], b[j])) { + for (let j = 0; j < additional.length; ++j) { + for (let i = 0; i < reference.length; ++i) { + if (predicate(reference[i], additional[j])) { // Found an element in common in the two arrays result.push( // Take and append all the elements skipped from a - ...a.splice(0, i), + ...reference.splice(0, i), // Take and append all the elements skippend from b - ...b.splice(0, j), + ...additional.splice(0, j).map(v => (adding(v), v)), // Take and append the element in common - ...a.splice(0, 1) + ...reference.splice(0, 1) ); - b.shift(); // Remove the same element from b + additional.shift(); // Remove the same element from b continue restart } } @@ -621,7 +632,13 @@ class Utility { break restart } // Append remaining the elements in the arrays and make it unique - return [...(new Set(result.concat(...a, ...b)))] + result.push(...reference); + result.push( + ...additional + .filter(vb => !result.some(vr => predicate(vr, vb))) + .map((v, k) => (adding(v), v)) + ); + return result } /** @param {String} value */ @@ -797,7 +814,7 @@ class Utility { * @template {IEntity} EntityT * @template {ITemplate} TemplateT */ -class IElement extends s { +class IElement extends r { /** @type {Blueprint} */ #blueprint @@ -1303,6 +1320,13 @@ class SVGIcon { ` + static staticPin = x` + + + + + ` + static switch = x` @@ -2668,6 +2692,7 @@ class IEntity { this.#keys = [... new Set(value)]; } + // @ts-expect-error #lookbehind = /** @type {String} */(this.constructor.lookbehind) get lookbehind() { return this.#lookbehind.trim() @@ -2769,9 +2794,9 @@ class IEntity { * @this {T} * @returns {T} */ - static asUniqueClass() { + static asUniqueClass(alwaysCreate = false) { let result = this; - if (this.name.length) { + if (this.name.length || alwaysCreate) { // @ts-expect-error result = (() => class extends this { })(); // Comes from a lambda otherwise the class will have name "result" result.grammar = result.createGrammar(); // Reassign grammar to capture the correct this from subclass @@ -3053,6 +3078,11 @@ class IEntity { } return true } + + /** @returns {IEntity | Boolean | Number | String | BigInt | (IEntity | Boolean | Number | String | BigInt)[]} */ + valueOf() { + return this + } } class BooleanEntity extends IEntity { @@ -3614,7 +3644,7 @@ class LinearColorEntity extends IEntity { const r = Math.round(this.R.value * 255); const g = Math.round(this.G.value * 255); const b = Math.round(this.B.value * 255); - return i$3`${r}, ${g}, ${b}` + return i$5`${r}, ${g}, ${b}` } toRGBA() { @@ -3708,6 +3738,15 @@ function nodeColor(entity) { return Configuration.nodeColors.blue case Configuration.paths.materialExpressionTextureSample: return Configuration.nodeColors.darkTurquoise + case Configuration.paths.niagaraNodeInput: + switch (entity["Usage"]?.toString()) { + case "Attribute": return Configuration.nodeColors.intenseGreen + case "Parameter": return Configuration.nodeColors.red + case "RapidIterationParameter": return Configuration.nodeColors.black + case "SystemConstant": return Configuration.nodeColors.gray + case "TranslatorConstant": return Configuration.nodeColors.gray + default: return Configuration.nodeColors.red + } } switch (entity.getClass()) { case Configuration.paths.callFunction: @@ -3764,6 +3803,9 @@ function nodeColor(entity) { if (entity.bIsPureFunc?.valueOf()) { return Configuration.nodeColors.green } + if (entity["Input"]?.["Name"]) { + return Configuration.nodeColors.gray + } return Configuration.nodeColors.blue } @@ -3832,14 +3874,14 @@ class MirroredEntity extends IEntity { return this.getter?.().equals(other) } - valueOf() { - this.valueOf = this.getter().valueOf.bind(this.getter()); - return this.valueOf() + /** @returns {InstanceType} */ + valueOf(arg) { + // @ts-expect-error + return this.getter(arg).valueOf() } toString() { - this.toString = this.getter().toString.bind(this.getter()); - return this.toString() + return this.getter().toString() } } @@ -3969,6 +4011,7 @@ class VectorEntity extends IEntity { } } +const paths$1 = Configuration.paths; const sequencerScriptingNameRegex = /\/Script\/SequencerScripting\.MovieSceneScripting(.+)Channel/; const keyNameValue = { "A_AccentGrave": "à", @@ -3998,6 +4041,66 @@ const keyNameValue = { "Subtract": "Num -", "Tilde": "`", }; +const niagaraNodeNames = { + "Boolean::LogicAnd": "Logic AND", + "Boolean::LogicEq": "==", + "Boolean::LogicNEq": "!=", + "Boolean::LogicNot": "Logic NOT", + "Boolean::LogicOr": "Logic OR", + "Integer::BitAnd": "Bitwise AND", + "Integer::BitLShift": "Bitwise Left Shift", + "Integer::BitNot": "Bitwise NOT", + "Integer::BitOr": "Bitwise OR", + "Integer::BitRShift": "Bitwise Right Shift", + "Integer::BitXOr": "Bitwise XOR", + "Integer::EnumEq": "==", + "Integer::EnumNEq": "!=", + "Matrix::MatrixMultiply": "Multiply (Matrix * Matrix)", + "Matrix::MatrixVectorMultiply": "Multiply (Matrix * Vector4)", + // Numeric:: + ...Object.fromEntries(Object.entries({ + "Add": "+", + "ArcCosine": "ArcCosine", + "ArcCosine(Degrees)": "ArcCos(D)", + "ArcCosine(Radians)": "ArcCos(R)", + "ArcSine": "ArcSine", + "ArcSine(Degrees)": "ArcSin(D)", + "ArcSine(Radians)": "ArcSin(R)", + "ArcTangent(Degrees)": "ArcTan(D)", + "ArcTangent(Radians)": "ArcTan(R)", + "CmpEQ": "==", + "CmpGE": ">=", + "CmpGT": ">", + "CmpLE": "<=", + "CmpLT": "<", + "CmpNEQ": "!=", + "Cosine(Degrees)": "Cos(D)", + "Cosine(Radians)": "Cos(R)", + "DegreesToRadians": "DegToRad", + "DistancePos": "Distance", + "Div": String.fromCharCode(0x00f7), + "FMod": "%", + "FModFast": "Modulo Fast", + "Length": "Len", + "Madd": `(A${String.fromCharCode(0x2a2f)}B)+C`, + "Mul": String.fromCharCode(0x2a2f), + "Negate": "-A", + "OneMinus": "1-A", + "PI": String.fromCharCode(0x03C0), + "RadiansToDegrees": "RadToDeg", + "Rand Float": "Random Float", + "Rand Integer": "Random Integer", + "Rand": "Random", + "Rcp": "Reciprocal", + "RSqrt": "Rcp Sqrt", + "Sine(Degrees)": "Sin(D)", + "Sine(Radians)": "Sin(R)", + "Subtract": "-", + "Tangent(Degrees)": "Tan(D)", + "Tangent(Radians)": "Tan(R)", + "TWO_PI": `2 ${String.fromCharCode(0x03C0)}`, + }).map(([k, v]) => ["Numeric::" + k, v])), +}; /** @param {String} value */ function numberFromText(value = "") { @@ -4042,58 +4145,58 @@ function keyName(value) { function nodeTitle(entity) { let value; switch (entity.getType()) { - case Configuration.paths.addDelegate: + case paths$1.addDelegate: value ??= "Bind Event to "; - case Configuration.paths.clearDelegate: + case paths$1.clearDelegate: value ??= "Unbind all Events from "; - case Configuration.paths.removeDelegate: + case paths$1.removeDelegate: value ??= "Unbind Event from "; return value + Utility.formatStringName( entity.DelegateReference?.MemberName?.toString().replace(/Delegate$/, "") ?? "None" ) - case Configuration.paths.asyncAction: + case paths$1.asyncAction: if (entity.ProxyFactoryFunctionName) { return Utility.formatStringName(entity.ProxyFactoryFunctionName?.toString()) } - case Configuration.paths.actorBoundEvent: - case Configuration.paths.componentBoundEvent: + case paths$1.actorBoundEvent: + case paths$1.componentBoundEvent: return `${Utility.formatStringName(entity.DelegatePropertyName?.toString())} (${entity.ComponentPropertyName?.toString() ?? "Unknown"})` - case Configuration.paths.callDelegate: + case paths$1.callDelegate: return `Call ${entity.DelegateReference?.MemberName?.toString() ?? "None"}` - case Configuration.paths.createDelegate: + case paths$1.createDelegate: return "Create Event" - case Configuration.paths.customEvent: + case paths$1.customEvent: if (entity.CustomFunctionName) { return entity.CustomFunctionName?.toString() } - case Configuration.paths.dynamicCast: + case paths$1.dynamicCast: if (!entity.TargetType) { return "Bad cast node" // Target type not found } return `Cast To ${entity.TargetType?.getName()}` - case Configuration.paths.enumLiteral: + case paths$1.enumLiteral: return `Literal enum ${entity.Enum?.getName()}` - case Configuration.paths.event: + case paths$1.event: return `Event ${(entity.EventReference?.MemberName?.toString() ?? "").replace(/^Receive/, "")}` - case Configuration.paths.executionSequence: + case paths$1.executionSequence: return "Sequence" - case Configuration.paths.forEachElementInEnum: + case paths$1.forEachElementInEnum: return `For Each ${entity.Enum?.getName()}` - case Configuration.paths.forEachLoopWithBreak: + case paths$1.forEachLoopWithBreak: return "For Each Loop with Break" - case Configuration.paths.functionEntry: + case paths$1.functionEntry: return entity.FunctionReference?.MemberName?.toString() === "UserConstructionScript" ? "Construction Script" : entity.FunctionReference?.MemberName?.toString() - case Configuration.paths.functionResult: + case paths$1.functionResult: return "Return Node" - case Configuration.paths.ifThenElse: + case paths$1.ifThenElse: return "Branch" - case Configuration.paths.makeStruct: + case paths$1.makeStruct: if (entity.StructType) { return `Make ${entity.StructType.getName()}` } - case Configuration.paths.materialExpressionComponentMask: { + case paths$1.materialExpressionComponentMask: { const materialObject = entity.getMaterialSubobject(); if (materialObject) { return `Mask ( ${Configuration.rgba @@ -4102,15 +4205,15 @@ function nodeTitle(entity) { .join("")})` } } - case Configuration.paths.materialExpressionConstant: + case paths$1.materialExpressionConstant: value ??= [entity.getCustomproperties().find(pinEntity => pinEntity.PinName.toString() == "Value")?.DefaultValue]; - case Configuration.paths.materialExpressionConstant2Vector: + case paths$1.materialExpressionConstant2Vector: value ??= [ entity.getCustomproperties().find(pinEntity => pinEntity.PinName?.toString() == "X")?.DefaultValue, entity.getCustomproperties().find(pinEntity => pinEntity.PinName?.toString() == "Y")?.DefaultValue, ]; - case Configuration.paths.materialExpressionConstant3Vector: - case Configuration.paths.materialExpressionConstant4Vector: + case paths$1.materialExpressionConstant3Vector: + case paths$1.materialExpressionConstant4Vector: if (!value) { const vector = entity.getCustomproperties() .find(pinEntity => pinEntity.PinName?.toString() == "Constant") @@ -4124,32 +4227,32 @@ function nodeTitle(entity) { } value = undefined; break - case Configuration.paths.materialExpressionFunctionInput: { + case paths$1.materialExpressionFunctionInput: { const materialObject = entity.getMaterialSubobject(); const inputName = materialObject?.InputName ?? "In"; const inputType = materialObject?.InputType?.value.match(/^.+?_(\w+)$/)?.[1] ?? "Vector3"; return `Input ${inputName} (${inputType})` } - case Configuration.paths.materialExpressionLogarithm: + case paths$1.materialExpressionLogarithm: return "Ln" - case Configuration.paths.materialExpressionLogarithm10: + case paths$1.materialExpressionLogarithm10: return "Log10" - case Configuration.paths.materialExpressionLogarithm2: + case paths$1.materialExpressionLogarithm2: return "Log2" - case Configuration.paths.materialExpressionMaterialFunctionCall: + case paths$1.materialExpressionMaterialFunctionCall: const materialFunction = entity.getMaterialSubobject()?.MaterialFunction; if (materialFunction) { return materialFunction.getName() } break - case Configuration.paths.materialExpressionSquareRoot: + case paths$1.materialExpressionSquareRoot: return "Sqrt" - case Configuration.paths.materialExpressionSubtract: + case paths$1.materialExpressionSubtract: const materialObject = entity.getMaterialSubobject(); if (materialObject) { return `Subtract(${materialObject.ConstA ?? "1"},${materialObject.ConstB ?? "1"})` } - case Configuration.paths.metasoundEditorGraphExternalNode: { + case paths$1.metasoundEditorGraphExternalNode: { const name = entity["ClassName"]?.["Name"]; if (name) { switch (name) { @@ -4158,11 +4261,19 @@ function nodeTitle(entity) { } } } - case Configuration.paths.pcgEditorGraphNodeInput: + case paths$1.niagaraNodeConvert: + /** @type {String} */ + const targetType = (entity["AutowireMakeType"]?.["ClassStructOrEnum"] ?? "") + .toString() + .match(/(?:Niagara)?(\w+)['"]*$/) + ?.[1] + ?? ""; + return `Make ${targetType}` + case paths$1.pcgEditorGraphNodeInput: return "Input" - case Configuration.paths.pcgEditorGraphNodeOutput: + case paths$1.pcgEditorGraphNodeOutput: return "Output" - case Configuration.paths.spawnActorFromClass: + case paths$1.spawnActorFromClass: let className = entity.getCustomproperties() .find(pinEntity => pinEntity.PinName.toString() == "ReturnValue") ?.PinType @@ -4172,15 +4283,16 @@ function nodeTitle(entity) { className = null; } return `SpawnActor ${Utility.formatStringName(className ?? "NONE")}` - case Configuration.paths.switchEnum: + case paths$1.switchEnum: return `Switch on ${entity.Enum?.getName() ?? "Enum"}` - case Configuration.paths.switchInteger: + case paths$1.switchInteger: return `Switch on Int` - case Configuration.paths.variableGet: + case paths$1.variableGet: return "" - case Configuration.paths.variableSet: + case paths$1.variableSet: return "SET" } + const className = entity.getClass(); let switchTarget = entity.switchTarget(); if (switchTarget) { if (switchTarget[0] !== "E") { @@ -4195,18 +4307,19 @@ function nodeTitle(entity) { if (keyNameSymbol) { const name = keyNameSymbol.toString(); let title = keyName(name) ?? Utility.formatStringName(name); - if (entity.getClass() === Configuration.paths.inputDebugKey) { + if (className === paths$1.inputDebugKey) { title = "Debug Key " + title; - } else if (entity.getClass() === Configuration.paths.getInputAxisKeyValue) { + } else if (className === paths$1.getInputAxisKeyValue) { title = "Get " + title; } return title } - if (entity.getClass() === Configuration.paths.macro) { + if (className === paths$1.macro) { return Utility.formatStringName(entity.MacroGraphReference?.getMacroName()) } - if (entity.isMaterial() && entity.getMaterialSubobject()) { - let result = nodeTitle(entity.getMaterialSubobject()); + const materialSubobject = entity.getMaterialSubobject(); + if (materialSubobject) { + let result = nodeTitle(materialSubobject); result = result.match(/Material Expression (.+)/)?.[1] ?? result; return result } @@ -4221,7 +4334,7 @@ function nodeTitle(entity) { } const settingsObject = entity.getSettingsObject(); if (settingsObject) { - if (settingsObject.ExportPath.type === Configuration.paths.pcgHiGenGridSizeSettings) { + if (settingsObject.ExportPath?.valueOf()?.type === paths$1.pcgHiGenGridSizeSettings) { return `Grid Size: ${( settingsObject.HiGenGridSize?.toString().match(/\d+/)?.[0]?.concat("00") ?? settingsObject.HiGenGridSize?.toString().match(/^\w+$/)?.[0] @@ -4263,10 +4376,10 @@ function nodeTitle(entity) { ) } switch (memberParent) { - case Configuration.paths.blueprintGameplayTagLibrary: - case Configuration.paths.kismetMathLibrary: - case Configuration.paths.slateBlueprintLibrary: - case Configuration.paths.timeManagementBlueprintLibrary: + case paths$1.blueprintGameplayTagLibrary: + case paths$1.kismetMathLibrary: + case paths$1.slateBlueprintLibrary: + case paths$1.timeManagementBlueprintLibrary: const leadingLetter = memberName.match(/[BF]([A-Z]\w+)/); if (leadingLetter) { // Some functions start with B or F (Like FCeil, FMax, BMin) @@ -4350,7 +4463,7 @@ function nodeTitle(entity) { return "^" } break - case Configuration.paths.blueprintSetLibrary: + case paths$1.blueprintSetLibrary: { const setOperationMatch = memberName.match(/Set_(\w+)/); if (setOperationMatch) { @@ -4358,7 +4471,7 @@ function nodeTitle(entity) { } } break - case Configuration.paths.blueprintMapLibrary: + case paths$1.blueprintMapLibrary: { const setOperationMatch = memberName.match(/Map_(\w+)/); if (setOperationMatch) { @@ -4366,7 +4479,7 @@ function nodeTitle(entity) { } } break - case Configuration.paths.kismetArrayLibrary: + case paths$1.kismetArrayLibrary: { const arrayOperationMath = memberName.match(/Array_(\w+)/); if (arrayOperationMath) { @@ -4378,20 +4491,8 @@ function nodeTitle(entity) { return Utility.formatStringName(memberName) } if (entity.OpName) { - switch (entity.OpName.toString()) { - case "Boolean::LogicAnd": return "Logic AND" - case "Boolean::LogicEq": return "==" - case "Boolean::LogicNEq": return "!=" - case "Boolean::LogicNot": return "Logic NOT" - case "Boolean::LogicOr": return "Logic OR" - case "Matrix::MatrixMultiply": return "Multiply (Matrix * Matrix)" - case "Matrix::MatrixVectorMultiply": return "Multiply (Matrix * Vector4)" - case "Numeric::Abs": return "Abs" - case "Numeric::Add": return "+" - case "Numeric::DistancePos": return "Distance" - case "Numeric::Mul": return String.fromCharCode(0x2a2f) - } - return Utility.formatStringName(entity.OpName.toString()).replaceAll("::", " ") + return niagaraNodeNames[entity.OpName.toString()] + ?? Utility.formatStringName(entity.OpName.toString().replaceAll(/(?:^\w+(?} entity */ function pinColor(entity) { @@ -4734,9 +4847,10 @@ function pinColor(entity) { } else if (entity.PinType.PinCategory?.toString() === "optional") { return pinColorMaterial } - return colors[entity.getType()] + const type = entity.getType(); + return colors[type] ?? colors[entity.PinType.PinCategory?.toString().toLowerCase()] - ?? colors["default"] + ?? (type.startsWith("/Script/Niagara.") ? colors["struct"] : colors["default"]) } /** @param {PinEntity} entity */ @@ -4750,6 +4864,7 @@ function pinTitle(entity) { return match[1] // In case they match, then keep the case of the PinToolTip } } + result = result.replace(/^Module\./, ""); return result } @@ -4928,20 +5043,24 @@ class InvariantTextEntity extends IEntity { Parsernostrum.reg(new RegExp(`${this.lookbehind}\\s*\\(`)), Parsernostrum.doubleQuotedString, Parsernostrum.reg(/\s*\)/) - ).map(([_0, value, _2]) => Number(value)), - Parsernostrum.reg(new RegExp(this.lookbehind)).map(() => 0) // InvariantTextEntity can not have arguments + ).map(([_0, value, _2]) => value), + Parsernostrum.reg(new RegExp(this.lookbehind)).map(() => "") // InvariantTextEntity can have no arguments ) .map(value => new this(value)) .label("InvariantTextEntity") } doSerialize() { - return this.lookbehind + "(" + this.value + ")" + return this.lookbehind + '("' + this.value + '")' } valueOf() { return this.value } + + toString() { + return this.value + } } class LocalizedTextEntity extends IEntity { @@ -5112,12 +5231,6 @@ class Integer64Entity extends IEntity { class ObjectReferenceEntity extends IEntity { - /** @protected */ - static _quotedParser = Parsernostrum.regArray(new RegExp( - `'"(${Grammar.Regex.InsideString.source})"'` - + "|" - + `'(${Grammar.Regex.InsideSingleQuotedString.source})'` - )).map(([_0, a, b]) => a ?? b) static typeReference = Parsernostrum.reg( // @ts-expect-error new RegExp(Grammar.Regex.Path.source + "|" + Grammar.symbol.getParser().regexp.source) @@ -5138,29 +5251,31 @@ class ObjectReferenceEntity extends IEntity { return this.#path } set path(value) { + this.#name = ""; this.#path = value; } - #fullEscaped - /** @type {String} */ - #full + #serializer get full() { - return this.#full + return this.#serializer } set full(value) { - this.#full = value; + this.#serializer = value; } + #name = "" - constructor(type = "None", path = "", full = null) { + /** @param {(t: String, p: String) => String} serializer */ + constructor( + type = "None", + path = "", + serializer = type.includes("/") || path + ? (t, p) => `"${t + (p ? (`'${p}'`) : "")}"` + : (t, p) => t) { super(); this.#type = type; this.#path = path; - this.#full = full ?? ( - this.type.includes("/") || this.path - ? `"${this.type + (this.path ? (`'${this.path}'`) : "")}"` - : this.type - ); + this.#serializer = serializer; } /** @returns {P} */ @@ -5178,10 +5293,21 @@ class ObjectReferenceEntity extends IEntity { new RegExp( // @ts-expect-error "(" + this.typeReference.getParser().regexp.source + ")" - // @ts-expect-error - + "(?:" + this._quotedParser.getParser().parser.regexp.source + ")" + + "(?:" + + `'"(${Grammar.Regex.InsideString.source})"'` + + "|" + + `'(${Grammar.Regex.InsideSingleQuotedString.source})'` + + ")" ) - ).map(([full, type, ...path]) => new this(type, path.find(v => v), full)) + ).map(([full, type, fullQuotedPath, simpleQuotedPath]) => { + let fullQuoted = fullQuotedPath ? true : false; + let quotes = fullQuoted ? [`'"`, `"'`] : ["'", "'"]; + return new this( + type, + fullQuoted ? fullQuotedPath : simpleQuotedPath, + (t, p) => t + quotes[0] + p + quotes[1] + ) + }) } /** @returns {P} */ @@ -5191,30 +5317,34 @@ class ObjectReferenceEntity extends IEntity { '"(' + Grammar.Regex.InsideString.source + "?)" + "(?:'(" + Grammar.Regex.InsideSingleQuotedString.source + `?)')?"` ) - ).map(([full, type, path]) => new this(type, path, full)) + ).map(([_0, type, path]) => new this(type, path, (t, p) => `"${t}${p ? `'${p}'` : ""}"`)) } /** @returns {P} */ static createTypeReferenceGrammar() { - return this.typeReference.map(v => new this(v, "", v)) + return this.typeReference.map(v => new this(v, "", (t, p) => t)) } static createNoneInstance() { - return new ObjectReferenceEntity("None", "", "None") + return new this("None") } getName(dropCounter = false) { - return Utility.getNameFromPath(this.path.replace(/_C$/, ""), dropCounter) + if (!this.#name) { + if (!dropCounter) { + return this.#name = Utility.getNameFromPath(this.path.replace(/_C$/, ""), dropCounter) + } + return Utility.getNameFromPath(this.path.replace(/_C$/, ""), dropCounter) + } + return this.#name } doSerialize(insideString = false) { + let result = this.full(this.type, this.path); if (insideString) { - if (this.#fullEscaped === undefined) { - this.#fullEscaped = Utility.escapeString(this.#full, false); - } - return this.#fullEscaped + result = Utility.escapeString(result, false); } - return this.full + return result } /** @param {IEntity} other */ @@ -5224,6 +5354,10 @@ class ObjectReferenceEntity extends IEntity { } return this.type == other.type && this.path == other.path } + + toString() { + return this.full(this.type, this.path) + } } class PinReferenceEntity extends IEntity { @@ -5601,12 +5735,15 @@ class PinEntity extends IEntity { "byte": ByteEntity, "enum": EnumEntity, "exec": StringEntity, + "float": NumberEntity, "int": IntegerEntity, "int64": Integer64Entity, "name": StringEntity, "real": NumberEntity, "string": StringEntity, [Configuration.paths.linearColor]: LinearColorEntity, + [Configuration.paths.niagaraBool]: BooleanEntity, + [Configuration.paths.niagaraFloat]: NumberEntity, [Configuration.paths.niagaraPosition]: VectorEntity, [Configuration.paths.rotator]: RotatorEntity, [Configuration.paths.vector]: VectorEntity, @@ -5728,9 +5865,10 @@ class PinEntity extends IEntity { return new PinEntity(objectEntity) } + /** @returns {String} */ getType() { const category = this.PinType.PinCategory?.toString().toLocaleLowerCase(); - if (category === "struct" || category === "class" || category === "object" || category === "type") { + if (["struct", "class", "object", "type", "statictype"].includes(category)) { return this.PinType.PinSubCategoryObject?.path } if (this.isEnum()) { @@ -5815,6 +5953,7 @@ class PinEntity extends IEntity { isExecution() { return this.PinType.PinCategory.toString() === "exec" + || this.getType() === Configuration.paths.niagaraParameterMap } isHidden() { @@ -5830,7 +5969,7 @@ class PinEntity extends IEntity { } isLinked() { - return this.LinkedTo?.length > 0 ?? false + return this.LinkedTo?.length > 0 } /** @@ -6121,7 +6260,7 @@ class UnknownPinEntity extends PinEntity { static createGrammar() { return Parsernostrum.seq( // Lookbehind - Parsernostrum.reg(new RegExp(`(${Grammar.Regex.Symbol.source}\\s*)\\(\\s*`), 1), + Parsernostrum.reg(new RegExp(`(${Grammar.Regex.Symbol.source}\\s*)?\\(\\s*`), 1), Grammar.createAttributeGrammar(this).sepBy(Grammar.commaSeparation), Parsernostrum.reg(/\s*(?:,\s*)?\)/) ).map(([lookbehind, attributes, _2]) => { @@ -6182,7 +6321,7 @@ class ObjectEntity extends IEntity { Class: ObjectReferenceEntity, Name: StringEntity, Archetype: ObjectReferenceEntity, - ExportPath: ObjectReferenceEntity, + ExportPath: MirroredEntity.of(ObjectReferenceEntity), ObjectRef: ObjectReferenceEntity, BlueprintElementType: ObjectReferenceEntity, BlueprintElementInstance: ObjectReferenceEntity, @@ -6242,8 +6381,11 @@ class ObjectEntity extends IEntity { SizeX: MirroredEntity.of(IntegerEntity), SizeY: MirroredEntity.of(IntegerEntity), Text: MirroredEntity.of(StringEntity), + ParameterName: StringEntity, + ExpressionGUID: GuidEntity, MaterialExpressionEditorX: MirroredEntity.of(IntegerEntity), MaterialExpressionEditorY: MirroredEntity.of(IntegerEntity), + MaterialExpressionGuid: GuidEntity, NodeTitle: StringEntity, NodeTitleColor: LinearColorEntity, PositionX: MirroredEntity.of(IntegerEntity), @@ -6271,10 +6413,13 @@ class ObjectEntity extends IEntity { NodeGuid: GuidEntity, ErrorType: IntegerEntity, ErrorMsg: StringEntity, - ScriptVariables: ArrayEntity.of(ScriptVariableEntity), + ScriptVariables: ArrayEntity.flagInlined().of(ScriptVariableEntity), Node: MirroredEntity.of(ObjectReferenceEntity), ExportedNodes: StringEntity, - CustomProperties: ArrayEntity.of(AlternativesEntity.accepting(PinEntity, UnknownPinEntity)).withDefault().flagSilent(), + CustomProperties: ArrayEntity + .of(AlternativesEntity.accepting(PinEntity, UnknownPinEntity)) + .withDefault() + .flagSilent(), } static customPropertyGrammar = Parsernostrum.seq( Parsernostrum.reg(/CustomProperties\s+/), @@ -6289,29 +6434,28 @@ class ObjectEntity extends IEntity { Grammar.symbolQuoted.map(v => [v, true]), Grammar.symbol.map(v => [v, false]), ), - Parsernostrum.reg(new RegExp(String.raw`\s*\(\s*(\d+)\s*\)\s*\=\s*`), 1).map(Number) - ) - .chain( - /** @param {[[keyof ObjectEntity.attributes, Boolean], Number]} param */ - ([[symbol, quoted], index]) => - (this.attributes[symbol]?.grammar ?? IEntity.unknownEntityGrammar).map(currentValue => - values => { - if (values[symbol] === undefined) { - let arrayEntity = ArrayEntity; - if (quoted != arrayEntity.quoted) { - arrayEntity = arrayEntity.flagQuoted(quoted); - } - if (!arrayEntity.inlined) { - arrayEntity = arrayEntity.flagInlined(); - } - values[symbol] = new arrayEntity(); + Parsernostrum.reg(new RegExp(String.raw`\s*\(\s*(\d+)\s*\)\s*\=\s*`), 1).map(Number) // Number in parentheses then equal + ).chain( + /** @param {[[keyof ObjectEntity.attributes, Boolean], Number]} param */ + ([[symbol, quoted], index]) => + (this.attributes[symbol]?.grammar ?? IEntity.unknownEntityGrammar).map(currentValue => + values => { + if (values[symbol] === undefined) { + let arrayEntity = ArrayEntity; + if (quoted != arrayEntity.quoted) { + arrayEntity = arrayEntity.flagQuoted(quoted); } - /** @type {ArrayEntity} */ - const target = values[symbol]; - target.values[index] = currentValue; + if (!arrayEntity.inlined) { + arrayEntity = arrayEntity.flagInlined(); + } + values[symbol] = new arrayEntity(); } - ) - ) + /** @type {ArrayEntity} */ + const target = values[symbol]; + target.values[index] = currentValue; + } + ) + ) static grammar = this.createGrammar() static grammarMultipleObjects = Parsernostrum.seq( Parsernostrum.whitespaceOpt, @@ -6337,20 +6481,20 @@ class ObjectEntity extends IEntity { super(values); // Attributes + /** @type {ArrayEntity} */ this.CustomProperties; /** @type {InstanceType} */ this.AddedPins; /** @type {InstanceType} */ this.AdvancedPinDisplay; /** @type {InstanceType} */ this.Archetype; /** @type {InstanceType} */ this.AxisKey; /** @type {InstanceType} */ this.bIsPureFunc; /** @type {InstanceType} */ this.BlueprintElementInstance; - /** @type {InstanceType} */ this.ConstA; - /** @type {InstanceType} */ this.ConstB; /** @type {InstanceType} */ this.BlueprintElementType; /** @type {InstanceType} */ this.Class; /** @type {InstanceType} */ this.CommentColor; /** @type {InstanceType} */ this.ComponentPropertyName; + /** @type {InstanceType} */ this.ConstA; + /** @type {InstanceType} */ this.ConstB; /** @type {InstanceType} */ this.CustomFunctionName; - /** @type {ArrayEntity} */ this.CustomProperties; /** @type {InstanceType} */ this.DelegatePropertyName; /** @type {InstanceType} */ this.DelegateReference; /** @type {InstanceType} */ this.EnabledState; @@ -6389,9 +6533,10 @@ class ObjectEntity extends IEntity { /** @type {InstanceType} */ this.Operation; /** @type {InstanceType} */ this.OpName; /** @type {InstanceType} */ this.OutputPins; + /** @type {InstanceType} */ this.ParameterName; /** @type {InstanceType} */ this.PCGNode; - /** @type {InstanceType} */ this.PinTags; /** @type {InstanceType} */ this.PinNames; + /** @type {InstanceType} */ this.PinTags; /** @type {InstanceType} */ this.PositionX; /** @type {InstanceType} */ this.PositionY; /** @type {InstanceType} */ this.ProxyFactoryFunctionName; @@ -6499,6 +6644,7 @@ class ObjectEntity extends IEntity { ? outputIndex++ : i; }); + this.mirrorNameInExportPaths(); } /** @returns {P} */ @@ -6544,12 +6690,46 @@ class ObjectEntity extends IEntity { ) } + /** + * @protected + * Mirror then name part of the objects contained in this one in ExportPath + */ + mirrorNameInExportPaths(originalName = this.Name?.toString()) { + if (!originalName) { + return + } + const values = [this]; + for (let i = 0; i < values.length; ++i) { + const value = values[i]; + if (value instanceof ObjectEntity) { + values.push(...Object.values(value)); + if (!value.ExportPath?.valueOf().path.includes(originalName)) { + continue + } + } else { + continue + } + const mirroredEntity = /** @type {typeof ObjectEntity} */(value.constructor).attributes.ExportPath; + let originalExportPath = value.ExportPath; + value.ExportPath = new mirroredEntity( + () => { + const exportPath = originalExportPath.valueOf(); + return new (mirroredEntity.type)( + exportPath.type, + exportPath.path.replace(originalName, this.Name?.toString() ?? ""), + exportPath.full + ) + } + ); + } + } + /** @type {String} */ #class getClass() { if (!this.#class) { this.#class = (this.Class?.path ? this.Class.path : this.Class?.type) - ?? this.ExportPath?.type + ?? this.ExportPath?.valueOf()?.type ?? ""; if (this.#class && !this.#class.startsWith("/")) { // Old path names did not start with /Script or /Engine, check tests/resources/LegacyNodes.js @@ -6563,14 +6743,14 @@ class ObjectEntity extends IEntity { } getType() { - let classValue = this.getClass(); - if (this.MacroGraphReference?.MacroGraph?.path) { - return this.MacroGraphReference.MacroGraph.path + const path = this.MacroGraphReference?.MacroGraph?.path; + if (path) { + return path } if (this.MaterialExpression) { return this.MaterialExpression.type } - return classValue + return this.getClass() } getObjectName(dropCounter = false) { @@ -6688,24 +6868,10 @@ class ObjectEntity extends IEntity { } isMaterial() { - - return this.getClass() === Configuration.paths.materialGraphNode - // return [ - // Configuration.paths.materialExpressionConstant, - // Configuration.paths.materialExpressionConstant2Vector, - // Configuration.paths.materialExpressionConstant3Vector, - // Configuration.paths.materialExpressionConstant4Vector, - // Configuration.paths.materialExpressionLogarithm, - // Configuration.paths.materialExpressionLogarithm10, - // Configuration.paths.materialExpressionLogarithm2, - // Configuration.paths.materialExpressionMaterialFunctionCall, - // Configuration.paths.materialExpressionSquareRoot, - // Configuration.paths.materialExpressionTextureCoordinate, - // Configuration.paths.materialExpressionTextureSample, - // Configuration.paths.materialGraphNode, - // Configuration.paths.materialGraphNodeComment, - // ] - // .includes(this.getClass()) + const classValue = this.getClass(); + return classValue.startsWith("/Script/Engine.MaterialExpression") + || classValue.startsWith("/Script/InterchangeImport.MaterialExpression") + || classValue.startsWith("/Script/UnrealEd.MaterialGraph") } /** @return {ObjectEntity} */ @@ -6799,9 +6965,10 @@ class ObjectEntity extends IEntity { attributeSeparator = Self.attributeSeparator, wrap = Self.wrap, ) { + const isSelfOverriden = Self !== this.constructor; const deeperIndentation = indentation + Configuration.indentation; const initial_trailing = this.trailing; - this.trailing = false; + this.trailing = true; const content = super.doSerialize(insideString, deeperIndentation, Self, printKey, keySeparator, attributeSeparator, wrap); this.trailing = initial_trailing; let result = indentation + "Begin Object" @@ -6823,27 +6990,27 @@ class ObjectEntity extends IEntity { ? ` Archetype${keySeparator}${this.Archetype.serialize(insideString)}` : "" ) - + ((this.ExportPath?.type || this.ExportPath?.path) - // && Self.attributes.ExportPath.ignored !== true - // && this.ExportPath.ignored !== true + + ((this.ExportPath?.valueOf()?.type || this.ExportPath?.valueOf()?.path) + // && Self.attributes.ExportPath.valueOf().ignored !== true + // && this.ExportPath.valueOf().ignored !== true ? ` ExportPath${keySeparator}${this.ExportPath.serialize(insideString)}` : "" ) - + (content ? attributeSeparator + content : "") + + attributeSeparator + + content + (Self.attributes.CustomProperties.ignored !== true && this.CustomProperties.ignored !== true ? this.getCustomproperties() .map(pin => - attributeSeparator - + deeperIndentation + deeperIndentation + printKey("CustomProperties ") + pin.serialize(insideString) + + attributeSeparator ) .join("") : "" ) - + attributeSeparator + indentation + "End Object" - + (this.trailing ? attributeSeparator : ""); + + (isSelfOverriden && Self.trailing || this.trailing ? attributeSeparator : ""); return result } } @@ -6870,7 +7037,7 @@ class KnotEntity extends ObjectEntity { inputPinEntity.copyTypeFrom(pinReferenceForType); outputPinEntity.copyTypeFrom(pinReferenceForType); } - values["CustomProperties"] = new (ObjectEntity.attributes.CustomProperties)([inputPinEntity, outputPinEntity]); + values.CustomProperties = new (ObjectEntity.attributes.CustomProperties)([inputPinEntity, outputPinEntity]); super(values); } } @@ -7473,41 +7640,19 @@ class LinkTemplate extends IFromToPositionedTemplate { return x => a / x + q } - /** - * Returns a function providing a clamped line passing through two points. It is clamped after and before the - * points. It is easier explained with the following ascii draw. - * b ______ - * / - * / - * / - * ______/ a - */ - static clampedLine(a, b) { - if (a[0] > b[0]) { - const temp = a; - a = b; - b = temp; - } - const m = (b[1] - a[1]) / (b[0] - a[0]); - const q = a[1] - m * a[0]; - return x => x < a[0] - ? a[1] - : x > b[0] - ? b[1] - : m * x + q - } + static clampedLine = x => Math.min(Math.max(0, x), 1) static c1DecreasingValue = LinkTemplate.decreasingValue(-0.15, [100, 15]) static c2DecreasingValue = LinkTemplate.decreasingValue(-0.05, [500, 130]) - static c2Clamped = LinkTemplate.clampedLine([0, 80], [200, 40]) + static c2Clamped = x => -40 * LinkTemplate.clampedLine(x / 200) + 80 #uniqueId = `ueb-id-${Math.floor(Math.random() * 1E12)}` /** @param {Coordinates} location */ #createKnot = location => { - const knotEntity = new KnotEntity({}, this.element.source.entity); + const knotEntity = new KnotEntity({}, this.element.origin.entity); const knot = /** @type {NodeElementConstructor} */(ElementFactory.getConstructor("ueb-node")) .newObject(knotEntity); knot.setLocation(...this.blueprint.snapToGrid(...location)); @@ -7515,13 +7660,90 @@ class LinkTemplate extends IFromToPositionedTemplate { this.blueprint.addGraphElement(knot); // Important: keep it before changing existing links const inputPin = this.element.getInputPin(); const outputPin = this.element.getOutputPin(); - this.element.source = null; - this.element.destination = null; + this.element.origin = null; + this.element.target = null; const link = /** @type {LinkElementConstructor} */(ElementFactory.getConstructor("ueb-link")) .newObject(outputPin, knotTemplate.inputPin); this.blueprint.addGraphElement(link); - this.element.source = knotTemplate.outputPin; - this.element.destination = inputPin; + this.element.origin = knotTemplate.outputPin; + this.element.target = inputPin; + } + + /** @param {PropertyValues} changedProperties */ + #calculateSVGPath(changedProperties) { + const originPin = this.element.origin; + const targetPin = this.element.target; + const isOriginAKnot = originPin?.isKnot(); + const isTargetAKnot = targetPin?.isKnot(); + const from = this.element.fromX; + const to = this.element.toX; + + // Switch actual input/output pins if allowed and makes sense + if (isOriginAKnot && (!targetPin || isTargetAKnot)) { + if (originPin?.isInputLoosely() && to > from + Configuration.distanceThreshold) { + this.element.origin = /** @type {KnotPinTemplate} */(originPin.template).getoppositePin(); + } else if (originPin?.isOutputLoosely() && to < from - Configuration.distanceThreshold) { + this.element.origin = /** @type {KnotPinTemplate} */(originPin.template).getoppositePin(); + } + } + if (isTargetAKnot && (!originPin || isOriginAKnot)) { + if (targetPin?.isInputLoosely() && to < from - Configuration.distanceThreshold) { + this.element.target = /** @type {KnotPinTemplate} */(targetPin.template).getoppositePin(); + } else if (targetPin?.isOutputLoosely() && to > from + Configuration.distanceThreshold) { + this.element.target = /** @type {KnotPinTemplate} */(targetPin.template).getoppositePin(); + } + } + + // Switch visual input/output pins if allowed and makes sense + if (originPin && targetPin) { + let directionsCheckedKnot; + if (originPin?.isKnot()) { + // The target end has moved and origin end is a knot + directionsCheckedKnot = originPin.nodeElement; + } else if (targetPin?.isKnot()) { + // The origin end has moved and target end is a knot + directionsCheckedKnot = targetPin.nodeElement; + } + if (directionsCheckedKnot && directionsCheckedKnot.hasUpdated) { + /** @type {KnotNodeTemplate} */(directionsCheckedKnot.template).checkSwtichDirectionsVisually(); + } + } + + let sameDirection = originPin?.isOutputVisually() == targetPin?.isOutputVisually(); + + // Actual computation + const dx = Math.max(Math.abs(this.element.fromX - this.element.toX), 1); + const dy = Math.max(Math.abs(this.element.fromY - this.element.toY), 1); + const width = Math.max(dx, Configuration.linkMinWidth); + const fillRatio = dx / width; + const xInverted = this.element.originatesFromInput + ? this.element.fromX < this.element.toX + : this.element.toX < this.element.fromX; + this.element.startPixels = dx < width // If under minimum width + ? (width - dx) / 2 // Start from half the empty space + : 0; // Otherwise start from the beginning + const startPercentage = xInverted ? this.element.startPixels + fillRatio * 100 : this.element.startPixels; + this.element.startPercentage = startPercentage; + const c1 = startPercentage + (sameDirection + ? 5 + : ( + (xInverted + ? LinkTemplate.c1DecreasingValue(width) + : 10 + ) + * fillRatio + ) + ); + const aspectRatio = dy / Math.max(30, dx); + const c2 = sameDirection + // ? 100 - Math.abs(100 - 2 * startPercentage) + 15 + ? 100 * LinkTemplate.clampedLine(startPercentage / 50) + 15 + : ( + LinkTemplate.c2Clamped(dx) + * LinkTemplate.sigmoidPositive(fillRatio * 1.2 + aspectRatio * 0.5, 1.5, 1.8) + + startPercentage + ); + this.element.svgPathD = Configuration.linkRightSVGPath(startPercentage, c1, c2, sameDirection); } createInputObjects() { @@ -7557,70 +7779,26 @@ class LinkTemplate extends IFromToPositionedTemplate { /** @param {PropertyValues} changedProperties */ willUpdate(changedProperties) { super.willUpdate(changedProperties); - const sourcePin = this.element.source; - const destinationPin = this.element.destination; if (changedProperties.has("fromX") || changedProperties.has("toX")) { - const from = this.element.fromX; - const to = this.element.toX; - const isSourceAKnot = sourcePin?.nodeElement.getType() == Configuration.paths.knot; - const isDestinationAKnot = destinationPin?.nodeElement.getType() == Configuration.paths.knot; - if (isSourceAKnot && (!destinationPin || isDestinationAKnot)) { - if (sourcePin?.isInput() && to > from + Configuration.distanceThreshold) { - this.element.source = /** @type {KnotNodeTemplate} */(sourcePin.nodeElement.template).outputPin; - } else if (sourcePin?.isOutput() && to < from - Configuration.distanceThreshold) { - this.element.source = /** @type {KnotNodeTemplate} */(sourcePin.nodeElement.template).inputPin; - } - } - if (isDestinationAKnot && (!sourcePin || isSourceAKnot)) { - if (destinationPin?.isInput() && to < from - Configuration.distanceThreshold) { - this.element.destination = - /** @type {KnotNodeTemplate} */(destinationPin.nodeElement.template).outputPin; - } else if (destinationPin?.isOutput() && to > from + Configuration.distanceThreshold) { - this.element.destination = - /** @type {KnotNodeTemplate} */(destinationPin.nodeElement.template).inputPin; - } - } + this.#calculateSVGPath(changedProperties); } - const dx = Math.max(Math.abs(this.element.fromX - this.element.toX), 1); - const dy = Math.max(Math.abs(this.element.fromY - this.element.toY), 1); - const width = Math.max(dx, Configuration.linkMinWidth); - // const height = Math.max(Math.abs(link.fromY - link.toY), 1) - const fillRatio = dx / width; - const xInverted = this.element.originatesFromInput - ? this.element.fromX < this.element.toX - : this.element.toX < this.element.fromX; - this.element.startPixels = dx < width // If under minimum width - ? (width - dx) / 2 // Start from half the empty space - : 0; // Otherwise start from the beginning - this.element.startPercentage = xInverted ? this.element.startPixels + fillRatio * 100 : this.element.startPixels; - const c1 = - this.element.startPercentage - + (xInverted - ? LinkTemplate.c1DecreasingValue(width) - : 10 - ) - * fillRatio; - const aspectRatio = dy / Math.max(30, dx); - const c2 = - LinkTemplate.c2Clamped(dx) - * LinkTemplate.sigmoidPositive(fillRatio * 1.2 + aspectRatio * 0.5, 1.5, 1.8) - + this.element.startPercentage; - this.element.svgPathD = Configuration.linkRightSVGPath(this.element.startPercentage, c1, c2); } /** @param {PropertyValues} changedProperties */ update(changedProperties) { super.update(changedProperties); - if (changedProperties.has("originatesFromInput")) { - this.element.style.setProperty("--ueb-from-input", this.element.originatesFromInput ? "1" : "0"); - } const referencePin = this.element.getOutputPin(true); if (referencePin) { this.element.style.setProperty("--ueb-link-color-rgb", LinearColorEntity.printLinearColor(referencePin.color)); } - this.element.style.setProperty("--ueb-y-reflected", `${this.element.fromY > this.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)}`); + const mirrorV = (this.element.fromY > this.element.toY ? -1 : 1) // If from is below to => mirror + * (this.element.originatesFromInput ? -1 : 1) // Unless fro refers to an input pin + * (this.element.origin?.isInputVisually() && this.element.target?.isInputVisually() ? -1 : 1); + const mirrorH = (this.element.origin?.isInputVisually() && this.element.target?.isInputVisually() ? -1 : 1); + this.element.style.setProperty("--ueb-link-scale-y", `${mirrorV}`); + this.element.style.setProperty("--ueb-link-scale-x", `${mirrorH}`); } render() { @@ -7632,14 +7810,14 @@ class LinkTemplate extends IFromToPositionedTemplate { ${this.element.linkMessageIcon || this.element.linkMessageText ? x` - ${this.element.linkMessageIcon !== A ? x` + ${this.element.linkMessageIcon !== E ? x` ${this.element.linkMessageIcon} - ` : A} - ${this.element.linkMessageText !== A ? x` + ` : E} + ${this.element.linkMessageText !== E ? x` ${this.element.linkMessageText} - ` : A} + ` : E} - ` : A} + ` : E} ` } } @@ -7691,7 +7869,7 @@ class IFromToPositionedElement extends IElement { * @param {Number} x * @param {Number} y */ - addSourceLocation(x, y) { + addOriginLocation(x, y) { this.fromX += x; this.fromY += y; } @@ -7700,7 +7878,7 @@ class IFromToPositionedElement extends IElement { * @param {Number} x * @param {Number} y */ - addDestinationLocation(x, y) { + addTargetLocation(x, y) { this.toX += x; this.toY += y; } @@ -7717,9 +7895,31 @@ class LinkElement extends IFromToPositionedElement { converter: BooleanEntity.booleanConverter, reflect: true, }, + originNode: { + type: String, + attribute: "data-origin-node", + reflect: true, + }, + originPin: { + type: String, + attribute: "data-origin-pin", + reflect: true, + }, + targetNode: { + type: String, + attribute: "data-target-node", + reflect: true, + }, + targetPin: { + type: String, + attribute: "data-target-pin", + reflect: true, + }, originatesFromInput: { type: Boolean, - attribute: false, + attribute: "data-from-input", + converter: BooleanEntity.booleanConverter, + reflect: true, }, svgPathD: { type: String, @@ -7736,35 +7936,40 @@ class LinkElement extends IFromToPositionedElement { } /** @type {PinElement} */ - #source - get source() { - return this.#source + #origin + get origin() { + return this.#origin } - set source(pin) { + set origin(pin) { this.#setPin(pin, false); } /** @type {PinElement} */ - #destination - get destination() { - return this.#destination + #target + get target() { + return this.#target } - set destination(pin) { + set target(pin) { this.#setPin(pin, true); } #nodeDeleteHandler = () => this.remove() /** @param {UEBDragEvent} e */ - #nodeDragSourceHandler = e => this.addSourceLocation(...e.detail.value) + #nodeDragOriginHandler = e => this.addOriginLocation(...e.detail.value) /** @param {UEBDragEvent} e */ - #nodeDragDestinatonHandler = e => this.addDestinationLocation(...e.detail.value) - #nodeReflowSourceHandler = e => this.setSourceLocation() - #nodeReflowDestinatonHandler = e => this.setDestinationLocation() + #nodeDragTargetHandler = e => this.addTargetLocation(...e.detail.value) + #nodeReflowOriginHandler = e => { + if (this.origin.isKnot()) { + this.originatesFromInput = this.origin.isInputVisually(); + } + this.setOriginLocation(); + } + #nodeReflowTargetHandler = e => this.setTargetLocation() /** @type {TemplateResult | nothing} */ - linkMessageIcon = A + linkMessageIcon = E /** @type {TemplateResult | nothing} */ - linkMessageText = A + linkMessageText = E /** @type {SVGPathElement} */ pathElement @@ -7772,6 +7977,10 @@ class LinkElement extends IFromToPositionedElement { constructor() { super(); this.dragging = false; + this.originNode = ""; + this.originPin = ""; + this.targetNode = ""; + this.targetPin = ""; this.originatesFromInput = false; this.startPercentage = 0; this.svgPathD = ""; @@ -7779,32 +7988,32 @@ class LinkElement extends IFromToPositionedElement { } /** - * @param {PinElement} source - * @param {PinElement?} destination + * @param {PinElement} origin + * @param {PinElement?} target */ - static newObject(source, destination) { + static newObject(origin, target) { const result = new LinkElement(); - result.initialize(source, destination); + result.initialize(origin, target); return result } /** - * @param {PinElement} source - * @param {PinElement?} destination + * @param {PinElement} origin + * @param {PinElement?} target */ // @ts-expect-error - initialize(source, destination) { + initialize(origin, target) { super.initialize({}, new LinkTemplate()); - if (source) { - this.source = source; - if (!destination) { + if (origin) { + this.origin = origin; + if (!target) { this.toX = this.fromX; this.toY = this.fromY; } } - if (destination) { - this.destination = destination; - if (!source) { + if (target) { + this.target = target; + if (!origin) { this.fromX = this.toX; this.fromY = this.toY; } @@ -7813,10 +8022,10 @@ class LinkElement extends IFromToPositionedElement { /** * @param {PinElement} pin - * @param {Boolean} isDestinationPin + * @param {Boolean} isTargetPin */ - #setPin(pin, isDestinationPin) { - const getCurrentPin = () => isDestinationPin ? this.destination : this.source; + #setPin(pin, isTargetPin) { + const getCurrentPin = () => isTargetPin ? this.target : this.origin; if (getCurrentPin() == pin) { return } @@ -7825,66 +8034,72 @@ class LinkElement extends IFromToPositionedElement { nodeElement.removeEventListener(Configuration.removeEventName, this.#nodeDeleteHandler); nodeElement.removeEventListener( Configuration.nodeDragEventName, - isDestinationPin ? this.#nodeDragDestinatonHandler : this.#nodeDragSourceHandler + isTargetPin ? this.#nodeDragTargetHandler : this.#nodeDragOriginHandler ); nodeElement.removeEventListener( Configuration.nodeReflowEventName, - isDestinationPin ? this.#nodeReflowDestinatonHandler : this.#nodeReflowSourceHandler + isTargetPin ? this.#nodeReflowTargetHandler : this.#nodeReflowOriginHandler ); this.#unlinkPins(); } - isDestinationPin - ? this.#destination = pin - : this.#source = pin; + if (isTargetPin) { + this.#target = pin; + this.targetNode = pin?.nodeElement.nodeTitle; + this.targetPin = pin?.pinId.toString(); + } else { + this.#origin = pin; + this.originNode = pin?.nodeElement.nodeTitle; + this.originPin = pin?.pinId.toString(); + } if (getCurrentPin()) { const nodeElement = getCurrentPin().getNodeElement(); nodeElement.addEventListener(Configuration.removeEventName, this.#nodeDeleteHandler); nodeElement.addEventListener( Configuration.nodeDragEventName, - isDestinationPin ? this.#nodeDragDestinatonHandler : this.#nodeDragSourceHandler + isTargetPin ? this.#nodeDragTargetHandler : this.#nodeDragOriginHandler ); nodeElement.addEventListener( Configuration.nodeReflowEventName, - isDestinationPin ? this.#nodeReflowDestinatonHandler : this.#nodeReflowSourceHandler + isTargetPin ? this.#nodeReflowTargetHandler : this.#nodeReflowOriginHandler ); - isDestinationPin - ? this.setDestinationLocation() - : (this.setSourceLocation(), this.originatesFromInput = this.source.isInput()); + isTargetPin + ? this.setTargetLocation() + : (this.setOriginLocation(), this.originatesFromInput = this.origin.isInputVisually()); this.#linkPins(); } } #linkPins() { - if (this.source && this.destination) { - this.source.linkTo(this.destination); - this.destination.linkTo(this.source); + if (this.origin && this.target) { + this.origin.linkTo(this.target); + this.target.linkTo(this.origin); } } #unlinkPins() { - if (this.source && this.destination) { - this.source.unlinkFrom(this.destination, false); - this.destination.unlinkFrom(this.source, false); + if (this.origin && this.target) { + this.origin.unlinkFrom(this.target, false); + this.target.unlinkFrom(this.origin, false); } } cleanup() { super.cleanup(); this.#unlinkPins(); - this.source = null; - this.destination = null; + this.origin = null; + this.target = null; } /** @param {Coordinates} location */ - setSourceLocation(location = null, canPostpone = true) { + setOriginLocation(location = null, canPostpone = true) { if (location == null) { const self = this; - if (canPostpone && (!this.hasUpdated || !this.source.hasUpdated)) { - Promise.all([this.updateComplete, this.source.updateComplete]) - .then(() => self.setSourceLocation(null, false)); + if (canPostpone && (!this.hasUpdated || !this.origin.hasUpdated)) { + Promise.all([this.updateComplete, this.origin.updateComplete]) + .then(() => self.setOriginLocation(null, false)); return } - location = this.source.template.getLinkLocation(); + location = this.origin.template.getLinkLocation(); } const [x, y] = location; this.fromX = x; @@ -7892,58 +8107,68 @@ class LinkElement extends IFromToPositionedElement { } /** @param {Coordinates} location */ - setDestinationLocation(location = null, canPostpone = true) { + setTargetLocation(location = null, canPostpone = true) { if (location == null) { const self = this; - if (canPostpone && (!this.hasUpdated || !this.destination.hasUpdated)) { - Promise.all([this.updateComplete, this.destination.updateComplete]) - .then(() => self.setDestinationLocation(null, false)); + if (canPostpone && (!this.hasUpdated || !this.target.hasUpdated)) { + Promise.all([this.updateComplete, this.target.updateComplete]) + .then(() => self.setTargetLocation(null, false)); return } - location = this.destination.template.getLinkLocation(); + location = this.target.template.getLinkLocation(); } this.toX = location[0]; this.toY = location[1]; } getInputPin(getSomething = false) { - if (this.source?.isInput()) { - return this.source + if (this.origin?.isInput()) { + return this.origin } - if (this.destination?.isInput()) { - return this.destination + if (this.target?.isInput()) { + return this.target } if (getSomething) { - return this.source ?? this.destination + return this.origin ?? this.target } } /** @param {PinElement} pin */ setInputPin(pin) { - if (this.source?.isInput()) { - this.source = pin; + if (this.origin?.isInput()) { + this.origin = pin; } - this.destination = pin; + this.target = pin; } getOutputPin(getSomething = false) { - if (this.source?.isOutput()) { - return this.source + if (this.origin?.isOutput()) { + return this.origin } - if (this.destination?.isOutput()) { - return this.destination + if (this.target?.isOutput()) { + return this.target } if (getSomething) { - return this.source ?? this.destination + return this.origin ?? this.target } } /** @param {PinElement} pin */ setOutputPin(pin) { - if (this.destination?.isOutput()) { - this.destination = pin; + if (this.target?.isOutput()) { + this.target = pin; + } + this.origin = pin; + } + + /** @param {NodeElement} pin */ + getOtherPin(pin) { + if (this.origin?.nodeElement === pin) { + return this.target + } + if (this.target?.nodeElement === pin) { + return this.origin } - this.source = pin; } startDragging() { @@ -7955,23 +8180,23 @@ class LinkElement extends IFromToPositionedElement { } removeMessage() { - this.linkMessageIcon = A; - this.linkMessageText = A; + this.linkMessageIcon = E; + this.linkMessageText = E; } setMessageConvertType() { this.linkMessageIcon = SVGIcon.convert; - this.linkMessageText = x`Convert ${this.source.pinType} to ${this.destination.pinType}.`; + this.linkMessageText = x`Convert ${this.origin.pinType} to ${this.target.pinType}.`; } setMessageCorrect() { this.linkMessageIcon = SVGIcon.correct; - this.linkMessageText = A; + this.linkMessageText = E; } setMessageReplace() { this.linkMessageIcon = SVGIcon.correct; - this.linkMessageText = A; + this.linkMessageText = E; } setMessageDirectionsIncompatible() { @@ -7980,7 +8205,7 @@ class LinkElement extends IFromToPositionedElement { } setMessagePlaceNode() { - this.linkMessageIcon = A; + this.linkMessageIcon = E; this.linkMessageText = x`Place a new node.`; } @@ -8468,12 +8693,13 @@ function nodeSubtitle(entity) { switch (entity.getType()) { case Configuration.paths.addDelegate: case Configuration.paths.clearDelegate: + case Configuration.paths.callDelegate: case Configuration.paths.removeDelegate: return null } const targetPin = entity .getPinEntities() - .find(pin => pin.PinName?.toString() === "self" && pinTitle(pin) === "Target"); + .find(pin => !pin.isHidden() && pin.PinName?.toString() === "self" && pinTitle(pin) === "Target"); if (targetPin) { const target = entity.FunctionReference?.MemberParent?.getName() ?? targetPin.PinType?.PinSubCategoryObject?.getName() @@ -8724,17 +8950,17 @@ class NodeTemplate extends ISelectableDraggableTemplate { Add pin ${SVGIcon.plusCircle} - `: A} + `: E} ${this.element.entity.isDevelopmentOnly() ? x` Development Only - ` : A} + ` : E} ${this.element.advancedPinDisplay ? x` ${SVGIcon.expandIcon} - ` : A} + ` : E} ` @@ -8755,15 +8981,15 @@ class NodeTemplate extends ISelectableDraggableTemplate { ${icon ? x` ${icon} - ` : A} + ` : E} ${name ? x` ${name} ${this.#subtitle ? x` ${this.#subtitle} - `: A} + `: E} - ` : A} + ` : E} ` } @@ -8815,6 +9041,13 @@ class NodeTemplate extends ISelectableDraggableTemplate { } linksChanged() { } + + /** All the link connected to this node */ + getAllConnectedLinks() { + const nodeTitle = this.element.nodeTitle; + const query = `ueb-link[data-origin-node="${nodeTitle}"],ueb-link[data-target-node="${nodeTitle}"]`; + return /** @type {LinkElement[]} */([...this.blueprint.querySelectorAll(query)]) + } } class IResizeableTemplate extends NodeTemplate { @@ -9082,13 +9315,10 @@ class MouseCreateLink extends IMouseClickDrag { if (!this.enteredPin) { this.linkValid = false; this.enteredPin = /** @type {PinElement} */(e.target); - const a = this.link.source ?? this.target; // Remember target might have change + const a = this.link.origin ?? this.target; // Remember target might have change const b = this.enteredPin; const outputPin = a.isOutput() ? a : b; - if ( - a.nodeElement.getType() === Configuration.paths.knot - || b.nodeElement.getType() === Configuration.paths.knot - ) { + if (a.isKnot() || b.isKnot()) { // A knot can be linked to any pin, it doesn't matter the type or input/output direction this.link.setMessageCorrect(); this.linkValid = true; @@ -9143,7 +9373,7 @@ class MouseCreateLink extends IMouseClickDrag { } startDrag(location) { - if (this.target.nodeElement.getType() == Configuration.paths.knot) { + if (this.target.isKnot()) { this.#knotPin = this.target; } /** @type {LinkElement} */ @@ -9159,11 +9389,11 @@ class MouseCreateLink extends IMouseClickDrag { } }); this.link.startDragging(); - this.link.setDestinationLocation(location); + this.link.setTargetLocation(location); } dragTo(location, movement) { - this.link.setDestinationLocation(location); + this.link.setTargetLocation(location); } endDrag() { @@ -9175,26 +9405,26 @@ class MouseCreateLink extends IMouseClickDrag { if (this.enteredPin && this.linkValid) { // Knot can use wither the input or output (by default) part indifferently, check if a switch is needed if (this.#knotPin) { - const otherPin = this.#knotPin !== this.link.source ? this.link.source : this.enteredPin; + const otherPin = this.#knotPin !== this.link.origin ? this.link.origin : this.enteredPin; // Knot pin direction correction if (this.#knotPin.isInput() && otherPin.isInput() || this.#knotPin.isOutput() && otherPin.isOutput()) { - const oppositePin = /** @type {KnotPinTemplate} */(this.#knotPin.template).getOppositePin(); - if (this.#knotPin === this.link.source) { - this.link.source = oppositePin; + const oppositePin = /** @type {KnotPinTemplate} */(this.#knotPin.template).getoppositePin(); + if (this.#knotPin === this.link.origin) { + this.link.origin = oppositePin; } else { this.enteredPin = oppositePin; } } - } else if (this.enteredPin.nodeElement.getType() === Configuration.paths.knot) { + } else if (this.enteredPin.isKnot()) { this.#knotPin = this.enteredPin; - if (this.link.source.isOutput()) { - // Knot uses by default the output pin, let's switch to keep it coherent with the source node we have - this.enteredPin = /** @type {KnotPinTemplate} */(this.enteredPin.template).getOppositePin(); + if (this.link.origin.isOutput()) { + // Knot uses by default the output pin, let's switch to keep it coherent with the origin node we have + this.enteredPin = /** @type {KnotPinTemplate} */(this.enteredPin.template).getoppositePin(); } } - if (!this.link.source.getLinks().find(ref => ref.equals(this.enteredPin.createPinReference()))) { + if (!this.link.origin.getLinks().find(ref => ref.equals(this.enteredPin.createPinReference()))) { this.blueprint.addGraphElement(this.link); - this.link.destination = this.enteredPin; + this.link.target = this.enteredPin; } else { this.link.remove(); } @@ -9205,6 +9435,7 @@ class MouseCreateLink extends IMouseClickDrag { this.link.removeMessage(); this.link.finishDragging(); this.link = null; + this.#knotPin = null; } } @@ -9234,18 +9465,18 @@ class VariableManagementNodeTemplate extends NodeTemplate { - ` : A} + ` : E} ${this.#hasInput ? x` - ` : A} + ` : E} ${this.#hasOutput ? x` - ` : A} + ` : E} ${this.pinInserter ? x` Add pin ${SVGIcon.plusCircle} - `: A} + `: E} ` @@ -9345,7 +9576,7 @@ class PinTemplate extends ITemplate { const icon = x`${this.renderIcon()}`; const content = x` - ${this.isNameRendered ? this.renderName() : A} + ${this.isNameRendered ? this.renderName() : E} ${this.isInputRendered() ? this.renderInput() : x``} `; @@ -9391,6 +9622,9 @@ class PinTemplate extends ITemplate { if (this.element.nodeElement?.template instanceof VariableOperationNodeTemplate) { return SVGIcon.operationPin } + if (this.element.entity.PinType.PinCategory?.toString().toLocaleLowerCase() === "statictype") { + return SVGIcon.staticPin + } return SVGIcon.genericPin } @@ -9439,9 +9673,12 @@ class PinTemplate extends ITemplate { } getLinkLocation() { - const rect = this.iconElement.getBoundingClientRect(); + const rect = (this.#iconElement ?? this.element).getBoundingClientRect(); /** @type {[Number, Number]} */ - const boundingLocation = [this.element.isInput() ? rect.left : rect.right + 1, (rect.top + rect.bottom) / 2]; + const boundingLocation = [ + this.element.isInputVisually() ? rect.left : rect.right + 1, + (rect.top + rect.bottom) / 2 + ]; const location = Utility.convertLocation(boundingLocation, this.blueprint.template.gridElement); return this.blueprint.compensateTranslation(location[0], location[1]) } @@ -9449,6 +9686,18 @@ class PinTemplate extends ITemplate { getClickableElement() { return this.#wrapperElement ?? this.element } + + /** All the link connected to this pin */ + getAllConnectedLinks() { + if (!this.element.isLinked) { + return [] + } + const nodeTitle = this.element.nodeElement.nodeTitle; + const pinId = this.element.pinId; + const query = `ueb-link[data-origin-node="${nodeTitle}"][data-origin-pin="${pinId}"],` + + `ueb-link[data-target-node="${nodeTitle}"][data-target-pin="${pinId}"]`; + return /** @type {LinkElement[]} */([...this.blueprint.querySelectorAll(query)]) + } } /** @@ -9486,7 +9735,7 @@ class EventNodeTemplate extends NodeTemplate { ${icon ? x` ${icon} - ` : A} + ` : E} ${name ? x` ${name} @@ -9494,9 +9743,9 @@ class EventNodeTemplate extends NodeTemplate { Custom Event - `: A} + `: E} - ` : A} + ` : E} ` } @@ -9537,31 +9786,33 @@ class KnotPinTemplate extends MinimalPinTemplate { return this.element.isOutput() ? super.render() : x`` } - getOppositePin() { + getoppositePin() { const nodeTemplate = /** @type {KnotNodeTemplate} */(this.element.nodeElement.template); return this.element.isOutput() ? nodeTemplate.inputPin : nodeTemplate.outputPin } + /** Location on the grid of a link connecting to this pin */ getLinkLocation() { - const rect = ( - this.element.isInput() - ? /** @type {KnotNodeTemplate} */(this.element.nodeElement.template).outputPin.template - : this - ) - .iconElement.getBoundingClientRect(); - /** @type {Coordinates} */ - const boundingLocation = [this.element.isInput() ? rect.left : rect.right + 1, (rect.top + rect.bottom) / 2]; - const location = Utility.convertLocation(boundingLocation, this.blueprint.template.gridElement); - return this.blueprint.compensateTranslation(location[0], location[1]) + if (this.element.isInput()) { + return this.getoppositePin().getLinkLocation() + } + return super.getLinkLocation() } } class KnotNodeTemplate extends NodeTemplate { - static #traversedPin = new Set() - - /** @type {Boolean?} */ - #chainDirection = null // The node is part of a chain connected to an input or output pin + #switchDirectionsVisually = false + get switchDirectionsVisually() { + return this.#switchDirectionsVisually + } + set switchDirectionsVisually(value) { + if (this.#switchDirectionsVisually == value) { + return + } + this.#switchDirectionsVisually = value; + this.element.acknowledgeReflow(); + } /** @type {PinElement} */ #inputPin @@ -9581,24 +9832,6 @@ class KnotNodeTemplate extends NodeTemplate { this.element.classList.add("ueb-node-style-minimal"); } - /** @param {PinElement} startingPin */ - findDirectionaPin(startingPin) { - if ( - startingPin.nodeElement.getType() !== Configuration.paths.knot - || KnotNodeTemplate.#traversedPin.has(startingPin) - ) { - KnotNodeTemplate.#traversedPin.clear(); - return true - } - KnotNodeTemplate.#traversedPin.add(startingPin); - for (let pin of startingPin.getLinks().map(l => this.blueprint.getPin(l))) { - if (this.findDirectionaPin(pin)) { - return true - } - } - return false - } - render() { return x` @@ -9624,7 +9857,29 @@ class KnotNodeTemplate extends NodeTemplate { } linksChanged() { + } + checkSwtichDirectionsVisually() { + let leftPinsLocation = 0; + let leftPinsCount = 0; + let rightPinsLocation = 0; + let rightPinsCount = 0; + const links = this.getAllConnectedLinks(); + for (const link of links) { + const pin = link.getOtherPin(this.element); + if (pin?.isInput()) { + rightPinsLocation += pin.getLinkLocation()[0]; + ++rightPinsCount; + } else if (pin?.isOutput()) { + leftPinsLocation += pin.getLinkLocation()[0]; + ++leftPinsCount; + } + } + leftPinsLocation /= leftPinsCount; + rightPinsLocation /= rightPinsCount; + if ((rightPinsLocation < leftPinsLocation) != this.switchDirectionsVisually) { + this.switchDirectionsVisually = rightPinsLocation < leftPinsLocation; + } } } @@ -9657,22 +9912,86 @@ class VariableAccessNodeTemplate extends VariableManagementNodeTemplate { } } +const niagaraOperationNodes = [ + "Boolean::LogicEq", + "Boolean::LogicNEq", + "Integer::EnumNEq", + "Integer::EnumEq", + ...[ + "Abs", + "Add", + "ArcCosine(Degrees)", + "ArcCosine(Radians)", + "ArcSine(Degrees)", + "ArcSine(Radians)", + "ArcTangent(Degrees)", + "ArcTangent(Radians)", + "Ceil", + "CmpEQ", + "CmpGE", + "CmpGT", + "CmpLE", + "CmpLT", + "CmpNEQ", + "Cosine(Degrees)", + "Cosine(Radians)", + "DegreesToRadians", + "Div", + "Dot", + "Exp", + "Exp2", + "Floor", + "FMod", + "Frac", + "Length", + "Lerp", + "Log", + "Log2", + "Madd", + "Max", + "Min", + "Mul", + "Negate", + "Normalize", + "OneMinus", + "PI", + "RadiansToDegrees", + "Rcp", + "RcpFast", + "Round", + "RSqrt", + "Sign", + "Sine(Degrees)", + "Sine(Radians)", + "Sqrt", + "Step", + "Subtract", + "Tangent(Degrees)", + "Tangent(Radians)", + "Trunc", + "TWO_PI", + ].map(v => "Numeric::" + v), + "Vector3::Cross", +]; + +const paths = Configuration.paths; + /** * @param {ObjectEntity} nodeEntity * @return {new () => NodeTemplate} */ function nodeTemplateClass(nodeEntity) { if ( - nodeEntity.getClass() === Configuration.paths.callFunction - || nodeEntity.getClass() === Configuration.paths.commutativeAssociativeBinaryOperator - || nodeEntity.getClass() === Configuration.paths.callArrayFunction + nodeEntity.getClass() === paths.callFunction + || nodeEntity.getClass() === paths.commutativeAssociativeBinaryOperator + || nodeEntity.getClass() === paths.callArrayFunction ) { const memberParent = nodeEntity.FunctionReference?.MemberParent?.path ?? ""; const memberName = nodeEntity.FunctionReference?.MemberName?.toString(); if ( memberName && ( - memberParent === Configuration.paths.kismetMathLibrary - || memberParent === Configuration.paths.kismetArrayLibrary + memberParent === paths.kismetMathLibrary + || memberParent === paths.kismetArrayLibrary )) { if (memberName.startsWith("Conv_")) { return VariableConversionNodeTemplate @@ -9725,45 +10044,37 @@ function nodeTemplateClass(nodeEntity) { return VariableOperationNodeTemplate } } - if (memberParent === Configuration.paths.blueprintSetLibrary) { + if (memberParent === paths.blueprintSetLibrary) { return VariableOperationNodeTemplate } - if (memberParent === Configuration.paths.blueprintMapLibrary) { + if (memberParent === paths.blueprintMapLibrary) { return VariableOperationNodeTemplate } } switch (nodeEntity.getClass()) { - case Configuration.paths.comment: - case Configuration.paths.materialGraphNodeComment: + case paths.comment: + case paths.materialGraphNodeComment: return CommentNodeTemplate - case Configuration.paths.createDelegate: + case paths.createDelegate: return NodeTemplate - case Configuration.paths.metasoundEditorGraphExternalNode: + case paths.metasoundEditorGraphExternalNode: if (nodeEntity["ClassName"]?.["Name"] == "Add") { return MetasoundOperationTemplate } return MetasoundNodeTemplate - case Configuration.paths.niagaraNodeOp: - if ( - [ - "Boolean::LogicEq", - "Boolean::LogicNEq", - "Numeric::Abs", - "Numeric::Add", - "Numeric::Mul", - ].includes(nodeEntity.OpName?.toString()) - ) { + case paths.niagaraNodeOp: + if (niagaraOperationNodes.includes(nodeEntity.OpName?.toString())) { return VariableOperationNodeTemplate } break - case Configuration.paths.promotableOperator: + case paths.promotableOperator: return VariableOperationNodeTemplate - case Configuration.paths.knot: + case paths.knot: return KnotNodeTemplate - case Configuration.paths.literal: - case Configuration.paths.self: - case Configuration.paths.variableGet: - case Configuration.paths.variableSet: + case paths.literal: + case paths.self: + case paths.variableGet: + case paths.variableSet: return VariableAccessNodeTemplate } if (nodeEntity.isEvent()) { @@ -9914,13 +10225,13 @@ class NodeElement extends ISelectableDraggableElement { /** @param {String} name */ #redirectLinksBeforeRename(name) { - for (let sourcePinElement of this.getPinElements()) { - for (let targetPinReference of sourcePinElement.getLinks()) { + for (let originPinElement of this.getPinElements()) { + for (let targetPinReference of originPinElement.getLinks()) { this.blueprint.getPin(targetPinReference).redirectLink( - sourcePinElement, + originPinElement, new PinReferenceEntity( new SymbolEntity(name), - sourcePinElement.entity.PinId, + originPinElement.entity.PinId, ) ); } @@ -9948,8 +10259,8 @@ class NodeElement extends ISelectableDraggableElement { "Name", /** @param {InstanceType} newName */ newName => { - this.#redirectLinksBeforeRename(newName.value); - this.nodeTitle = newName.value; + this.#redirectLinksBeforeRename(newName?.toString()); + this.nodeTitle = newName?.toString(); this.nodeDisplayName = nodeTitle(entity); } ); @@ -10063,6 +10374,18 @@ class BlueprintEntity extends ObjectEntity { return this.#objectEntities } + static attributes = { + ...super.attributes, + ScriptVariables: super.attributes.ScriptVariables.asUniqueClass(true).withDefault(), + } + + constructor(...args) { + super(...args); + if (!this.Name) { + this.Name = new (/** @type {typeof ObjectEntity} */(this.constructor).attributes.Name)("Blueprint"); + } + } + /** @param {ObjectEntity} entity */ getHomonymObjectEntity(entity) { const name = entity.getObjectName(); @@ -10077,6 +10400,16 @@ class BlueprintEntity extends ObjectEntity { return Configuration.nodeTitle(name, counter) } + /** @param {String} name */ + updateNameIndex(name) { + const match = name.match(/(.+)_(\d+)$/); + if (match) { + name = match[1]; + const index = Number(match[2]); + this.#objectEntitiesNameCounter.set(name, Math.max(index, this.#objectEntitiesNameCounter.get(name) ?? 0)); + } + } + /** @param {ObjectEntity} entity */ addObjectEntity(entity) { if (!this.#objectEntities.includes(entity)) { @@ -10104,36 +10437,163 @@ class BlueprintEntity extends ObjectEntity { return false } + /** + * @param {ObjectReferenceEntity} variable + * @param {IEntity} entity + */ + renameScriptVariable(variable, entity) { + const name = variable.getName(); + const newName = this.takeFreeName(name); + { + [true, false].forEach(v => { + /** @type {ObjectEntity} */ + let object = this[Configuration.subObjectAttributeNameFromReference(variable, v)]; + object.Name.value = newName; + object.Name = object.Name; + }); + } + variable.path.replace(name, newName); + return newName + } + + /** + * @param {ScriptVariableEntity} scriptVariableEntity + * @returns {String} + */ + variableName(scriptVariableEntity) { + return this[Configuration.subObjectAttributeNameFromReference(scriptVariableEntity.ScriptVariable, true)] + ?.["Variable"] + ?.["Name"] + ?.toString() + } + + /** @param {String} variableName */ + variableIndex(variableName) { + let i = 0; + for (const v of this.ScriptVariables?.valueOf()) { + if (variableName == this.variableName(v)) { + return i + } + ++i; + } + } + /** @param {ObjectEntity} entity */ mergeWith(entity) { - if (!entity.ScriptVariables || entity.ScriptVariables.length === 0) { + if ((entity.ScriptVariables?.length ?? 0) === 0) { + // The entity does not add new variables return this } - if (!this.ScriptVariables || this.ScriptVariables.length === 0) { - this.ScriptVariables = entity.ScriptVariables; - } + const variableObjectNames = this.ScriptVariables.valueOf().map(v => v.ScriptVariable.getName()); let scriptVariables = Utility.mergeArrays( this.ScriptVariables.valueOf(), entity.ScriptVariables.valueOf(), - (l, r) => l.OriginalChangeId.value == r.OriginalChangeId.value + (l, r) => this.variableName(l) == this.variableName(r), + added => { + let name = added.ScriptVariable.getName(); + if (variableObjectNames.includes(name)) { + name = this.renameScriptVariable(added.ScriptVariable, entity); + } + this.updateNameIndex(name); + } ); if (scriptVariables.length === this.ScriptVariables.length) { + // The entity does not add new variables return this } + scriptVariables.reverse(); + const blueprintEntity = /** @type {typeof BlueprintEntity} */(this.constructor); const entries = scriptVariables.concat(scriptVariables).map((v, i) => { - const name = Configuration.subObjectAttributeNameFromReference(v.ScriptVariable, i >= scriptVariables.length); - return [ - name, - this[name] ?? entity[name] - ] - }); + const name = Configuration.subObjectAttributeNameFromReference( + v.ScriptVariable, + i >= scriptVariables.length // First take all the small objects then all name only + ); + const object = this[name] ?? entity[name]; + return object ? [name, object] : null + }) + .filter(v => v); entries.push( ...Object.entries(this).filter(([k, v]) => !k.startsWith(Configuration.subObjectAttributeNamePrefix) && k !== "ExportedNodes" - ) + ), + ["ScriptVariables", new (blueprintEntity.attributes.ScriptVariables)(scriptVariables.reverse())] ); - return new BlueprintEntity(Object.fromEntries(entries)) + const result = new BlueprintEntity(Object.fromEntries(entries)); + result.mirrorNameInExportPaths(entity.Name?.toString()); + result.#objectEntitiesNameCounter = this.#objectEntitiesNameCounter; + result.#objectEntities = this.#objectEntities; + return result + } + + /** @param {ObjectEntity[]} entities */ + getVariablesAttributesReferringTo(...entities) { + let pins = new Set(...entities.flatMap(entity => entity.getPinEntities()).map(pin => pin.PinName.toString())); + this.ScriptVariables + .valueOf() + .map(v => { + const keySimple = Configuration.subObjectAttributeNameFromReference(v.ScriptVariable, false); + const keyFull = Configuration.subObjectAttributeNameFromReference(v.ScriptVariable, true); + return { + simple: [keySimple, this[keySimple]], + full: [keyFull, this[keyFull]], + variable: v, + } + }) + .filter(v => pins.has(v.full?.["Variable"]?.["Name"])) + .reduce( + (acc, cur) => { + acc.simple.push([cur.simple[0], cur.simple[1]]); + acc.full.push([cur.full[0], cur.full[1]]); + acc.ScriptVariables.push(cur.variable); + return acc + }, + ({ simple: [], full: [], ScriptVariables: [] }) + ); + return { + + } + } +} + +class NiagaraClipboardContent extends ObjectEntity { + + /** + * @param {BlueprintEntity} blueprint + * @param {ObjectEntity[]} nodes + */ + constructor(blueprint, nodes) { + const typePath = Configuration.paths.niagaraClipboardContent; + const name = blueprint.takeFreeName("NiagaraClipboardContent"); + const exportPath = `/Engine/Transient.${name}`; + /** @type {Set} */ + const variableIndexes = new Set(); + let exported = ""; + for (const node of nodes) { + if (node.exported) { + node.getPinEntities() + .map(pin => blueprint.variableIndex(pin.PinName.toString())) + .filter(v => v != null) + .forEach(i => variableIndexes.add(i)); + exported += node.serialize(); + } + } + const scriptVariables = blueprint.ScriptVariables.valueOf().filter((v, i) => variableIndexes.has(i)); + const variableObjects = scriptVariables.concat(scriptVariables).map((v, i) => { + const name = Configuration.subObjectAttributeNameFromReference( + v.ScriptVariable, + i >= scriptVariables.length // First take all the small objects then all name only + ); + return [name, blueprint[name]] + }); + super({ + Class: new ObjectReferenceEntity(typePath), + Name: new StringEntity(name), + ...Object.fromEntries(variableObjects), + ExportPath: new ObjectReferenceEntity(typePath, exportPath), + ScriptVariables: new (NiagaraClipboardContent.attributes.ScriptVariables)(scriptVariables), + ExportedNodes: new StringEntity(btoa(exported)) + }); } } @@ -10165,20 +10625,8 @@ class Copy extends IInput { window.removeEventListener("copy", this.#copyHandler); } - getSerializedText() { - const allNodes = this.blueprint.getNodes(true).map(n => n.entity); - const exported = allNodes.filter(n => n.exported).map(n => n.serialize()); - const result = allNodes.filter(n => !n.exported).map(n => n.serialize()); - if (exported.length) { - this.blueprint.entity.ExportedNodes.value = btoa(exported.join("")); - result.splice(0, 0, this.blueprint.entity.serialize(false)); - delete this.blueprint.entity.ExportedNodes; - } - return result.join("") - } - copied() { - const value = this.getSerializedText(); + const value = this.blueprint.getSerializedText(); navigator.clipboard.writeText(value); return value } @@ -10217,13 +10665,6 @@ class Cut extends IInput { window.removeEventListener("cut", this.#cutHandler); } - getSerializedText() { - return this.blueprint - .getNodes(true) - .map(node => node.entity.serialize()) - .join("") - } - cut() { this.blueprint.template.getCopyInputObject().copied(); this.blueprint.removeGraphElement(...this.blueprint.getNodes(true)); @@ -10634,6 +11075,7 @@ class BlueprintTemplate extends ITemplate { /** @type {HTMLElement} */ linksContainerElement /** @type {HTMLElement} */ nodesContainerElement viewportSize = [0, 0] + #removeZoomChanged = () => this.headerElement.classList.remove("ueb-zoom-changed") /** @param {Blueprint} element */ initialize(element) { @@ -10755,11 +11197,12 @@ class BlueprintTemplate extends ITemplate { willUpdate(changedProperties) { super.willUpdate(changedProperties); if (this.headerElement && changedProperties.has("zoom")) { + if (this.headerElement.classList.contains("ueb-zoom-changed")) { + this.headerElement.classList.remove("ueb-zoom-changed"); + void this.headerElement.offsetWidth; // To trigger the reflow + } this.headerElement.classList.add("ueb-zoom-changed"); - this.headerElement.addEventListener( - "animationend", - () => this.headerElement.classList.remove("ueb-zoom-changed") - ); + this.headerElement.addEventListener("animationend", this.#removeZoomChanged, { once: true }); } } @@ -11164,29 +11607,11 @@ class Blueprint extends IElement { return [x, y] } - getNodes( - selected = false, - [t, r, b, l] = [ - Number.MIN_SAFE_INTEGER, - Number.MAX_SAFE_INTEGER, - Number.MAX_SAFE_INTEGER, - Number.MIN_SAFE_INTEGER, - ] - ) { + getNodes(selected = false) { let result = this.nodes; if (selected) { result = result.filter(n => n.selected); } - if ( - t > Number.MIN_SAFE_INTEGER - || r < Number.MAX_SAFE_INTEGER - || b < Number.MAX_SAFE_INTEGER - || l > Number.MIN_SAFE_INTEGER - ) { - result = result.filter(n => { - return n.topBoundary() >= t && n.rightBoundary() <= r && n.bottomBoundary() <= b && n.leftBoundary() >= l - }); - } return result } @@ -11221,25 +11646,25 @@ class Blueprint extends IElement { getLinks(a = null, b = null) { if ((a == null) != (b == null)) { const pin = a ?? b; - return this.links.filter(link => link.source == pin || link.destination == pin) + return this.links.filter(link => link.origin == pin || link.target == pin) } if (a != null && b != null) { return this.links.filter(link => - link.source == a && link.destination == b - || link.source == b && link.destination == a + link.origin == a && link.target == b + || link.origin == b && link.target == a ) } return this.links } /** - * @param {PinElement} sourcePin - * @param {PinElement} destinationPin + * @param {PinElement} originPin + * @param {PinElement} targetPin */ - getLink(sourcePin, destinationPin, strictDirection = false) { + getLink(originPin, targetPin, strictDirection = false) { return this.links.find(link => - link.source == sourcePin && link.destination == destinationPin - || !strictDirection && link.source == destinationPin && link.destination == sourcePin + link.origin == originPin && link.target == targetPin + || !strictDirection && link.origin == targetPin && link.target == originPin ) } @@ -11251,6 +11676,22 @@ class Blueprint extends IElement { this.getNodes().forEach(node => Blueprint.nodeSelectToggleFunction(node, false)); } + getSerializedText() { + const nodes = this.blueprint.getNodes(true).map(n => n.entity); + let exports = false; + let result = nodes + .filter(n => { + exports ||= n.exported; + return !n.exported + }) + .reduce((acc, cur) => acc + cur.serialize(), ""); + if (exports) { + const object = new NiagaraClipboardContent(this.blueprint.entity, nodes); + result = object.serialize() + result; + } + return result + } + /** @param {...IElement} graphElements */ addGraphElement(...graphElements) { /** @param {CustomEvent} event */ @@ -11277,14 +11718,17 @@ class Blueprint extends IElement { for (const element of graphElements) { element.blueprint = this; if (element instanceof NodeElement && !this.nodes.includes(element)) { + const name = element.entity.getObjectName(); + this.entity.updateNameIndex(name); if (element.getType() == Configuration.paths.niagaraClipboardContent) { this.entity = this.entity.mergeWith(element.entity); - const additionalSerialization = atob(element.entity.ExportedNodes.toString()); - this.template.getPasteInputObject().pasted(additionalSerialization) - .forEach(node => node.entity._exported = true); + const additionalSerialization = atob(element.entity.ExportedNodes?.toString() ?? ""); + if (additionalSerialization) { + this.template.getPasteInputObject().pasted(additionalSerialization) + .forEach(node => node.entity.exported = true); + } continue } - const name = element.entity.getObjectName(); const homonym = this.entity.getHomonymObjectEntity(element.entity); if (homonym) { const newName = this.entity.takeFreeName(name); @@ -11720,7 +12164,7 @@ class BoolPinTemplate extends PinTemplate { #input #onChangeHandler = () => { - const entity = this.element.getDefaultValue(); + const entity = this.element.getDefaultValue(true); entity.value = this.#input.checked; this.element.setDefaultValue(entity); } @@ -11919,7 +12363,7 @@ class EnumPinTemplate extends IInputPinTemplate { : [k, Utility.formatStringName(k)] ) ?? []; - const defaultEntry = this.element.getDefaultValue().toString(); + const defaultEntry = this.element.getDefaultValue()?.toString(); if (!this.#dropdownEntries.find(([k, v]) => k === defaultEntry)) { this.#dropdownEntries.push([defaultEntry, Utility.formatStringName(defaultEntry)]); } @@ -12069,7 +12513,7 @@ const t={ATTRIBUTE:1,CHILD:2,PROPERTY:3,BOOLEAN_ATTRIBUTE:4,EVENT:5,ELEMENT:6},e * @license * Copyright 2018 Google LLC * SPDX-License-Identifier: BSD-3-Clause - */const i="important",n=" !"+i,o=e(class extends i$1{constructor(t$1){var e;if(super(t$1),t$1.type!==t.ATTRIBUTE||"style"!==t$1.name||(null===(e=t$1.strings)||void 0===e?void 0:e.length)>2)throw Error("The `styleMap` directive must be used in the `style` attribute and must be the only part in the attribute.")}render(t){return Object.keys(t).reduce(((e,r)=>{const s=t[r];return null==s?e:e+`${r=r.includes("-")?r:r.replace(/(?:^(webkit|moz|ms|o)|)(?=[A-Z])/g,"-$&").toLowerCase()}:${s};`}),"")}update(e,[r]){const{style:s}=e.element;if(void 0===this.ht){this.ht=new Set;for(const t in r)this.ht.add(t);return this.render(r)}this.ht.forEach((t=>{null==r[t]&&(this.ht.delete(t),t.includes("-")?s.removeProperty(t):s[t]="");}));for(const t in r){const e=r[t];if(null!=e){this.ht.add(t);const r="string"==typeof e&&e.endsWith(n);t.includes("-")||r?s.setProperty(t,r?e.slice(0,-11):e,r?i:""):s[t]=e;}}return T}}); + */const n="important",i=" !"+n,o=e(class extends i$1{constructor(t$1){if(super(t$1),t$1.type!==t.ATTRIBUTE||"style"!==t$1.name||t$1.strings?.length>2)throw Error("The `styleMap` directive must be used in the `style` attribute and must be the only part in the attribute.")}render(t){return Object.keys(t).reduce(((e,r)=>{const s=t[r];return null==s?e:e+`${r=r.includes("-")?r:r.replace(/(?:^(webkit|moz|ms|o)|)(?=[A-Z])/g,"-$&").toLowerCase()}:${s};`}),"")}update(e,[r]){const{style:s}=e.element;if(void 0===this.ft)return this.ft=new Set(Object.keys(r)),this.render(r);for(const t of this.ft)null==r[t]&&(this.ft.delete(t),t.includes("-")?s.removeProperty(t):s[t]=null);for(const t in r){const e=r[t];if(null!=e){this.ft.add(t);const r="string"==typeof e&&e.endsWith(i);t.includes("-")||r?s.setProperty(t,r?e.slice(0,-11):e,r?n:""):s[t]=e;}}return T}}); /** @extends {IDraggablePositionedTemplate} */ class WindowTemplate extends IDraggablePositionedTemplate { @@ -12531,9 +12975,9 @@ class LinearColorPinTemplate extends PinTemplate { renderInput() { return x` - + style="--ueb-linear-color: rgba(${this.element.getDefaultValue()?.toString() ?? E})"> ` } @@ -12771,6 +13215,7 @@ const inputPinTemplates = { "bool": BoolPinTemplate, "byte": IntPinTemplate, "enum": EnumPinTemplate, + "float": RealPinTemplate, "int": IntPinTemplate, "int64": Int64PinTemplate, "MUTABLE_REFERENCE": ReferencePinTemplate, @@ -12780,10 +13225,13 @@ const inputPinTemplates = { "string": StringPinTemplate, [Configuration.paths.linearColor]: LinearColorPinTemplate, [Configuration.paths.niagaraBool]: BoolPinTemplate, + [Configuration.paths.niagaraFloat]: RealPinTemplate, + [Configuration.paths.niagaraInt32]: IntPinTemplate, [Configuration.paths.niagaraPosition]: VectorPinTemplate, [Configuration.paths.rotator]: RotatorPinTemplate, [Configuration.paths.vector]: VectorPinTemplate, [Configuration.paths.vector2D]: Vector2DPinTemplate, + [Configuration.paths.vector2f]: Vector2DPinTemplate, [Configuration.paths.vector3f]: VectorPinTemplate, [Configuration.paths.vector4f]: Vector4DPinTemplate, }; @@ -12796,10 +13244,10 @@ function pinTemplate(entity) { if (entity.PinType.bIsReference?.valueOf() && !entity.PinType.bIsConst?.valueOf()) { return inputPinTemplates["MUTABLE_REFERENCE"] } - const type = entity.getType(); - if (type === "exec") { + if (entity.isExecution()) { return ExecPinTemplate } + const type = entity.getType(); return (entity.isInput() ? inputPinTemplates[type] : PinTemplate) ?? PinTemplate } @@ -12921,12 +13369,66 @@ class PinElement extends IElement { return this.entity.pinColor() } - isInput() { - return this.entity.isInput() + /** @param {PinElement} pin */ + #traverseKnots(pin) { + while (pin?.isKnot()) { + const pins = pin.nodeElement.getPinElements(); + pin = pin === pins[0] ? pins[1] : pins[0]; + pin = pin.isLinked ? this.blueprint.getPin(pin.getLinks()[0]) : null; + } + return pin?.isKnot() ? undefined : pin } - isOutput() { - return this.entity.isOutput() + isInput(ignoreKnots = false) { + /** @type {PinElement} */ + let result = this; + if (ignoreKnots) { + return this.#traverseKnots(result)?.isInput() + } + return result.entity.isInput() + } + + /** @returns {boolean} True when the pin is the input part of a knot that can switch direction */ + isInputLoosely() { + return this.isInput(false) && this.isInput(true) === undefined + } + + /** @returns {boolean} True when the pin is input and if it is a knot it appears input */ + isInputVisually() { + const template = /** @type {KnotNodeTemplate} */(this.nodeElement.template); + const isKnot = this.isKnot(); + return isKnot && this.isInput() != template.switchDirectionsVisually + || !isKnot && this.isInput() + } + + isOutput(ignoreKnots = false) { + /** @type {PinElement} */ + let result = this; + if (ignoreKnots) { + if (ignoreKnots) { + return this.#traverseKnots(result)?.isOutput() + } + } + return result.entity.isOutput() + } + + /** @returns {boolean} True when the pin is the output part of a knot that can switch direction */ + isOutputLoosely() { + return this.isOutput(false) && this.isOutput(true) === undefined + } + + /** @returns {boolean} True when the pin is output and if it is a knot it appears output */ + isOutputVisually() { + const template = /** @type {KnotNodeTemplate} */(this.nodeElement.template); + const isKnot = this.isKnot(); + return isKnot && this.isOutput() != template.switchDirectionsVisually + || !isKnot && this.isOutput() + } + + + /** @returns {value is InstanceType>} */ + isKnot() { + return this.nodeElement?.getType() == Configuration.paths.knot } getLinkLocation() { @@ -12981,9 +13483,12 @@ class PinElement extends IElement { const pinReference = this.createPinReference(); if ( this.isLinked - && this.isOutput() - && (this.pinType === "exec" || targetPinElement.pinType === "exec") - && !this.getLinks().some(ref => pinReference.equals(ref))) { + && ( + this.isInput(true) + || this.isOutput(true) && (this.entity.isExecution() || targetPinElement.entity.isExecution()) + ) + && !this.getLinks().some(ref => pinReference.equals(ref)) + ) { this.unlinkFromAll(); } if (this.entity.linkTo(targetPinElement.getNodeElement().getNodeName(), targetPinElement.entity)) { @@ -13438,6 +13943,10 @@ function defineElements() { class UnknownKeysEntity extends IEntity { + static attributes = { + ...super.attributes, + VariableGuid: GuidEntity, + } static grammar = this.createGrammar() static { @@ -13483,7 +13992,7 @@ function initializeSerializerFactory() { Parsernostrum.regArray(new RegExp( // @ts-expect-error `"(${Grammar.Regex.Path.source})'(${Grammar.Regex.Path.source}|${Grammar.symbol.getParser().regexp.source})'"` - )).map(([full, type, path]) => new ObjectReferenceEntity(type, path, full)) + )).map(([_0, type, path]) => new ObjectReferenceEntity(type, path, (t, p) => `"${t}'${p}'"`)) ), StringEntity.grammar, LocalizedTextEntity.grammar, diff --git a/dist/ueblueprint.min.js b/dist/ueblueprint.min.js old mode 100644 new mode 100755 index cde7bce..3016837 --- 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(),s=new WeakMap;class n{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 r=(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 n(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 n("string"==typeof e?e:e+"",void 0,i))(t)})(e):e +const e=globalThis,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 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 n=this[e];this[t]=s,this.requestUpdate(e,n,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"),n=e.litNonce;void 0!==n&&s.setAttribute("nonce",n),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 n=this.constructor._$Ep(e,i);if(void 0!==n&&!0===i.reflect){const r=(void 0!==(null===(s=i.converter)||void 0===s?void 0:s.toAttribute)?i.converter:p).toAttribute(t,i.type);this._$El=e,null==r?this.removeAttribute(n):this.setAttribute(n,r),this._$El=null}}_$AK(e,t){var i;const s=this.constructor,n=s._$Ev.get(e);if(void 0!==n&&this._$El!==n){const e=s.getPropertyOptions(n),r="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=n,this[n]=r.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){}} + */,{is:o,defineProperty:l,getOwnPropertyDescriptor:c,getOwnPropertyNames:u,getOwnPropertySymbols:h,getPrototypeOf:p}=Object,d=globalThis,m=d.trustedTypes,g=m?m.emptyScript:"",b=d.reactiveElementPolyfillSupport,v=(e,t)=>e,f={toAttribute(e,t){switch(t){case Boolean:e=e?g: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}},y=(e,t)=>!o(e,t),w={attribute:!0,type:String,converter:f,reflect:!1,hasChanged:y};Symbol.metadata??=Symbol("metadata"),d.litPropertyMetadata??=new WeakMap;class S extends HTMLElement{static addInitializer(e){this._$Ei(),(this.l??=[]).push(e)}static get observedAttributes(){return this.finalize(),this._$Eh&&[...this._$Eh.keys()]}static createProperty(e,t=w){if(t.state&&(t.attribute=!1),this._$Ei(),this.elementProperties.set(e,t),!t.noAccessor){const i=Symbol(),s=this.getPropertyDescriptor(e,i,t);void 0!==s&&l(this.prototype,e,s)}}static getPropertyDescriptor(e,t,i){const{get:s,set:r}=c(this.prototype,e)??{get(){return this[t]},set(e){this[t]=e}};return{get(){return s?.call(this)},set(t){const n=s?.call(this);r.call(this,t),this.requestUpdate(e,n,i)},configurable:!0,enumerable:!0}}static getPropertyOptions(e){return this.elementProperties.get(e)??w}static _$Ei(){if(this.hasOwnProperty(v("elementProperties")))return;const e=p(this);e.finalize(),void 0!==e.l&&(this.l=[...e.l]),this.elementProperties=new Map(e.elementProperties)}static finalize(){if(this.hasOwnProperty(v("finalized")))return;if(this.finalized=!0,this._$Ei(),this.hasOwnProperty(v("properties"))){const e=this.properties,t=[...u(e),...h(e)];for(const i of t)this.createProperty(i,e[i])}const e=this[Symbol.metadata];if(null!==e){const t=litPropertyMetadata.get(e);if(void 0!==t)for(const[e,i]of t)this.elementProperties.set(e,i)}this._$Eh=new Map;for(const[e,t]of this.elementProperties){const i=this._$Eu(e,t);void 0!==i&&this._$Eh.set(i,e)}this.elementStyles=this.finalizeStyles(this.styles)}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 _$Eu(e,t){const i=t.attribute;return!1===i?void 0:"string"==typeof i?i:"string"==typeof e?e.toLowerCase():void 0}constructor(){super(),this._$Ep=void 0,this.isUpdatePending=!1,this.hasUpdated=!1,this._$Em=null,this._$Ev()}_$Ev(){this._$ES=new Promise((e=>this.enableUpdating=e)),this._$AL=new Map,this._$E_(),this.requestUpdate(),this.constructor.l?.forEach((e=>e(this)))}addController(e){(this._$EO??=new Set).add(e),void 0!==this.renderRoot&&this.isConnected&&e.hostConnected?.()}removeController(e){this._$EO?.delete(e)}_$E_(){const e=new Map,t=this.constructor.elementProperties;for(const i of t.keys())this.hasOwnProperty(i)&&(e.set(i,this[i]),delete this[i]);e.size>0&&(this._$Ep=e)}createRenderRoot(){const i=this.shadowRoot??this.attachShadow(this.constructor.shadowRootOptions);return((i,s)=>{if(t)i.adoptedStyleSheets=s.map((e=>e instanceof CSSStyleSheet?e:e.styleSheet));else for(const t of s){const s=document.createElement("style"),r=e.litNonce;void 0!==r&&s.setAttribute("nonce",r),s.textContent=t.cssText,i.appendChild(s)}})(i,this.constructor.elementStyles),i}connectedCallback(){this.renderRoot??=this.createRenderRoot(),this.enableUpdating(!0),this._$EO?.forEach((e=>e.hostConnected?.()))}enableUpdating(e){}disconnectedCallback(){this._$EO?.forEach((e=>e.hostDisconnected?.()))}attributeChangedCallback(e,t,i){this._$AK(e,i)}_$EC(e,t){const i=this.constructor.elementProperties.get(e),s=this.constructor._$Eu(e,i);if(void 0!==s&&!0===i.reflect){const r=(void 0!==i.converter?.toAttribute?i.converter:f).toAttribute(t,i.type);this._$Em=e,null==r?this.removeAttribute(s):this.setAttribute(s,r),this._$Em=null}}_$AK(e,t){const i=this.constructor,s=i._$Eh.get(e);if(void 0!==s&&this._$Em!==s){const e=i.getPropertyOptions(s),r="function"==typeof e.converter?{fromAttribute:e.converter}:void 0!==e.converter?.fromAttribute?e.converter:f;this._$Em=s,this[s]=r.fromAttribute(t,e.type),this._$Em=null}}requestUpdate(e,t,i){if(void 0!==e){if(i??=this.constructor.getPropertyOptions(e),!(i.hasChanged??y)(this[e],t))return;this.P(e,t,i)}!1===this.isUpdatePending&&(this._$ES=this._$ET())}P(e,t,i){this._$AL.has(e)||this._$AL.set(e,t),!0===i.reflect&&this._$Em!==e&&(this._$Ej??=new Set).add(e)}async _$ET(){this.isUpdatePending=!0;try{await this._$ES}catch(e){Promise.reject(e)}const e=this.scheduleUpdate();return null!=e&&await e,!this.isUpdatePending}scheduleUpdate(){return this.performUpdate()}performUpdate(){if(!this.isUpdatePending)return;if(!this.hasUpdated){if(this.renderRoot??=this.createRenderRoot(),this._$Ep){for(const[e,t]of this._$Ep)this[e]=t;this._$Ep=void 0}const e=this.constructor.elementProperties;if(e.size>0)for(const[t,i]of e)!0!==i.wrapped||this._$AL.has(t)||void 0===this[t]||this.P(t,this[t],i)}let e=!1;const t=this._$AL;try{e=this.shouldUpdate(t),e?(this.willUpdate(t),this._$EO?.forEach((e=>e.hostUpdate?.())),this.update(t)):this._$EU()}catch(t){throw e=!1,this._$EU(),t}e&&this._$AE(t)}willUpdate(e){}_$AE(e){this._$EO?.forEach((e=>e.hostUpdated?.())),this.hasUpdated||(this.hasUpdated=!0,this.firstUpdated(e)),this.updated(e)}_$EU(){this._$AL=new Map,this.isUpdatePending=!1}get updateComplete(){return this.getUpdateComplete()}getUpdateComplete(){return this._$ES}shouldUpdate(e){return!0}update(e){this._$Ej&&=this._$Ej.forEach((e=>this._$EC(e,this[e]))),this._$EU()}updated(e){}firstUpdated(e){}}S.elementStyles=[],S.shadowRootOptions={mode:"open"},S[v("elementProperties")]=new Map,S[v("finalized")]=new Map,b?.({ReactiveElement:S}),(d.reactiveElementVersions??=[]).push("2.0.4"); /** * @license * Copyright 2017 Google LLC * SPDX-License-Identifier: BSD-3-Clause */ -var v;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 f=window,y=f.trustedTypes,w=y?y.createPolicy("lit-html",{createHTML:e=>e}):void 0,S="$lit$",E=`lit$${(Math.random()+"").slice(9)}$`,C="?"+E,N=`<${C}>`,x=document,P=()=>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,O=RegExp(`>|${L}(?:([^\\s"'>=/]+)(${L}*=${L}*(?:[^ \t\n\f\r"'\`<>=]|("|')|))|$)`,"g"),D=/'/g,$=/"/g,B=/^(?:script|style|textarea|title)$/i,G=(e=>(t,...i)=>({_$litType$:e,strings:t,values:i}))(1),H=Symbol.for("lit-noChange"),V=Symbol.for("lit-nothing"),R=new WeakMap,_=x.createTreeWalker(x,129,null,!1);function z(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 n,r=2===t?"":"",a=M;for(let t=0;t"===l[0]?(a=null!=n?n:M,u=-1):void 0===l[1]?u=-2:(u=a.lastIndex-l[2].length,o=l[1],a=void 0===l[3]?O:'"'===l[3]?$:D):a===$||a===D?a=O:a===T||a===I?a=M:(a=O,n=void 0);const h=a===O&&e[t+1].startsWith("/>")?" ":"";r+=a===M?i+N:u>=0?(s.push(o),i.slice(0,u)+S+i.slice(u)+E+h):i+E+(-2===u?(s.push(void 0),t):h)}return[z(e,r+(e[i]||">")+(2===t?"":"")),s]};class j{constructor({strings:e,_$litType$:t},i){let s;this.parts=[];let n=0,r=0;const a=e.length-1,o=this.parts,[l,u]=F(e,t);if(this.el=j.createElement(l,i),_.currentNode=this.el.content,2===t){const e=this.el.content,t=e.firstChild;t.remove(),e.append(...t.childNodes)}for(;null!==(s=_.nextNode())&&o.length0){s.textContent=y?y.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,n="number"==typeof s?this._$AC(e):(void 0===s.el&&(s.el=j.createElement(z(s.h,s.h[0]),this.options)),s);if((null===(t=this._$AH)||void 0===t?void 0:t._$AD)===n)this._$AH.v(i);else{const e=new Y(n,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 n of e)s===t.length?t.push(i=new K(this.k(P()),this.k(P()),this,this.options)):i=t[s],i._$AI(n),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 n=this.strings;let r=!1;if(void 0===n)e=U(this,e,t,0),r=!k(e)||e!==this._$AH&&e!==H,r&&(this._$AH=e);else{const s=e;let a,o;for(e=n[0],a=0;ae}):void 0,x="$lit$",P=`lit$${Math.random().toFixed(9).slice(2)}$`,k="?"+P,L=`<${k}>`,A=document,M=()=>A.createComment(""),I=e=>null===e||"object"!=typeof e&&"function"!=typeof e,T=Array.isArray,O="[ \t\n\f\r]",D=/<(?:(!--|\/[^a-zA-Z])|(\/?[a-zA-Z][^>\s]*)|(\/?$))/g,$=/-->/g,V=/>/g,B=RegExp(`>|${O}(?:([^\\s"'>=/]+)(${O}*=${O}*(?:[^ \t\n\f\r"'\`<>=]|("|')|))|$)`,"g"),R=/'/g,G=/"/g,H=/^(?:script|style|textarea|title)$/i,z=(e=>(t,...i)=>({_$litType$:e,strings:t,values:i}))(1),_=Symbol.for("lit-noChange"),F=Symbol.for("lit-nothing"),j=new WeakMap,U=A.createTreeWalker(A,129);function K(e,t){if(!T(e)||!e.hasOwnProperty("raw"))throw Error("invalid template strings array");return void 0!==N?N.createHTML(t):t}const Y=(e,t)=>{const i=e.length-1,s=[];let r,n=2===t?"":3===t?"":"",a=D;for(let t=0;t"===l[0]?(a=r??D,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]?G:R):a===G||a===R?a=B:a===$||a===V?a=D:(a=B,r=void 0);const h=a===B&&e[t+1].startsWith("/>")?" ":"";n+=a===D?i+L:c>=0?(s.push(o),i.slice(0,c)+x+i.slice(c)+P+h):i+P+(-2===c?t:h)}return[K(e,n+(e[i]||">")+(2===t?"":3===t?"":"")),s]};class q{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]=Y(e,t);if(this.el=q.createElement(l,i),U.currentNode=this.el.content,2===t||3===t){const e=this.el.content.firstChild;e.replaceWith(...e.childNodes)}for(;null!==(s=U.nextNode())&&o.length0){s.textContent=C?C.emptyScript:"";for(let i=0;iT(e)||"function"==typeof e?.[Symbol.iterator])(e)?this.k(e):this._(e)}O(e){return this._$AA.parentNode.insertBefore(e,this._$AB)}T(e){this._$AH!==e&&(this._$AR(),this._$AH=this.O(e))}_(e){this._$AH!==F&&I(this._$AH)?this._$AA.nextSibling.data=e:this.T(A.createTextNode(e)),this._$AH=e}$(e){const{values:t,_$litType$:i}=e,s="number"==typeof i?this._$AC(e):(void 0===i.el&&(i.el=q.createElement(K(i.h,i.h[0]),this.options)),i);if(this._$AH?._$AD===s)this._$AH.p(t);else{const e=new Z(s,this),i=e.u(this.options);e.p(t),this.T(i),this._$AH=e}}_$AC(e){let t=j.get(e.strings);return void 0===t&&j.set(e.strings,t=new q(e)),t}k(e){T(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 W(this.O(M()),this.O(M()),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=F}_$AI(e,t=this,i,s){const r=this.strings;let n=!1;if(void 0===r)e=X(this,e,t,0),n=!I(e)||e!==this._$AH&&e!==_,n&&(this._$AH=e);else{const s=e;let a,o;for(e=r[0],a=0;a{var s,n;const r=null!==(s=null==i?void 0:i.renderBefore)&&void 0!==s?s:t;let a=r._$litPart$;if(void 0===a){const e=null!==(n=null==i?void 0:i.renderBefore)&&void 0!==n?n:null;r._$litPart$=a=new K(t.insertBefore(P(),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 H}}se.finalized=!0,se._$litElement$=!0,null===(te=globalThis.litElementHydrateSupport)||void 0===te||te.call(globalThis,{LitElement:se});const ne=globalThis.litElementPolyfillSupport;null==ne||ne({LitElement:se}),(null!==(ie=globalThis.litElementVersions)&&void 0!==ie?ie:globalThis.litElementVersions=[]).push("3.3.3");class re{static nodeColors={black:r``,blue:r``,darkBlue:r``,darkerBlue:r``,darkTurquoise:r``,gray:r``,green:r``,intenseGreen:r``,lime:r``,red:r``,turquoise:r``,violet:r``,yellow:r``};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=r``;static gridAxisLineColor=r``;static gridExpandThreshold=.25;static gridLineColor=r``;static gridLineWidth=1;static gridSet=8;static gridSetLineColor=r``;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=[-re.gridSize,-.5*re.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",clearDelegate:"/Script/BlueprintGraph.K2Node_ClearDelegate",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",eAttachmentRule:"/Script/Engine.EAttachmentRule",edGraph:"/Script/Engine.EdGraph",eDrawDebugTrace:"/Script/Engine.EDrawDebugTrace",eMaterialSamplerType:"/Script/Engine.EMaterialSamplerType",eNiagara_Float4Channel:"/Niagara/Enums/ENiagara_Float4Channel.ENiagara_Float4Channel",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",eWorldPositionIncludedOffsets:"/Script/Engine.EWorldPositionIncludedOffsets",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",materialExpressionComponentMask:"/Script/Engine.MaterialExpressionComponentMask",materialExpressionConstant:"/Script/Engine.MaterialExpressionConstant",materialExpressionConstant2Vector:"/Script/Engine.MaterialExpressionConstant2Vector",materialExpressionConstant3Vector:"/Script/Engine.MaterialExpressionConstant3Vector",materialExpressionConstant4Vector:"/Script/Engine.MaterialExpressionConstant4Vector",materialExpressionFunctionInput:"/Script/Engine.MaterialExpressionFunctionInput",materialExpressionLogarithm:"/Script/InterchangeImport.MaterialExpressionLogarithm",materialExpressionLogarithm10:"/Script/Engine.MaterialExpressionLogarithm10",materialExpressionLogarithm2:"/Script/Engine.MaterialExpressionLogarithm2",materialExpressionMaterialFunctionCall:"/Script/Engine.MaterialExpressionMaterialFunctionCall",materialExpressionSquareRoot:"/Script/Engine.MaterialExpressionSquareRoot",materialExpressionSubtract:"/Script/Engine.MaterialExpressionSubtract",materialExpressionTextureCoordinate:"/Script/Engine.MaterialExpressionTextureCoordinate",materialExpressionTextureSample:"/Script/Engine.MaterialExpressionTextureSample",materialExpressionWorldPosition:"/Script/Engine.MaterialExpressionWorldPosition",materialGraphNode:"/Script/UnrealEd.MaterialGraphNode",materialGraphNodeComment:"/Script/UnrealEd.MaterialGraphNode_Comment",metasoundEditorGraphExternalNode:"/Script/MetasoundEditor.MetasoundEditorGraphExternalNode",multiGate:"/Script/BlueprintGraph.K2Node_MultiGate",niagaraBool:"/Script/Niagara.NiagaraBool",niagaraClipboardContent:"/Script/NiagaraEditor.NiagaraClipboardContent",niagaraDataInterfaceVolumeTexture:"/Script/Niagara.NiagaraDataInterfaceVolumeTexture",niagaraFloat:"/Script/Niagara.NiagaraFloat",niagaraMatrix:"/Script/Niagara.NiagaraMatrix",niagaraNodeFunctionCall:"/Script/NiagaraEditor.NiagaraNodeFunctionCall",niagaraNodeOp:"/Script/NiagaraEditor.NiagaraNodeOp",niagaraNumeric:"/Script/Niagara.NiagaraNumeric",niagaraPosition:"/Script/Niagara.NiagaraPosition",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",quat4f:"/Script/CoreUObject.Quat4f",removeDelegate:"/Script/BlueprintGraph.K2Node_RemoveDelegate",reverseForEachLoop:"/Engine/EditorBlueprintResources/StandardMacros.StandardMacros:ReverseForEachLoop",rotator:"/Script/CoreUObject.Rotator",select:"/Script/BlueprintGraph.K2Node_Select",self:"/Script/BlueprintGraph.K2Node_Self",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",vector3f:"/Script/CoreUObject.Vector3f",vector4f:"/Script/CoreUObject.Vector4f",whileLoop:"/Engine/EditorBlueprintResources/StandardMacros.StandardMacros:WhileLoop"};static pinInputWrapWidth=145;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.type}`:"")+"_"+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.eAttachmentRule]:["KeepRelative","KeepWorld","SnapToTarget"],[this.paths.eDrawDebugTrace]:["None","ForOneFrame","ForDuration","Persistent"],[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.eNiagara_Float4Channel]:[["NewEnumerator0","R"],["NewEnumerator1","G"],["NewEnumerator2","B"],["NewEnumerator3","A"]],[this.paths.eSamplerSourceMode]:["From texture asset","Shared: Wrap","Shared: Clamp","Hidden"],[this.paths.eSearchCase]:["CaseSensitive","IgnoreCase"],[this.paths.eWorldPositionIncludedOffsets]:["Absolute World Position (Including Material Shader Offsets)","Absolute World Position (Excluding Material Shader Offsets)","Camera Relative World Position (Including Material Shader Offsets)","Camera Relative World Position (Excluding Material Shader Offsets)"],[this.paths.eSearchDir]:["FromStart","FromEnd"],[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.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 rgba=["R","G","B","A"];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{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 roundDecimals(e,t=1){const i=10**t;return Math.round(e*i)/i}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),n=t.getBoundingClientRect();return[Math.round((e[0]-n.x)*s),Math.round((e[1]-n.y)*s)]}static isSerialized(e,t){return e.attributes?.[t]?.serialized??e.constructor.attributes?.[t]?.serialized??!1}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=Object){if(!(t instanceof Array))throw new TypeError("Expected keys to be an array.");if(1==t.length){if(t[0]in e||void 0===e[t[0]])return e[t[0]]=i,!0}else if(t.length>0)return e[t[0]]instanceof Object||(e[t[0]]=new s),ae.objectSet(e[t[0]],t.slice(1),i,s);return!1}static snapToGrid(e,t,i){return 1===i?[e,t]:[i*Math.floor(e/i),i*Math.floor(t/i)]}static mergeArrays(e=[],t=[],i=(e,t)=>e==t){let s=[];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(re.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,t=!1){const i=t?/([^\.\/]+?)(?:_\d+)$/:/([^\.\/]+)$/;return e.match(i)?.[1]??""}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 getFirstWordOrder(e){return new RegExp(/\s*/.source+e.join(/[^\n]+\n\s*/.source)+/\s*/.source)}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,n=e=>{},r=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;ae.approximatelyEqual(u,1)||u>1?u=1:n(requestAnimationFrame(o));const c=e+(t-e)*r(u);s(c)};n(requestAnimationFrame(o))}}class oe extends se{#e;get blueprint(){return this.#e}set blueprint(e){this.#e=e}#t;get entity(){return this.#t}set entity(e){this.#t=e}#i;get template(){return this.#i}isInitialized=!1;isSetup=!1;inputObjects=[];initialize(e,t){this.requestUpdate(),this.#t=e,this.#i=t,this.#i.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(re.removeEventName);this.dispatchEvent(e)}isSameGraph(e){return this.blueprint&&this.blueprint==e?.blueprint}}class le{static arrayPin=G``;static branchNode=G``;static breakStruct=G``;static cast=G``;static close=G``;static convert=G``;static correct=G``;static delegate=G``;static doN=G``;static doOnce=G``;static enum=G``;static event=G``;static execPin=G``;static expandIcon=G``;static flipflop=G``;static forEachLoop=G``;static functionSymbol=G``;static gamepad=G``;static genericPin=G``;static keyboard=G``;static loop=G``;static macro=G``;static mapPin=G``;static makeArray=G``;static makeMap=G``;static makeSet=G``;static makeStruct=G``;static metasoundFunction=G``;static mouse=G``;static node=G``;static operationPin=G``;static pcgStackPin=G``;static pcgPin=G``;static pcgParamPin=G``;static pcgSpatialPin=G``;static plusCircle=G``;static questionMark=G``;static referencePin=G``;static reject=G``;static setPin=G``;static select=G``;static sequence=G``;static sound=G``;static spawnActor=G``;static switch=G``;static timer=G``;static touchpad=G``}class ue{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,current:e,index:t}}}class ce{static indentation=" ";static highlight="Last valid parser";Self;static frame(e,t="",i=""){t=e?"[ "+t+" ]":"";let s=e.split("\n");const n=Math.max(...s.map((e=>e.length))),r=n";const n=this.isVisited(i),r=this.isHighlighted(e,i);let a=n?"<...>":this.doToString(e,r?"":t,i,s);return r&&(a=ce.frame(a,ce.highlight,t)),a}doToString(e,t,i,s){return`${this.constructor.name} does not implement toString()`}}class he extends ce{#s;get value(){return this.#s}constructor(e){super(),this.#s=e}parse(e,t,i,s){i=this.makePath(i,s);const n=t+this.#s.length,r=e.input.substring(t,n);return this.#s===r?ue.makeSuccess(n,this.#s,i,n):ue.makeFailure()}doToString(e,t,i,s){return`"${this.value.replaceAll("\n","\\n").replaceAll('"','\\"')}"`}}class pe extends ce{static instance=new pe;parse(e,t,i,s){return i=this.makePath(i,s),ue.makeSuccess(t,"",i,0)}doToString(e,t,i,s){return""}}class de extends ce{#n;get parsers(){return this.#n}constructor(...e){super(),this.#n=e}parse(e,t,i,s){i=this.makePath(i,s);const n=ue.makeSuccess(0,"");for(let s=0;sn.bestPosition&&(n.bestParser=r.bestParser,n.bestPosition=r.bestPosition),r.status)return n.value=r.value,n.position=r.position,n}return n.status=!1,n.value=null,n}doToString(e,t,i,s){if(2===this.#n.length&&this.#n[1]instanceof pe){let s=this.#n[0].toString(e,t,i,0);return this.#n[0]instanceof he||(s="<"+s+">"),s+="?",s}const n=t+ce.indentation;let r="ALT<\n"+n+this.#n.map(((t,s)=>t.toString(e,n+" ".repeat(0===s?0:ce.indentation.length-2),i,s))).join("\n"+n+"| ")+"\n"+t+">";return r}}class me extends ce{#r;get parser(){return this.#r}#a;constructor(e,t){super(),this.#r=e,this.#a=t}parse(e,t,i,s){i=this.makePath(i,s);const n=this.#r.parse(e,t,i,0);if(!n.status)return n;const r=this.#a(n.value,e.input,n.position).getParser().parse(e,n.position,i,0);return n.bestPosition>r.bestPosition&&(r.bestParser=n.bestParser,r.bestPosition=n.bestPosition),r}doToString(e,t,i,s){return this.#r.toString(e,t,i,0)+" => chained"}}class ge extends ce{static instance=new ge;parse(e,t,i,s){return ue.makeFailure()}doToString(e,t,i,s){return""}}class be extends ce{#r;get parser(){return this.#r}#o="";constructor(e,t){super(),this.#r=e,this.#o=t}makePath(e,t){return e}parse(e,t,i,s){return this.parse=this.#r.parse.bind(this.#r),this.parse(e,t,i,s)}doToString(e,t,i,s){let n=this.#r.toString(e,"",i,s);return n=ce.frame(n,this.#o,t),n}}class ve extends ce{#r;#l;constructor(e){super(),this.#r=e}makePath(e,t){return e}isHighlighted(e,t){if(super.isHighlighted(e,t)){const i={parent:t,parser:this.#l,index:0};e.highlighted=e.highlighted instanceof ce?this.#l:i}return!1}resolve(){return this.#l||(this.#l=this.#r().getParser()),this.#l}parse(e,t,i,s){return this.resolve(),this.parse=this.#l.parse.bind(this.#l),this.parse(e,t,i,s)}doToString(e,t,i,s){return this.resolve(),this.doToString=this.#l.toString.bind(this.#l),this.doToString(e,t,i,s)}}class fe extends ce{#r;get parser(){return this.#r}#u;get type(){return this.#u}static Type={NEGATIVE_AHEAD:"?!",NEGATIVE_BEHIND:"?String.raw`[^${e}\\]*(?:\\.[^${e}\\]*)*`;static#m=/[-\+]?(?:\d*\.)?\d+/;static common={number:new RegExp(this.#m.source+String.raw`(?!\.)`),numberInteger:/[\-\+]?\d+(?!\.\d)/,numberNatural:/\d+/,numberExponential:new RegExp(this.#m.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.#d('"')})"`),singleQuotedString:new RegExp(`'(${this.#d("'")})'`),backtickQuotedString:new RegExp("`("+this.#d("`")+")`")};constructor(e,t){super(),this.#c=e,this.#h=new RegExp(`^(?:${e.source})`,e.flags),this.#p=t}parse(e,t,i,s){i=this.makePath(i,s);const n=this.#h.exec(e.input.substring(t));n&&(t+=n[0].length);return n?ue.makeSuccess(t,this.#p(n),i,t):ue.makeFailure()}doToString(e,t,i,s){let n="/"+this.#c.source+"/";const r=Object.entries(ye.common).find((([e,t])=>t.source===this.#c.source))?.[0];return r&&(n="P."+r),n}}class we extends ce{#r;get parser(){return this.#r}#g;get mapper(){return this.#g}constructor(e,t){super(),this.#r=e,this.#g=t}isHighlighted(e,t){if(super.isHighlighted(e,t)){const i={parent:t,parser:this.#r,index:0};e.highlighted=e.highlighted instanceof ce?this.#r:i}return!1}parse(e,t,i,s){i=this.makePath(i,s);const n=this.#r.parse(e,t,i,0);return n.status&&(n.value=this.#g(n.value)),n}doToString(e,t,i,s){let n=this.#r.toString(e,t,i,0);if(this.#r instanceof ye&&Object.values(ye.common).includes(this.#r.regexp))return this.#r.regexp===ye.common.numberInteger&&this.#g===BigInt?"P.numberBigInteger":n;let r=this.#g.toString();return(r.length>60||r.includes("\n"))&&(r="(...) => { ... }"),n+=` -> map<${r}>`,n}}class Se extends ye{static#g=e=>e;constructor(e){super(e,Se.#g)}}class Ee extends ye{constructor(e,t=0){super(e,(e=>e[t]))}}class Ce extends ce{#n;get parsers(){return this.#n}constructor(...e){super(),this.#n=e}parse(e,t,i,s){i=this.makePath(i,s);const n=new Array(this.#n.length),r=ue.makeSuccess(t,n);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,s){const n=t+ce.indentation,r="SEQ<\n"+n+this.#n.map(((t,s)=>t.toString(e,n,i,s))).join("\n"+n)+"\n"+t+">";return r}}class Ne extends ce{#r;get parser(){return this.#r}#b;get min(){return this.#b}#v;get max(){return this.#v}constructor(e,t=0,i=Number.POSITIVE_INFINITY){if(super(),t>i)throw new Error("Min is greater than max");this.#r=e,this.#b=t,this.#v=i}parse(e,t,i,s){i=this.makePath(i,s);const n=ue.makeSuccess(t,[],i);for(let t=0;tn.bestPosition&&(n.bestParser=s.bestParser,n.bestPosition=s.bestPosition),!s.status){te;static#y=([e,t])=>t;static#w=([e,t])=>[e,...t];static#S=e=>e instanceof Array?e.join(""):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.#r=e}static#E(e){const t=[];for(;e;)t.push(e),e=e.parent;t.reverse();let i=new Map;for(let e=1;ei<=s||i>e))),i.set(t[e].current,s),t.splice(s+1,e-s),e=s):i.set(t[e].current,e)}return t[t.length-1]}getParser(){return this.#r}run(e){const t=this.#r.parse(ue.makeContext(this,e),0,ue.makePathNode(),0);return t.position!==e.length&&(t.status=!1),t}parse(e,t=!0){const i=this.run(e);if(i.status)return i.value;const s=[Math.ceil(30),Math.floor(30)],n=xe.lineColumnFromOffset(e,i.bestPosition);let r=i.bestPosition;const a=e.replaceAll(/^(\s)+|\s{6,}|\s*?\n\s*/g,((e,t,s)=>{let n=t?"...":" ... ";return s<=i.bestPosition&&(i.bestPosition0&&(c="..."+c,u+=3),s[1]e.getParser()))))}static alt(...e){return new this(new de(...e.map((e=>e.getParser()))))}static lookahead(e){return new this(new fe(e.getParser(),fe.Type.POSITIVE_AHEAD))}static lazy(e){return new this(new ve(e))}times(e,t=e){return new xe(new Ne(this.#r,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(e=""){let t=xe.success();return""!==e&&(t=t.map((()=>e))),xe.alt(this,t)}sepBy(e,t=1,i=!1){let s=xe.seq(this,xe.seq(e,this).map(xe.#y).atLeast(t-1),...i?[e.opt([])]:[]).map(xe.#w);return 0===t&&(s=s.opt([])),s}skipSpace(){return xe.seq(this,xe.whitespaceOpt).map(xe.#f)}map(e){return new xe(new we(this.#r,e))}chain(e){return new xe(new me(this.#r,e))}assert(e){return this.chain(((t,i,s)=>e(t,i,s)?xe.success().map((()=>t)):xe.failure()))}join(e=""){return this.map(xe.#S)}label(e=""){return new xe(new be(this.#r,e))}toString(e="",t=!1,i=null){i instanceof xe&&(i=i.getParser());const s=ue.makeContext(this,"");s.highlighted=i;const n=ue.makePathNode();return(t?"\n"+e:"")+this.#r.toString(s,e,n)}}class Pe{static same=e=>e;static notWrapped=(e,t)=>t;static defaultWrapped=(e,t)=>`${e.#C}(${t})`;static wrap=this.defaultWrapped;static attributeSeparator=",";static keySeparator="=";static printKey=e=>e;static grammar=xe.lazy((()=>this.createGrammar()));static unknownEntityGrammar;static unknownEntity;static attributes={};static lookbehind="";static default;static nullable=!1;static ignored=!1;static serialized=!1;static expected=!1;static inlined=!1;static quoted;static silent=!1;static trailing=!1;#N;get keys(){return this.#N??Object.keys(this)}set keys(e){this.#N=[...new Set(e)]}#C=this.constructor.lookbehind;get lookbehind(){return this.#C.trim()}set lookbehind(e){this.#C=e}#x=this.constructor.ignored;get ignored(){return this.#x}set ignored(e){this.#x=e}#P=this.constructor.inlined;get inlined(){return this.#P}set inlined(e){this.#P=e}#k;get quoted(){return this.#k??this.constructor.quoted??!1}set quoted(e){this.#k=e}#A;get trailing(){return this.#A??this.constructor.trailing??!1}set trailing(e){this.#A=e}constructor(e={}){const t=this.constructor.attributes,i=ae.mergeArrays(Object.keys(e),Object.entries(t).filter((([e,t])=>void 0!==t.default)).map((([e,t])=>e)));for(const s of i){if(void 0!==e[s]){e[s].constructor===Object&&(e[s]=new(void 0!==t[s]?t[s]:Pe.unknownEntity)(e[s]));const i=t[s];if(this[s]=e[s],i?.compute){const t=i.compute(this).grammar.run(e[s].toString());t.status&&(this[s]=t.value)}continue}const i=t[s];void 0===i.default||(this[s]=i.default(i))}}static createGrammar(){return this.unknownEntityGrammar}static actualClass(){let e=this;for(;!e.name;)e=Object.getPrototypeOf(e);return e}static className(){return this.actualClass().name}static asUniqueClass(){let e=this;return this.name.length&&(e=class extends(this){},e.grammar=e.createGrammar()),e}static withLookbehind(e){const t=this.asUniqueClass();return t.lookbehind=e,t}static withDefault(e=e=>new e){const t=this.asUniqueClass();return t.default=e,t}static flagNullable(e=!0){const t=this.asUniqueClass();return t.nullable=e,t}static flagIgnored(e=!0){const t=this.asUniqueClass();return t.ignored=e,t}static flagSerialized(e=!0){const t=this.asUniqueClass();return t.serialized=e,t}static flagInlined(e=!0){const t=this.asUniqueClass();return t.inlined=e,t}static flagQuoted(e=!0){const t=this.asUniqueClass();return t.quoted=e,t}static flagSilent(e=!0){const t=this.asUniqueClass();return t.silent=e,t}static flagTrailing(e=!0){const t=this.asUniqueClass();return t.trailing=e,t}static asSerializedString(e){return`"${e.replaceAll(/(?<=(?:[^\\]|^)(?:\\\\)*?)"/g,'\\"')}"`}showProperty(e){let t=this[e];const i=t.constructor;if(i.silent&&void 0!==i.default){void 0===i["#default"]&&(i["#default"]=i.default(i));const e=i["#default"];return!t.equals(e)}return!0}listenAttribute(e,t){const i=Object.getOwnPropertyDescriptor(this,e),s=i.set;s?(i.set=e=>{s(e),t(e)},Object.defineProperties(this,{[e]:i})):i.value&&Object.defineProperties(this,{["#"+e]:{value:i.value,writable:!0,enumerable:!1},[e]:{enumerable:!0,get(){return this["#"+e]},set(i){t(i),this["#"+e]=i}}})}doSerialize(e=!1,t="",i=this.constructor,s=i.printKey,n=i.keySeparator,r=i.attributeSeparator,a=i.wrap){const o=i!==this.constructor;let l="",u=!0;const c=this instanceof Pe?this.keys:Object.keys(this);for(const a of c){const o=this[a],c=o?.constructor;if(void 0===o||this instanceof Pe&&!this.showProperty(a))continue;u?u=!1:l+=r;let h=this instanceof Array?`(${a})`:a;if(h.length&&(i.attributes[a]?.quoted||o.quoted)&&(h=`"${h}"`),o.inlined){const a="ArrayEntity"===c.className()?e=>s(`${h}${e}`):e=>s(`${h}.${e}`);l+=o.serialize(e,t,void 0,a,n,r,i.notWrapped);continue}h=s(h),h.length&&(l+=(r.includes("\n")?t:"")+h+n);let p=o?.serialize(e,t);l+=p}return this instanceof Pe&&(o&&i.trailing||this.trailing)&&l.length&&(l+=r),a(this,l)}serialize(e=!1,t="",i=this.constructor,s=i.printKey,n=i.keySeparator,r=i.attributeSeparator,a=i.wrap){this.constructor;let o=this instanceof Array?Pe.prototype.doSerialize.bind(this)(e,t,i,s,n,r,a):this.doSerialize(e,t,i,s,n,r,a);return i.serialized&&(o=Pe.asSerializedString(o)),o}equals(e){if(!(e instanceof Pe))return!1;const t=Object.keys(this),i=Object.keys(e),s=this.constructor.actualClass(),n=e.constructor.actualClass();if(!(t.length===i.length&&this.lookbehind==e.lookbehind&&(e instanceof s||this instanceof n)))return!1;for(let s=0;s{},toAttribute:(e,t)=>!0===e?"true":!1===e?"false":""};#L=!0;get uppercase(){return this.#L}set uppercase(e){this.#L=e}static createGrammar(){return xe.regArray(/(true)|(True)|(false)|(False)/).map((e=>{const t=e[1]??e[2]?new this(!0):new this(!1);return t.uppercase=void 0!==(e[2]??e[4]),t})).label("BooleanEntity")}constructor(e=!1){super(),this.value=e}serialize(e=!1,t="",i=this.constructor){let s=this.value?this.#L?"True":"true":this.#L?"False":"false";return i.serialized&&(s=`"${s}"`),s}valueOf(){return this.value}}class Ae{static#M=new Map;static registerElement(e,t){Ae.#M.set(e,t)}static getConstructor(e){return Ae.#M.get(e)}}class Le extends Pe{static alternatives=[];static className(){let e=super.className();return this.alternatives.length&&(e+=".accepting("+this.alternatives.map((e=>e.className())).join(", ")+")"),e}static createGrammar(){const e=this.alternatives.map((e=>e.grammar));return 0==this.alternatives.length||e.includes(this.unknownEntityGrammar)?this.unknownEntityGrammar:xe.alt(...e)}static accepting(...e){const t=this.asUniqueClass();return t.alternatives=e,t.grammar=t.createGrammar(),t}}class Me{static numberRegexSource=xe.number.getParser().parser.regexp.source;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 MultipleWordsSymbols=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=xe.reg(/\(\s*\)/).map((()=>null));static true=xe.reg(/true/i).map((()=>!0));static false=xe.reg(/false/i).map((()=>!1));static number=xe.regArray(new RegExp(`(${xe.number.getParser().parser.regexp.source})|(\\+?inf)|(-inf)`)).map((([e,t,i,s])=>t?Number(t):i?Number.POSITIVE_INFINITY:Number.NEGATIVE_INFINITY));static bigInt=xe.reg(new RegExp(xe.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=xe.lazy((()=>xe.reg(/\d+/).map(Number)));static string=xe.doubleQuotedString.map((e=>ae.unescapeString(e)));static colorValue=xe.numberByte;static word=xe.reg(Me.Regex.Word);static symbol=xe.reg(Me.Regex.Symbol);static symbolQuoted=xe.reg(new RegExp('"('+Me.Regex.Symbol.source+')"'),1);static attributeName=xe.reg(Me.Regex.DotSeparatedSymbols);static attributeNameQuoted=xe.reg(new RegExp('"('+Me.Regex.InsideString.source+')"'),1);static guid=xe.reg(new RegExp(`${Me.Regex.HexDigit.source}{32}`));static commaSeparation=xe.reg(/\s*,\s*(?!\))/);static commaOrSpaceSeparation=xe.reg(/\s*,\s*(?!\))|\s+/);static equalSeparation=xe.reg(/\s*=\s*/);static hexColorChannel=xe.reg(new RegExp(Me.Regex.HexDigit.source+"{2}"));static getAttribute(e,[t,...i]){const s=e?.attributes?.[t];if(s){if(s.prototype instanceof Le)for(const e of s.alternatives){const t=this.getAttribute(e,i);if(t)return t}return i.length>0?this.getAttribute(s,i):s}}static createAttributeGrammar(e,t=this.attributeName,i=this.equalSeparation,s=(e,t,i)=>{}){return xe.seq(t,i).chain((([t,i])=>{const n=t.split(re.keysSeparator),r=this.getAttribute(e,n),a=r?r.grammar:Pe.unknownEntityGrammar,o=n.length>1;return a.map((e=>t=>{ae.objectSet(t,n,e),n.reduce(((e,t,i)=>(e[t].inlined=o&&i{let s={};return e.length&&(s.lookbehind=e),t.forEach((e=>e(s))),s.trailing=void 0!==i,s})).chain((t=>{(e.lookbehind instanceof Array||e.lookbehind!==n)&&(e=e.withLookbehind(n));const s=Object.keys(t),r=Object.keys(e.attributes);return null!=i?xe.success().assert((e=>s.filter((e=>r.includes(e))).length/r.length>=i)).map((()=>new e(t))):xe.success().map((()=>new e(t)))}))}}class Te extends Pe{static grammar=this.createGrammar();constructor(e=0){super(),this.value=e}static createGrammar(){return xe.number.map((e=>new this(e)))}serialize(e=!1,t="",i=this.constructor){let s=this.value.toFixed(6);return i.serialized&&(s=`"${s}"`),s}valueOf(){return this.value}toString(){return this.value.toString()}}class Ie extends Pe{static attributes={...super.attributes,R:Te.withDefault(),G:Te.withDefault(),B:Te.withDefault(),A:Te.withDefault((e=>new e(1)))};static grammar=this.createGrammar();#T=new Te;get H(){return this.#T}set H(e){this.#T=e}#I=new Te;get S(){return this.#I}set S(e){this.#I=e}#O=new Te;get V(){return this.#O}set V(e){this.#O=e}constructor(e){super(e),e instanceof Array&&(e={R:e[0]??0,G:e[1]??0,B:e[2]??0,A:e[3]??1}),this.R,this.G,this.B,this.A,this.#D()}static createGrammar(){return Me.createEntityGrammar(this,Me.commaSeparation,.5).label("LinearColorEntity")}static printLinearColor(e){return`${Math.round(255*e.R.valueOf())}, ${Math.round(255*e.G.valueOf())}, ${Math.round(255*e.B.valueOf())}`}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 Ie({R:new Te(1),G:new Te(1),B:new Te(1)})}static getLinearColorFromHexGrammar(){const e=/[0-9a-fA-F]/;return xe.regArray(new RegExp("#("+e.source+"{2})("+e.source+"{2})("+e.source+"{2})("+e.source+"{2})?")).map((([e,t,i,s,n])=>new this({R:parseInt(t,16)/255,G:parseInt(i,16)/255,B:parseInt(s,16)/255,A:parseInt(n??"FF",16)/255})))}static getLinearColorRGBListGrammar(){return xe.seq(xe.numberByte,Me.commaSeparation,xe.numberByte,Me.commaSeparation,xe.numberByte).map((([e,t,i,s,n])=>new this({R:e/255,G:i/255,B:n/255,A:1})))}static getLinearColorRGBGrammar(){return xe.seq(xe.reg(/rgb\s*\(\s*/),this.getLinearColorRGBListGrammar(),xe.reg(/\s*\)/)).map((([e,t,i])=>t))}static getLinearColorRGBAGrammar(){return xe.seq(xe.reg(/rgba\s*\(\s*/),this.getLinearColorRGBListGrammar(),xe.reg(/\s*\)/)).map((([e,t,i])=>t))}static getLinearColorFromAnyFormat(){return xe.alt(this.getLinearColorFromHexGrammar(),this.getLinearColorRGBAGrammar(),this.getLinearColorRGBGrammar(),this.getLinearColorRGBListGrammar())}#D(){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),n=Math.min(e,t,i),r=s-n;let a;switch(s){case n:a=0;break;case e:a=(t-i)/r+(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)}toArray(){return[this.R.value,this.G.value,this.B.value,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.#D()}setFromSRGBANumber(e){this.A.value=(255&e)/255,this.B.value=Ie.sRGBtoLinear((e>>8&255)/255),this.G.value=Ie.sRGBtoLinear((e>>16&255)/255),this.R.value=Ie.sRGBtoLinear((e>>24&255)/255),this.#D()}toString(){return Ie.printLinearColor(this)}}class Oe extends Pe{static type;constructor(e=null){super();const t=this.constructor;e??=void 0!==t.default?t.default(t).getter:e,this.getter=e}static createGrammar(e=this.type?.grammar??xe.lazy((()=>this.unknownEntityGrammar))){return this.type?.grammar.map((e=>new this((()=>e))))}static withDefault(e=e=>new e((()=>new e.type))){return super.withDefault(e)}static of(e){const t=this.asUniqueClass();return t.type=e,t.grammar=t.createGrammar(),t}doSerialize(e=!1,t="",i=this.constructor,s=i.printKey,n=i.keySeparator,r=i.attributeSeparator,a=i.wrap){return this.getter().serialize(e,t,i.type,s,n,r,a)}equals(e){return e instanceof Oe&&(e=e.getter?.()),this.getter?.().equals(e)}valueOf(){return this.valueOf=this.getter().valueOf.bind(this.getter()),this.valueOf()}toString(){return this.toString=this.getter().toString.bind(this.getter()),this.toString()}}class De extends Pe{static numberRegexSource=String.raw`${Me.numberRegexSource}(?<=(?:\.(\d*0+))?)`;static grammar=this.createGrammar();static precision;#$;get precision(){return this.constructor.precision??this.#$}set precision(e){this.#$=e}_value;get value(){return this._value}set value(e){-0===e&&(e=0),this._value=e}constructor(e=0,t=null){super(),this.value=Number(e),null!==t&&(this.#$=Number(t))}static createGrammar(){return xe.regArray(new RegExp(`(?${this.numberRegexSource})|(?\\+?inf)|(?-inf)`)).map((({2:e,groups:{n:t,posInf:i,negInf:s}})=>new this(t?Number(t):i?Number.POSITIVE_INFINITY:Number.NEGATIVE_INFINITY,e?.length))).label("NumberEntity")}static withPrecision(e=0){const t=this.asUniqueClass();return t.precision=e,t}static printNumber(e){return e==Number.POSITIVE_INFINITY?"inf":e==Number.NEGATIVE_INFINITY?"-inf":ae.minDecimals(e)}serialize(e=!1,t="",i=this.constructor){if(this.value===Number.POSITIVE_INFINITY)return"+inf";if(this.value===Number.NEGATIVE_INFINITY)return"-inf";const s=i.precision??this.precision;let n=void 0!==s?this.value.toFixed(s):this.value.toString();return i.serialized&&(n=`"${n}"`),n}valueOf(){return this.value}toString(){return this.value.toString()}}class $e extends Pe{static attributes={...super.attributes,X:De.withDefault(),Y:De.withDefault(),Z:De.withDefault()};static grammar=this.createGrammar();constructor(e){super(e),this.X,this.Y,this.Z}static createGrammar(){return Me.createEntityGrammar(this,Me.commaSeparation,1).label("VectorEntity")}toArray(){return[this.X.valueOf(),this.Y.valueOf(),this.Z.valueOf()]}}const Be=/\/Script\/SequencerScripting\.MovieSceneScripting(.+)Channel/,Ge={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:"`"};function He(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}}function Ve(e){let t;switch(e.getType()){case re.paths.addDelegate:t??="Bind Event to ";case re.paths.clearDelegate:t??="Unbind all Events from ";case re.paths.removeDelegate:return t??="Unbind Event from ",t+ae.formatStringName(e.DelegateReference?.MemberName?.toString().replace(/Delegate$/,"")??"None");case re.paths.asyncAction:if(e.ProxyFactoryFunctionName)return ae.formatStringName(e.ProxyFactoryFunctionName?.toString());case re.paths.actorBoundEvent:case re.paths.componentBoundEvent:return`${ae.formatStringName(e.DelegatePropertyName?.toString())} (${e.ComponentPropertyName?.toString()??"Unknown"})`;case re.paths.callDelegate:return`Call ${e.DelegateReference?.MemberName?.toString()??"None"}`;case re.paths.createDelegate:return"Create Event";case re.paths.customEvent:if(e.CustomFunctionName)return e.CustomFunctionName?.toString();case re.paths.dynamicCast:return e.TargetType?`Cast To ${e.TargetType?.getName()}`:"Bad cast node";case re.paths.enumLiteral:return`Literal enum ${e.Enum?.getName()}`;case re.paths.event:return`Event ${(e.EventReference?.MemberName?.toString()??"").replace(/^Receive/,"")}`;case re.paths.executionSequence:return"Sequence";case re.paths.forEachElementInEnum:return`For Each ${e.Enum?.getName()}`;case re.paths.forEachLoopWithBreak:return"For Each Loop with Break";case re.paths.functionEntry:return"UserConstructionScript"===e.FunctionReference?.MemberName?.toString()?"Construction Script":e.FunctionReference?.MemberName?.toString();case re.paths.functionResult:return"Return Node";case re.paths.ifThenElse:return"Branch";case re.paths.makeStruct:if(e.StructType)return`Make ${e.StructType.getName()}`;case re.paths.materialExpressionComponentMask:{const t=e.getMaterialSubobject();if(t)return`Mask ( ${re.rgba.filter((e=>!0===t[e].getter().value)).map((e=>e+" ")).join("")})`}case re.paths.materialExpressionConstant:t??=[e.getCustomproperties().find((e=>"Value"==e.PinName.toString()))?.DefaultValue];case re.paths.materialExpressionConstant2Vector:t??=[e.getCustomproperties().find((e=>"X"==e.PinName?.toString()))?.DefaultValue,e.getCustomproperties().find((e=>"Y"==e.PinName?.toString()))?.DefaultValue];case re.paths.materialExpressionConstant3Vector:case re.paths.materialExpressionConstant4Vector:if(!t){const i=e.getCustomproperties().find((e=>"Constant"==e.PinName?.toString()))?.DefaultValue;t=i instanceof $e?[i.X,i.Y,i.Z].map((e=>e.valueOf())):i instanceof Ie?[i.R,i.G,i.B,i.A].map((e=>e.valueOf())):[]}if(t?.length>0)return t.map((e=>ae.printExponential(e))).join(",");t=void 0;break;case re.paths.materialExpressionFunctionInput:{const t=e.getMaterialSubobject();return`Input ${t?.InputName??"In"} (${t?.InputType?.value.match(/^.+?_(\w+)$/)?.[1]??"Vector3"})`}case re.paths.materialExpressionLogarithm:return"Ln";case re.paths.materialExpressionLogarithm10:return"Log10";case re.paths.materialExpressionLogarithm2:return"Log2";case re.paths.materialExpressionMaterialFunctionCall:const i=e.getMaterialSubobject()?.MaterialFunction;if(i)return i.getName();break;case re.paths.materialExpressionSquareRoot:return"Sqrt";case re.paths.materialExpressionSubtract:const s=e.getMaterialSubobject();if(s)return`Subtract(${s.ConstA??"1"},${s.ConstB??"1"})`;case re.paths.metasoundEditorGraphExternalNode:{const t=e.ClassName?.Name;if(t)return"Add"===t?"+":t}case re.paths.pcgEditorGraphNodeInput:return"Input";case re.paths.pcgEditorGraphNodeOutput:return"Output";case re.paths.spawnActorFromClass:let n=e.getCustomproperties().find((e=>"ReturnValue"==e.PinName.toString()))?.PinType?.PinSubCategoryObject?.getName();return"Actor"===n&&(n=null),`SpawnActor ${ae.formatStringName(n??"NONE")}`;case re.paths.switchEnum:return`Switch on ${e.Enum?.getName()??"Enum"}`;case re.paths.switchInteger:return"Switch on Int";case re.paths.variableGet:return"";case re.paths.variableSet:return"SET"}let i=e.switchTarget();if(i)return"E"!==i[0]&&(i=ae.formatStringName(i)),`Switch on ${i}`;if(e.isComment())return e.NodeComment.toString();const s=e.getHIDAttribute();if(s){const t=s.toString();let i=function(e){let t=Ge[e];if(t)return t;if(t=He(e)?.toString(),t)return t;const i=e.match(/NumPad([a-zA-Z]+)/);return i&&(t=He(i[1]).toString(),t)?"Num "+t:void 0}(t)??ae.formatStringName(t);return e.getClass()===re.paths.inputDebugKey?i="Debug Key "+i:e.getClass()===re.paths.getInputAxisKeyValue&&(i="Get "+i),i}if(e.getClass()===re.paths.macro)return ae.formatStringName(e.MacroGraphReference?.getMacroName());if(e.isMaterial()&&e.getMaterialSubobject()){let t=Ve(e.getMaterialSubobject());return t=t.match(/Material Expression (.+)/)?.[1]??t,t}if(e.isPcg()&&e.getPcgSubobject()){let t=e.getPcgSubobject();return t.NodeTitle?t.NodeTitle.toString():Ve(t)}const n=e.getSubgraphObject();if(n)return n.Graph.getName();const r=e.getSettingsObject();if(r){if(r.ExportPath.type===re.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?.toString().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 a=e.FunctionReference?.MemberName?.toString();if(a){const t=e.FunctionReference.MemberParent?.path??"";switch(a){case"AddKey":let e=t.match(Be);if(e)return`Add Key (${ae.formatStringName(e[1])})`;case"Concat_StrStr":return"Append"}const i=a.match(re.lineTracePattern);if(i)return"Line Trace"+("Multi"===i[1]?" Multi ":" ")+(""===i[2]?"By Channel":ae.formatStringName(i[2]));switch(t){case re.paths.blueprintGameplayTagLibrary:case re.paths.kismetMathLibrary:case re.paths.slateBlueprintLibrary:case re.paths.timeManagementBlueprintLibrary:const e=a.match(/[BF]([A-Z]\w+)/);switch(e&&(a=e[1]),a){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(a.startsWith("Add_"))return"+";if(a.startsWith("And_"))return"&";if(a.startsWith("Conv_"))return"";if(a.startsWith("Cross_"))return"cross";if(a.startsWith("Divide_"))return String.fromCharCode(247);if(a.startsWith("Dot_"))return"dot";if(a.startsWith("EqualEqual_"))return"==";if(a.startsWith("Greater_"))return">";if(a.startsWith("GreaterEqual_"))return">=";if(a.startsWith("Less_"))return"<";if(a.startsWith("LessEqual_"))return"<=";if(a.startsWith("Multiply_"))return String.fromCharCode(10799);if(a.startsWith("Not_"))return"~";if(a.startsWith("NotEqual_"))return"!=";if(a.startsWith("Or_"))return"|";if(a.startsWith("Percent_"))return"%";if(a.startsWith("Subtract_"))return"-";if(a.startsWith("Xor_"))return"^";break;case re.paths.blueprintSetLibrary:{const e=a.match(/Set_(\w+)/);if(e)return ae.formatStringName(e[1]).toUpperCase()}break;case re.paths.blueprintMapLibrary:{const e=a.match(/Map_(\w+)/);if(e)return ae.formatStringName(e[1]).toUpperCase()}break;case re.paths.kismetArrayLibrary:{const e=a.match(/Array_(\w+)/);if(e)return e[1].toUpperCase()}}return ae.formatStringName(a)}if(e.OpName){switch(e.OpName.toString()){case"Boolean::LogicAnd":return"Logic AND";case"Boolean::LogicEq":return"==";case"Boolean::LogicNEq":return"!=";case"Boolean::LogicNot":return"Logic NOT";case"Boolean::LogicOr":return"Logic OR";case"Matrix::MatrixMultiply":return"Multiply (Matrix * Matrix)";case"Matrix::MatrixVectorMultiply":return"Multiply (Matrix * Vector4)";case"Numeric::Abs":return"Abs";case"Numeric::Add":return"+";case"Numeric::DistancePos":return"Distance";case"Numeric::Mul":return String.fromCharCode(10799)}return ae.formatStringName(e.OpName.toString()).replaceAll("::"," ")}return e.FunctionDisplayName?ae.formatStringName(e.FunctionDisplayName.toString()):e.ObjectRef?e.ObjectRef.getName():ae.formatStringName(e.getNameAndCounter()[0])}class Re extends Pe{static type;static grammar=this.createGrammar();get length(){return this.values.length}constructor(e=[]){super(),this.values=e}static createGrammar(e=this.type?.grammar??xe.lazy((()=>this.unknownEntityGrammar))){return this.inlined?e:xe.seq(xe.reg(/\(\s*/),e.sepBy(Me.commaSeparation).opt(),xe.reg(/\s*(,\s*)?\)/,1)).map((([e,t,i])=>{t=t instanceof Array?t:[];let s=this;void 0!==i!==s.trailing&&(s=s.flagTrailing(void 0!==i));return new s(t)})).label(`ArrayEntity of ${this.type?.className()??"unknown values"}`)}static flagInlined(e=!0){const t=this.asUniqueClass();return t.inlined=e,t.grammar=t.createGrammar(),t}static of(e){const t=this.asUniqueClass();return t.type=e,t.grammar=t.createGrammar(),t}doSerialize(e=!1,t="",i=this.constructor,s=i.printKey,n=i.keySeparator,r=i.attributeSeparator,a=i.wrap){if(i.inlined)return super.serialize.bind(this.values,e,t,i,s,n,r,a)();let o=this.values.map((t=>t?.serialize(e))).join(i.attributeSeparator);return this.trailing&&(o+=i.attributeSeparator),`(${o})`}valueOf(){return this.values}equals(e){if(!(e instanceof Re)||this.values.length!==e.values.length)return!1;for(let t=0;t_e=e.default)).catch():_e=window.crypto;class ze extends Pe{static grammar=this.createGrammar();static generateGuid(){let e=new Uint32Array(4);_e.getRandomValues(e);let t="";return e.forEach((e=>{t+=("0".repeat(8)+e.toString(16).toUpperCase()).slice(-8)})),t}constructor(e=ze.generateGuid()){super(),this.value=e}static createGrammar(){return xe.reg(/[0-9A-F]{32}/i).map((e=>new this(e))).label("GuidEntity")}serialize(e=!1,t="",i=this.constructor){let s=this.value;return i.serialized&&(s=`"${s}"`),s}toString(){return this.value}}class Fe extends De{static grammar=this.createGrammar();get value(){return super.value}set value(e){(e=Math.trunc(e))>=1<<31&&e<-(1<<31)&&(e=Math.floor(e),super.value=e)}static createGrammar(){return xe.numberInteger.map((e=>new this(e)))}}class je extends Fe{static grammar=this.createGrammar();get value(){return super.value}set value(e){e=Math.round(ae.clamp(e,0)),super.value=e}static createGrammar(){return xe.numberNatural.map((e=>new this(e)))}}const Ue={[re.paths.niagaraBool]:r``,[re.paths.niagaraDataInterfaceVolumeTexture]:r``,[re.paths.niagaraFloat]:r``,[re.paths.niagaraMatrix]:r``,[re.paths.niagaraNumeric]:r``,[re.paths.niagaraPosition]:r``,[re.paths.quat4f]:r``,[re.paths.rotator]:r``,[re.paths.transform]:r``,[re.paths.vector]:r``,[re.paths.vector3f]:r``,[re.paths.vector4f]:r``,Any:r``,"Any[]":r``,audio:r``,blue:r``,bool:r``,byte:r``,class:r``,default:r``,delegate:r``,enum:r``,exec:r``,float:r``,green:r``,int:r``,int32:r``,int64:r``,interface:r``,name:r``,object:r``,Param:r``,"Param[]":r``,Point:r``,"Point[]":r``,real:r``,red:r``,string:r``,struct:r``,Surface:r``,"Surface[]":r``,text:r``,time:r``,Volume:r``,"Volume[]":r``,wildcard:r``},Ye=r``;function Ke(e){let t,i=e.PinFriendlyName?e.PinFriendlyName.toString():ae.formatStringName(e.PinName?.toString()??"");return(t=e.PinToolTip?.toString().match(/\s*(.+?(?=\n)|.+\S)\s*/))&&t[1].toLowerCase()===i.toLowerCase()?t[1]:i}class Xe extends Fe{static grammar=this.createGrammar();get value(){return super.value}set value(e){(e=Math.trunc(e))>=0&&e<256&&(super.value=e)}createGrammar(){return xe.numberByte.map((e=>new this(e)))}}class qe extends Pe{static grammar=this.createGrammar();static escapedCharacters=/['"\\]/g;static unescapedBackslash=/(?<=(?:[^\\]|^)(?:\\\\)*)\\(?!\\)/;constructor(e=""){super(),this.value=e}static createGrammar(){return xe.doubleQuotedString.map((e=>new this(qe.unescape(e)))).label("StringEntity")}static escape(e,t=!0){let i=e.replaceAll(new RegExp(`(${qe.escapedCharacters.source})`,"g"),"\\$1");return t&&(i=i.replaceAll("\n","\\n").replaceAll("\t","\\t")),i}static unescape(e){return e.replaceAll(new RegExp(qe.unescapedBackslash.source+"t","g"),"\t").replaceAll(new RegExp(qe.unescapedBackslash.source+"n","g"),"\n").replaceAll(new RegExp(`\\\\(${qe.escapedCharacters.source})`,"g"),"$1")}doSerialize(e=!1){let t=`"${qe.escape(this.value)}"`;return e&&(t=qe.escape(t,!1)),t}valueOf(){return this.value}toString(){return this.value}}class Ze extends Pe{static grammar=this.createGrammar();static f;static createGrammar(){return qe.grammar}static from(e){const t=this.asUniqueClass();return t.f=e,t}static compute(e){return this.f(e)}}class We extends Pe{static attributeConverter={fromAttribute:(e,t)=>new this(e),toAttribute:(e,t)=>e.toString()};static grammar=this.createGrammar();static createGrammar(){return Me.symbol.map((e=>new this(e))).label("SymbolEntity")}constructor(e=""){super(),this.value=e}serialize(e=!1,t="",i=this.constructor){let s=this.value;return i.serialized&&(s=`"${s}"`),s}toString(){return this.value}}class Qe extends We{static grammar=this.createGrammar();static createGrammar(){return Me.symbol.map((e=>new this(e)))}}class Je extends Qe{static grammar=this.createGrammar();static createGrammar(){return xe.reg(Me.Regex.InsideString).map((e=>new this(e)))}}class et extends Pe{static lookbehind="INVTEXT";static grammar=this.createGrammar();constructor(e=""){super(),this.value=e}static createGrammar(){return xe.alt(xe.seq(xe.reg(new RegExp(`${this.lookbehind}\\s*\\(`)),xe.doubleQuotedString,xe.reg(/\s*\)/)).map((([e,t,i])=>Number(t))),xe.reg(new RegExp(this.lookbehind)).map((()=>0))).map((e=>new this(e))).label("InvariantTextEntity")}doSerialize(){return this.lookbehind+"("+this.value+")"}valueOf(){return this.value}}class tt extends Pe{static attributeSeparator=", ";static printKey=e=>"";static lookbehind="NSLOCTEXT";static attributes={...super.attributes,namespace:qe.withDefault(),key:qe.withDefault(),value:qe.withDefault()};static grammar=this.createGrammar();constructor(e={}){super(e),this.namespace,this.key,this.value}static createGrammar(){return xe.regArray(new RegExp(String.raw`${tt.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((({groups:{namespace:e,key:t,value:i,trailing:s}})=>new this({namespace:new this.attributes.namespace(ae.unescapeString(e)),key:new this.attributes.namespace(ae.unescapeString(t)),value:new this.attributes.namespace(ae.unescapeString(i)),trailing:void 0!==s}))).label("LocalizedTextEntity")}toString(){return ae.capitalFirstLetter(this.value.valueOf())}}class it extends Pe{static attributeSeparator=", ";static lookbehind=["LOCGEN_FORMAT_NAMED","LOCGEN_FORMAT_ORDERED"];static grammar=this.createGrammar();constructor(e){super(),this.values=e}static createGrammar(){return xe.lazy((()=>xe.seq(xe.reg(new RegExp(String.raw`(${this.lookbehind.join("|")})\s*\(\s*`),1),xe.alt(...[qe,tt,et,it].map((e=>e.grammar))).sepBy(xe.reg(/\s*\,\s*/)),xe.reg(/\s*\)/)).map((([e,t])=>{const i=new this(t);return i.lookbehind=e,i})))).label("FormatTextEntity")}doSerialize(e=!1,t="",i=this.constructor,s=i.printKey,n=i.keySeparator,r=i.attributeSeparator,a=i.wrap){const o=i.attributeSeparator;return this.lookbehind+"("+this.values.map((t=>t.serialize(e))).join(o)+(i.trailing?o:"")+")"}toString(){const e=this.values?.[0]?.toString();if(!e)return"";const t=this.values.slice(1).map((e=>e?.valueOf()));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 s=-(1n<<63n)&&e<1n<<63n&&(this._value=e)}constructor(e=0n){super(),this.value=BigInt(e)}static createGrammar(){return xe.numberBigInteger.map((e=>new this(e)))}serialize(e=!1,t="",i=this.constructor){let s=this.value.toString();return i.serialized&&(s=`"${s}"`),s}valueOf(){return this.value}toString(){return this.value.toString()}}class nt extends Pe{static _quotedParser=xe.regArray(new RegExp(`'"(${Me.Regex.InsideString.source})"'|'(${Me.Regex.InsideSingleQuotedString.source})'`)).map((([e,t,i])=>t??i));static typeReference=xe.reg(new RegExp(Me.Regex.Path.source+"|"+Me.symbol.getParser().regexp.source));static fullReferenceGrammar=this.createFullReferenceGrammar();static grammar=this.createGrammar();#u;get type(){return this.#u}set type(e){this.#u=e}#B;get path(){return this.#B}set path(e){this.#B=e}#G;#H;get full(){return this.#H}set full(e){this.#H=e}constructor(e="None",t="",i=null){super(),this.#u=e,this.#B=t,this.#H=i??(this.type.includes("/")||this.path?`"${this.type+(this.path?`'${this.path}'`:"")}"`:this.type)}static createGrammar(){return xe.alt(this.createFullReferenceSerializedGrammar(),this.createFullReferenceGrammar(),this.createTypeReferenceGrammar()).label("ObjectReferenceEntity")}static createFullReferenceGrammar(){return xe.regArray(new RegExp("("+this.typeReference.getParser().regexp.source+")(?:"+this._quotedParser.getParser().parser.regexp.source+")")).map((([e,t,...i])=>new this(t,i.find((e=>e)),e)))}static createFullReferenceSerializedGrammar(){return xe.regArray(new RegExp('"('+Me.Regex.InsideString.source+"?)(?:'("+Me.Regex.InsideSingleQuotedString.source+"?)')?\"")).map((([e,t,i])=>new this(t,i,e)))}static createTypeReferenceGrammar(){return this.typeReference.map((e=>new this(e,"",e)))}static createNoneInstance(){return new nt("None","","None")}getName(e=!1){return ae.getNameFromPath(this.path.replace(/_C$/,""),e)}doSerialize(e=!1){return e?(void 0===this.#G&&(this.#G=ae.escapeString(this.#H,!1)),this.#G):this.full}equals(e){return e instanceof nt&&(this.type==e.type&&this.path==e.path)}}class rt extends Pe{static grammar=this.createGrammar();constructor(e=null,t=null){super(),this.objectName=e,this.pinGuid=t}static createGrammar(){return xe.seq(We.grammar,xe.whitespace,ze.grammar).map((([e,t,i])=>new this(e,i))).label("PinReferenceEntity")}doSerialize(){return this.objectName.serialize()+" "+this.pinGuid.serialize()}}class at extends Pe{static attributes={...super.attributes,MemberParent:nt,MemberName:qe,MemberGuid:ze};static grammar=this.createGrammar();constructor(e){super(e),this.MemberParent,this.MemberName,this.MemberGuid}static createGrammar(){return Me.createEntityGrammar(this,Me.commaSeparation,0,0)}}class ot extends Pe{static attributes={...super.attributes,PinCategory:qe.withDefault(),PinSubCategory:qe,PinSubCategoryObject:nt,PinSubCategoryMemberReference:at,ContainerType:We,bIsReference:ke,bIsConst:ke,bIsWeakPointer:ke,bIsUObjectWrapper:ke,bSerializeAsSinglePrecisionFloat:ke};static grammar=this.createGrammar();constructor(e={}){super(e),this.PinCategory,this.PinSubCategory,this.PinSubCategoryObject,this.PinSubCategoryMemberReference,this.ContainerType,this.bIsReference,this.bIsConst,this.bIsWeakPointer,this.bIsUObjectWrapper,this.bIsUObjectWrapper,this.bSerializeAsSinglePrecisionFloat}static createGrammar(){return Me.createEntityGrammar(this).label("PinTypeEntity")}copyTypeFrom(e){for(const t of this.keys)void 0!==e[t]&&(this[t]=e[t])}}class lt extends Pe{static attributes={...super.attributes,X:De.withDefault(),Y:De.withDefault()};static grammar=this.createGrammar();constructor(e){super(e),this.X,this.Y}static createGrammar(){return Me.createEntityGrammar(this,Me.commaSeparation,1).label("Vector2DEntity")}toArray(){return[this.X.valueOf(),this.Y.valueOf()]}}class ut extends lt{static grammar=this.createGrammar();static createGrammar(){return xe.alt(xe.regArray(new RegExp(/X\s*=\s*/.source+"(?"+Me.numberRegexSource+")\\s+"+/Y\s*=\s*/.source+"(?"+Me.numberRegexSource+")")).map((({groups:{x:e,y:t}})=>new this({X:new lt.attributes.X(e),Y:new lt.attributes.Y(t)}))),lt.grammar.map((e=>new this({X:e.X,Y:e.Y})))).label("RBSerializationVector2DEntity")}}class ct extends Pe{static attributes={...super.attributes,R:De.withDefault(),P:De.withDefault(),Y:De.withDefault()};static grammar=this.createGrammar();constructor(e){super(e),this.R,this.P,this.Y}static createGrammar(){return Me.createEntityGrammar(this,Me.commaSeparation,1).label("RotatorEntity")}getRoll(){return this.R}getPitch(){return this.P}getYaw(){return this.Y}}class ht extends ct{static attributeSeparator=", ";static grammar=this.createGrammar();static createGrammar(){return xe.alt(xe.regArray(new RegExp(`(${De.numberRegexSource})`+String.raw`\s*,\s*`+`(${De.numberRegexSource})`+String.raw`\s*,\s*`+`(${De.numberRegexSource})`)).map((([e,t,i,s,n,r,a])=>new this({R:new ct.attributes.R(r,a?.length),P:new ct.attributes.P(t,i?.length),Y:new ct.attributes.Y(s,n?.length)}))),ct.grammar.map((e=>new this({R:e.R,P:e.P,Y:e.Y})))).label("SimpleSerializationRotatorEntity")}doSerialize(){const e=this.constructor.attributeSeparator;return this.P.serialize()+e+this.Y.serialize()+e+this.R.serialize()+(this.trailing?e:"")}}class pt extends lt{static attributeSeparator=", ";static grammar=this.createGrammar();static createGrammar(){return xe.alt(xe.regArray(new RegExp(`(${De.numberRegexSource})`+String.raw`\s*,\s*`+`(${De.numberRegexSource})`)).map((([e,t,i,s,n])=>new this({X:new lt.attributes.X(t,i?.length),Y:new lt.attributes.Y(s,n?.length)}))),lt.grammar.map((e=>new this({X:e.X,Y:e.Y})))).label("SimpleSerializationVector2DEntity")}doSerialize(){const e=this.constructor.attributeSeparator;return this.X.serialize()+e+this.Y.serialize()+(this.trailing?e:"")}}class dt extends Pe{static attributes={...super.attributes,X:De.withDefault(),Y:De.withDefault(),Z:De.withDefault(),W:De.withDefault()};static grammar=this.createGrammar();constructor(e){super(e),this.X,this.Y,this.Z,this.W}static createGrammar(){return Me.createEntityGrammar(this,Me.commaSeparation,1).label("Vector4DEntity")}toArray(){return[this.X.valueOf(),this.Y.valueOf(),this.Z.valueOf(),this.W.valueOf()]}}class mt extends dt{static grammar=this.createGrammar();static createGrammar(){return xe.alt(xe.regArray(new RegExp(`(${Me.numberRegexSource})`+String.raw`\s*,\s*`+`(${Me.numberRegexSource})`+String.raw`\s*,\s*`+`(${Me.numberRegexSource})`+String.raw`\s*,\s*`+`(${Me.numberRegexSource})`)).map((([e,t,i,s,n])=>new this({X:new dt.attributes.X(t),Y:new dt.attributes.Y(i),Z:new dt.attributes.Z(s),W:new dt.attributes.W(n)}))),dt.grammar)}}class gt extends $e{static allowShortSerialization=!1;static attributeSeparator=", ";static grammar=this.createGrammar();static createGrammar(){return xe.alt(xe.regArray(new RegExp(`(${De.numberRegexSource})`+(this.allowShortSerialization?"(?:":"")+String.raw`\s*,\s*`+`(${De.numberRegexSource})`+String.raw`\s*,\s*`+`(${De.numberRegexSource})`+(this.allowShortSerialization?")?":""))).map((([e,t,i,s,n,r,a])=>new this({X:new $e.attributes.X(t,i?.length),Y:new $e.attributes.Y(s,n?.length),Z:new $e.attributes.Z(r,a?.length)}))),$e.grammar.map((e=>new this({X:e.X,Y:e.Y,Z:e.Z}))))}static flagAllowShortSerialization(e=!0){const t=this.asUniqueClass();return e!==t.allowShortSerialization&&(t.allowShortSerialization=e,t.grammar=t.createGrammar()),t}doSerialize(){const e=this.constructor.attributeSeparator;return this.X.serialize()+e+this.Y.serialize()+e+this.Z.serialize()+(this.trailing?e:"")}}class bt extends Pe{static lookbehind="Pin";static#V={bool:ke,byte:Xe,enum:Qe,exec:qe,int:Fe,int64:st,name:qe,real:De,string:qe,[re.paths.linearColor]:Ie,[re.paths.niagaraPosition]:$e,[re.paths.rotator]:ct,[re.paths.vector]:$e,[re.paths.vector2D]:lt,[re.paths.vector4f]:dt};static#R={enum:Je,rg:ut,[re.paths.niagaraPosition]:gt.flagAllowShortSerialization(),[re.paths.rotator]:ht,[re.paths.vector]:gt,[re.paths.vector2D]:pt,[re.paths.vector3f]:gt,[re.paths.vector4f]:mt};static attributes={PinId:ze.withDefault(),PinName:qe.withDefault(),PinFriendlyName:Le.accepting(tt,it,et,qe),PinToolTip:qe,Direction:qe,PinType:ot.withDefault().flagInlined(),LinkedTo:Re.of(rt).withDefault().flagSilent(),SubPins:Re.of(rt),ParentPin:rt,DefaultValue:Ze.from((e=>e.getEntityType(!0)?.flagSerialized()??qe)),AutogeneratedDefaultValue:qe,DefaultObject:nt,PersistentGuid:ze,bHidden:ke,bNotConnectable:ke,bDefaultValueIsReadOnly:ke,bDefaultValueIsIgnored:ke,bAdvancedView:ke,bOrphanedPin:ke};static grammar=this.createGrammar();#_=!1;set recomputesNodeTitleOnChange(e){this.#_=e}get recomputesNodeTitleOnChange(){return this.#_}#z=null;get objectEntity(){try{return this.#z}catch(e){return null}}set objectEntity(e){this.#z=e}#F;get pinIndex(){return this.#F}set pinIndex(e){this.#F=e}constructor(e={}){super(e),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,this.objectEntity}static createGrammar(){return Me.createEntityGrammar(this)}static fromLegacyObject(e){return new bt(e)}getType(){const e=this.PinType.PinCategory?.toString().toLocaleLowerCase();if("struct"===e||"class"===e||"object"===e||"type"===e)return this.PinType.PinSubCategoryObject?.path;if(this.isEnum())return"enum";if(this.objectEntity?.isPcg()){const e=this.objectEntity.getPcgSubobject(),t=this.isInput()?e.InputPins?.valueOf()[this.pinIndex]:e.OutputPins?.valueOf()[this.pinIndex];if(t){const i=e[re.subObjectAttributeNameFromReference(t,!0)];let s=i.Properties?.AllowedTypes?.toString()??"";if(""==s&&(s=this.PinType.PinCategory??"",""==s&&(s="Any")),s)return!1!==i.Properties.bAllowMultipleData?.valueOf()&&!1!==i.Properties.bAllowMultipleConnections?.valueOf()&&(s+="[]"),s}}if("optional"===e){const e=this.PinType.PinSubCategory?.toString();switch(e){case"red":return"real";case"rg":return"rg";case"rgb":return re.paths.vector;case"rgba":return re.paths.linearColor;default:return e}}return e}getEntityType(e=!1){const t=this.getType(),i=bt.#V[t],s=bt.#R[t];return e&&void 0!==s?s:i}pinTitle(){return Ke(this)}copyTypeFrom(e){this.PinType=e.PinType}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===re.paths.enum||e===re.paths.userDefinedEnum||"enum"===e?.toLowerCase()}isExecution(){return"exec"===this.PinType.PinCategory.toString()}isHidden(){return this.bHidden?.valueOf()}isInput(){return!this.isHidden()&&"EGPD_Output"!=this.Direction?.toString()}isOutput(){return!this.isHidden()&&"EGPD_Output"==this.Direction?.toString()}isLinked(){return this.LinkedTo?.length>0??!1}linkTo(e,t){const i=this.LinkedTo.values?.some((i=>i.objectName.toString()==e&&i.pinGuid.toString()==t.PinId.toString()));return!i&&(this.LinkedTo.values.push(new rt(new We(e),t.PinId)),!0)}unlinkFrom(e,t){const i=this.LinkedTo.values?.findIndex((i=>i.objectName.toString()==e&&i.pinGuid.toString()==t.PinId.toString()));return i>=0&&(this.LinkedTo.values.splice(i,1),0===this.LinkedTo.length&&void 0===bt.attributes.LinkedTo.default&&(this.LinkedTo.values=[]),!0)}getSubCategory(){return this.PinType.PinSubCategoryObject?.path}pinColor(){return function(e){if("mask"===e.PinType.PinCategory?.toString()){const t=Ue[e.PinType.PinSubCategory?.toString()];if(t)return t}else if("optional"===e.PinType.PinCategory?.toString())return Ye;return Ue[e.getType()]??Ue[e.PinType.PinCategory?.toString().toLowerCase()]??Ue.default}(this)}}const vt=e=>e.PinName?.toString().match(/^\s*([A-Z])\s*$/)?.[1]?.charCodeAt(0)-"A".charCodeAt(0);class ft extends Pe{static attributes={...super.attributes,MacroGraph:nt,GraphBlueprint:nt,GraphGuid:ze};static grammar=this.createGrammar();constructor(e){super(e),this.MacroGraph,this.GraphBlueprint,this.GraphGuid}static createGrammar(){return Me.createEntityGrammar(this)}getMacroName(){const e=this.MacroGraph.path.search(":");return this.MacroGraph.path.substring(e+1)}}class yt extends Pe{static grammar=this.createGrammar();static createGrammar(){return xe.reg(new RegExp(String.raw`\(${xe.whitespaceInlineOpt.getParser().regexp.source}\)`)).map((e=>new this)).label("NullEntity")}serialize(e=!1,t="",i=this.constructor){let s="()";return i.serialized&&(s=`"${s}"`),s}}class wt extends Pe{static attributes={...super.attributes,ScriptVariable:nt,OriginalChangeId:ze};static grammar=this.createGrammar();constructor(e={}){super(e),this.ScriptVariable,this.OriginalChangeId}static createGrammar(){return Me.createEntityGrammar(this).label("ScriptVariableEntity")}}class St extends bt{static attributes={...super.attributes,PinId:ze};static grammar=this.createGrammar();static createGrammar(){return xe.seq(xe.reg(new RegExp(`(${Me.Regex.Symbol.source}\\s*)\\(\\s*`),1),Me.createAttributeGrammar(this).sepBy(Me.commaSeparation),xe.reg(/\s*(?:,\s*)?\)/)).map((([e,t,i])=>{e??="";let s={};return e.length&&(s.lookbehind=e),t.forEach((e=>e(s))),new this(s)})).label("UnknownPinEntity")}}class Et extends Pe{static attributes={...super.attributes,MemberScope:qe,MemberName:qe.withDefault(),MemberGuid:ze,bSelfContext:ke};static grammar=this.createGrammar();constructor(e){super(e),this.MemberScope,this.MemberName,this.MemberGuid,this.bSelfContext}static createGrammar(){return Me.createEntityGrammar(this).label("VariableReferenceEntity")}}class Ct extends Pe{#j=!1;get exported(){return this.#j}set exported(e){this.#j=e}static#U=/^(\w+?)(?:_(\d+))?$/;static printKey=e=>e.startsWith(re.subObjectAttributeNamePrefix)?"":e;static attributeSeparator="\n";static wrap=this.notWrapped;static trailing=!0;static attributes={...super.attributes,Class:nt,Name:qe,Archetype:nt,ExportPath:nt,ObjectRef:nt,BlueprintElementType:nt,BlueprintElementInstance:nt,ConstA:Oe.of(De),ConstB:Oe.of(De),PinTags:Re.of(yt).flagInlined(),PinNames:Re.of(qe).flagInlined(),AxisKey:We,InputAxisKey:We,InputName:qe,InputType:We,NumAdditionalInputs:je,bIsPureFunc:ke,bIsConstFunc:ke,bIsCaseSensitive:ke,VariableReference:Et,SelfContextInfo:We,DelegatePropertyName:qe,DelegateOwnerClass:nt,ComponentPropertyName:qe,EventReference:at,FunctionReference:at,FunctionScript:nt,CustomFunctionName:qe,TargetType:nt,MacroGraphReference:ft,Enum:nt,EnumEntries:Re.of(qe).flagInlined(),InputKey:We,OpName:qe,CachedChangeId:ze,FunctionDisplayName:qe,AddedPins:Re.of(St).withDefault().flagInlined().flagSilent(),ChangeId:ze,MaterialFunction:nt,bOverrideFunction:ke,bInternalEvent:ke,bConsumeInput:ke,bExecuteWhenPaused:ke,bOverrideParentBinding:ke,bControl:ke,bAlt:ke,bShift:ke,bCommand:ke,CommentColor:Ie,bCommentBubbleVisible_InDetailsPanel:ke,bColorCommentBubble:ke,ProxyFactoryFunctionName:qe,ProxyFactoryClass:nt,ProxyClass:nt,StructType:nt,MaterialExpression:nt,MaterialExpressionComment:nt,MoveMode:We,TimelineName:qe,TimelineGuid:ze,SizeX:Oe.of(Fe),SizeY:Oe.of(Fe),Text:Oe.of(qe),MaterialExpressionEditorX:Oe.of(Fe),MaterialExpressionEditorY:Oe.of(Fe),NodeTitle:qe,NodeTitleColor:Ie,PositionX:Oe.of(Fe),PositionY:Oe.of(Fe),SettingsInterface:nt,PCGNode:nt,HiGenGridSize:We,Operation:We,NodePosX:Fe,NodePosY:Fe,NodeHeight:Fe,NodeWidth:Fe,Graph:nt,SubgraphInstance:qe,InputPins:Re.of(nt).flagInlined(),OutputPins:Re.of(nt).flagInlined(),bExposeToLibrary:ke,bCanRenameNode:ke,bCommentBubblePinned:ke,bCommentBubbleVisible:ke,NodeComment:qe,AdvancedPinDisplay:We,DelegateReference:Et,EnabledState:We,NodeGuid:ze,ErrorType:Fe,ErrorMsg:qe,ScriptVariables:Re.of(wt),Node:Oe.of(nt),ExportedNodes:qe,CustomProperties:Re.of(Le.accepting(bt,St)).withDefault().flagSilent()};static customPropertyGrammar=xe.seq(xe.reg(/CustomProperties\s+/),this.attributes.CustomProperties.type.grammar).map((([e,t])=>e=>{(e.CustomProperties??=new this.attributes.CustomProperties).values.push(t)}));static inlinedArrayEntryGrammar=xe.seq(xe.alt(Me.symbolQuoted.map((e=>[e,!0])),Me.symbol.map((e=>[e,!1]))),xe.reg(new RegExp(String.raw`\s*\(\s*(\d+)\s*\)\s*\=\s*`),1).map(Number)).chain((([[e,t],i])=>(this.attributes[e]?.grammar??Pe.unknownEntityGrammar).map((s=>n=>{if(void 0===n[e]){let i=Re;t!=i.quoted&&(i=i.flagQuoted(t)),i.inlined||(i=i.flagInlined()),n[e]=new i}n[e].values[i]=s}))));static grammar=this.createGrammar();static grammarMultipleObjects=xe.seq(xe.whitespaceOpt,this.grammar,xe.seq(xe.whitespace,this.grammar).map((([e,t])=>t)).many(),xe.whitespaceOpt).map((([e,t,i,s])=>[t,...i]));constructor(e={}){if("NodePosX"in e!="NodePosY"in e){const t=Object.entries(e),[i,s]="NodePosX"in e?["NodePosY",Object.keys(e).indexOf("NodePosX")+1]:["NodePosX",Object.keys(e).indexOf("NodePosY")];t.splice(s,0,[i,new Fe(0)]),e=Object.fromEntries(t)}super(e),this.AddedPins,this.AdvancedPinDisplay,this.Archetype,this.AxisKey,this.bIsPureFunc,this.BlueprintElementInstance,this.ConstA,this.ConstB,this.BlueprintElementType,this.Class,this.CommentColor,this.ComponentPropertyName,this.CustomFunctionName,this.CustomProperties,this.DelegatePropertyName,this.DelegateReference,this.EnabledState,this.Enum,this.EnumEntries,this.EventReference,this.ExportedNodes,this.ExportPath,this.FunctionDisplayName,this.FunctionReference,this.FunctionScript,this.Graph,this.HiGenGridSize,this.InputAxisKey,this.InputKey,this.InputName,this.InputPins,this.InputType,this.MacroGraphReference,this.MaterialExpression,this.MaterialExpressionComment,this.MaterialExpressionEditorX,this.MaterialExpressionEditorY,this.MaterialFunction,this.Name,this.Node,this.NodeComment,this.NodeHeight,this.NodePosX,this.NodePosY,this.NodeTitle,this.NodeTitleColor,this.NodeWidth,this.NumAdditionalInputs,this.ObjectRef,this.Operation,this.OpName,this.OutputPins,this.PCGNode,this.PinTags,this.PinNames,this.PositionX,this.PositionY,this.ProxyFactoryFunctionName,this.ScriptVariables,this.SettingsInterface,this.SizeX,this.SizeY,this.StructType,this.SubgraphInstance,this.TargetType,this.Text,this.Text,this.VariableReference,this.Pins instanceof Re&&this.Pins.valueOf().forEach((e=>{const t=this[re.subObjectAttributeNameFromReference(e,!0)];if(t){const e=bt.fromLegacyObject(t);e.LinkedTo=new bt.attributes.LinkedTo,this.getCustomproperties(!0).push(e),this.CustomProperties.ignored=!0}}));const t=this.getMaterialSubobject();if(t){const e=t;if(void 0!==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),this.getType()===re.paths.materialExpressionComponentMask){const t=re.rgba.map((e=>{const t=this.getPinEntities().find((t=>t.PinName.toString()===e));return t.recomputesNodeTitleOnChange=!0,t}));e.keys=[...re.rgba,...e.keys];const i=Oe.of(ke).withDefault().flagSilent();e.R=new i((()=>t[0].DefaultValue)),e.G=new i((()=>t[1].DefaultValue)),e.B=new i((()=>t[2].DefaultValue)),e.A=new i((()=>t[3].DefaultValue))}else if(this.getType()===re.paths.materialExpressionSubtract){const t=Oe.of(De.withPrecision(6)).withDefault((()=>new Oe((()=>new De(1))))).flagSilent(),i=this.getCustomproperties().find((e=>"A"===e.PinName?.toString())),s=this.getCustomproperties().find((e=>"B"===e.PinName?.toString()));(i||s)&&(e.keys=["ConstA","ConstB",...e.keys],i&&(i.recomputesNodeTitleOnChange=!0,e.ConstA=new t((()=>i.DefaultValue))),s&&(s.recomputesNodeTitleOnChange=!0,e.ConstB=new t((()=>s.DefaultValue))))}}const i=this.getPcgSubobject();i&&(i.PositionX&&(i.PositionX.getter=()=>this.NodePosX),i.PositionY&&(i.PositionY.getter=()=>this.NodePosY),i.getSubobjects().forEach((e=>{if(void 0!==e.Node){const t=e.Node.getter();t.type===this.PCGNode.type&&t.path===`${this.Name}.${this.PCGNode.path}`&&(e.Node.getter=()=>new nt(this.PCGNode.type,`${this.Name}.${this.PCGNode.path}`,t.full))}})));let s=0,n=0;this.getCustomproperties().forEach(((e,t)=>{e.objectEntity=this,e.pinIndex=e.isInput()?s++:e.isOutput()?n++:t}))}static createGrammar(){return xe.seq(xe.reg(/Begin +Object/),xe.seq(xe.whitespace,xe.alt(this.createSubObjectGrammar(),this.customPropertyGrammar,Me.createAttributeGrammar(this,xe.reg(Me.Regex.MultipleWordsSymbols)),Me.createAttributeGrammar(this,Me.attributeNameQuoted,void 0,((e,t,i)=>{ae.objectSet(e,[...t,"quoted"],!0)})),this.inlinedArrayEntryGrammar)).map((([e,t])=>t)).many(),xe.reg(/\s+End +Object/)).map((([e,t,i])=>{const s={};return t.forEach((e=>e(s))),new this(s)})).label("ObjectEntity")}static createSubObjectGrammar(){return xe.lazy((()=>this.grammar)).map((e=>t=>{e.trailing=!1,t[re.subObjectAttributeNameFromEntity(e)]=e}))}#Y;getClass(){if(!this.#Y&&(this.#Y=(this.Class?.path?this.Class.path:this.Class?.type)??this.ExportPath?.type??"",this.#Y&&!this.#Y.startsWith("/"))){let e=Object.values(re.paths).find((e=>e.endsWith("."+this.#Y)));e&&(this.#Y=e)}return this.#Y}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.toString()}getNameAndCounter(){const e=this.getObjectName().match(Ct.#U);return e?[e[1]??"",parseInt(e[2]??"0")]:["",0]}getCounter(){return this.getNameAndCounter()[1]}getNodeWidth(){return this.NodeWidth??this.isComment()?re.defaultCommentWidth:void 0}setNodeWidth(e){this.NodeWidth||(this.NodeWidth=new Fe),this.NodeWidth.value=e}getNodeHeight(){return this.NodeHeight??this.isComment()?re.defaultCommentHeight:void 0}setNodeHeight(e){this.NodeHeight||(this.NodeHeight=new Fe),this.NodeHeight.value=e}getNodePosX(){return this.NodePosX?.value??0}setNodePosX(e){this.NodePosX||(this.NodePosX=new Fe),this.NodePosX.value=Math.round(e)}getNodePosY(){return this.NodePosY?.value??0}setNodePosY(e){this.NodePosY||(this.NodePosY=new Fe),this.NodePosY.value=Math.round(e)}getCustomproperties(e=!1){return this.CustomProperties.values}getPinEntities(){return this.getCustomproperties().filter((e=>e.constructor===bt))}getSubobjects(){return Object.keys(this).filter((e=>e.startsWith(re.subObjectAttributeNamePrefix))).flatMap((e=>[this[e],...this[e].getSubobjects()]))}switchTarget(){const e=this.getClass().match(re.switchTargetPattern);if(e)return e[1]}isEvent(){switch(this.getClass()){case re.paths.actorBoundEvent:case re.paths.componentBoundEvent:case re.paths.customEvent:case re.paths.event:case re.paths.inputAxisKeyEvent:case re.paths.inputVectorAxisEvent:return!0}return!1}isComment(){switch(this.getClass()){case re.paths.comment:case re.paths.materialGraphNodeComment:return!0}return!1}isMaterial(){return this.getClass()===re.paths.materialGraphNode}getMaterialSubobject(){const e=this.MaterialExpression??this.MaterialExpressionComment;return e?this[re.subObjectAttributeNameFromReference(e,!0)]:null}isPcg(){return this.getClass()===re.paths.pcgEditorGraphNode||null!=this.getPcgSubobject()}isNiagara(){return this.Class&&(this.Class.type?this.Class.type:this.Class.path)?.startsWith("/Script/NiagaraEditor.")}getPcgSubobject(){const e=this.PCGNode;return e?this[re.subObjectAttributeNameFromReference(e,!0)]:null}getSettingsObject(){const e=this.SettingsInterface;return e?this[re.subObjectAttributeNameFromReference(e,!0)]:null}getSubgraphObject(){const e=this.SubgraphInstance;return e?this[re.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.toString()))}nodeColor(){return function(e){switch(e.getType()){case re.paths.materialExpressionConstant2Vector:case re.paths.materialExpressionConstant3Vector:case re.paths.materialExpressionConstant4Vector:return re.nodeColors.yellow;case re.paths.materialExpressionFunctionInput:case re.paths.materialExpressionTextureCoordinate:case re.paths.materialExpressionWorldPosition:case re.paths.pcgEditorGraphNodeInput:case re.paths.pcgEditorGraphNodeOutput:return re.nodeColors.red;case re.paths.makeStruct:return re.nodeColors.darkBlue;case re.paths.materialExpressionMaterialFunctionCall:return re.nodeColors.blue;case re.paths.materialExpressionTextureSample:return re.nodeColors.darkTurquoise}switch(e.getClass()){case re.paths.callFunction:return e.bIsPureFunc?.valueOf()?re.nodeColors.green:re.nodeColors.blue;case re.paths.niagaraNodeFunctionCall:return re.nodeColors.darkerBlue;case re.paths.dynamicCast:return re.nodeColors.turquoise;case re.paths.inputDebugKey:case re.paths.inputKey:return re.nodeColors.red;case re.paths.createDelegate:case re.paths.enumLiteral:case re.paths.makeArray:case re.paths.makeMap:case re.paths.materialGraphNode:case re.paths.select:return re.nodeColors.green;case re.paths.executionSequence:case re.paths.ifThenElse:case re.paths.macro:case re.paths.multiGate:return re.nodeColors.gray;case re.paths.functionEntry:case re.paths.functionResult:return re.nodeColors.violet;case re.paths.timeline:return re.nodeColors.yellow}if(e.switchTarget())return re.nodeColors.lime;if(e.isEvent())return re.nodeColors.red;if(e.isComment())return(e.CommentColor?e.CommentColor:Ie.getWhite()).toDimmedColor().toCSSRGBValues();const t=e.getPcgSubobject();if(t){if(t.NodeTitleColor)return t.NodeTitleColor.toDimmedColor(.1).toCSSRGBValues();switch(e.PCGNode?.getName(!0)){case"Branch":case"Select":return re.nodeColors.intenseGreen}}return e.bIsPureFunc?.valueOf()?re.nodeColors.green:re.nodeColors.blue}(this)}nodeIcon(){return function(e){if(e.isMaterial()||e.isPcg()||e.isNiagara())return null;switch(e.getType()){case re.paths.addDelegate:case re.paths.asyncAction:case re.paths.callDelegate:case re.paths.clearDelegate:case re.paths.createDelegate:case re.paths.functionEntry:case re.paths.functionResult:case re.paths.removeDelegate:return le.node;case re.paths.customEvent:return le.event;case re.paths.doN:return le.doN;case re.paths.doOnce:return le.doOnce;case re.paths.dynamicCast:return le.cast;case re.paths.enumLiteral:return le.enum;case re.paths.event:return le.event;case re.paths.executionSequence:case re.paths.multiGate:return le.sequence;case re.paths.flipflop:return le.flipflop;case re.paths.forEachElementInEnum:case re.paths.forLoop:case re.paths.forLoopWithBreak:case re.paths.whileLoop:return le.loop;case re.paths.forEachLoop:case re.paths.forEachLoopWithBreak:return le.forEachLoop;case re.paths.ifThenElse:return le.branchNode;case re.paths.isValid:return le.questionMark;case re.paths.makeArray:return le.makeArray;case re.paths.makeMap:return le.makeMap;case re.paths.makeSet:return le.makeSet;case re.paths.makeStruct:return le.makeStruct;case re.paths.metasoundEditorGraphExternalNode:return le.metasoundFunction;case re.paths.select:return le.select;case re.paths.spawnActorFromClass:return le.spawnActor;case re.paths.timeline:return le.timer}if(e.switchTarget())return le.switch;if(Ve(e).startsWith("Break"))return le.breakStruct;if(e.getClass()===re.paths.macro)return le.macro;const t=e.getHIDAttribute()?.toString();return t?t.includes("Mouse")?le.mouse:t.includes("Gamepad_Special")?le.keyboard:t.includes("Gamepad")||t.includes("Steam")?le.gamepad:t.includes("Touch")?le.touchpad:le.keyboard:e.getDelegatePin()?le.event:e.ObjectRef?.type===re.paths.ambientSound?le.sound:le.functionSymbol}(this)}additionalPinInserter(){return function(e){let t,i,s,n,r;switch(e.getType()){case re.paths.commutativeAssociativeBinaryOperator:case re.paths.promotableOperator:switch(r=e.FunctionReference?.MemberName?.toString(),r){default:if(!(r?.startsWith("Add_")||r?.startsWith("Subtract_")||r?.startsWith("Multiply_")||r?.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":t??=()=>e.getPinEntities().filter((e=>e.isInput())),i??=vt,s??=(i,s=-1,n=-1)=>{const r=String.fromCharCode(i>=0?i:n+"A".charCodeAt(0)+1);return e.NumAdditionalInputs=new je(t().length-1),r}}break;case re.paths.executionSequence:n??="Then";case re.paths.multiGate:n??="Out",t??=()=>e.getPinEntities().filter((e=>e.isOutput())),i??=e=>Number(e.PinName?.toString().match(new RegExp(String.raw`^\s*${n}[_\s]+(\d+)\s*$`,"i"))?.[1]),s??=(e,t=-1,i=-1,s)=>`${n} ${e>=0?e:t>0?`${n} 0`:i+1}`;break;case re.paths.switchInteger:t??=()=>e.getPinEntities().filter((e=>e.isOutput())),i??=e=>Number(e.PinName?.toString().match(/^\s*(\d+)\s*$/)?.[1]),s??=(e,t=-1,i=-1,s)=>(e<0?i+1:e).toString();break;case re.paths.switchGameplayTag:s??=(t,i=-1,s=-1,n)=>{const r=`Case_${t>=0?t:i>0?"0":s+1}`;return e.PinNames??=new Re,e.PinNames.valueOf().push(new qe(r)),delete e.PinTags.valueOf()[e.PinTags.length-1],e.PinTags.valueOf()[e.PinTags.length]=null,r};case re.paths.switchName:case re.paths.switchString:t??=()=>e.getPinEntities().filter((e=>e.isOutput())),i??=e=>Number(e.PinName.toString().match(/^\s*Case[_\s]+(\d+)\s*$/i)?.[1]),s??=(t,i=-1,s=-1,n)=>{const r=`Case_${t>=0?t:i>0?"0":s+1}`;return e.PinNames??=new Re,e.PinNames.valueOf().push(new qe(r)),r}}if(t)return()=>{let n=Number.MAX_SAFE_INTEGER,r=Number.MIN_SAFE_INTEGER,a=[];const o=t().reduce(((e,t)=>{const s=i(t);if(isNaN(s)){if(void 0===e)return t}else if(a.push(s),n=Math.min(s,n),s>r)return r=s,t;return e}),void 0);if(n!==Number.MAX_SAFE_INTEGER&&r!==Number.MIN_SAFE_INTEGER||(n=void 0,r=void 0),!o)return null;a.sort(((e,t)=>e{const t=e-l>1;return l=e,t}));const c=new bt(o);return c.PinId=new ze,c.PinName=new qe(s(u,n,r,c)),c.PinToolTip=void 0,c.DefaultValue&&(c.DefaultValue=new c.DefaultValue.constructor),e.getCustomproperties(!0).push(c),c}}(this)}showProperty(e){switch(e){case"Class":case"Name":case"Archetype":case"ExportPath":case"CustomProperties":return!1}return super.showProperty(e)}doSerialize(e=!1,t="",i=this.constructor,s=i.printKey,n=i.keySeparator,r=i.attributeSeparator,a=i.wrap){const o=t+re.indentation,l=this.trailing;this.trailing=!1;const u=super.doSerialize(e,o,i,s,n,r,a);return this.trailing=l,t+"Begin Object"+(this.Class?.type||this.Class?.path?` Class${n}${this.Class.serialize(e)}`:"")+(this.Name?` Name${n}${this.Name.serialize(e)}`:"")+(this.Archetype?` Archetype${n}${this.Archetype.serialize(e)}`:"")+(this.ExportPath?.type||this.ExportPath?.path?` ExportPath${n}${this.ExportPath.serialize(e)}`:"")+(u?r+u:"")+(!0!==i.attributes.CustomProperties.ignored&&!0!==this.CustomProperties.ignored?this.getCustomproperties().map((t=>r+o+s("CustomProperties ")+t.serialize(e))).join(""):"")+r+t+"End Object"+(this.trailing?r:"")}}class Nt extends Ct{constructor(e={},t=void 0){e.Class=new nt(re.paths.knot),e.Name=new Ct.attributes.Name("K2Node_Knot");const i=new bt({PinName:new bt.attributes.PinName("InputPin")}),s=new bt({PinName:new bt.attributes.PinName("OutputPin"),Direction:new bt.attributes.Direction("EGPD_Output")});t&&(i.copyTypeFrom(t),s.copyTypeFrom(t)),e.CustomProperties=new Ct.attributes.CustomProperties([i,s]),super(e)}}class xt{#K;get target(){return this.#K}#e;get blueprint(){return this.#e}consumeEvent;options;listenHandler=()=>this.listenEvents();unlistenHandler=()=>this.unlistenEvents();constructor(e,t,i={}){i.consumeEvent??=!1,i.listenOnFocus??=!1,i.unlistenOnTextEdit??=!1,this.#K=e,this.#e=t,this.consumeEvent=i.consumeEvent,this.options=i}setup(){this.options.listenOnFocus&&(this.blueprint.addEventListener(re.focusEventName.begin,this.listenHandler),this.blueprint.addEventListener(re.focusEventName.end,this.unlistenHandler)),this.options.unlistenOnTextEdit&&(this.blueprint.addEventListener(re.editTextEventName.begin,this.unlistenHandler),this.blueprint.addEventListener(re.editTextEventName.end,this.listenHandler)),this.blueprint.focused&&this.listenEvents()}cleanup(){this.unlistenEvents(),this.blueprint.removeEventListener(re.focusEventName.begin,this.listenHandler),this.blueprint.removeEventListener(re.focusEventName.end,this.unlistenHandler),this.blueprint.removeEventListener(re.editTextEventName.begin,this.unlistenHandler),this.blueprint.removeEventListener(re.editTextEventName.end,this.listenHandler)}listenEvents(){}unlistenEvents(){}}class Pt extends Pe{static attributes={...super.attributes,ActionName:qe,bShift:ke,bCtrl:ke,bAlt:ke,bCmd:ke,Key:We};static grammar=this.createGrammar();constructor(e){super(e),this.ActionName,this.bShift,this.bCtrl,this.bAlt,this.bCmd,this.Key}static createGrammar(){return xe.alt(We.grammar.map((e=>new this({Key:e}))),Me.createEntityGrammar(this))}}class kt extends xt{static#X=e=>{};#q;pressedKey="";constructor(e,t,i={},s=kt.#X,n=kt.#X){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 Pt)return e;if(e.constructor===String){const t=Pt.grammar.run(e);if(t.status)return t.value}throw new Error("Unexpected key value")})),super(e,t,i),this.onKeyDown=s,this.onKeyUp=n,this.#q=this.options.activationKeys??[];let r=this;this.keyDownHandler=e=>{r.#q.some((t=>(e=>e.bShift?.valueOf()||"LeftShift"==e.Key.valueOf()||"RightShift"==e.Key.valueOf())(t)==e.shiftKey&&(e=>e.bCtrl?.valueOf()||"LeftControl"==e.Key.valueOf()||"RightControl"==e.Key.valueOf())(t)==e.ctrlKey&&(e=>e.bAlt?.valueOf()||"LeftAlt"==e.Key.valueOf()||"RightAlt"==e.Key.valueOf())(t)==e.altKey&&re.Keys[t.Key.value]==e.code))&&(this.consumeEvent&&(e.preventDefault(),e.stopImmediatePropagation()),this.pressedKey=e.code,r.fire(),document.removeEventListener("keydown",r.keyDownHandler),document.addEventListener("keyup",r.keyUpHandler))},this.keyUpHandler=e=>{r.#q.some((t=>t.bShift?.valueOf()&&"Shift"==e.key||t.bCtrl?.valueOf()&&"Control"==e.key||t.bAlt?.valueOf()&&"Alt"==e.key||t.bCmd?.valueOf()&&"Meta"==e.key||re.Keys[t.Key.value]==e.code))&&(this.consumeEvent&&e.stopImmediatePropagation(),r.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 At extends xt{#Z=[0,0];get location(){return this.#Z}#W;get enablerKey(){return this.#W}#Q=!0;get enablerActivated(){return this.#Q}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.#W=i.enablerKey,this.#W.onKeyDown=()=>this.#Q=!0,this.#W.onKeyUp=()=>this.#Q=!1,this.#W.consumeEvent=!1,this.#W.listenEvents(),this.#Q=!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.#Z=[...t],this.#Z}}class Lt extends At{static#X=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.#ee),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.#ee(e)};#ee=e=>{this.options.exitAnyButton&&e.button!=this.options.clickButton||(this.consumeEvent&&e.stopImmediatePropagation(),document.removeEventListener("mouseup",this.#ee),this.unclicked())};clickedPosition=[0,0];constructor(e,t,i={},s=Lt.#X,n=Lt.#X){i.clickButton??=re.mouseClickButton,i.consumeEvent??=!0,i.exitAnyButton??=!0,i.strictTarget??=!1,super(e,t,i),this.onClick=s,this.onUnclick=n,this.listenEvents()}listenEvents(){this.target.addEventListener("mousedown",this.#J),this.options.clickButton===re.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 Mt extends At{static ignoreDbClick=e=>{};#te=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))};#ie;get onDbClick(){return this.#ie}set onDbClick(e){this.#ie=e}clickedPosition=[0,0];constructor(e,t,i={},s=Mt.ignoreDbClick){i.consumeEvent??=!0,i.strictTarget??=!1,super(e,t,i),this.#ie=s,this.listenEvents()}listenEvents(){this.target.addEventListener("dblclick",this.#te)}unlistenEvents(){this.target.removeEventListener("dblclick",this.#te)}dbclicked(e){this.onDbClick(e)}}class Tt{static deleteNodes="Delete";static duplicateNodes="(bCtrl=True,Key=D)";static enableLinkDelete="LeftAlt";static enableZoomIn=["LeftControl","RightControl"];static selectAllNodes="(bCtrl=True,Key=A)"}class It{element;get blueprint(){return this.element.blueprint}#se=[];get inputObjects(){return this.#se}initialize(e){this.element=e}createInputObjects(){return[]}setup(){this.#se.forEach((e=>e.setup()))}cleanup(){this.#se.forEach((e=>e.cleanup()))}willUpdate(e){}update(e){}render(){return G``}firstUpdated(e){}updated(e){}inputSetup(){this.#se=this.createInputObjects()}}class Ot extends It{update(e){super.update(e);const[t,i,s,n]=[Math.round(this.element.fromX),Math.round(this.element.fromY),Math.round(this.element.toX),Math.round(this.element.toY)],[r,a,o,l]=[Math.min(t,s),Math.min(i,n),Math.abs(t-s),Math.abs(i-n)];(e.has("fromX")||e.has("toX"))&&(this.element.style.left=`${r}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 Dt extends Ot{static sigmoidPositive(e,t=3.7,i=1.1){return 1-Math.exp(-((e/i)**t))}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 n=>nt[0]?t[1]:i*n+s}static c1DecreasingValue=Dt.decreasingValue(-.15,[100,15]);static c2DecreasingValue=Dt.decreasingValue(-.05,[500,130]);static c2Clamped=Dt.clampedLine([0,80],[200,40]);#ne=`ueb-id-${Math.floor(1e12*Math.random())}`;#re=e=>{const t=new Nt({},this.element.source.entity),i=Ae.getConstructor("ueb-node").newObject(t);i.setLocation(...this.blueprint.snapToGrid(...e));const s=i.template;this.blueprint.addGraphElement(i);const n=this.element.getInputPin(),r=this.element.getOutputPin();this.element.source=null,this.element.destination=null;const a=Ae.getConstructor("ueb-link").newObject(r,s.inputPin);this.blueprint.addGraphElement(a),this.element.source=s.outputPin,this.element.destination=n};createInputObjects(){const e=this.element.querySelector(".ueb-link-area");return[...super.createInputObjects(),new Mt(e,this.blueprint,void 0,(e=>{e[0]+=re.knotOffset[0],e[1]+=re.knotOffset[1],e=ae.snapToGrid(e[0],e[1],re.gridSize),this.#re(e)})),new Lt(e,this.blueprint,{enablerKey:new kt(this.blueprint,this.blueprint,{activationKeys:Tt.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,n=t?.nodeElement.getType()==re.paths.knot,r=i?.nodeElement.getType()==re.paths.knot;!n||i&&!r||(t?.isInput()&&s>e+re.distanceThreshold?this.element.source=t.nodeElement.template.outputPin:t?.isOutput()&&se+re.distanceThreshold&&(this.element.destination=i.nodeElement.template.inputPin))}const s=Math.max(Math.abs(this.element.fromX-this.element.toX),1),n=Math.max(Math.abs(this.element.fromY-this.element.toY),1),r=Math.max(s,re.linkMinWidth),a=s/r,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 G` ${this.element.linkMessageIcon||this.element.linkMessageText?G`${this.element.linkMessageIcon!==V?G`${this.element.linkMessageIcon}`:V} ${this.element.linkMessageText!==V?G`${this.element.linkMessageText}`:V}`:V}`}}class $t extends oe{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 Bt extends $t{static properties={...super.properties,dragging:{type:Boolean,attribute:"data-dragging",converter:ke.booleanConverter,reflect:!0},originatesFromInput:{type:Boolean,attribute:!1},svgPathD:{type:String,attribute:!1},linkMessageIcon:{type:String,attribute:!1},linkMessageText:{type:String,attribute:!1}};#ae;get source(){return this.#ae}set source(e){this.#oe(e,!1)}#le;get destination(){return this.#le}set destination(e){this.#oe(e,!0)}#ue=()=>this.remove();#ce=e=>this.addSourceLocation(...e.detail.value);#he=e=>this.addDestinationLocation(...e.detail.value);#pe=e=>this.setSourceLocation();#de=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 Bt;return i.initialize(e,t),i}initialize(e,t){super.initialize({},new Dt),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))}#oe(e,t){const i=()=>t?this.destination:this.source;if(i()!=e){if(i()){const e=i().getNodeElement();e.removeEventListener(re.removeEventName,this.#ue),e.removeEventListener(re.nodeDragEventName,t?this.#he:this.#ce),e.removeEventListener(re.nodeReflowEventName,t?this.#de:this.#pe),this.#me()}if(t?this.#le=e:this.#ae=e,i()){const e=i().getNodeElement();e.addEventListener(re.removeEventName,this.#ue),e.addEventListener(re.nodeDragEventName,t?this.#he:this.#ce),e.addEventListener(re.nodeReflowEventName,t?this.#de:this.#pe),t?this.setDestinationLocation():(this.setSourceLocation(),this.originatesFromInput=this.source.isInput()),this.#ge()}}}#ge(){this.source&&this.destination&&(this.source.linkTo(this.destination),this.destination.linkTo(this.source))}#me(){this.source&&this.destination&&(this.source.unlinkFrom(this.destination,!1),this.destination.unlinkFrom(this.source,!1))}cleanup(){super.cleanup(),this.#me(),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(e=!1){return this.source?.isInput()?this.source:this.destination?.isInput()?this.destination:e?this.source??this.destination:void 0}setInputPin(e){this.source?.isInput()&&(this.source=e),this.destination=e}getOutputPin(e=!1){return this.source?.isOutput()?this.source:this.destination?.isOutput()?this.destination:e?this.source??this.destination:void 0}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=le.convert,this.linkMessageText=G`Convert ${this.source.pinType} to ${this.destination.pinType}.`}setMessageCorrect(){this.linkMessageIcon=le.correct,this.linkMessageText=V}setMessageReplace(){this.linkMessageIcon=le.correct,this.linkMessageText=V}setMessageDirectionsIncompatible(){this.linkMessageIcon=le.reject,this.linkMessageText=G`Directions are not compatbile.`}setMessagePlaceNode(){this.linkMessageIcon=V,this.linkMessageText=G`Place a new node.`}setMessageReplaceLink(){this.linkMessageIcon=le.correct,this.linkMessageText=G`Replace existing input connections.`}setMessageReplaceOutputLink(){this.linkMessageIcon=le.correct,this.linkMessageText=G`Replace existing output connections.`}setMessageSameNode(){this.linkMessageIcon=le.reject,this.linkMessageText=G`Both are on the same node.`}setMessageTypesIncompatible(e,t){this.linkMessageIcon=le.reject,this.linkMessageText=G`${ae.capitalFirstLetter(e.pinType)} is not compatible with ${ae.capitalFirstLetter(t.pinType)}.`}}class Gt extends oe{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=re.dragEventName;static dragGeneralEventName=re.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,n=t-this.locationY;if(this.locationX=e,this.locationY=t,this.blueprint&&i){const e=new CustomEvent(this.constructor.dragEventName,{detail:{value:[s,n]},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,re.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 At{#J=e=>{if(this.blueprint.setFocused(!0),e.button===this.options.clickButton)this.options.strictTarget&&e.target!=e.currentTarget||(this.consumeEvent&&e.stopImmediatePropagation(),this.#be.addEventListener("mousemove",this.#ve),document.addEventListener("mouseup",this.#ee),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 Gt&&(this.clickedOffset=[this.clickedPosition[0]-this.target.locationX,this.clickedPosition[1]-this.target.locationY]),this.clicked(this.clickedPosition));else this.options.exitAnyButton||this.#ee(e)};#ve=e=>{this.consumeEvent&&e.stopImmediatePropagation(),this.#be.removeEventListener("mousemove",this.#ve),this.#be.addEventListener("mousemove",this.#fe);const t=this.getEvent(re.trackingMouseEventName.begin);this.#ye=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.#fe(e)};#fe=e=>{this.consumeEvent&&e.stopImmediatePropagation();const t=this.setLocationFromEvent(e),i=[e.movementX,e.movementY];if(this.dragTo(t,i),this.#ye&&(this.blueprint.mousePosition=t),this.options.scrollGraphEdge){const e=Math.sqrt(i[0]*i[0]+i[1]*i[1]),s=this.blueprint.scaleCorrect(re.edgeScrollThreshold),n=this.blueprint.template.gridLeftVisibilityBoundary()+s,r=this.blueprint.template.gridRightVisibilityBoundary()-s;let a=0;t[0]r&&(a=t[0]-r);const o=this.blueprint.template.gridTopVisibilityBoundary()+s,l=this.blueprint.template.gridBottomVisibilityBoundary()-s;let u=0;t[1]l&&(u=t[1]-l),a=ae.clamp(this.blueprint.scaleCorrectReverse(a)**3*e*.6,-20,20),u=ae.clamp(this.blueprint.scaleCorrectReverse(u)**3*e*.6,-20,20),this.blueprint.scrollDelta(a,u)}};#ee=e=>{if(!this.options.exitAnyButton||e.button==this.options.clickButton){if(this.consumeEvent&&e.stopImmediatePropagation(),this.#be.removeEventListener("mousemove",this.#ve),this.#be.removeEventListener("mousemove",this.#fe),document.removeEventListener("mouseup",this.#ee),this.started&&this.endDrag(),this.unclicked(),this.#ye){const e=this.getEvent(re.trackingMouseEventName.end);this.target.dispatchEvent(e),this.#ye=!1}this.started=!1}};#ye=!1;#be;#we;get draggableElement(){return this.#we}clickedOffset=[0,0];clickedPosition=[0,0];lastLocation=[0,0];started=!1;stepSize=1;constructor(e,t,i={}){i.clickButton??=re.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??re.gridSize),this.#be=this.options.moveEverywhere?document.documentElement:this.movementSpace,this.#we=this.options.draggableElement,this.listenEvents()}listenEvents(){super.listenEvents(),this.#we.addEventListener("mousedown",this.#J),this.options.clickButton===re.mouseRightClickButton&&this.#we.addEventListener("contextmenu",(e=>e.preventDefault()))}unlistenEvents(){super.unlistenEvents(),this.#we.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 Vt extends Ht{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,n]=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]+=n[0]-i[0],t[1]+=n[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 Rt extends Vt{#Se;#Ee;#Ce;#Ne;constructor(e,t,i={}){super(e,t,i),i.onClicked&&(this.#Se=i.onClicked),i.onStartDrag&&(this.#Ee=i.onStartDrag),i.onDrag&&(this.#Ce=i.onDrag),i.onEndDrag&&(this.#Ne=i.onEndDrag)}clicked(e){super.clicked(e),this.#Se?.()}startDrag(){super.startDrag(),this.#Ee?.()}dragAction(e,t){this.#Ce?.(e,t)}endDrag(){super.endDrag(),this.#Ne?.()}}class _t extends Vt{constructor(e,t,i={}){super(e,t,i),this.draggableElement.classList.add("ueb-draggable")}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 zt extends It{getDraggableElement(){return this.element}createDraggableObject(){const e=this.getDraggableElement();return new Vt(this.element,this.blueprint,{draggableElement:e})}createInputObjects(){return[...super.createInputObjects(),this.createDraggableObject(),new kt(this.element,this.blueprint,{activationKeys:[re.Keys.ArrowUp,re.Keys.ArrowRight,re.Keys.ArrowDown,re.Keys.ArrowLeft]},(e=>e.target.acknowledgeDrag([e.pressedKey===re.Keys.ArrowLeft?-re.gridSize:e.pressedKey===re.Keys.ArrowRight?re.gridSize:0,e.pressedKey===re.Keys.ArrowUp?-re.gridSize:e.pressedKey===re.Keys.ArrowDown?re.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 n=this.topBoundary()-this.blueprint.template.gridTopVisibilityBoundary(),r=this.blueprint.template.gridBottomVisibilityBoundary()-this.bottomBoundary();let a=Math.max((n+r)/2,e);this.blueprint.scrollDelta(t-s,n-a,!0)}}class Ft extends zt{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 jt extends Ft{getDraggableElement(){return this.element}createDraggableObject(){return new _t(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 Ut extends jt{static nodeStyleClasses=["ueb-node-style-default"];#xe;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=Ae.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.#xe=function(e){switch(e.getType()){case re.paths.addDelegate:case re.paths.clearDelegate:case re.paths.removeDelegate:return null}const t=e.getPinEntities().find((e=>"self"===e.PinName?.toString()&&"Target"===Ke(e)));if(t){const i=e.FunctionReference?.MemberParent?.getName()??t.PinType?.PinSubCategoryObject?.getName()??"Untitled";return i.length>0?`Target is ${ae.formatStringName(i)}`:null}return null}(e.entity),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 G`${this.renderTop()}${this.pinInserter?G`Add pin ${le.plusCircle}`:V} ${this.element.entity.isDevelopmentOnly()?G`Development Only`:V} ${this.element.advancedPinDisplay?G`${le.expandIcon}`:V}`}renderNodeIcon(){return this.element.entity.nodeIcon()}renderNodeName(){return this.element.nodeDisplayName}renderTop(){const e=this.renderNodeIcon(),t=this.renderNodeName();return G`${e?G`${e}`:V} ${t?G`${t} ${this.#xe?G`${this.#xe}`: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.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")}getPinElements(){return this.element.getPinElements()}createPinElements(){return this.element.getPinEntities().filter((e=>!e.isHidden())).map((e=>this.createPinElement(e)))}linksChanged(){}}class Yt extends Ut{#Pe=document.createElement("div");#ke=document.createElement("div");#Ae=document.createElement("div");#Le=document.createElement("div");#Me=document.createElement("div");#Te=document.createElement("div");#Ie=document.createElement("div");#Oe=document.createElement("div");initialize(e){super.initialize(e),this.element.classList.add("ueb-resizeable"),this.#Pe.classList.add("ueb-resizeable-top"),this.#ke.classList.add("ueb-resizeable-right"),this.#Ae.classList.add("ueb-resizeable-bottom"),this.#Le.classList.add("ueb-resizeable-left"),this.#Me.classList.add("ueb-resizeable-top-right"),this.#Te.classList.add("ueb-resizeable-bottom-right"),this.#Ie.classList.add("ueb-resizeable-bottom-left"),this.#Oe.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.#Pe,this.#ke,this.#Ae,this.#Le,this.#Me,this.#Te,this.#Ie,this.#Oe)}createInputObjects(){return[...super.createInputObjects(),new Rt(this.#Pe,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 Rt(this.#ke,this.blueprint,{onDrag:(e,t)=>{t[0]=e[0]-this.element.rightBoundary(),this.setSizeX(this.element.sizeX+t[0])},onEndDrag:()=>this.endResize()}),new Rt(this.#Ae,this.blueprint,{onDrag:(e,t)=>{t[1]=e[1]-this.element.bottomBoundary(),this.setSizeY(this.element.sizeY+t[1])},onEndDrag:()=>this.endResize()}),new Rt(this.#Le,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 Rt(this.#Me,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 Rt(this.#Te,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 Rt(this.#Ie,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 Rt(this.#Oe,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 Kt extends Yt{#De=0;initialize(e){super.initialize(e),e.classList.add("ueb-node-style-comment","ueb-node-resizeable"),e.sizeX=25*re.gridSize,e.sizeY=6*re.gridSize,super.initialize(e)}getDraggableElement(){return this.element.querySelector(".ueb-node-top")}render(){return G``}firstUpdated(e){super.firstUpdated(e);const t=this.getDraggableElement().getBoundingClientRect();this.#De=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*re.gridSize&&(this.element.setNodeWidth(e),!0)}setSizeY(e){return(e=Math.round(e))>=2*re.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.#De:super.bottomBoundary()}leftBoundary(e=!1){return this.element.locationX}}class Xt extends Ht{#$e;#Be=null;#Ge=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()===re.paths.knot||i.nodeElement.getType()===re.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.valueOf()&&"object"==i.entity.PinType.PinCategory.valueOf()||t.pinType==i.pinType?(this.link.setMessageCorrect(),this.linkValid=!0):(this.link.setMessageTypesIncompatible(t,i),this.linkValid=!1)}};#He=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()==re.paths.knot&&(this.#Be=this.target),this.link=Ae.getConstructor("ueb-link").newObject(this.target,null),this.blueprint.template.linksContainerElement.prepend(this.link),this.link.setMessagePlaceNode(),this.#$e=this.blueprint.querySelectorAll("ueb-pin"),this.#$e.forEach((e=>{e!=this.target&&(e.addEventListener("mouseenter",this.#Ge),e.addEventListener("mouseleave",this.#He))})),this.link.startDragging(),this.link.setDestinationLocation(e)}dragTo(e,t){this.link.setDestinationLocation(e)}endDrag(){if(this.#$e.forEach((e=>{e.removeEventListener("mouseenter",this.#Ge),e.removeEventListener("mouseleave",this.#He)})),this.#$e=null,this.enteredPin&&this.linkValid){if(this.#Be){const e=this.#Be!==this.link.source?this.link.source:this.enteredPin;if(this.#Be.isInput()&&e.isInput()||this.#Be.isOutput()&&e.isOutput()){const e=this.#Be.template.getOppositePin();this.#Be===this.link.source?this.link.source=e:this.enteredPin=e}}else this.enteredPin.nodeElement.getType()===re.paths.knot&&(this.#Be=this.enteredPin,this.link.source.isOutput()&&(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 qt extends Ut{#Ve=!1;#Re=!1;displayName="";static nodeStyleClasses=["ueb-node-style-glass"];initialize(e){super.initialize(e),this.displayName=this.element.nodeDisplayName}render(){return G`${this.displayName?G`${this.displayName}`:V} ${this.#Ve?G``:V} ${this.#Re?G``:V} ${this.pinInserter?G`Add pin ${le.plusCircle}`:V}`}createPinElements(){return this.element.getPinEntities().filter((e=>!e.isHidden())).map((e=>{this.#Ve||=e.isInput(),this.#Re||=e.isOutput();return Ae.getConstructor("ueb-pin").newObject(e,void 0,this.element)}))}}class Zt extends qt{static nodeStyleClasses=["ueb-node-style-metasound","ueb-node-style-operation"]}class Wt extends qt{static nodeStyleClasses=[...super.nodeStyleClasses,"ueb-node-style-conversion"]}class Qt extends qt{static nodeStyleClasses=[...super.nodeStyleClasses,"ueb-node-style-operation"]}class Jt extends It{static canWrapInput=!0;#_e;get iconElement(){return this.#_e}#ze;get wrapperElement(){return this.#ze}isNameRendered=!0;initialize(e){if(super.initialize(e),this.element.nodeElement){const e=this.element.nodeElement.template;this.isNameRendered=!(e instanceof Wt||e instanceof Qt||e instanceof Zt)}}setup(){super.setup(),this.element.nodeElement=this.element.closest("ueb-node");const e=this.element.nodeElement.template;(e instanceof Wt||e instanceof Qt)&&(this.isNameRendered=!1,this.element.requestUpdate())}createInputObjects(){return[new Xt(this.element,this.blueprint,{moveEverywhere:!0,draggableElement:this.getClickableElement()})]}render(){const e=G`${this.renderIcon()}`,t=G`${this.isNameRendered?this.renderName():V} ${this.isInputRendered()?this.renderInput():G``}`;return G`${this.element.isInput()?G`${e}${t}`:G`${t}${e}`}`}renderIcon(){if(this.element.nodeElement.entity.isPcg())switch(this.element.entity.getType()){case"Any":return le.pcgPin;case"Param":case"Param[]":return le.pcgParamPin;case"Spatial":case"Spatial[]":return le.pcgSpatialPin;case"Any[]":case"Point[]":case"Surface[]":case"Volume[]":if(this.element.isOutput())return le.pcgPin;case"Point":case"Surface":case"Volume":return le.pcgStackPin}switch(this.element.entity.PinType.ContainerType?.toString()){case"Array":return le.arrayPin;case"Set":return le.setPin;case"Map":return le.mapPin}return"delegate"===this.element.entity.PinType.PinCategory?.toString().toLocaleLowerCase()?le.delegate:this.element.nodeElement?.template instanceof Qt?le.operationPin:le.genericPin}renderName(){let e=this.element.getPinDisplayName();const t=this.element.nodeElement,i=this.element.getPinName();return t.getType()==re.paths.makeStruct&&i==t.entity.StructType.getName()&&(e=i),G`${e}`}isInputRendered(){return this.element.isInput()&&!this.element.entity.bDefaultValueIsIgnored?.valueOf()&&!this.element.entity.PinType.bIsReference?.valueOf()}renderInput(){return G``}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.#_e=this.element.querySelector(".ueb-pin-icon svg")??this.element,this.#ze=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.#ze??this.element}}class ei extends Jt{render(){return G`${this.renderIcon()}`}}class ti extends Ut{static nodeStyleClasses=[...super.nodeStyleClasses,"ueb-node-style-event"];#Fe;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()===re.paths.customEvent&&(this.element.entity.CustomFunctionName||this.element.entity.FunctionReference.MemberParent);return G`${e?G`${e}`:V} ${t?G`${t} ${i?G`Custom Event`:V}`:V}`}getPinElements(){return this.element.getPinElements().filter((e=>"delegate"!==e.entity.PinType.PinCategory?.toString()))}createDelegatePinElement(){return this.#Fe||(this.#Fe=Ae.getConstructor("ueb-pin").newObject(this.element.getPinEntities().find((e=>!e.isHidden()&&"delegate"===e.PinType.PinCategory?.toString())),new ei,this.element),this.#Fe.template.isNameRendered=!1),this.#Fe}createPinElements(){return[this.createDelegatePinElement(),...this.element.getPinEntities().filter((e=>!e.isHidden()&&"delegate"!==e.PinType.PinCategory?.toString())).map((e=>Ae.getConstructor("ueb-pin").newObject(e,void 0,this.element)))]}}class ii extends ei{render(){return this.element.isOutput()?super.render():G``}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 si extends Ut{static#je=new Set;#Ue=null;#Ye;get inputPin(){return this.#Ye}#Ke;get outputPin(){return this.#Ke}initialize(e){super.initialize(e),this.element.classList.add("ueb-node-style-minimal")}findDirectionaPin(e){if(e.nodeElement.getType()!==re.paths.knot||si.#je.has(e))return si.#je.clear(),!0;si.#je.add(e);for(let t of e.getLinks().map((e=>this.blueprint.getPin(e))))if(this.findDirectionaPin(t))return!0;return!1}render(){return G``}setupPins(){for(const e of this.getPinElements())this.element.querySelector(".ueb-node-border").appendChild(e)}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=Ae.getConstructor("ueb-pin");return[this.#Ye=s.newObject(t,new ii,this.element),this.#Ke=s.newObject(i,new ii,this.element)]}linksChanged(){}}class ni extends Ut{static nodeStyleClasses=["ueb-node-style-metasound"]}class ri extends qt{initialize(e){super.initialize(e);const t=e.getType();t===re.paths.variableGet||t===re.paths.self?(this.element.classList.add("ueb-node-style-getter"),this.displayName=""):t===re.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)}}function ai(e){if(e.getClass()===re.paths.callFunction||e.getClass()===re.paths.commutativeAssociativeBinaryOperator||e.getClass()===re.paths.callArrayFunction){const t=e.FunctionReference?.MemberParent?.path??"",i=e.FunctionReference?.MemberName?.toString();if(i&&(t===re.paths.kismetMathLibrary||t===re.paths.kismetArrayLibrary)){if(i.startsWith("Conv_"))return Wt;if(i.startsWith("Add_")||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 Qt;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 Qt}}if(t===re.paths.blueprintSetLibrary)return Qt;if(t===re.paths.blueprintMapLibrary)return Qt}switch(e.getClass()){case re.paths.comment:case re.paths.materialGraphNodeComment:return Kt;case re.paths.createDelegate:return Ut;case re.paths.metasoundEditorGraphExternalNode:return"Add"==e.ClassName?.Name?Zt:ni;case re.paths.niagaraNodeOp:if(["Boolean::LogicEq","Boolean::LogicNEq","Numeric::Abs","Numeric::Add","Numeric::Mul"].includes(e.OpName?.toString()))return Qt;break;case re.paths.promotableOperator:return Qt;case re.paths.knot:return si;case re.paths.literal:case re.paths.self:case re.paths.variableGet:case re.paths.variableSet:return ri}return e.isEvent()?ti:Ut}class oi extends Gt{static properties={...super.properties,selected:{type:Boolean,attribute:"data-selected",reflect:!0,converter:ke.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(re.nodeDragGeneralEventName,this.dragHandler)}setSelected(e=!0){this.selected=e,this.blueprint&&(this.selected?(this.listeningDrag=!0,this.blueprint.addEventListener(re.nodeDragGeneralEventName,this.dragHandler)):(this.blueprint.removeEventListener(re.nodeDragGeneralEventName,this.dragHandler),this.listeningDrag=!1))}}class li extends oi{static properties={...oi.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:We.attributeConverter,reflect:!0},enabledState:{type:String,attribute:"data-enabled-state",reflect:!0},nodeDisplayName:{type:String,attribute:!1},pureFunction:{type:Boolean,converter:ke.booleanConverter,attribute:"data-pure-function",reflect:!0}};static dragEventName=re.nodeDragEventName;static dragGeneralEventName=re.nodeDragGeneralEventName;get blueprint(){return super.blueprint}set blueprint(e){super.blueprint=e,this.#Xe.forEach((t=>t.blueprint=e))}#qe;get nodeNameElement(){return this.#qe}set nodeNameElement(e){this.#qe=e}#Xe=[];boundComments=[];#Ze=!1;#We=e=>{this.selected||this.#Ze||(this.#Ze=!0,this.requestUpdate(),this.updateComplete.then((()=>this.#Ze=!1)),this.addLocation(...e.detail.value))};static fromSerializedObject(e){e=e.trim();let t=Ct.grammar.parse(e);return li.newObject(t)}static newObject(e=new Ct,t=new(ai(e))){const i=new li;return i.initialize(e,t),i}#Qe(e){for(let t of this.getPinElements())for(let i of t.getLinks())this.blueprint.getPin(i).redirectLink(t,new rt(new We(e),t.entity.PinId))}initialize(e=new Ct,t=new(ai(e))){this.typePath=e.getType(),this.nodeTitle=e.getObjectName(),this.advancedPinDisplay=e.AdvancedPinDisplay?.toString(),this.enabledState=e.EnabledState,this.nodeDisplayName=Ve(e),this.pureFunction=e.bIsPureFunc?.valueOf(),this.dragLinkObjects=[],super.initialize(e,t),this.#Xe=this.template.createPinElements(),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())),e.listenAttribute("Name",(t=>{this.#Qe(t.value),this.nodeTitle=t.value,this.nodeDisplayName=Ve(e)}))}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(re.nodeDragEventName,this.#We),this.boundComments.push(e))}unbindFromComment(e){const t=this.boundComments.indexOf(e);t>=0&&(e.removeEventListener(re.nodeDragEventName,this.#We),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()}computeNodeDisplayName(){this.nodeDisplayName=Ve(this.entity)}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)))}getPinElements(){return this.#Xe}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(re.nodeReflowEventName);this.dispatchEvent(e)}setShowAdvancedPinDisplay(e){this.entity.AdvancedPinDisplay=new We(e?"Shown":"Hidden"),this.advancedPinDisplay=this.entity.AdvancedPinDisplay}toggleShowAdvancedPinDisplay(){this.setShowAdvancedPinDisplay("Shown"!=this.entity.AdvancedPinDisplay?.toString())}}class ui extends Ct{#Je=new Map;#et=[];get objectEntities(){return this.#et}getHomonymObjectEntity(e){const t=e.getObjectName();return this.#et.find((e=>e.getObjectName()==t))}takeFreeName(e){e=e.replace(/_\d+$/,"");const t=(this.#Je.get(e)??-1)+1;return this.#Je.set(e,t),re.nodeTitle(e,t)}addObjectEntity(e){if(!this.#et.includes(e)){this.#et.push(e);const[t,i]=e.getNameAndCounter();return this.#Je.set(t,Math.max(this.#Je.get(t)??0,i)),!0}return!1}removeObjectEntity(e){const t=this.#et.indexOf(e);if(t>=0){const e=this.#et.pop();return te.OriginalChangeId.value==t.OriginalChangeId.value));if(t.length===this.ScriptVariables.length)return this;const i=t.concat(t).map(((i,s)=>{const n=re.subObjectAttributeNameFromReference(i.ScriptVariable,s>=t.length);return[n,this[n]??e[n]]}));return i.push(...Object.entries(this).filter((([e,t])=>!e.startsWith(re.subObjectAttributeNamePrefix)&&"ExportedNodes"!==e))),new ui(Object.fromEntries(i))}}class ci extends xt{#tt;constructor(e,t,i={}){i.listenOnFocus??=!0,i.unlistenOnTextEdit??=!0,super(e,t,i);let s=this;this.#tt=()=>s.copied()}listenEvents(){window.addEventListener("copy",this.#tt)}unlistenEvents(){window.removeEventListener("copy",this.#tt)}getSerializedText(){const e=this.blueprint.getNodes(!0).map((e=>e.entity)),t=e.filter((e=>e.exported)).map((e=>e.serialize())),i=e.filter((e=>!e.exported)).map((e=>e.serialize()));return t.length&&(this.blueprint.entity.ExportedNodes.value=btoa(t.join("")),i.splice(0,0,this.blueprint.entity.serialize(!1)),delete this.blueprint.entity.ExportedNodes),i.join("")}copied(){const e=this.getSerializedText();return navigator.clipboard.writeText(e),e}}class hi extends xt{#it;constructor(e,t,i={}){i.listenOnFocus??=!0,i.unlistenOnTextEdit??=!0,super(e,t,i);let s=this;this.#it=()=>s.cut()}listenEvents(){window.addEventListener("cut",this.#it)}unlistenEvents(){window.removeEventListener("cut",this.#it)}getSerializedText(){return this.blueprint.getNodes(!0).map((e=>e.entity.serialize())).join("")}cut(){this.blueprint.template.getCopyInputObject().copied(),this.blueprint.removeGraphElement(...this.blueprint.getNodes(!0))}}class pi extends xt{#st;constructor(e,t,i={}){i.listenOnFocus??=!0,i.unlistenOnTextEdit??=!0,super(e,t,i);let s=this;this.#st=e=>s.pasted(e.clipboardData.getData("Text"))}listenEvents(){window.addEventListener("paste",this.#st)}unlistenEvents(){window.removeEventListener("paste",this.#st)}pasted(e){let t=0,i=0,s=0,n=Ct.grammarMultipleObjects.parse(e).map((e=>{let n=Ae.getConstructor("ueb-node").newObject(e);return t+=n.locationY,i+=n.locationX,++s,n}));t/=s,i/=s,n.length>0&&this.blueprint.unselectAll();let r=this.blueprint.mousePosition;for(const e of n)e.addLocation(r[0]-i,r[1]-t),e.snapToGrid(),e.setSelected(!0);return this.blueprint.addGraphElement(...n),n}}class di extends At{static#X=e=>{};#nt=0;get variation(){return this.#nt}#rt=e=>{this.enablerKey&&!this.enablerActivated||(e.preventDefault(),this.#nt=e.deltaY,this.setLocationFromEvent(e),this.wheel())};#at=e=>e.preventDefault();constructor(e,t,i={},s=di.#X){i.listenOnFocus=!0,i.strictTarget??=!1,super(e,t,i),this.strictTarget=i.strictTarget,this.onWheel=s}listenEvents(){this.movementSpace.addEventListener("wheel",this.#rt,!1),this.movementSpace.parentElement?.addEventListener("wheel",this.#at)}unlistenEvents(){this.movementSpace.removeEventListener("wheel",this.#rt,!1),this.movementSpace.parentElement?.removeEventListener("wheel",this.#at)}wheel(){this.onWheel(this)}}class mi extends di{#ot=0;#lt=!1;get enableZoonIn(){return this.#lt}set enableZoonIn(e){e!=this.#lt&&(this.#lt=e)}wheel(){if(this.#ot+=-this.variation,Math.abs(this.#ot)0||(e+=Math.sign(this.#ot),this.blueprint.setZoom(e,this.location),this.#ot=0)}}class gi extends kt{#ut;constructor(e,t,i={}){i.activationKeys=Tt.enableZoomIn,super(e,t,i)}fire(){this.#ut=this.blueprint.template.getZoomInputObject(),this.#ut.enableZoonIn=!0}unfire(){this.#ut.enableZoonIn=!1}}class bi extends Ht{startDrag(){this.blueprint.scrolling=!0}dragTo(e,t){this.blueprint.scrollDelta(-t[0],-t[1])}endDrag(){this.blueprint.scrolling=!1}}class vi extends At{#ct=null;#ht=e=>{e.preventDefault(),this.setLocationFromEvent(e),this.blueprint.mousePosition=[...this.location]};#pt=e=>{this.#ct||(e.preventDefault(),this.#ct=e.detail.tracker,this.unlistenMouseMove())};#dt=e=>{this.#ct==e.detail.tracker&&(e.preventDefault(),this.#ct=null,this.listenMouseMove())};constructor(e,t,i={}){i.listenOnFocus=!0,super(e,t,i)}listenMouseMove(){this.target.addEventListener("mousemove",this.#ht)}unlistenMouseMove(){this.target.removeEventListener("mousemove",this.#ht)}listenEvents(){this.listenMouseMove(),this.blueprint.addEventListener(re.trackingMouseEventName.begin,this.#pt),this.blueprint.addEventListener(re.trackingMouseEventName.end,this.#dt)}unlistenEvents(){this.unlistenMouseMove(),this.blueprint.removeEventListener(re.trackingMouseEventName.begin,this.#pt),this.blueprint.removeEventListener(re.trackingMouseEventName.end,this.#dt)}}class fi 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 yi extends xt{#mt=e=>this.clickedSomewhere(e.target);constructor(e,t,i={}){i.listenOnFocus=!0,super(e,t,i),this.blueprint.focus&&document.addEventListener("click",this.#mt)}clickedSomewhere(e){e.closest("ueb-blueprint")||this.blueprint.setFocused(!1)}listenEvents(){document.addEventListener("click",this.#mt)}unlistenEvents(){document.removeEventListener("click",this.#mt)}}class wi extends It{static styleVariables={"--ueb-font-size":`${re.fontSize}`,"--ueb-grid-axis-line-color":`${re.gridAxisLineColor}`,"--ueb-grid-expand":`${re.expandGridSize}px`,"--ueb-grid-line-color":`${re.gridLineColor}`,"--ueb-grid-line-width":`${re.gridLineWidth}px`,"--ueb-grid-set-line-color":`${re.gridSetLineColor}`,"--ueb-grid-set":`${re.gridSet}`,"--ueb-grid-size":`${re.gridSize}px`,"--ueb-link-min-width":`${re.linkMinWidth}`,"--ueb-node-radius":`${re.nodeRadius}px`};#gt=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)}));#bt;#vt;#ut;headerElement;overlayElement;viewportElement;selectorElement;gridElement;linksContainerElement;nodesContainerElement;viewportSize=[0,0];initialize(e){super.initialize(e),this.element.style.cssText=Object.entries(wi.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.#gt.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.#gt.unobserve(this.viewportElement)}createInputObjects(){const e=this.element.getGridDOMElement();return this.#bt=new ci(e,this.blueprint),this.#vt=new pi(e,this.blueprint),this.#ut=new mi(e,this.blueprint),[...super.createInputObjects(),this.#bt,this.#vt,this.#ut,new hi(e,this.blueprint),new kt(e,this.blueprint,{activationKeys:Tt.duplicateNodes},(()=>this.blueprint.template.getPasteInputObject().pasted(this.blueprint.template.getCopyInputObject().copied()))),new kt(e,this.blueprint,{activationKeys:Tt.deleteNodes},(()=>this.blueprint.removeGraphElement(...this.blueprint.getNodes(!0)))),new kt(e,this.blueprint,{activationKeys:Tt.selectAllNodes},(()=>this.blueprint.selectAll())),new fi(e,this.blueprint,{clickButton:re.mouseClickButton,exitAnyButton:!0,moveEverywhere:!0}),new bi(e,this.blueprint,{clickButton:re.mouseRightClickButton,exitAnyButton:!1,moveEverywhere:!0}),new yi(e,this.blueprint),new vi(e,this.blueprint),new gi(e,this.blueprint)]}render(){return G`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(re.expandGridSize,re.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),n=ae.range(i,s),r=e=>`ueb-zoom-${e}`;te<0)).map(r)),this.blueprint.classList.add(...n.filter((e=>e>0)).map(r))):(this.blueprint.classList.remove(...n.filter((e=>e>0)).map(r)),this.blueprint.classList.add(...n.filter((e=>e<0)).map(r)))}}getCommentNodes(e=!1){return this.blueprint.querySelectorAll(`ueb-node[data-type="${re.paths.comment}"]${e?'[data-selected="true"]':""}, ueb-node[data-type="${re.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.#bt}getPasteInputObject(){return this.#vt}getZoomInputObject(){return this.#ut}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),n=this.gridTopVisibilityBoundary()+this.blueprint.scaleCorrect(this.viewportSize[1]/2);this.blueprint.scrollDelta(this.blueprint.scaleCorrectReverse(e-s),this.blueprint.scaleCorrectReverse(t-n),i)}centerContentInViewport(e=!0){let t=0,i=0,s=Number.MAX_SAFE_INTEGER,n=Number.MIN_SAFE_INTEGER,r=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()),n=Math.max(n,e.rightBoundary()),r=Math.min(r,e.topBoundary()),a=Math.max(a,e.bottomBoundary());t=Math.round(n-s<=this.viewportSize[0]?(n+s)/2:t/(2*o.length)),i=Math.round(a-r<=this.viewportSize[1]?(a+r)/2:i/(2*o.length)),this.centerViewport(t,i,e)}}class Si extends oe{static properties={selecting:{type:Boolean,attribute:"data-selecting",reflect:!0,converter:ke.booleanConverter},scrolling:{type:Boolean,attribute:"data-scrolling",reflect:!0,converter:ke.booleanConverter},focused:{type:Boolean,attribute:"data-focused",reflect:!0,converter:ke.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)};#ft=0;#yt=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=re.expandGridSize,this.scrollY=re.expandGridSize,this.translateX=re.expandGridSize,this.translateY=re.expandGridSize,super.initialize(new ui,new wi)}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=re.smoothScrollTime){if(i){let i=[0,0];this.#ft&&cancelAnimationFrame(this.#ft),this.#yt&&cancelAnimationFrame(this.#yt),ae.animate(0,e,s,(e=>{this.scrollDelta(e-i[0],0,!1),i[0]=e}),(e=>this.#ft=e)),ae.animate(0,t,s,(e=>{this.scrollDelta(0,e-i[1],!1),i[1]=e}),(e=>this.#yt=e))}else{const i=[2*re.expandGridSize,2*re.expandGridSize];let s=this.getScroll(),n=[s[0]+e,s[1]+t],r=[0,0];for(let e=0;e<2;++e)n[e]i[e]-re.gridExpandThreshold*re.expandGridSize&&(r[e]=1);0==r[0]&&0==r[1]||this.seamlessExpand(r[0],r[1]),s=this.getScroll(),n=[s[0]+e,s[1]+t],this.setScroll(n[0],n[1])}}scrollCenter(e=!1){const t=this.getScroll(),i=[this.translateX-t[0],this.translateY-t[1]],s=this.getViewportSize().map((e=>e/2)),n=[i[0]-s[0],i[1]-s[1]];this.scrollDelta(n[0],n[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,re.gridSize)}seamlessExpand(e,t){e=Math.round(e),t=Math.round(t);let i=this.getScale();[e,t]=[-e*re.expandGridSize,-t*re.expandGridSize],0!=e&&(this.scrollX+=e,e/=i),0!=t&&(this.scrollY+=t,t/=i),this.translateX+=e,this.translateY+=t}progressiveSnapToGrid(e){return re.expandGridSize*Math.round(e/re.expandGridSize+.5*Math.sign(e))}getZoom(){return this.zoom}setZoom(e,t){if((e=ae.clamp(e,re.minZoom,re.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 re.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,n]=[Number.MIN_SAFE_INTEGER,Number.MAX_SAFE_INTEGER,Number.MAX_SAFE_INTEGER,Number.MIN_SAFE_INTEGER]){let r=this.nodes;return e&&(r=r.filter((e=>e.selected))),(t>Number.MIN_SAFE_INTEGER||iNumber.MIN_SAFE_INTEGER)&&(r=r.filter((e=>e.topBoundary()>=t&&e.rightBoundary()<=i&&e.bottomBoundary()<=s&&e.leftBoundary()>=n))),r}getCommentNodes(e=!1){let t=[...this.template.getCommentNodes(e)];return 0===t.length&&(t=this.nodes.filter((t=>t.getType()===re.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=>Si.nodeSelectToggleFunction(e,!0)))}unselectAll(){this.getNodes().forEach((e=>Si.nodeSelectToggleFunction(e,!1)))}addGraphElement(...e){const t=e=>{const i=e.currentTarget;i.removeEventListener(re.removeEventName,t);const[s,n]=i instanceof li?[this.nodes,i.entity]:i instanceof Bt?[this.links]:null,r=s?.indexOf(i);if(r>=0){const e=s.pop();re.entity._exported=!0));continue}const e=i.entity.getObjectName(),s=this.entity.getHomonymObjectEntity(i.entity);if(s){const t=this.entity.takeFreeName(e);s.Name=new s.Name.constructor(t)}this.nodes.push(i),this.entity.addObjectEntity(i.entity),i.addEventListener(re.removeEventName,t),this.template.nodesContainerElement?.appendChild(i)}else i instanceof Bt&&!this.links.includes(i)&&(this.links.push(i),i.addEventListener(re.removeEventName,t),this.template.linksContainerElement&&!this.template.linksContainerElement.contains(i)&&this.template.linksContainerElement.appendChild(i));e.filter((e=>e instanceof li)).forEach((t=>t.sanitizeLinks(e))),e.filter((e=>e instanceof li&&e.getType()==re.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?re.focusEventName.begin:re.focusEventName.end);this.focused=e,this.focused||this.unselectAll(),this.dispatchEvent(t)}acknowledgeEditText(e){const t=new CustomEvent(e?re.editTextEventName.begin:re.editTextEventName.end);this.dispatchEvent(t)}}customElements.define("ueb-blueprint",Si);class Ei extends zt{#wt;get locationChangeCallback(){return this.#wt}set locationChangeCallback(e){this.#wt=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 Vt(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 Ci extends Ei{adjustLocation(e,t){const i=Math.round(this.movementSpaceSize[0]/2);e-=i,t=-(t-i);let[s,n]=ae.getPolarCoordinates(e,t);return s=Math.min(s,i),[e,t]=ae.getCartesianCoordinates(s,n),this.locationChangeCallback?.(e/i,t/i),[e=Math.round(e+i),t=Math.round(-t+i)]}}class Ni extends Gt{windowElement;setup(){super.setup(),this.windowElement=this.closest("ueb-window")}setLocation(e,t){super.setLocation(...this.template.adjustLocation(e,t))}}class xi extends Ni{constructor(){super(),super.initialize({},new Ci)}static newObject(){return new xi}initialize(){}}class Pi extends Ei{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 ki extends Ni{constructor(){super(),super.initialize({},new Pi)}static newObject(){return new ki}initialize(){}}class Ai extends Ht{constructor(e,t,i={}){i.consumeEvent=!0,super(e,t,i)}}class Li extends It{#St;#Et;#Ct=e=>this.element.selectedOption=e.target.selectedOptions[0].value;render(){return G`${this.element.options.map((([e,t])=>G`${t}`))} ${this.element.selectedOption}`}firstUpdated(e){super.firstUpdated(e),this.#St=this.element.querySelector("select:first-child"),this.#Et=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.#Et.getBoundingClientRect();this.element.style.setProperty("--ueb-dropdown-width",t.width+"px")}createInputObjects(){return[...super.createInputObjects(),new Ai(this.element,this.blueprint)]}setSelectedValue(e){this.element.querySelector(`option[value="${e}"]`).defaultSelected=!0}getSelectedValue(){return this.#St.value}}class Mi extends oe{static properties={...super.properties,options:{type:Object},selectedOption:{type:String}};constructor(){super(),super.initialize({},new Li),this.options=[],this.selectedOption=""}static newObject(e){return new Mi}initialize(){}getValue(){return this.template.getSelectedValue()}}class Ti extends It{#Nt=()=>{this.blueprint.acknowledgeEditText(!0),this.element.selectOnFocus&&getSelection().selectAllChildren(this.element)};#xt=()=>{this.blueprint.acknowledgeEditText(!1),getSelection().removeAllRanges()};#Pt=e=>e.target.querySelectorAll("br").forEach((e=>e.remove()));#kt=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 Ai(this.element,this.blueprint)]}setup(){super.setup(),this.element.addEventListener("focus",this.#Nt),this.element.addEventListener("focusout",this.#xt),this.element.singleLine&&this.element.addEventListener("input",this.#Pt),this.element.blurOnEnter&&this.element.addEventListener("keydown",this.#kt)}cleanup(){super.cleanup(),this.element.removeEventListener("focus",this.#Nt),this.element.removeEventListener("focusout",this.#xt),this.element.removeEventListener("input",this.#Pt),this.element.removeEventListener("keydown",this.#kt)}}class Ii extends oe{static properties={...super.properties,singleLine:{type:Boolean,attribute:"data-single-line",converter:ke.booleanConverter,reflect:!0},selectOnFocus:{type:Boolean,attribute:"data-select-focus",converter:ke.booleanConverter,reflect:!0},blurOnEnter:{type:Boolean,attribute:"data-blur-enter",converter:ke.booleanConverter,reflect:!0}};constructor(){super(),this.singleLine=!1,this.selectOnFocus=!0,this.blurOnEnter=!0,super.initialize({},new Ti)}static newObject(){return new Ii}initialize(){}}class Oi extends Jt{#At;#Lt=()=>{const e=this.element.getDefaultValue();e.value=this.#At.checked,this.element.setDefaultValue(e)};firstUpdated(e){super.firstUpdated(e),this.#At=this.element.querySelector(".ueb-pin-input")}setup(){super.setup(),this.#At?.addEventListener("change",this.#Lt)}cleanup(){super.cleanup(),this.#At?.removeEventListener("change",this.#Lt)}createInputObjects(){return[...super.createInputObjects(),new Ai(this.#At,this.blueprint)]}renderInput(){return G``}}class Di extends Jt{static singleLineInput=!1;static selectOnFocus=!0;static saveEachInputChange=!1;#Mt;get inputWrapper(){return this.#Mt}#Tt;static stringFromInputToUE(e){return e.replace(/(?=\n\s*)\n$/,"")}static stringFromUEToInput(e){return e.replaceAll(/(?:\r|(?<=(?:^|[^\\])(?:\\\\)*)\\r)(?=\n)/g,"").replace(/(?<=\n\s*)$/,"\n")}#It=()=>this.setInputs(this.getInputs(),!0);#Ot=e=>this.#Dt(e.target);#Dt(e){if(this.element.querySelector(".ueb-pin-name")?.getBoundingClientRect().width<20)return;const t=this.blueprint.scaleCorrect(this.#Mt.getBoundingClientRect().width)+this.nameWidth,i=this.element.classList.contains("ueb-pin-input-wrap");!i&&t>re.pinInputWrapWidth?this.element.classList.add("ueb-pin-input-wrap"):i&&t<=re.pinInputWrapWidth&&this.element.classList.remove("ueb-pin-input-wrap")}firstUpdated(e){super.firstUpdated(e);this.constructor.canWrapInput&&this.isInputRendered()&&(this.element.addEventListener("input",this.#Ot),this.nameWidth=this.blueprint.scaleCorrect(this.element.querySelector(".ueb-pin-name")?.getBoundingClientRect().width??0)),this.#Mt=this.element.querySelector(".ueb-pin-input-wrapper"),this.#Tt=[...this.element.querySelectorAll("ueb-input")]}setup(){super.setup();const e=this.constructor;e.saveEachInputChange?this.element.addEventListener("input",this.#It):this.element.addEventListener("focusout",this.#It),e.canWrapInput&&this.isInputRendered()&&(this.element.addEventListener("input",this.#Ot),this.element.nodeElement.addEventListener(re.nodeReflowEventName,this.#Ot))}cleanup(){super.cleanup(),this.element.nodeElement.removeEventListener(re.nodeReflowEventName,this.#Ot),this.element.removeEventListener("input",this.#Ot),this.element.removeEventListener("input",this.#It),this.element.removeEventListener("focusout",this.#It)}getInput(){return this.getInputs().reduce(((e,t)=>e+t),"")}getInputs(){return this.#Tt.map((e=>ae.clearHTMLWhitespace(e.innerHTML)))}setInputs(e=[],t=!0){this.#Tt.forEach(this.constructor.singleLineInput?(t,i)=>t.innerText=e[i]:(t,i)=>t.innerText=e[i].replaceAll("\n","")),t&&this.setDefaultValue(e.map((e=>Di.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 G``}}class $i extends Jt{renderIcon(){return le.execPin}renderName(){let e=this.element.entity.PinName?.toString();if(this.element.entity.PinFriendlyName)e=this.element.entity.PinFriendlyName.toString();else if("execute"===e||"then"===e)return G``;return G`${this.element.getPinDisplayName()}`}}class Bi extends Di{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){const i=this.element.getDefaultValue();i.value=e[0],this.element.setDefaultValue(i),this.element.requestUpdate()}}class Gi extends Bi{renderInput(){return G``}} +class re extends S{constructor(){super(...arguments),this.renderOptions={host:this},this._$Do=void 0}createRenderRoot(){const e=super.createRenderRoot();return this.renderOptions.renderBefore??=e.firstChild,e}update(e){const t=this.render();this.hasUpdated||(this.renderOptions.isConnected=this.isConnected),super.update(e),this._$Do=((e,t,i)=>{const s=i?.renderBefore??t;let r=s._$litPart$;if(void 0===r){const e=i?.renderBefore??null;s._$litPart$=r=new W(t.insertBefore(M(),e),e,void 0,i??{})}return r._$AI(e),r})(t,this.renderRoot,this.renderOptions)}connectedCallback(){super.connectedCallback(),this._$Do?.setConnected(!0)}disconnectedCallback(){super.disconnectedCallback(),this._$Do?.setConnected(!1)}render(){return _}}re._$litElement$=!0,re.finalized=!0,globalThis.litElementHydrateSupport?.({LitElement:re});const ne=globalThis.litElementPolyfillSupport;ne?.({LitElement:re}),(globalThis.litElementVersions??=[]).push("4.1.1");class ae{static nodeColors={black:n``,blue:n``,darkBlue:n``,darkerBlue:n``,darkTurquoise:n``,gray:n``,green:n``,intenseGreen: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=20;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=[-ae.gridSize,-.5*ae.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])(?{const r=100-e,n=s?i-e+50:50,a=s?r+t-e:r-t+e;return`M ${e} 0 C ${t.toFixed(2)} 0, ${i.toFixed(2)} 0, ${n.toFixed(2)} 50 S ${a.toFixed(2)} 100, ${r.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",clearDelegate:"/Script/BlueprintGraph.K2Node_ClearDelegate",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",eAttachmentRule:"/Script/Engine.EAttachmentRule",edGraph:"/Script/Engine.EdGraph",eDrawDebugTrace:"/Script/Engine.EDrawDebugTrace",eMaterialSamplerType:"/Script/Engine.EMaterialSamplerType",eNiagara_Float4Channel:"/Niagara/Enums/ENiagara_Float4Channel.ENiagara_Float4Channel",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",eWorldPositionIncludedOffsets:"/Script/Engine.EWorldPositionIncludedOffsets",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",materialExpressionComponentMask:"/Script/Engine.MaterialExpressionComponentMask",materialExpressionConstant:"/Script/Engine.MaterialExpressionConstant",materialExpressionConstant2Vector:"/Script/Engine.MaterialExpressionConstant2Vector",materialExpressionConstant3Vector:"/Script/Engine.MaterialExpressionConstant3Vector",materialExpressionConstant4Vector:"/Script/Engine.MaterialExpressionConstant4Vector",materialExpressionFunctionInput:"/Script/Engine.MaterialExpressionFunctionInput",materialExpressionLogarithm:"/Script/InterchangeImport.MaterialExpressionLogarithm",materialExpressionLogarithm10:"/Script/Engine.MaterialExpressionLogarithm10",materialExpressionLogarithm2:"/Script/Engine.MaterialExpressionLogarithm2",materialExpressionMaterialFunctionCall:"/Script/Engine.MaterialExpressionMaterialFunctionCall",materialExpressionSquareRoot:"/Script/Engine.MaterialExpressionSquareRoot",materialExpressionSubtract:"/Script/Engine.MaterialExpressionSubtract",materialExpressionTextureCoordinate:"/Script/Engine.MaterialExpressionTextureCoordinate",materialExpressionTextureSample:"/Script/Engine.MaterialExpressionTextureSample",materialExpressionWorldPosition:"/Script/Engine.MaterialExpressionWorldPosition",materialGraphNode:"/Script/UnrealEd.MaterialGraphNode",materialGraphNodeComment:"/Script/UnrealEd.MaterialGraphNode_Comment",metasoundEditorGraphExternalNode:"/Script/MetasoundEditor.MetasoundEditorGraphExternalNode",multiGate:"/Script/BlueprintGraph.K2Node_MultiGate",niagaraBool:"/Script/Niagara.NiagaraBool",niagaraClipboardContent:"/Script/NiagaraEditor.NiagaraClipboardContent",niagaraDataInterfaceCollisionQuery:"/Script/Niagara.NiagaraDataInterfaceCollisionQuery",niagaraDataInterfaceCurlNoise:"/Script/Niagara.NiagaraDataInterfaceCurlNoise",niagaraDataInterfaceVolumeTexture:"/Script/Niagara.NiagaraDataInterfaceVolumeTexture",niagaraFloat:"/Script/Niagara.NiagaraFloat",niagaraInt32:"/Script/Niagara.NiagaraInt32",niagaraNodeConvert:"/Script/NiagaraEditor.NiagaraNodeConvert",niagaraNodeFunctionCall:"/Script/NiagaraEditor.NiagaraNodeFunctionCall",niagaraNodeInput:"/Script/NiagaraEditor.NiagaraNodeInput",niagaraNodeOp:"/Script/NiagaraEditor.NiagaraNodeOp",niagaraParameterMap:"/Script/Niagara.NiagaraParameterMap",niagaraPosition:"/Script/Niagara.NiagaraPosition",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",quat4f:"/Script/CoreUObject.Quat4f",removeDelegate:"/Script/BlueprintGraph.K2Node_RemoveDelegate",reverseForEachLoop:"/Engine/EditorBlueprintResources/StandardMacros.StandardMacros:ReverseForEachLoop",rotator:"/Script/CoreUObject.Rotator",select:"/Script/BlueprintGraph.K2Node_Select",self:"/Script/BlueprintGraph.K2Node_Self",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",vector2f:"/Script/CoreUObject.Vector2f",vector3f:"/Script/CoreUObject.Vector3f",vector4f:"/Script/CoreUObject.Vector4f",whileLoop:"/Engine/EditorBlueprintResources/StandardMacros.StandardMacros:WhileLoop"};static pinInputWrapWidth=145;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.type}`:"")+"_"+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.eAttachmentRule]:["KeepRelative","KeepWorld","SnapToTarget"],[this.paths.eDrawDebugTrace]:["None","ForOneFrame","ForDuration","Persistent"],[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.eNiagara_Float4Channel]:[["NewEnumerator0","R"],["NewEnumerator1","G"],["NewEnumerator2","B"],["NewEnumerator3","A"]],[this.paths.eSamplerSourceMode]:["From texture asset","Shared: Wrap","Shared: Clamp","Hidden"],[this.paths.eSearchCase]:["CaseSensitive","IgnoreCase"],[this.paths.eWorldPositionIncludedOffsets]:["Absolute World Position (Including Material Shader Offsets)","Absolute World Position (Excluding Material Shader Offsets)","Camera Relative World Position (Including Material Shader Offsets)","Camera Relative World Position (Excluding Material Shader Offsets)"],[this.paths.eSearchDir]:["FromStart","FromEnd"],[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.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 rgba=["R","G","B","A"];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 oe{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 roundDecimals(e,t=1){const i=10**t;return Math.round(e*i)/i}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/oe.getScale(t),r=t.getBoundingClientRect();return[Math.round((e[0]-r.x)*s),Math.round((e[1]-r.y)*s)]}static isSerialized(e,t){return e.attributes?.[t]?.serialized??e.constructor.attributes?.[t]?.serialized??!1}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]]:oe.objectGet(e[t[0]],t.slice(1),i):i}}static objectSet(e,t,i,s=Object){if(!(t instanceof Array))throw new TypeError("Expected keys to be an array.");if(1==t.length){if(t[0]in e||void 0===e[t[0]])return e[t[0]]=i,!0}else if(t.length>0)return e[t[0]]instanceof Object||(e[t[0]]=new s),oe.objectSet(e[t[0]],t.slice(1),i,s);return!1}static snapToGrid(e,t,i){return 1===i?[e,t]:[i*Math.floor(e/i),i*Math.floor(t/i)]}static mergeArrays(e=[],t=[],i=(e,t)=>e==t,s=e=>{}){let r=[];e=[...e],t=[...t];e:for(;;){for(let n=0;n(s(e),e))),...e.splice(0,1)),t.shift();continue e}break e}return r.push(...e),r.push(...t.filter((e=>!r.some((t=>i(t,e))))).map(((e,t)=>(s(e),e)))),r}static escapeNewlines(e){return e.replaceAll("\n","\\n").replaceAll("\t","\\t")}static escapeString(e,t=!0){let i=e.replaceAll(new RegExp(`(${ae.stringEscapedCharacters.source})`,"g"),"\\$1");return t&&(i=i.replaceAll("\n","\\n").replaceAll("\t","\\t")),i}static unescapeString(e){return e.replaceAll(new RegExp(ae.unescapedBackslash.source+"t","g"),"\t").replaceAll(new RegExp(ae.unescapedBackslash.source+"n","g"),"\n").replaceAll(new RegExp(`\\\\(${ae.stringEscapedCharacters.source})`,"g"),"$1")}static clearHTMLWhitespace(e){return e.replaceAll(" "," ").replaceAll(/|/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(ae.nameRegexSpaceReplacement," ").trim().split(" ").map((e=>oe.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,t=!1){const i=t?/([^\.\/]+?)(?:_\d+)$/:/([^\.\/]+)$/;return e.match(i)?.[1]??""}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 getFirstWordOrder(e){return new RegExp(/\s*/.source+e.join(/[^\n]+\n\s*/.source)+/\s*/.source)}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;oe.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 re{#e;get blueprint(){return this.#e}set blueprint(e){this.#e=e}#t;get entity(){return this.#t}set entity(e){this.#t=e}#i;get template(){return this.#i}isInitialized=!1;isSetup=!1;inputObjects=[];initialize(e,t){this.requestUpdate(),this.#t=e,this.#i=t,this.#i.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(ae.removeEventName);this.dispatchEvent(e)}isSameGraph(e){return this.blueprint&&this.blueprint==e?.blueprint}}class ce{static arrayPin=z``;static branchNode=z``;static breakStruct=z``;static cast=z``;static close=z``;static convert=z``;static correct=z``;static delegate=z``;static doN=z``;static doOnce=z``;static enum=z``;static event=z``;static execPin=z``;static expandIcon=z``;static flipflop=z``;static forEachLoop=z``;static functionSymbol=z``;static gamepad=z``;static genericPin=z``;static keyboard=z``;static loop=z``;static macro=z``;static mapPin=z``;static makeArray=z``;static makeMap=z``;static makeSet=z``;static makeStruct=z``;static metasoundFunction=z``;static mouse=z``;static node=z``;static operationPin=z``;static pcgStackPin=z``;static pcgPin=z``;static pcgParamPin=z``;static pcgSpatialPin=z``;static plusCircle=z``;static questionMark=z``;static referencePin=z``;static reject=z``;static setPin=z``;static select=z``;static sequence=z``;static sound=z``;static spawnActor=z``;static staticPin=z``;static switch=z``;static timer=z``;static touchpad=z``}class ue{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,current:e,index:t}}}class he{static indentation=" ";static highlight="Last valid parser";Self;static frame(e,t="",i=""){t=e?"[ "+t+" ]":"";let s=e.split("\n");const r=Math.max(...s.map((e=>e.length))),n=r";const r=this.isVisited(i),n=this.isHighlighted(e,i);let a=r?"<...>":this.doToString(e,n?"":t,i,s);return n&&(a=he.frame(a,he.highlight,t)),a}doToString(e,t,i,s){return`${this.constructor.name} does not implement toString()`}}class pe extends he{#s;get value(){return this.#s}constructor(e){super(),this.#s=e}parse(e,t,i,s){i=this.makePath(i,s);const r=t+this.#s.length,n=e.input.substring(t,r);return this.#s===n?ue.makeSuccess(r,this.#s,i,r):ue.makeFailure()}doToString(e,t,i,s){return`"${this.value.replaceAll("\n","\\n").replaceAll('"','\\"')}"`}}class de extends he{static instance=new de;parse(e,t,i,s){return i=this.makePath(i,s),ue.makeSuccess(t,"",i,0)}doToString(e,t,i,s){return""}}class me extends he{#r;get parsers(){return this.#r}constructor(...e){super(),this.#r=e}parse(e,t,i,s){i=this.makePath(i,s);const r=ue.makeSuccess(0,"");for(let s=0;sr.bestPosition&&(r.bestParser=n.bestParser,r.bestPosition=n.bestPosition),n.status)return r.value=n.value,r.position=n.position,r}return r.status=!1,r.value=null,r}doToString(e,t,i,s){if(2===this.#r.length&&this.#r[1]instanceof de){let s=this.#r[0].toString(e,t,i,0);return this.#r[0]instanceof pe||(s="<"+s+">"),s+="?",s}const r=t+he.indentation;let n="ALT<\n"+r+this.#r.map(((t,s)=>t.toString(e,r+" ".repeat(0===s?0:he.indentation.length-2),i,s))).join("\n"+r+"| ")+"\n"+t+">";return n}}class ge extends he{#n;get parser(){return this.#n}#a;constructor(e,t){super(),this.#n=e,this.#a=t}parse(e,t,i,s){i=this.makePath(i,s);const r=this.#n.parse(e,t,i,0);if(!r.status)return r;const n=this.#a(r.value,e.input,r.position).getParser().parse(e,r.position,i,0);return r.bestPosition>n.bestPosition&&(n.bestParser=r.bestParser,n.bestPosition=r.bestPosition),n}doToString(e,t,i,s){return this.#n.toString(e,t,i,0)+" => chained"}}class be extends he{static instance=new be;parse(e,t,i,s){return ue.makeFailure()}doToString(e,t,i,s){return""}}class ve extends he{#n;get parser(){return this.#n}#o="";constructor(e,t){super(),this.#n=e,this.#o=t}makePath(e,t){return e}parse(e,t,i,s){return this.parse=this.#n.parse.bind(this.#n),this.parse(e,t,i,s)}doToString(e,t,i,s){let r=this.#n.toString(e,"",i,s);return r=he.frame(r,this.#o,t),r}}class fe extends he{#n;#l;constructor(e){super(),this.#n=e}makePath(e,t){return e}isHighlighted(e,t){if(super.isHighlighted(e,t)){const i={parent:t,parser:this.#l,index:0};e.highlighted=e.highlighted instanceof he?this.#l:i}return!1}resolve(){return this.#l||(this.#l=this.#n().getParser()),this.#l}parse(e,t,i,s){return this.resolve(),this.parse=this.#l.parse.bind(this.#l),this.parse(e,t,i,s)}doToString(e,t,i,s){return this.resolve(),this.doToString=this.#l.toString.bind(this.#l),this.doToString(e,t,i,s)}}class ye extends he{#n;get parser(){return this.#n}#c;get type(){return this.#c}static Type={NEGATIVE_AHEAD:"?!",NEGATIVE_BEHIND:"?String.raw`[^${e}\\]*(?:\\.[^${e}\\]*)*`;static#m=/[-\+]?(?:\d*\.)?\d+/;static common={number:new RegExp(this.#m.source+String.raw`(?!\.)`),numberInteger:/[\-\+]?\d+(?!\.\d)/,numberNatural:/\d+/,numberExponential:new RegExp(this.#m.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.#d('"')})"`),singleQuotedString:new RegExp(`'(${this.#d("'")})'`),backtickQuotedString:new RegExp("`("+this.#d("`")+")`")};constructor(e,t){super(),this.#u=e,this.#h=new RegExp(`^(?:${e.source})`,e.flags),this.#p=t}parse(e,t,i,s){i=this.makePath(i,s);const r=this.#h.exec(e.input.substring(t));r&&(t+=r[0].length);return r?ue.makeSuccess(t,this.#p(r),i,t):ue.makeFailure()}doToString(e,t,i,s){let r="/"+this.#u.source+"/";const n=Object.entries(we.common).find((([e,t])=>t.source===this.#u.source))?.[0];return n&&(r="P."+n),r}}class Se extends he{#n;get parser(){return this.#n}#g;get mapper(){return this.#g}constructor(e,t){super(),this.#n=e,this.#g=t}isHighlighted(e,t){if(super.isHighlighted(e,t)){const i={parent:t,parser:this.#n,index:0};e.highlighted=e.highlighted instanceof he?this.#n:i}return!1}parse(e,t,i,s){i=this.makePath(i,s);const r=this.#n.parse(e,t,i,0);return r.status&&(r.value=this.#g(r.value)),r}doToString(e,t,i,s){let r=this.#n.toString(e,t,i,0);if(this.#n instanceof we&&Object.values(we.common).includes(this.#n.regexp))return this.#n.regexp===we.common.numberInteger&&this.#g===BigInt?"P.numberBigInteger":r;let n=this.#g.toString();return(n.length>60||n.includes("\n"))&&(n="(...) => { ... }"),r+=` -> map<${n}>`,r}}class Ee extends we{static#g=e=>e;constructor(e){super(e,Ee.#g)}}class Ce extends we{constructor(e,t=0){super(e,(e=>e[t]))}}class Ne extends he{#r;get parsers(){return this.#r}constructor(...e){super(),this.#r=e}parse(e,t,i,s){i=this.makePath(i,s);const r=new Array(this.#r.length),n=ue.makeSuccess(t,r);for(let t=0;tn.bestPosition&&(n.bestParser=s.bestParser,n.bestPosition=s.bestPosition),!s.status){n.status=!1,n.value=null;break}n.value[t]=s.value,n.position=s.position}return n}doToString(e,t,i,s){const r=t+he.indentation,n="SEQ<\n"+r+this.#r.map(((t,s)=>t.toString(e,r,i,s))).join("\n"+r)+"\n"+t+">";return n}}class xe extends he{#n;get parser(){return this.#n}#b;get min(){return this.#b}#v;get max(){return this.#v}constructor(e,t=0,i=Number.POSITIVE_INFINITY){if(super(),t>i)throw new Error("Min is greater than max");this.#n=e,this.#b=t,this.#v=i}parse(e,t,i,s){i=this.makePath(i,s);const r=ue.makeSuccess(t,[],i);for(let t=0;tr.bestPosition&&(r.bestParser=s.bestParser,r.bestPosition=s.bestPosition),!s.status){te;static#y=([e,t])=>t;static#w=([e,t])=>[e,...t];static#S=e=>e instanceof Array?e.join(""):e;static number=this.reg(we.common.number).map(Number);static numberInteger=this.reg(we.common.numberInteger).map(Number);static numberBigInteger=this.reg(this.numberInteger.getParser().parser.regexp).map(BigInt);static numberNatural=this.reg(we.common.numberNatural).map(Number);static numberExponential=this.reg(we.common.numberExponential).map(Number);static numberUnit=this.reg(we.common.numberUnit).map(Number);static numberByte=this.reg(we.common.numberByte).map(Number);static whitespace=this.reg(we.common.whitespace);static whitespaceOpt=this.reg(we.common.whitespaceOpt);static whitespaceInline=this.reg(we.common.whitespaceInline);static whitespaceInlineOpt=this.reg(we.common.whitespaceInlineOpt);static whitespaceMultiline=this.reg(we.common.whitespaceMultiline);static doubleQuotedString=this.reg(we.common.doubleQuotedString,1);static singleQuotedString=this.reg(we.common.singleQuotedString,1);static backtickQuotedString=this.reg(we.common.backtickQuotedString,1);constructor(e,t=!1){this.#n=e}static#E(e){const t=[];for(;e;)t.push(e),e=e.parent;t.reverse();let i=new Map;for(let e=1;ei<=s||i>e))),i.set(t[e].current,s),t.splice(s+1,e-s),e=s):i.set(t[e].current,e)}return t[t.length-1]}getParser(){return this.#n}run(e){const t=this.#n.parse(ue.makeContext(this,e),0,ue.makePathNode(),0);return t.position!==e.length&&(t.status=!1),t}parse(e,t=!0){const i=this.run(e);if(i.status)return i.value;const s=[Math.ceil(30),Math.floor(30)],r=Pe.lineColumnFromOffset(e,i.bestPosition);let n=i.bestPosition;const a=e.replaceAll(/^(\s)+|\s{6,}|\s*?\n\s*/g,((e,t,s)=>{let r=t?"...":" ... ";return s<=i.bestPosition&&(i.bestPosition0&&(u="..."+u,c+=3),s[1]e.getParser()))))}static alt(...e){return new this(new me(...e.map((e=>e.getParser()))))}static lookahead(e){return new this(new ye(e.getParser(),ye.Type.POSITIVE_AHEAD))}static lazy(e){return new this(new fe(e))}times(e,t=e){return new Pe(new xe(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(e=""){let t=Pe.success();return""!==e&&(t=t.map((()=>e))),Pe.alt(this,t)}sepBy(e,t=1,i=!1){let s=Pe.seq(this,Pe.seq(e,this).map(Pe.#y).atLeast(t-1),...i?[e.opt([])]:[]).map(Pe.#w);return 0===t&&(s=s.opt([])),s}skipSpace(){return Pe.seq(this,Pe.whitespaceOpt).map(Pe.#f)}map(e){return new Pe(new Se(this.#n,e))}chain(e){return new Pe(new ge(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.#S)}label(e=""){return new Pe(new ve(this.#n,e))}toString(e="",t=!1,i=null){i instanceof Pe&&(i=i.getParser());const s=ue.makeContext(this,"");s.highlighted=i;const r=ue.makePathNode();return(t?"\n"+e:"")+this.#n.toString(s,e,r)}}class ke{static same=e=>e;static notWrapped=(e,t)=>t;static defaultWrapped=(e,t)=>`${e.#C}(${t})`;static wrap=this.defaultWrapped;static attributeSeparator=",";static keySeparator="=";static printKey=e=>e;static grammar=Pe.lazy((()=>this.createGrammar()));static unknownEntityGrammar;static unknownEntity;static attributes={};static lookbehind="";static default;static nullable=!1;static ignored=!1;static serialized=!1;static expected=!1;static inlined=!1;static quoted;static silent=!1;static trailing=!1;#N;get keys(){return this.#N??Object.keys(this)}set keys(e){this.#N=[...new Set(e)]}#C=this.constructor.lookbehind;get lookbehind(){return this.#C.trim()}set lookbehind(e){this.#C=e}#x=this.constructor.ignored;get ignored(){return this.#x}set ignored(e){this.#x=e}#P=this.constructor.inlined;get inlined(){return this.#P}set inlined(e){this.#P=e}#k;get quoted(){return this.#k??this.constructor.quoted??!1}set quoted(e){this.#k=e}#L;get trailing(){return this.#L??this.constructor.trailing??!1}set trailing(e){this.#L=e}constructor(e={}){const t=this.constructor.attributes,i=oe.mergeArrays(Object.keys(e),Object.entries(t).filter((([e,t])=>void 0!==t.default)).map((([e,t])=>e)));for(const s of i){if(void 0!==e[s]){e[s].constructor===Object&&(e[s]=new(void 0!==t[s]?t[s]:ke.unknownEntity)(e[s]));const i=t[s];if(this[s]=e[s],i?.compute){const t=i.compute(this).grammar.run(e[s].toString());t.status&&(this[s]=t.value)}continue}const i=t[s];void 0===i.default||(this[s]=i.default(i))}}static createGrammar(){return this.unknownEntityGrammar}static actualClass(){let e=this;for(;!e.name;)e=Object.getPrototypeOf(e);return e}static className(){return this.actualClass().name}static asUniqueClass(e=!1){let t=this;return(this.name.length||e)&&(t=class extends(this){},t.grammar=t.createGrammar()),t}static withLookbehind(e){const t=this.asUniqueClass();return t.lookbehind=e,t}static withDefault(e=e=>new e){const t=this.asUniqueClass();return t.default=e,t}static flagNullable(e=!0){const t=this.asUniqueClass();return t.nullable=e,t}static flagIgnored(e=!0){const t=this.asUniqueClass();return t.ignored=e,t}static flagSerialized(e=!0){const t=this.asUniqueClass();return t.serialized=e,t}static flagInlined(e=!0){const t=this.asUniqueClass();return t.inlined=e,t}static flagQuoted(e=!0){const t=this.asUniqueClass();return t.quoted=e,t}static flagSilent(e=!0){const t=this.asUniqueClass();return t.silent=e,t}static flagTrailing(e=!0){const t=this.asUniqueClass();return t.trailing=e,t}static asSerializedString(e){return`"${e.replaceAll(/(?<=(?:[^\\]|^)(?:\\\\)*?)"/g,'\\"')}"`}showProperty(e){let t=this[e];const i=t.constructor;if(i.silent&&void 0!==i.default){void 0===i["#default"]&&(i["#default"]=i.default(i));const e=i["#default"];return!t.equals(e)}return!0}listenAttribute(e,t){const i=Object.getOwnPropertyDescriptor(this,e),s=i.set;s?(i.set=e=>{s(e),t(e)},Object.defineProperties(this,{[e]:i})):i.value&&Object.defineProperties(this,{["#"+e]:{value:i.value,writable:!0,enumerable:!1},[e]:{enumerable:!0,get(){return this["#"+e]},set(i){t(i),this["#"+e]=i}}})}doSerialize(e=!1,t="",i=this.constructor,s=i.printKey,r=i.keySeparator,n=i.attributeSeparator,a=i.wrap){const o=i!==this.constructor;let l="",c=!0;const u=this instanceof ke?this.keys:Object.keys(this);for(const a of u){const o=this[a],u=o?.constructor;if(void 0===o||this instanceof ke&&!this.showProperty(a))continue;c?c=!1:l+=n;let h=this instanceof Array?`(${a})`:a;if(h.length&&(i.attributes[a]?.quoted||o.quoted)&&(h=`"${h}"`),o.inlined){const a="ArrayEntity"===u.className()?e=>s(`${h}${e}`):e=>s(`${h}.${e}`);l+=o.serialize(e,t,void 0,a,r,n,i.notWrapped);continue}h=s(h),h.length&&(l+=(n.includes("\n")?t:"")+h+r);let p=o?.serialize(e,t);l+=p}return this instanceof ke&&(o&&i.trailing||this.trailing)&&l.length&&(l+=n),a(this,l)}serialize(e=!1,t="",i=this.constructor,s=i.printKey,r=i.keySeparator,n=i.attributeSeparator,a=i.wrap){this.constructor;let o=this instanceof Array?ke.prototype.doSerialize.bind(this)(e,t,i,s,r,n,a):this.doSerialize(e,t,i,s,r,n,a);return i.serialized&&(o=ke.asSerializedString(o)),o}equals(e){if(!(e instanceof ke))return!1;const t=Object.keys(this),i=Object.keys(e),s=this.constructor.actualClass(),r=e.constructor.actualClass();if(!(t.length===i.length&&this.lookbehind==e.lookbehind&&(e instanceof s||this instanceof r)))return!1;for(let s=0;s{},toAttribute:(e,t)=>!0===e?"true":!1===e?"false":""};#A=!0;get uppercase(){return this.#A}set uppercase(e){this.#A=e}static createGrammar(){return Pe.regArray(/(true)|(True)|(false)|(False)/).map((e=>{const t=e[1]??e[2]?new this(!0):new this(!1);return t.uppercase=void 0!==(e[2]??e[4]),t})).label("BooleanEntity")}constructor(e=!1){super(),this.value=e}serialize(e=!1,t="",i=this.constructor){let s=this.value?this.#A?"True":"true":this.#A?"False":"false";return i.serialized&&(s=`"${s}"`),s}valueOf(){return this.value}}class Ae{static#M=new Map;static registerElement(e,t){Ae.#M.set(e,t)}static getConstructor(e){return Ae.#M.get(e)}}class Me extends ke{static alternatives=[];static className(){let e=super.className();return this.alternatives.length&&(e+=".accepting("+this.alternatives.map((e=>e.className())).join(", ")+")"),e}static createGrammar(){const e=this.alternatives.map((e=>e.grammar));return 0==this.alternatives.length||e.includes(this.unknownEntityGrammar)?this.unknownEntityGrammar:Pe.alt(...e)}static accepting(...e){const t=this.asUniqueClass();return t.alternatives=e,t.grammar=t.createGrammar(),t}}class Ie{static numberRegexSource=Pe.number.getParser().parser.regexp.source;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=Ie.separatedBy("[a-zA-Z]","_");static Symbol=/[a-zA-Z_]\w*/;static DotSeparatedSymbols=Ie.separatedBy(this.Symbol.source,"\\.");static MultipleWordsSymbols=Ie.separatedBy(this.Symbol.source,"(?:\\.|\\ +)");static PathFragment=Ie.separatedBy(this.Symbol.source,"[\\.:]");static PathSpaceFragment=Ie.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 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=>oe.unescapeString(e)));static colorValue=Pe.numberByte;static word=Pe.reg(Ie.Regex.Word);static symbol=Pe.reg(Ie.Regex.Symbol);static symbolQuoted=Pe.reg(new RegExp('"('+Ie.Regex.Symbol.source+')"'),1);static attributeName=Pe.reg(Ie.Regex.DotSeparatedSymbols);static attributeNameQuoted=Pe.reg(new RegExp('"('+Ie.Regex.InsideString.source+')"'),1);static guid=Pe.reg(new RegExp(`${Ie.Regex.HexDigit.source}{32}`));static commaSeparation=Pe.reg(/\s*,\s*(?!\))/);static commaOrSpaceSeparation=Pe.reg(/\s*,\s*(?!\))|\s+/);static equalSeparation=Pe.reg(/\s*=\s*/);static hexColorChannel=Pe.reg(new RegExp(Ie.Regex.HexDigit.source+"{2}"));static getAttribute(e,[t,...i]){const s=e?.attributes?.[t];if(s){if(s.prototype instanceof Me)for(const e of s.alternatives){const t=this.getAttribute(e,i);if(t)return t}return i.length>0?this.getAttribute(s,i):s}}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(ae.keysSeparator),n=this.getAttribute(e,r),a=n?n.grammar:ke.unknownEntityGrammar,o=r.length>1;return a.map((e=>t=>{oe.objectSet(t,r,e),r.reduce(((e,t,i)=>(e[t].inlined=o&&i{let s={};return e.length&&(s.lookbehind=e),t.forEach((e=>e(s))),s.trailing=void 0!==i,s})).chain((t=>{(e.lookbehind instanceof Array||e.lookbehind!==r)&&(e=e.withLookbehind(r));const s=Object.keys(t),n=Object.keys(e.attributes);return null!=i?Pe.success().assert((e=>s.filter((e=>n.includes(e))).length/n.length>=i)).map((()=>new e(t))):Pe.success().map((()=>new e(t)))}))}}class Te extends ke{static grammar=this.createGrammar();constructor(e=0){super(),this.value=e}static createGrammar(){return Pe.number.map((e=>new this(e)))}serialize(e=!1,t="",i=this.constructor){let s=this.value.toFixed(6);return i.serialized&&(s=`"${s}"`),s}valueOf(){return this.value}toString(){return this.value.toString()}}class Oe extends ke{static attributes={...super.attributes,R:Te.withDefault(),G:Te.withDefault(),B:Te.withDefault(),A:Te.withDefault((e=>new e(1)))};static grammar=this.createGrammar();#I=new Te;get H(){return this.#I}set H(e){this.#I=e}#T=new Te;get S(){return this.#T}set S(e){this.#T=e}#O=new Te;get V(){return this.#O}set V(e){this.#O=e}constructor(e){super(e),e instanceof Array&&(e={R:e[0]??0,G:e[1]??0,B:e[2]??0,A:e[3]??1}),this.R,this.G,this.B,this.A,this.#D()}static createGrammar(){return Ie.createEntityGrammar(this,Ie.commaSeparation,.5).label("LinearColorEntity")}static printLinearColor(e){return`${Math.round(255*e.R.valueOf())}, ${Math.round(255*e.G.valueOf())}, ${Math.round(255*e.B.valueOf())}`}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:new Te(1),G:new Te(1),B:new Te(1)})}static getLinearColorFromHexGrammar(){const e=/[0-9a-fA-F]/;return Pe.regArray(new RegExp("#("+e.source+"{2})("+e.source+"{2})("+e.source+"{2})("+e.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,Ie.commaSeparation,Pe.numberByte,Ie.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())}#D(){const e=this.R.value,t=this.G.value,i=this.B.value;if(oe.approximatelyEqual(e,t)&&oe.approximatelyEqual(e,i)&&oe.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)}toArray(){return[this.R.value,this.G.value,this.B.value,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.#D()}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.#D()}toString(){return Oe.printLinearColor(this)}}class De extends ke{static type;constructor(e=null){super();const t=this.constructor;e??=void 0!==t.default?t.default(t).getter:e,this.getter=e}static createGrammar(e=this.type?.grammar??Pe.lazy((()=>this.unknownEntityGrammar))){return this.type?.grammar.map((e=>new this((()=>e))))}static withDefault(e=e=>new e((()=>new e.type))){return super.withDefault(e)}static of(e){const t=this.asUniqueClass();return t.type=e,t.grammar=t.createGrammar(),t}doSerialize(e=!1,t="",i=this.constructor,s=i.printKey,r=i.keySeparator,n=i.attributeSeparator,a=i.wrap){return this.getter().serialize(e,t,i.type,s,r,n,a)}equals(e){return e instanceof De&&(e=e.getter?.()),this.getter?.().equals(e)}valueOf(e){return this.getter(e).valueOf()}toString(){return this.getter().toString()}}class $e extends ke{static numberRegexSource=String.raw`${Ie.numberRegexSource}(?<=(?:\.(\d*0+))?)`;static grammar=this.createGrammar();static precision;#$;get precision(){return this.constructor.precision??this.#$}set precision(e){this.#$=e}_value;get value(){return this._value}set value(e){-0===e&&(e=0),this._value=e}constructor(e=0,t=null){super(),this.value=Number(e),null!==t&&(this.#$=Number(t))}static createGrammar(){return Pe.regArray(new RegExp(`(?${this.numberRegexSource})|(?\\+?inf)|(?-inf)`)).map((({2:e,groups:{n:t,posInf:i,negInf:s}})=>new this(t?Number(t):i?Number.POSITIVE_INFINITY:Number.NEGATIVE_INFINITY,e?.length))).label("NumberEntity")}static withPrecision(e=0){const t=this.asUniqueClass();return t.precision=e,t}static printNumber(e){return e==Number.POSITIVE_INFINITY?"inf":e==Number.NEGATIVE_INFINITY?"-inf":oe.minDecimals(e)}serialize(e=!1,t="",i=this.constructor){if(this.value===Number.POSITIVE_INFINITY)return"+inf";if(this.value===Number.NEGATIVE_INFINITY)return"-inf";const s=i.precision??this.precision;let r=void 0!==s?this.value.toFixed(s):this.value.toString();return i.serialized&&(r=`"${r}"`),r}valueOf(){return this.value}toString(){return this.value.toString()}}class Ve extends ke{static attributes={...super.attributes,X:$e.withDefault(),Y:$e.withDefault(),Z:$e.withDefault()};static grammar=this.createGrammar();constructor(e){super(e),this.X,this.Y,this.Z}static createGrammar(){return Ie.createEntityGrammar(this,Ie.commaSeparation,1).label("VectorEntity")}toArray(){return[this.X.valueOf(),this.Y.valueOf(),this.Z.valueOf()]}}const Be=ae.paths,Re=/\/Script\/SequencerScripting\.MovieSceneScripting(.+)Channel/,Ge={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:"`"},He={"Boolean::LogicAnd":"Logic AND","Boolean::LogicEq":"==","Boolean::LogicNEq":"!=","Boolean::LogicNot":"Logic NOT","Boolean::LogicOr":"Logic OR","Integer::BitAnd":"Bitwise AND","Integer::BitLShift":"Bitwise Left Shift","Integer::BitNot":"Bitwise NOT","Integer::BitOr":"Bitwise OR","Integer::BitRShift":"Bitwise Right Shift","Integer::BitXOr":"Bitwise XOR","Integer::EnumEq":"==","Integer::EnumNEq":"!=","Matrix::MatrixMultiply":"Multiply (Matrix * Matrix)","Matrix::MatrixVectorMultiply":"Multiply (Matrix * Vector4)",...Object.fromEntries(Object.entries({Add:"+",ArcCosine:"ArcCosine","ArcCosine(Degrees)":"ArcCos(D)","ArcCosine(Radians)":"ArcCos(R)",ArcSine:"ArcSine","ArcSine(Degrees)":"ArcSin(D)","ArcSine(Radians)":"ArcSin(R)","ArcTangent(Degrees)":"ArcTan(D)","ArcTangent(Radians)":"ArcTan(R)",CmpEQ:"==",CmpGE:">=",CmpGT:">",CmpLE:"<=",CmpLT:"<",CmpNEQ:"!=","Cosine(Degrees)":"Cos(D)","Cosine(Radians)":"Cos(R)",DegreesToRadians:"DegToRad",DistancePos:"Distance",Div:String.fromCharCode(247),FMod:"%",FModFast:"Modulo Fast",Length:"Len",Madd:`(A${String.fromCharCode(10799)}B)+C`,Mul:String.fromCharCode(10799),Negate:"-A",OneMinus:"1-A",PI:String.fromCharCode(960),RadiansToDegrees:"RadToDeg","Rand Float":"Random Float","Rand Integer":"Random Integer",Rand:"Random",Rcp:"Reciprocal",RSqrt:"Rcp Sqrt","Sine(Degrees)":"Sin(D)","Sine(Radians)":"Sin(R)",Subtract:"-","Tangent(Degrees)":"Tan(D)","Tangent(Radians)":"Tan(R)",TWO_PI:`2 ${String.fromCharCode(960)}`}).map((([e,t])=>["Numeric::"+e,t])))};function ze(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}}function _e(e){let t;switch(e.getType()){case Be.addDelegate:t??="Bind Event to ";case Be.clearDelegate:t??="Unbind all Events from ";case Be.removeDelegate:return t??="Unbind Event from ",t+oe.formatStringName(e.DelegateReference?.MemberName?.toString().replace(/Delegate$/,"")??"None");case Be.asyncAction:if(e.ProxyFactoryFunctionName)return oe.formatStringName(e.ProxyFactoryFunctionName?.toString());case Be.actorBoundEvent:case Be.componentBoundEvent:return`${oe.formatStringName(e.DelegatePropertyName?.toString())} (${e.ComponentPropertyName?.toString()??"Unknown"})`;case Be.callDelegate:return`Call ${e.DelegateReference?.MemberName?.toString()??"None"}`;case Be.createDelegate:return"Create Event";case Be.customEvent:if(e.CustomFunctionName)return e.CustomFunctionName?.toString();case Be.dynamicCast:return e.TargetType?`Cast To ${e.TargetType?.getName()}`:"Bad cast node";case Be.enumLiteral:return`Literal enum ${e.Enum?.getName()}`;case Be.event:return`Event ${(e.EventReference?.MemberName?.toString()??"").replace(/^Receive/,"")}`;case Be.executionSequence:return"Sequence";case Be.forEachElementInEnum:return`For Each ${e.Enum?.getName()}`;case Be.forEachLoopWithBreak:return"For Each Loop with Break";case Be.functionEntry:return"UserConstructionScript"===e.FunctionReference?.MemberName?.toString()?"Construction Script":e.FunctionReference?.MemberName?.toString();case Be.functionResult:return"Return Node";case Be.ifThenElse:return"Branch";case Be.makeStruct:if(e.StructType)return`Make ${e.StructType.getName()}`;case Be.materialExpressionComponentMask:{const t=e.getMaterialSubobject();if(t)return`Mask ( ${ae.rgba.filter((e=>!0===t[e].getter().value)).map((e=>e+" ")).join("")})`}case Be.materialExpressionConstant:t??=[e.getCustomproperties().find((e=>"Value"==e.PinName.toString()))?.DefaultValue];case Be.materialExpressionConstant2Vector:t??=[e.getCustomproperties().find((e=>"X"==e.PinName?.toString()))?.DefaultValue,e.getCustomproperties().find((e=>"Y"==e.PinName?.toString()))?.DefaultValue];case Be.materialExpressionConstant3Vector:case Be.materialExpressionConstant4Vector:if(!t){const i=e.getCustomproperties().find((e=>"Constant"==e.PinName?.toString()))?.DefaultValue;t=i instanceof Ve?[i.X,i.Y,i.Z].map((e=>e.valueOf())):i instanceof Oe?[i.R,i.G,i.B,i.A].map((e=>e.valueOf())):[]}if(t?.length>0)return t.map((e=>oe.printExponential(e))).join(",");t=void 0;break;case Be.materialExpressionFunctionInput:{const t=e.getMaterialSubobject();return`Input ${t?.InputName??"In"} (${t?.InputType?.value.match(/^.+?_(\w+)$/)?.[1]??"Vector3"})`}case Be.materialExpressionLogarithm:return"Ln";case Be.materialExpressionLogarithm10:return"Log10";case Be.materialExpressionLogarithm2:return"Log2";case Be.materialExpressionMaterialFunctionCall:const i=e.getMaterialSubobject()?.MaterialFunction;if(i)return i.getName();break;case Be.materialExpressionSquareRoot:return"Sqrt";case Be.materialExpressionSubtract:const s=e.getMaterialSubobject();if(s)return`Subtract(${s.ConstA??"1"},${s.ConstB??"1"})`;case Be.metasoundEditorGraphExternalNode:{const t=e.ClassName?.Name;if(t)return"Add"===t?"+":t}case Be.niagaraNodeConvert:return`Make ${(e.AutowireMakeType?.ClassStructOrEnum??"").toString().match(/(?:Niagara)?(\w+)['"]*$/)?.[1]??""}`;case Be.pcgEditorGraphNodeInput:return"Input";case Be.pcgEditorGraphNodeOutput:return"Output";case Be.spawnActorFromClass:let r=e.getCustomproperties().find((e=>"ReturnValue"==e.PinName.toString()))?.PinType?.PinSubCategoryObject?.getName();return"Actor"===r&&(r=null),`SpawnActor ${oe.formatStringName(r??"NONE")}`;case Be.switchEnum:return`Switch on ${e.Enum?.getName()??"Enum"}`;case Be.switchInteger:return"Switch on Int";case Be.variableGet:return"";case Be.variableSet:return"SET"}const i=e.getClass();let s=e.switchTarget();if(s)return"E"!==s[0]&&(s=oe.formatStringName(s)),`Switch on ${s}`;if(e.isComment())return e.NodeComment.toString();const r=e.getHIDAttribute();if(r){const e=r.toString();let t=function(e){let t=Ge[e];if(t)return t;if(t=ze(e)?.toString(),t)return t;const i=e.match(/NumPad([a-zA-Z]+)/);return i&&(t=ze(i[1]).toString(),t)?"Num "+t:void 0}(e)??oe.formatStringName(e);return i===Be.inputDebugKey?t="Debug Key "+t:i===Be.getInputAxisKeyValue&&(t="Get "+t),t}if(i===Be.macro)return oe.formatStringName(e.MacroGraphReference?.getMacroName());const n=e.getMaterialSubobject();if(n){let e=_e(n);return e=e.match(/Material Expression (.+)/)?.[1]??e,e}if(e.isPcg()&&e.getPcgSubobject()){let t=e.getPcgSubobject();return t.NodeTitle?t.NodeTitle.toString():_e(t)}const a=e.getSubgraphObject();if(a)return a.Graph.getName();const o=e.getSettingsObject();if(o){if(o.ExportPath?.valueOf()?.type===Be.pcgHiGenGridSizeSettings)return`Grid Size: ${o.HiGenGridSize?.toString().match(/\d+/)?.[0]?.concat("00")??o.HiGenGridSize?.toString().match(/^\w+$/)?.[0]??"256"}`;if(o.BlueprintElementInstance)return oe.formatStringName(o.BlueprintElementType.getName());if(o.Operation){const e=o.Name?.toString().match(/PCGMetadata(\w+)Settings_\d+/);if(e)return oe.formatStringName(e[1]+": "+o.Operation)}const e=o.getSubgraphObject();if(e&&e.Graph)return e.Graph.getName()}let l,c=e.FunctionReference?.MemberName?.toString();if(c){const t=e.FunctionReference.MemberParent?.path??"";switch(c){case"AddKey":let e=t.match(Re);if(e)return`Add Key (${oe.formatStringName(e[1])})`;case"Concat_StrStr":return"Append"}const i=c.match(ae.lineTracePattern);if(i)return"Line Trace"+("Multi"===i[1]?" Multi ":" ")+(""===i[2]?"By Channel":oe.formatStringName(i[2]));switch(t){case Be.blueprintGameplayTagLibrary:case Be.kismetMathLibrary:case Be.slateBlueprintLibrary:case Be.timeManagementBlueprintLibrary:const e=c.match(/[BF]([A-Z]\w+)/);switch(e&&(c=e[1]),c){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(c.startsWith("Add_"))return"+";if(c.startsWith("And_"))return"&";if(c.startsWith("Conv_"))return"";if(c.startsWith("Cross_"))return"cross";if(c.startsWith("Divide_"))return String.fromCharCode(247);if(c.startsWith("Dot_"))return"dot";if(c.startsWith("EqualEqual_"))return"==";if(c.startsWith("Greater_"))return">";if(c.startsWith("GreaterEqual_"))return">=";if(c.startsWith("Less_"))return"<";if(c.startsWith("LessEqual_"))return"<=";if(c.startsWith("Multiply_"))return String.fromCharCode(10799);if(c.startsWith("Not_"))return"~";if(c.startsWith("NotEqual_"))return"!=";if(c.startsWith("Or_"))return"|";if(c.startsWith("Percent_"))return"%";if(c.startsWith("Subtract_"))return"-";if(c.startsWith("Xor_"))return"^";break;case Be.blueprintSetLibrary:{const e=c.match(/Set_(\w+)/);if(e)return oe.formatStringName(e[1]).toUpperCase()}break;case Be.blueprintMapLibrary:{const e=c.match(/Map_(\w+)/);if(e)return oe.formatStringName(e[1]).toUpperCase()}break;case Be.kismetArrayLibrary:{const e=c.match(/Array_(\w+)/);if(e)return e[1].toUpperCase()}}return oe.formatStringName(c)}return e.OpName?He[e.OpName.toString()]??oe.formatStringName(e.OpName.toString().replaceAll(/(?:^\w+(?this.unknownEntityGrammar))){return this.inlined?e:Pe.seq(Pe.reg(/\(\s*/),e.sepBy(Ie.commaSeparation).opt(),Pe.reg(/\s*(,\s*)?\)/,1)).map((([e,t,i])=>{t=t instanceof Array?t:[];let s=this;return void 0!==i!==s.trailing&&(s=s.flagTrailing(void 0!==i)),new s(t)})).label(`ArrayEntity of ${this.type?.className()??"unknown values"}`)}static flagInlined(e=!0){const t=this.asUniqueClass();return t.inlined=e,t.grammar=t.createGrammar(),t}static of(e){const t=this.asUniqueClass();return t.type=e,t.grammar=t.createGrammar(),t}doSerialize(e=!1,t="",i=this.constructor,s=i.printKey,r=i.keySeparator,n=i.attributeSeparator,a=i.wrap){if(i.inlined)return super.serialize.bind(this.values,e,t,i,s,r,n,a)();let o=this.values.map((t=>t?.serialize(e))).join(i.attributeSeparator);return this.trailing&&(o+=i.attributeSeparator),`(${o})`}valueOf(){return this.values}equals(e){if(!(e instanceof Fe)||this.values.length!==e.values.length)return!1;for(let t=0;tje=e.default)).catch():je=window.crypto;class Ue extends ke{static grammar=this.createGrammar();static generateGuid(){let e=new Uint32Array(4);je.getRandomValues(e);let t="";return e.forEach((e=>{t+=("0".repeat(8)+e.toString(16).toUpperCase()).slice(-8)})),t}constructor(e=Ue.generateGuid()){super(),this.value=e}static createGrammar(){return Pe.reg(/[0-9A-F]{32}/i).map((e=>new this(e))).label("GuidEntity")}serialize(e=!1,t="",i=this.constructor){let s=this.value;return i.serialized&&(s=`"${s}"`),s}toString(){return this.value}}class Ke extends $e{static grammar=this.createGrammar();get value(){return super.value}set value(e){(e=Math.trunc(e))>=1<<31&&e<-(1<<31)&&(e=Math.floor(e),super.value=e)}static createGrammar(){return Pe.numberInteger.map((e=>new this(e)))}}class Ye extends Ke{static grammar=this.createGrammar();get value(){return super.value}set value(e){e=Math.round(oe.clamp(e,0)),super.value=e}static createGrammar(){return Pe.numberNatural.map((e=>new this(e)))}}const qe={Any:n``,"Any[]":n``,audio:n``,blue:n``,bool:n``,byte:n``,class:n``,default:n``,delegate:n``,enum:n``,exec:n``,float:n``,green:n``,int:n``,int32: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``,time:n``,Volume:n``,"Volume[]":n``,wildcard:n``,[ae.paths.linearColor]:n``,[ae.paths.niagaraBool]:n``,[ae.paths.niagaraDataInterfaceCollisionQuery]:n``,[ae.paths.niagaraDataInterfaceCurlNoise]:n``,[ae.paths.niagaraDataInterfaceVolumeTexture]:n``,[ae.paths.niagaraFloat]:n``,[ae.paths.niagaraInt32]:n``,[ae.paths.niagaraPosition]:n``,[ae.paths.quat4f]:n``,[ae.paths.rotator]:n``,[ae.paths.transform]:n``,[ae.paths.vector]:n``,[ae.paths.vector2f]:n``,[ae.paths.vector3f]:n``,[ae.paths.vector4f]:n``},Xe=n``;function Ze(e){let t,i=e.PinFriendlyName?e.PinFriendlyName.toString():oe.formatStringName(e.PinName?.toString()??"");return(t=e.PinToolTip?.toString().match(/\s*(.+?(?=\n)|.+\S)\s*/))&&t[1].toLowerCase()===i.toLowerCase()?t[1]:(i=i.replace(/^Module\./,""),i)}class We extends Ke{static grammar=this.createGrammar();get value(){return super.value}set value(e){(e=Math.trunc(e))>=0&&e<256&&(super.value=e)}createGrammar(){return Pe.numberByte.map((e=>new this(e)))}}class Qe extends ke{static grammar=this.createGrammar();static escapedCharacters=/['"\\]/g;static unescapedBackslash=/(?<=(?:[^\\]|^)(?:\\\\)*)\\(?!\\)/;constructor(e=""){super(),this.value=e}static createGrammar(){return Pe.doubleQuotedString.map((e=>new this(Qe.unescape(e)))).label("StringEntity")}static escape(e,t=!0){let i=e.replaceAll(new RegExp(`(${Qe.escapedCharacters.source})`,"g"),"\\$1");return t&&(i=i.replaceAll("\n","\\n").replaceAll("\t","\\t")),i}static unescape(e){return e.replaceAll(new RegExp(Qe.unescapedBackslash.source+"t","g"),"\t").replaceAll(new RegExp(Qe.unescapedBackslash.source+"n","g"),"\n").replaceAll(new RegExp(`\\\\(${Qe.escapedCharacters.source})`,"g"),"$1")}doSerialize(e=!1){let t=`"${Qe.escape(this.value)}"`;return e&&(t=Qe.escape(t,!1)),t}valueOf(){return this.value}toString(){return this.value}}class Je extends ke{static grammar=this.createGrammar();static f;static createGrammar(){return Qe.grammar}static from(e){const t=this.asUniqueClass();return t.f=e,t}static compute(e){return this.f(e)}}class et extends ke{static attributeConverter={fromAttribute:(e,t)=>new this(e),toAttribute:(e,t)=>e.toString()};static grammar=this.createGrammar();static createGrammar(){return Ie.symbol.map((e=>new this(e))).label("SymbolEntity")}constructor(e=""){super(),this.value=e}serialize(e=!1,t="",i=this.constructor){let s=this.value;return i.serialized&&(s=`"${s}"`),s}toString(){return this.value}}class tt extends et{static grammar=this.createGrammar();static createGrammar(){return Ie.symbol.map((e=>new this(e)))}}class it extends tt{static grammar=this.createGrammar();static createGrammar(){return Pe.reg(Ie.Regex.InsideString).map((e=>new this(e)))}}class st extends ke{static lookbehind="INVTEXT";static grammar=this.createGrammar();constructor(e=""){super(),this.value=e}static createGrammar(){return Pe.alt(Pe.seq(Pe.reg(new RegExp(`${this.lookbehind}\\s*\\(`)),Pe.doubleQuotedString,Pe.reg(/\s*\)/)).map((([e,t,i])=>t)),Pe.reg(new RegExp(this.lookbehind)).map((()=>""))).map((e=>new this(e))).label("InvariantTextEntity")}doSerialize(){return this.lookbehind+'("'+this.value+'")'}valueOf(){return this.value}toString(){return this.value}}class rt extends ke{static attributeSeparator=", ";static printKey=e=>"";static lookbehind="NSLOCTEXT";static attributes={...super.attributes,namespace:Qe.withDefault(),key:Qe.withDefault(),value:Qe.withDefault()};static grammar=this.createGrammar();constructor(e={}){super(e),this.namespace,this.key,this.value}static createGrammar(){return Pe.regArray(new RegExp(String.raw`${rt.lookbehind}\s*\(`+String.raw`\s*"(?${Ie.Regex.InsideString.source})"\s*,`+String.raw`\s*"(?${Ie.Regex.InsideString.source})"\s*,`+String.raw`\s*"(?${Ie.Regex.InsideString.source})"\s*`+String.raw`(?,\s+)?`+String.raw`\)`,"m")).map((({groups:{namespace:e,key:t,value:i,trailing:s}})=>new this({namespace:new this.attributes.namespace(oe.unescapeString(e)),key:new this.attributes.namespace(oe.unescapeString(t)),value:new this.attributes.namespace(oe.unescapeString(i)),trailing:void 0!==s}))).label("LocalizedTextEntity")}toString(){return oe.capitalFirstLetter(this.value.valueOf())}}class nt extends ke{static attributeSeparator=", ";static lookbehind=["LOCGEN_FORMAT_NAMED","LOCGEN_FORMAT_ORDERED"];static grammar=this.createGrammar();constructor(e){super(),this.values=e}static createGrammar(){return Pe.lazy((()=>Pe.seq(Pe.reg(new RegExp(String.raw`(${this.lookbehind.join("|")})\s*\(\s*`),1),Pe.alt(...[Qe,rt,st,nt].map((e=>e.grammar))).sepBy(Pe.reg(/\s*\,\s*/)),Pe.reg(/\s*\)/)).map((([e,t])=>{const i=new this(t);return i.lookbehind=e,i})))).label("FormatTextEntity")}doSerialize(e=!1,t="",i=this.constructor,s=i.printKey,r=i.keySeparator,n=i.attributeSeparator,a=i.wrap){const o=i.attributeSeparator;return this.lookbehind+"("+this.values.map((t=>t.serialize(e))).join(o)+(i.trailing?o:"")+")"}toString(){const e=this.values?.[0]?.toString();if(!e)return"";const t=this.values.slice(1).map((e=>e?.valueOf()));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 s=-(1n<<63n)&&e<1n<<63n&&(this._value=e)}constructor(e=0n){super(),this.value=BigInt(e)}static createGrammar(){return Pe.numberBigInteger.map((e=>new this(e)))}serialize(e=!1,t="",i=this.constructor){let s=this.value.toString();return i.serialized&&(s=`"${s}"`),s}valueOf(){return this.value}toString(){return this.value.toString()}}class ot extends ke{static typeReference=Pe.reg(new RegExp(Ie.Regex.Path.source+"|"+Ie.symbol.getParser().regexp.source));static fullReferenceGrammar=this.createFullReferenceGrammar();static grammar=this.createGrammar();#c;get type(){return this.#c}set type(e){this.#c=e}#V;get path(){return this.#V}set path(e){this.#B="",this.#V=e}#R;get full(){return this.#R}set full(e){this.#R=e}#B="";constructor(e="None",t="",i=(e.includes("/")||t?(e,t)=>`"${e+(t?`'${t}'`:"")}"`:(e,t)=>e)){super(),this.#c=e,this.#V=t,this.#R=i}static createGrammar(){return Pe.alt(this.createFullReferenceSerializedGrammar(),this.createFullReferenceGrammar(),this.createTypeReferenceGrammar()).label("ObjectReferenceEntity")}static createFullReferenceGrammar(){return Pe.regArray(new RegExp("("+this.typeReference.getParser().regexp.source+")(?:"+`'"(${Ie.Regex.InsideString.source})"'|`+`'(${Ie.Regex.InsideSingleQuotedString.source})')`)).map((([e,t,i,s])=>{let r=!!i,n=r?["'\"","\"'"]:["'","'"];return new this(t,r?i:s,((e,t)=>e+n[0]+t+n[1]))}))}static createFullReferenceSerializedGrammar(){return Pe.regArray(new RegExp('"('+Ie.Regex.InsideString.source+"?)(?:'("+Ie.Regex.InsideSingleQuotedString.source+"?)')?\"")).map((([e,t,i])=>new this(t,i,((e,t)=>`"${e}${t?`'${t}'`:""}"`))))}static createTypeReferenceGrammar(){return this.typeReference.map((e=>new this(e,"",((e,t)=>e))))}static createNoneInstance(){return new this("None")}getName(e=!1){return this.#B?this.#B:e?oe.getNameFromPath(this.path.replace(/_C$/,""),e):this.#B=oe.getNameFromPath(this.path.replace(/_C$/,""),e)}doSerialize(e=!1){let t=this.full(this.type,this.path);return e&&(t=oe.escapeString(t,!1)),t}equals(e){return e instanceof ot&&(this.type==e.type&&this.path==e.path)}toString(){return this.full(this.type,this.path)}}class lt extends ke{static grammar=this.createGrammar();constructor(e=null,t=null){super(),this.objectName=e,this.pinGuid=t}static createGrammar(){return Pe.seq(et.grammar,Pe.whitespace,Ue.grammar).map((([e,t,i])=>new this(e,i))).label("PinReferenceEntity")}doSerialize(){return this.objectName.serialize()+" "+this.pinGuid.serialize()}}class ct extends ke{static attributes={...super.attributes,MemberParent:ot,MemberName:Qe,MemberGuid:Ue};static grammar=this.createGrammar();constructor(e){super(e),this.MemberParent,this.MemberName,this.MemberGuid}static createGrammar(){return Ie.createEntityGrammar(this,Ie.commaSeparation,0,0)}}class ut extends ke{static attributes={...super.attributes,PinCategory:Qe.withDefault(),PinSubCategory:Qe,PinSubCategoryObject:ot,PinSubCategoryMemberReference:ct,ContainerType:et,bIsReference:Le,bIsConst:Le,bIsWeakPointer:Le,bIsUObjectWrapper:Le,bSerializeAsSinglePrecisionFloat:Le};static grammar=this.createGrammar();constructor(e={}){super(e),this.PinCategory,this.PinSubCategory,this.PinSubCategoryObject,this.PinSubCategoryMemberReference,this.ContainerType,this.bIsReference,this.bIsConst,this.bIsWeakPointer,this.bIsUObjectWrapper,this.bIsUObjectWrapper,this.bSerializeAsSinglePrecisionFloat}static createGrammar(){return Ie.createEntityGrammar(this).label("PinTypeEntity")}copyTypeFrom(e){for(const t of this.keys)void 0!==e[t]&&(this[t]=e[t])}}class ht extends ke{static attributes={...super.attributes,X:$e.withDefault(),Y:$e.withDefault()};static grammar=this.createGrammar();constructor(e){super(e),this.X,this.Y}static createGrammar(){return Ie.createEntityGrammar(this,Ie.commaSeparation,1).label("Vector2DEntity")}toArray(){return[this.X.valueOf(),this.Y.valueOf()]}}class pt extends ht{static grammar=this.createGrammar();static createGrammar(){return Pe.alt(Pe.regArray(new RegExp(/X\s*=\s*/.source+"(?"+Ie.numberRegexSource+")\\s+"+/Y\s*=\s*/.source+"(?"+Ie.numberRegexSource+")")).map((({groups:{x:e,y:t}})=>new this({X:new ht.attributes.X(e),Y:new ht.attributes.Y(t)}))),ht.grammar.map((e=>new this({X:e.X,Y:e.Y})))).label("RBSerializationVector2DEntity")}}class dt extends ke{static attributes={...super.attributes,R:$e.withDefault(),P:$e.withDefault(),Y:$e.withDefault()};static grammar=this.createGrammar();constructor(e){super(e),this.R,this.P,this.Y}static createGrammar(){return Ie.createEntityGrammar(this,Ie.commaSeparation,1).label("RotatorEntity")}getRoll(){return this.R}getPitch(){return this.P}getYaw(){return this.Y}}class mt extends dt{static attributeSeparator=", ";static grammar=this.createGrammar();static createGrammar(){return Pe.alt(Pe.regArray(new RegExp(`(${$e.numberRegexSource})`+String.raw`\s*,\s*`+`(${$e.numberRegexSource})`+String.raw`\s*,\s*`+`(${$e.numberRegexSource})`)).map((([e,t,i,s,r,n,a])=>new this({R:new dt.attributes.R(n,a?.length),P:new dt.attributes.P(t,i?.length),Y:new dt.attributes.Y(s,r?.length)}))),dt.grammar.map((e=>new this({R:e.R,P:e.P,Y:e.Y})))).label("SimpleSerializationRotatorEntity")}doSerialize(){const e=this.constructor.attributeSeparator;return this.P.serialize()+e+this.Y.serialize()+e+this.R.serialize()+(this.trailing?e:"")}}class gt extends ht{static attributeSeparator=", ";static grammar=this.createGrammar();static createGrammar(){return Pe.alt(Pe.regArray(new RegExp(`(${$e.numberRegexSource})`+String.raw`\s*,\s*`+`(${$e.numberRegexSource})`)).map((([e,t,i,s,r])=>new this({X:new ht.attributes.X(t,i?.length),Y:new ht.attributes.Y(s,r?.length)}))),ht.grammar.map((e=>new this({X:e.X,Y:e.Y})))).label("SimpleSerializationVector2DEntity")}doSerialize(){const e=this.constructor.attributeSeparator;return this.X.serialize()+e+this.Y.serialize()+(this.trailing?e:"")}}class bt extends ke{static attributes={...super.attributes,X:$e.withDefault(),Y:$e.withDefault(),Z:$e.withDefault(),W:$e.withDefault()};static grammar=this.createGrammar();constructor(e){super(e),this.X,this.Y,this.Z,this.W}static createGrammar(){return Ie.createEntityGrammar(this,Ie.commaSeparation,1).label("Vector4DEntity")}toArray(){return[this.X.valueOf(),this.Y.valueOf(),this.Z.valueOf(),this.W.valueOf()]}}class vt extends bt{static grammar=this.createGrammar();static createGrammar(){return Pe.alt(Pe.regArray(new RegExp(`(${Ie.numberRegexSource})`+String.raw`\s*,\s*`+`(${Ie.numberRegexSource})`+String.raw`\s*,\s*`+`(${Ie.numberRegexSource})`+String.raw`\s*,\s*`+`(${Ie.numberRegexSource})`)).map((([e,t,i,s,r])=>new this({X:new bt.attributes.X(t),Y:new bt.attributes.Y(i),Z:new bt.attributes.Z(s),W:new bt.attributes.W(r)}))),bt.grammar)}}class ft extends Ve{static allowShortSerialization=!1;static attributeSeparator=", ";static grammar=this.createGrammar();static createGrammar(){return Pe.alt(Pe.regArray(new RegExp(`(${$e.numberRegexSource})`+(this.allowShortSerialization?"(?:":"")+String.raw`\s*,\s*`+`(${$e.numberRegexSource})`+String.raw`\s*,\s*`+`(${$e.numberRegexSource})`+(this.allowShortSerialization?")?":""))).map((([e,t,i,s,r,n,a])=>new this({X:new Ve.attributes.X(t,i?.length),Y:new Ve.attributes.Y(s,r?.length),Z:new Ve.attributes.Z(n,a?.length)}))),Ve.grammar.map((e=>new this({X:e.X,Y:e.Y,Z:e.Z}))))}static flagAllowShortSerialization(e=!0){const t=this.asUniqueClass();return e!==t.allowShortSerialization&&(t.allowShortSerialization=e,t.grammar=t.createGrammar()),t}doSerialize(){const e=this.constructor.attributeSeparator;return this.X.serialize()+e+this.Y.serialize()+e+this.Z.serialize()+(this.trailing?e:"")}}class yt extends ke{static lookbehind="Pin";static#G={bool:Le,byte:We,enum:tt,exec:Qe,float:$e,int:Ke,int64:at,name:Qe,real:$e,string:Qe,[ae.paths.linearColor]:Oe,[ae.paths.niagaraBool]:Le,[ae.paths.niagaraFloat]:$e,[ae.paths.niagaraPosition]:Ve,[ae.paths.rotator]:dt,[ae.paths.vector]:Ve,[ae.paths.vector2D]:ht,[ae.paths.vector4f]:bt};static#H={enum:it,rg:pt,[ae.paths.niagaraPosition]:ft.flagAllowShortSerialization(),[ae.paths.rotator]:mt,[ae.paths.vector]:ft,[ae.paths.vector2D]:gt,[ae.paths.vector3f]:ft,[ae.paths.vector4f]:vt};static attributes={PinId:Ue.withDefault(),PinName:Qe.withDefault(),PinFriendlyName:Me.accepting(rt,nt,st,Qe),PinToolTip:Qe,Direction:Qe,PinType:ut.withDefault().flagInlined(),LinkedTo:Fe.of(lt).withDefault().flagSilent(),SubPins:Fe.of(lt),ParentPin:lt,DefaultValue:Je.from((e=>e.getEntityType(!0)?.flagSerialized()??Qe)),AutogeneratedDefaultValue:Qe,DefaultObject:ot,PersistentGuid:Ue,bHidden:Le,bNotConnectable:Le,bDefaultValueIsReadOnly:Le,bDefaultValueIsIgnored:Le,bAdvancedView:Le,bOrphanedPin:Le};static grammar=this.createGrammar();#z=!1;set recomputesNodeTitleOnChange(e){this.#z=e}get recomputesNodeTitleOnChange(){return this.#z}#_=null;get objectEntity(){try{return this.#_}catch(e){return null}}set objectEntity(e){this.#_=e}#F;get pinIndex(){return this.#F}set pinIndex(e){this.#F=e}constructor(e={}){super(e),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,this.objectEntity}static createGrammar(){return Ie.createEntityGrammar(this)}static fromLegacyObject(e){return new yt(e)}getType(){const e=this.PinType.PinCategory?.toString().toLocaleLowerCase();if(["struct","class","object","type","statictype"].includes(e))return this.PinType.PinSubCategoryObject?.path;if(this.isEnum())return"enum";if(this.objectEntity?.isPcg()){const e=this.objectEntity.getPcgSubobject(),t=this.isInput()?e.InputPins?.valueOf()[this.pinIndex]:e.OutputPins?.valueOf()[this.pinIndex];if(t){const i=e[ae.subObjectAttributeNameFromReference(t,!0)];let s=i.Properties?.AllowedTypes?.toString()??"";if(""==s&&(s=this.PinType.PinCategory??"",""==s&&(s="Any")),s)return!1!==i.Properties.bAllowMultipleData?.valueOf()&&!1!==i.Properties.bAllowMultipleConnections?.valueOf()&&(s+="[]"),s}}if("optional"===e){const e=this.PinType.PinSubCategory?.toString();switch(e){case"red":return"real";case"rg":return"rg";case"rgb":return ae.paths.vector;case"rgba":return ae.paths.linearColor;default:return e}}return e}getEntityType(e=!1){const t=this.getType(),i=yt.#G[t],s=yt.#H[t];return e&&void 0!==s?s:i}pinTitle(){return Ze(this)}copyTypeFrom(e){this.PinType=e.PinType}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===ae.paths.enum||e===ae.paths.userDefinedEnum||"enum"===e?.toLowerCase()}isExecution(){return"exec"===this.PinType.PinCategory.toString()||this.getType()===ae.paths.niagaraParameterMap}isHidden(){return this.bHidden?.valueOf()}isInput(){return!this.isHidden()&&"EGPD_Output"!=this.Direction?.toString()}isOutput(){return!this.isHidden()&&"EGPD_Output"==this.Direction?.toString()}isLinked(){return this.LinkedTo?.length>0}linkTo(e,t){const i=this.LinkedTo.values?.some((i=>i.objectName.toString()==e&&i.pinGuid.toString()==t.PinId.toString()));return!i&&(this.LinkedTo.values.push(new lt(new et(e),t.PinId)),!0)}unlinkFrom(e,t){const i=this.LinkedTo.values?.findIndex((i=>i.objectName.toString()==e&&i.pinGuid.toString()==t.PinId.toString()));return i>=0&&(this.LinkedTo.values.splice(i,1),0===this.LinkedTo.length&&void 0===yt.attributes.LinkedTo.default&&(this.LinkedTo.values=[]),!0)}getSubCategory(){return this.PinType.PinSubCategoryObject?.path}pinColor(){return function(e){if("mask"===e.PinType.PinCategory?.toString()){const t=qe[e.PinType.PinSubCategory?.toString()];if(t)return t}else if("optional"===e.PinType.PinCategory?.toString())return Xe;const t=e.getType();return qe[t]??qe[e.PinType.PinCategory?.toString().toLowerCase()]??(t.startsWith("/Script/Niagara.")?qe.struct:qe.default)}(this)}}const wt=e=>e.PinName?.toString().match(/^\s*([A-Z])\s*$/)?.[1]?.charCodeAt(0)-"A".charCodeAt(0);class St extends ke{static attributes={...super.attributes,MacroGraph:ot,GraphBlueprint:ot,GraphGuid:Ue};static grammar=this.createGrammar();constructor(e){super(e),this.MacroGraph,this.GraphBlueprint,this.GraphGuid}static createGrammar(){return Ie.createEntityGrammar(this)}getMacroName(){const e=this.MacroGraph.path.search(":");return this.MacroGraph.path.substring(e+1)}}class Et extends ke{static grammar=this.createGrammar();static createGrammar(){return Pe.reg(new RegExp(String.raw`\(${Pe.whitespaceInlineOpt.getParser().regexp.source}\)`)).map((e=>new this)).label("NullEntity")}serialize(e=!1,t="",i=this.constructor){let s="()";return i.serialized&&(s=`"${s}"`),s}}class Ct extends ke{static attributes={...super.attributes,ScriptVariable:ot,OriginalChangeId:Ue};static grammar=this.createGrammar();constructor(e={}){super(e),this.ScriptVariable,this.OriginalChangeId}static createGrammar(){return Ie.createEntityGrammar(this).label("ScriptVariableEntity")}}class Nt extends yt{static attributes={...super.attributes,PinId:Ue};static grammar=this.createGrammar();static createGrammar(){return Pe.seq(Pe.reg(new RegExp(`(${Ie.Regex.Symbol.source}\\s*)?\\(\\s*`),1),Ie.createAttributeGrammar(this).sepBy(Ie.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)})).label("UnknownPinEntity")}}class xt extends ke{static attributes={...super.attributes,MemberScope:Qe,MemberName:Qe.withDefault(),MemberGuid:Ue,bSelfContext:Le};static grammar=this.createGrammar();constructor(e){super(e),this.MemberScope,this.MemberName,this.MemberGuid,this.bSelfContext}static createGrammar(){return Ie.createEntityGrammar(this).label("VariableReferenceEntity")}}class Pt extends ke{#j=!1;get exported(){return this.#j}set exported(e){this.#j=e}static#U=/^(\w+?)(?:_(\d+))?$/;static printKey=e=>e.startsWith(ae.subObjectAttributeNamePrefix)?"":e;static attributeSeparator="\n";static wrap=this.notWrapped;static trailing=!0;static attributes={...super.attributes,Class:ot,Name:Qe,Archetype:ot,ExportPath:De.of(ot),ObjectRef:ot,BlueprintElementType:ot,BlueprintElementInstance:ot,ConstA:De.of($e),ConstB:De.of($e),PinTags:Fe.of(Et).flagInlined(),PinNames:Fe.of(Qe).flagInlined(),AxisKey:et,InputAxisKey:et,InputName:Qe,InputType:et,NumAdditionalInputs:Ye,bIsPureFunc:Le,bIsConstFunc:Le,bIsCaseSensitive:Le,VariableReference:xt,SelfContextInfo:et,DelegatePropertyName:Qe,DelegateOwnerClass:ot,ComponentPropertyName:Qe,EventReference:ct,FunctionReference:ct,FunctionScript:ot,CustomFunctionName:Qe,TargetType:ot,MacroGraphReference:St,Enum:ot,EnumEntries:Fe.of(Qe).flagInlined(),InputKey:et,OpName:Qe,CachedChangeId:Ue,FunctionDisplayName:Qe,AddedPins:Fe.of(Nt).withDefault().flagInlined().flagSilent(),ChangeId:Ue,MaterialFunction:ot,bOverrideFunction:Le,bInternalEvent:Le,bConsumeInput:Le,bExecuteWhenPaused:Le,bOverrideParentBinding:Le,bControl:Le,bAlt:Le,bShift:Le,bCommand:Le,CommentColor:Oe,bCommentBubbleVisible_InDetailsPanel:Le,bColorCommentBubble:Le,ProxyFactoryFunctionName:Qe,ProxyFactoryClass:ot,ProxyClass:ot,StructType:ot,MaterialExpression:ot,MaterialExpressionComment:ot,MoveMode:et,TimelineName:Qe,TimelineGuid:Ue,SizeX:De.of(Ke),SizeY:De.of(Ke),Text:De.of(Qe),ParameterName:Qe,ExpressionGUID:Ue,MaterialExpressionEditorX:De.of(Ke),MaterialExpressionEditorY:De.of(Ke),MaterialExpressionGuid:Ue,NodeTitle:Qe,NodeTitleColor:Oe,PositionX:De.of(Ke),PositionY:De.of(Ke),SettingsInterface:ot,PCGNode:ot,HiGenGridSize:et,Operation:et,NodePosX:Ke,NodePosY:Ke,NodeHeight:Ke,NodeWidth:Ke,Graph:ot,SubgraphInstance:Qe,InputPins:Fe.of(ot).flagInlined(),OutputPins:Fe.of(ot).flagInlined(),bExposeToLibrary:Le,bCanRenameNode:Le,bCommentBubblePinned:Le,bCommentBubbleVisible:Le,NodeComment:Qe,AdvancedPinDisplay:et,DelegateReference:xt,EnabledState:et,NodeGuid:Ue,ErrorType:Ke,ErrorMsg:Qe,ScriptVariables:Fe.flagInlined().of(Ct),Node:De.of(ot),ExportedNodes:Qe,CustomProperties:Fe.of(Me.accepting(yt,Nt)).withDefault().flagSilent()};static customPropertyGrammar=Pe.seq(Pe.reg(/CustomProperties\s+/),this.attributes.CustomProperties.type.grammar).map((([e,t])=>e=>{(e.CustomProperties??=new this.attributes.CustomProperties).values.push(t)}));static inlinedArrayEntryGrammar=Pe.seq(Pe.alt(Ie.symbolQuoted.map((e=>[e,!0])),Ie.symbol.map((e=>[e,!1]))),Pe.reg(new RegExp(String.raw`\s*\(\s*(\d+)\s*\)\s*\=\s*`),1).map(Number)).chain((([[e,t],i])=>(this.attributes[e]?.grammar??ke.unknownEntityGrammar).map((s=>r=>{if(void 0===r[e]){let i=Fe;t!=i.quoted&&(i=i.flagQuoted(t)),i.inlined||(i=i.flagInlined()),r[e]=new i}r[e].values[i]=s}))));static grammar=this.createGrammar();static grammarMultipleObjects=Pe.seq(Pe.whitespaceOpt,this.grammar,Pe.seq(Pe.whitespace,this.grammar).map((([e,t])=>t)).many(),Pe.whitespaceOpt).map((([e,t,i,s])=>[t,...i]));constructor(e={}){if("NodePosX"in e!="NodePosY"in e){const t=Object.entries(e),[i,s]="NodePosX"in e?["NodePosY",Object.keys(e).indexOf("NodePosX")+1]:["NodePosX",Object.keys(e).indexOf("NodePosY")];t.splice(s,0,[i,new Ke(0)]),e=Object.fromEntries(t)}super(e),this.CustomProperties,this.AddedPins,this.AdvancedPinDisplay,this.Archetype,this.AxisKey,this.bIsPureFunc,this.BlueprintElementInstance,this.BlueprintElementType,this.Class,this.CommentColor,this.ComponentPropertyName,this.ConstA,this.ConstB,this.CustomFunctionName,this.DelegatePropertyName,this.DelegateReference,this.EnabledState,this.Enum,this.EnumEntries,this.EventReference,this.ExportedNodes,this.ExportPath,this.FunctionDisplayName,this.FunctionReference,this.FunctionScript,this.Graph,this.HiGenGridSize,this.InputAxisKey,this.InputKey,this.InputName,this.InputPins,this.InputType,this.MacroGraphReference,this.MaterialExpression,this.MaterialExpressionComment,this.MaterialExpressionEditorX,this.MaterialExpressionEditorY,this.MaterialFunction,this.Name,this.Node,this.NodeComment,this.NodeHeight,this.NodePosX,this.NodePosY,this.NodeTitle,this.NodeTitleColor,this.NodeWidth,this.NumAdditionalInputs,this.ObjectRef,this.Operation,this.OpName,this.OutputPins,this.ParameterName,this.PCGNode,this.PinNames,this.PinTags,this.PositionX,this.PositionY,this.ProxyFactoryFunctionName,this.ScriptVariables,this.SettingsInterface,this.SizeX,this.SizeY,this.StructType,this.SubgraphInstance,this.TargetType,this.Text,this.Text,this.VariableReference,this.Pins instanceof Fe&&this.Pins.valueOf().forEach((e=>{const t=this[ae.subObjectAttributeNameFromReference(e,!0)];if(t){const e=yt.fromLegacyObject(t);e.LinkedTo=new yt.attributes.LinkedTo,this.getCustomproperties(!0).push(e),this.CustomProperties.ignored=!0}}));const t=this.getMaterialSubobject();if(t){const e=t;if(void 0!==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),this.getType()===ae.paths.materialExpressionComponentMask){const t=ae.rgba.map((e=>{const t=this.getPinEntities().find((t=>t.PinName.toString()===e));return t.recomputesNodeTitleOnChange=!0,t}));e.keys=[...ae.rgba,...e.keys];const i=De.of(Le).withDefault().flagSilent();e.R=new i((()=>t[0].DefaultValue)),e.G=new i((()=>t[1].DefaultValue)),e.B=new i((()=>t[2].DefaultValue)),e.A=new i((()=>t[3].DefaultValue))}else if(this.getType()===ae.paths.materialExpressionSubtract){const t=De.of($e.withPrecision(6)).withDefault((()=>new De((()=>new $e(1))))).flagSilent(),i=this.getCustomproperties().find((e=>"A"===e.PinName?.toString())),s=this.getCustomproperties().find((e=>"B"===e.PinName?.toString()));(i||s)&&(e.keys=["ConstA","ConstB",...e.keys],i&&(i.recomputesNodeTitleOnChange=!0,e.ConstA=new t((()=>i.DefaultValue))),s&&(s.recomputesNodeTitleOnChange=!0,e.ConstB=new t((()=>s.DefaultValue))))}}const i=this.getPcgSubobject();i&&(i.PositionX&&(i.PositionX.getter=()=>this.NodePosX),i.PositionY&&(i.PositionY.getter=()=>this.NodePosY),i.getSubobjects().forEach((e=>{if(void 0!==e.Node){const t=e.Node.getter();t.type===this.PCGNode.type&&t.path===`${this.Name}.${this.PCGNode.path}`&&(e.Node.getter=()=>new ot(this.PCGNode.type,`${this.Name}.${this.PCGNode.path}`,t.full))}})));let s=0,r=0;this.getCustomproperties().forEach(((e,t)=>{e.objectEntity=this,e.pinIndex=e.isInput()?s++:e.isOutput()?r++:t})),this.mirrorNameInExportPaths()}static createGrammar(){return Pe.seq(Pe.reg(/Begin +Object/),Pe.seq(Pe.whitespace,Pe.alt(this.createSubObjectGrammar(),this.customPropertyGrammar,Ie.createAttributeGrammar(this,Pe.reg(Ie.Regex.MultipleWordsSymbols)),Ie.createAttributeGrammar(this,Ie.attributeNameQuoted,void 0,((e,t,i)=>{oe.objectSet(e,[...t,"quoted"],!0)})),this.inlinedArrayEntryGrammar)).map((([e,t])=>t)).many(),Pe.reg(/\s+End +Object/)).map((([e,t,i])=>{const s={};return t.forEach((e=>e(s))),new this(s)})).label("ObjectEntity")}static createSubObjectGrammar(){return Pe.lazy((()=>this.grammar)).map((e=>t=>{e.trailing=!1,t[ae.subObjectAttributeNameFromEntity(e)]=e}))}mirrorNameInExportPaths(e=this.Name?.toString()){if(!e)return;const t=[this];for(let i=0;i{const t=n.valueOf();return new r.type(t.type,t.path.replace(e,this.Name?.toString()??""),t.full)}))}}#K;getClass(){if(!this.#K&&(this.#K=(this.Class?.path?this.Class.path:this.Class?.type)??this.ExportPath?.valueOf()?.type??"",this.#K&&!this.#K.startsWith("/"))){let e=Object.values(ae.paths).find((e=>e.endsWith("."+this.#K)));e&&(this.#K=e)}return this.#K}getType(){const e=this.MacroGraphReference?.MacroGraph?.path;return e||(this.MaterialExpression?this.MaterialExpression.type:this.getClass())}getObjectName(e=!1){return e?this.getNameAndCounter()[0]:this.Name.toString()}getNameAndCounter(){const e=this.getObjectName().match(Pt.#U);return e?[e[1]??"",parseInt(e[2]??"0")]:["",0]}getCounter(){return this.getNameAndCounter()[1]}getNodeWidth(){return this.NodeWidth??this.isComment()?ae.defaultCommentWidth:void 0}setNodeWidth(e){this.NodeWidth||(this.NodeWidth=new Ke),this.NodeWidth.value=e}getNodeHeight(){return this.NodeHeight??this.isComment()?ae.defaultCommentHeight:void 0}setNodeHeight(e){this.NodeHeight||(this.NodeHeight=new Ke),this.NodeHeight.value=e}getNodePosX(){return this.NodePosX?.value??0}setNodePosX(e){this.NodePosX||(this.NodePosX=new Ke),this.NodePosX.value=Math.round(e)}getNodePosY(){return this.NodePosY?.value??0}setNodePosY(e){this.NodePosY||(this.NodePosY=new Ke),this.NodePosY.value=Math.round(e)}getCustomproperties(e=!1){return this.CustomProperties.values}getPinEntities(){return this.getCustomproperties().filter((e=>e.constructor===yt))}getSubobjects(){return Object.keys(this).filter((e=>e.startsWith(ae.subObjectAttributeNamePrefix))).flatMap((e=>[this[e],...this[e].getSubobjects()]))}switchTarget(){const e=this.getClass().match(ae.switchTargetPattern);if(e)return e[1]}isEvent(){switch(this.getClass()){case ae.paths.actorBoundEvent:case ae.paths.componentBoundEvent:case ae.paths.customEvent:case ae.paths.event:case ae.paths.inputAxisKeyEvent:case ae.paths.inputVectorAxisEvent:return!0}return!1}isComment(){switch(this.getClass()){case ae.paths.comment:case ae.paths.materialGraphNodeComment:return!0}return!1}isMaterial(){const e=this.getClass();return e.startsWith("/Script/Engine.MaterialExpression")||e.startsWith("/Script/InterchangeImport.MaterialExpression")||e.startsWith("/Script/UnrealEd.MaterialGraph")}getMaterialSubobject(){const e=this.MaterialExpression??this.MaterialExpressionComment;return e?this[ae.subObjectAttributeNameFromReference(e,!0)]:null}isPcg(){return this.getClass()===ae.paths.pcgEditorGraphNode||null!=this.getPcgSubobject()}isNiagara(){return this.Class&&(this.Class.type?this.Class.type:this.Class.path)?.startsWith("/Script/NiagaraEditor.")}getPcgSubobject(){const e=this.PCGNode;return e?this[ae.subObjectAttributeNameFromReference(e,!0)]:null}getSettingsObject(){const e=this.SettingsInterface;return e?this[ae.subObjectAttributeNameFromReference(e,!0)]:null}getSubgraphObject(){const e=this.SubgraphInstance;return e?this[ae.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.toString()))}nodeColor(){return function(e){switch(e.getType()){case ae.paths.materialExpressionConstant2Vector:case ae.paths.materialExpressionConstant3Vector:case ae.paths.materialExpressionConstant4Vector:return ae.nodeColors.yellow;case ae.paths.materialExpressionFunctionInput:case ae.paths.materialExpressionTextureCoordinate:case ae.paths.materialExpressionWorldPosition:case ae.paths.pcgEditorGraphNodeInput:case ae.paths.pcgEditorGraphNodeOutput:return ae.nodeColors.red;case ae.paths.makeStruct:return ae.nodeColors.darkBlue;case ae.paths.materialExpressionMaterialFunctionCall:return ae.nodeColors.blue;case ae.paths.materialExpressionTextureSample:return ae.nodeColors.darkTurquoise;case ae.paths.niagaraNodeInput:switch(e.Usage?.toString()){case"Attribute":return ae.nodeColors.intenseGreen;case"Parameter":default:return ae.nodeColors.red;case"RapidIterationParameter":return ae.nodeColors.black;case"SystemConstant":case"TranslatorConstant":return ae.nodeColors.gray}}switch(e.getClass()){case ae.paths.callFunction:return e.bIsPureFunc?.valueOf()?ae.nodeColors.green:ae.nodeColors.blue;case ae.paths.niagaraNodeFunctionCall:return ae.nodeColors.darkerBlue;case ae.paths.dynamicCast:return ae.nodeColors.turquoise;case ae.paths.inputDebugKey:case ae.paths.inputKey:return ae.nodeColors.red;case ae.paths.createDelegate:case ae.paths.enumLiteral:case ae.paths.makeArray:case ae.paths.makeMap:case ae.paths.materialGraphNode:case ae.paths.select:return ae.nodeColors.green;case ae.paths.executionSequence:case ae.paths.ifThenElse:case ae.paths.macro:case ae.paths.multiGate:return ae.nodeColors.gray;case ae.paths.functionEntry:case ae.paths.functionResult:return ae.nodeColors.violet;case ae.paths.timeline:return ae.nodeColors.yellow}if(e.switchTarget())return ae.nodeColors.lime;if(e.isEvent())return ae.nodeColors.red;if(e.isComment())return(e.CommentColor?e.CommentColor:Oe.getWhite()).toDimmedColor().toCSSRGBValues();const t=e.getPcgSubobject();if(t){if(t.NodeTitleColor)return t.NodeTitleColor.toDimmedColor(.1).toCSSRGBValues();switch(e.PCGNode?.getName(!0)){case"Branch":case"Select":return ae.nodeColors.intenseGreen}}return e.bIsPureFunc?.valueOf()?ae.nodeColors.green:e.Input?.Name?ae.nodeColors.gray:ae.nodeColors.blue}(this)}nodeIcon(){return function(e){if(e.isMaterial()||e.isPcg()||e.isNiagara())return null;switch(e.getType()){case ae.paths.addDelegate:case ae.paths.asyncAction:case ae.paths.callDelegate:case ae.paths.clearDelegate:case ae.paths.createDelegate:case ae.paths.functionEntry:case ae.paths.functionResult:case ae.paths.removeDelegate:return ce.node;case ae.paths.customEvent:return ce.event;case ae.paths.doN:return ce.doN;case ae.paths.doOnce:return ce.doOnce;case ae.paths.dynamicCast:return ce.cast;case ae.paths.enumLiteral:return ce.enum;case ae.paths.event:return ce.event;case ae.paths.executionSequence:case ae.paths.multiGate:return ce.sequence;case ae.paths.flipflop:return ce.flipflop;case ae.paths.forEachElementInEnum:case ae.paths.forLoop:case ae.paths.forLoopWithBreak:case ae.paths.whileLoop:return ce.loop;case ae.paths.forEachLoop:case ae.paths.forEachLoopWithBreak:return ce.forEachLoop;case ae.paths.ifThenElse:return ce.branchNode;case ae.paths.isValid:return ce.questionMark;case ae.paths.makeArray:return ce.makeArray;case ae.paths.makeMap:return ce.makeMap;case ae.paths.makeSet:return ce.makeSet;case ae.paths.makeStruct:return ce.makeStruct;case ae.paths.metasoundEditorGraphExternalNode:return ce.metasoundFunction;case ae.paths.select:return ce.select;case ae.paths.spawnActorFromClass:return ce.spawnActor;case ae.paths.timeline:return ce.timer}if(e.switchTarget())return ce.switch;if(_e(e).startsWith("Break"))return ce.breakStruct;if(e.getClass()===ae.paths.macro)return ce.macro;const t=e.getHIDAttribute()?.toString();return t?t.includes("Mouse")?ce.mouse:t.includes("Gamepad_Special")?ce.keyboard:t.includes("Gamepad")||t.includes("Steam")?ce.gamepad:t.includes("Touch")?ce.touchpad:ce.keyboard:e.getDelegatePin()?ce.event:e.ObjectRef?.type===ae.paths.ambientSound?ce.sound:ce.functionSymbol}(this)}additionalPinInserter(){return function(e){let t,i,s,r,n;switch(e.getType()){case ae.paths.commutativeAssociativeBinaryOperator:case ae.paths.promotableOperator:switch(n=e.FunctionReference?.MemberName?.toString(),n){default:if(!(n?.startsWith("Add_")||n?.startsWith("Subtract_")||n?.startsWith("Multiply_")||n?.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":t??=()=>e.getPinEntities().filter((e=>e.isInput())),i??=wt,s??=(i,s=-1,r=-1)=>{const n=String.fromCharCode(i>=0?i:r+"A".charCodeAt(0)+1);return e.NumAdditionalInputs=new Ye(t().length-1),n}}break;case ae.paths.executionSequence:r??="Then";case ae.paths.multiGate:r??="Out",t??=()=>e.getPinEntities().filter((e=>e.isOutput())),i??=e=>Number(e.PinName?.toString().match(new RegExp(String.raw`^\s*${r}[_\s]+(\d+)\s*$`,"i"))?.[1]),s??=(e,t=-1,i=-1,s)=>`${r} ${e>=0?e:t>0?`${r} 0`:i+1}`;break;case ae.paths.switchInteger:t??=()=>e.getPinEntities().filter((e=>e.isOutput())),i??=e=>Number(e.PinName?.toString().match(/^\s*(\d+)\s*$/)?.[1]),s??=(e,t=-1,i=-1,s)=>(e<0?i+1:e).toString();break;case ae.paths.switchGameplayTag:s??=(t,i=-1,s=-1,r)=>{const n=`Case_${t>=0?t:i>0?"0":s+1}`;return e.PinNames??=new Fe,e.PinNames.valueOf().push(new Qe(n)),delete e.PinTags.valueOf()[e.PinTags.length-1],e.PinTags.valueOf()[e.PinTags.length]=null,n};case ae.paths.switchName:case ae.paths.switchString:t??=()=>e.getPinEntities().filter((e=>e.isOutput())),i??=e=>Number(e.PinName.toString().match(/^\s*Case[_\s]+(\d+)\s*$/i)?.[1]),s??=(t,i=-1,s=-1,r)=>{const n=`Case_${t>=0?t:i>0?"0":s+1}`;return e.PinNames??=new Fe,e.PinNames.valueOf().push(new Qe(n)),n}}if(t)return()=>{let r=Number.MAX_SAFE_INTEGER,n=Number.MIN_SAFE_INTEGER,a=[];const o=t().reduce(((e,t)=>{const s=i(t);if(isNaN(s)){if(void 0===e)return t}else if(a.push(s),r=Math.min(s,r),s>n)return n=s,t;return e}),void 0);if(r!==Number.MAX_SAFE_INTEGER&&n!==Number.MIN_SAFE_INTEGER||(r=void 0,n=void 0),!o)return null;a.sort(((e,t)=>e{const t=e-l>1;return l=e,t}));const u=new yt(o);return u.PinId=new Ue,u.PinName=new Qe(s(c,r,n,u)),u.PinToolTip=void 0,u.DefaultValue&&(u.DefaultValue=new u.DefaultValue.constructor),e.getCustomproperties(!0).push(u),u}}(this)}showProperty(e){switch(e){case"Class":case"Name":case"Archetype":case"ExportPath":case"CustomProperties":return!1}return super.showProperty(e)}doSerialize(e=!1,t="",i=this.constructor,s=i.printKey,r=i.keySeparator,n=i.attributeSeparator,a=i.wrap){const o=i!==this.constructor,l=t+ae.indentation,c=this.trailing;this.trailing=!0;const u=super.doSerialize(e,l,i,s,r,n,a);return this.trailing=c,t+"Begin Object"+(this.Class?.type||this.Class?.path?` Class${r}${this.Class.serialize(e)}`:"")+(this.Name?` Name${r}${this.Name.serialize(e)}`:"")+(this.Archetype?` Archetype${r}${this.Archetype.serialize(e)}`:"")+(this.ExportPath?.valueOf()?.type||this.ExportPath?.valueOf()?.path?` ExportPath${r}${this.ExportPath.serialize(e)}`:"")+n+u+(!0!==i.attributes.CustomProperties.ignored&&!0!==this.CustomProperties.ignored?this.getCustomproperties().map((t=>l+s("CustomProperties ")+t.serialize(e)+n)).join(""):"")+t+"End Object"+(o&&i.trailing||this.trailing?n:"")}}class kt extends Pt{constructor(e={},t=void 0){e.Class=new ot(ae.paths.knot),e.Name=new Pt.attributes.Name("K2Node_Knot");const i=new yt({PinName:new yt.attributes.PinName("InputPin")}),s=new yt({PinName:new yt.attributes.PinName("OutputPin"),Direction:new yt.attributes.Direction("EGPD_Output")});t&&(i.copyTypeFrom(t),s.copyTypeFrom(t)),e.CustomProperties=new Pt.attributes.CustomProperties([i,s]),super(e)}}class Lt{#Y;get target(){return this.#Y}#e;get blueprint(){return this.#e}consumeEvent;options;listenHandler=()=>this.listenEvents();unlistenHandler=()=>this.unlistenEvents();constructor(e,t,i={}){i.consumeEvent??=!1,i.listenOnFocus??=!1,i.unlistenOnTextEdit??=!1,this.#Y=e,this.#e=t,this.consumeEvent=i.consumeEvent,this.options=i}setup(){this.options.listenOnFocus&&(this.blueprint.addEventListener(ae.focusEventName.begin,this.listenHandler),this.blueprint.addEventListener(ae.focusEventName.end,this.unlistenHandler)),this.options.unlistenOnTextEdit&&(this.blueprint.addEventListener(ae.editTextEventName.begin,this.unlistenHandler),this.blueprint.addEventListener(ae.editTextEventName.end,this.listenHandler)),this.blueprint.focused&&this.listenEvents()}cleanup(){this.unlistenEvents(),this.blueprint.removeEventListener(ae.focusEventName.begin,this.listenHandler),this.blueprint.removeEventListener(ae.focusEventName.end,this.unlistenHandler),this.blueprint.removeEventListener(ae.editTextEventName.begin,this.unlistenHandler),this.blueprint.removeEventListener(ae.editTextEventName.end,this.listenHandler)}listenEvents(){}unlistenEvents(){}}class At extends ke{static attributes={...super.attributes,ActionName:Qe,bShift:Le,bCtrl:Le,bAlt:Le,bCmd:Le,Key:et};static grammar=this.createGrammar();constructor(e){super(e),this.ActionName,this.bShift,this.bCtrl,this.bAlt,this.bCmd,this.Key}static createGrammar(){return Pe.alt(et.grammar.map((e=>new this({Key:e}))),Ie.createEntityGrammar(this))}}class Mt extends Lt{static#q=e=>{};#X;pressedKey="";constructor(e,t,i={},s=Mt.#q,r=Mt.#q){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 At)return e;if(e.constructor===String){const t=At.grammar.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.#X=this.options.activationKeys??[];let n=this;this.keyDownHandler=e=>{n.#X.some((t=>(e=>e.bShift?.valueOf()||"LeftShift"==e.Key.valueOf()||"RightShift"==e.Key.valueOf())(t)==e.shiftKey&&(e=>e.bCtrl?.valueOf()||"LeftControl"==e.Key.valueOf()||"RightControl"==e.Key.valueOf())(t)==e.ctrlKey&&(e=>e.bAlt?.valueOf()||"LeftAlt"==e.Key.valueOf()||"RightAlt"==e.Key.valueOf())(t)==e.altKey&&ae.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.#X.some((t=>t.bShift?.valueOf()&&"Shift"==e.key||t.bCtrl?.valueOf()&&"Control"==e.key||t.bAlt?.valueOf()&&"Alt"==e.key||t.bCmd?.valueOf()&&"Meta"==e.key||ae.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 It extends Lt{#Z=[0,0];get location(){return this.#Z}#W;get enablerKey(){return this.#W}#Q=!0;get enablerActivated(){return this.#Q}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.#W=i.enablerKey,this.#W.onKeyDown=()=>this.#Q=!0,this.#W.onKeyUp=()=>this.#Q=!1,this.#W.consumeEvent=!1,this.#W.listenEvents(),this.#Q=!1)}setLocationFromEvent(e){let t=oe.convertLocation([e.clientX,e.clientY],this.movementSpace,this.options.ignoreScale);return t=this.options.ignoreTranslateCompensate?t:this.blueprint.compensateTranslation(t[0],t[1]),this.#Z=[...t],this.#Z}}class Tt extends It{static#q=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.#ee),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.#ee(e)};#ee=e=>{this.options.exitAnyButton&&e.button!=this.options.clickButton||(this.consumeEvent&&e.stopImmediatePropagation(),document.removeEventListener("mouseup",this.#ee),this.unclicked())};clickedPosition=[0,0];constructor(e,t,i={},s=Tt.#q,r=Tt.#q){i.clickButton??=ae.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===ae.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 Ot extends It{static ignoreDbClick=e=>{};#te=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))};#ie;get onDbClick(){return this.#ie}set onDbClick(e){this.#ie=e}clickedPosition=[0,0];constructor(e,t,i={},s=Ot.ignoreDbClick){i.consumeEvent??=!0,i.strictTarget??=!1,super(e,t,i),this.#ie=s,this.listenEvents()}listenEvents(){this.target.addEventListener("dblclick",this.#te)}unlistenEvents(){this.target.removeEventListener("dblclick",this.#te)}dbclicked(e){this.onDbClick(e)}}class Dt{static deleteNodes="Delete";static duplicateNodes="(bCtrl=True,Key=D)";static enableLinkDelete="LeftAlt";static enableZoomIn=["LeftControl","RightControl"];static selectAllNodes="(bCtrl=True,Key=A)"}class $t{element;get blueprint(){return this.element.blueprint}#se=[];get inputObjects(){return this.#se}initialize(e){this.element=e}createInputObjects(){return[]}setup(){this.#se.forEach((e=>e.setup()))}cleanup(){this.#se.forEach((e=>e.cleanup()))}willUpdate(e){}update(e){}render(){return z``}firstUpdated(e){}updated(e){}inputSetup(){this.#se=this.createInputObjects()}}class Vt extends $t{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 Bt extends Vt{static sigmoidPositive(e,t=3.7,i=1.1){return 1-Math.exp(-((e/i)**t))}static decreasingValue(e,t){const i=-e*t[0]**2,s=t[1]-i/t[0];return e=>i/e+s}static clampedLine=e=>Math.min(Math.max(0,e),1);static c1DecreasingValue=Bt.decreasingValue(-.15,[100,15]);static c2DecreasingValue=Bt.decreasingValue(-.05,[500,130]);static c2Clamped=e=>-40*Bt.clampedLine(e/200)+80;#re=`ueb-id-${Math.floor(1e12*Math.random())}`;#ne=e=>{const t=new kt({},this.element.origin.entity),i=Ae.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.origin=null,this.element.target=null;const a=Ae.getConstructor("ueb-link").newObject(n,s.inputPin);this.blueprint.addGraphElement(a),this.element.origin=s.outputPin,this.element.target=r};#ae(e){const t=this.element.origin,i=this.element.target,s=t?.isKnot(),r=i?.isKnot(),n=this.element.fromX,a=this.element.toX;if(!s||i&&!r||(t?.isInputLoosely()&&a>n+ae.distanceThreshold||t?.isOutputLoosely()&&an+ae.distanceThreshold)&&(this.element.target=i.template.getoppositePin()),t&&i){let e;t?.isKnot()?e=t.nodeElement:i?.isKnot()&&(e=i.nodeElement),e&&e.hasUpdated&&e.template.checkSwtichDirectionsVisually()}let o=t?.isOutputVisually()==i?.isOutputVisually();const l=Math.max(Math.abs(this.element.fromX-this.element.toX),1),c=Math.max(Math.abs(this.element.fromY-this.element.toY),1),u=Math.max(l,ae.linkMinWidth),h=l/u,p=this.element.originatesFromInput?this.element.fromX{e[0]+=ae.knotOffset[0],e[1]+=ae.knotOffset[1],e=oe.snapToGrid(e[0],e[1],ae.gridSize),this.#ne(e)})),new Tt(e,this.blueprint,{enablerKey:new Mt(this.blueprint,this.blueprint,{activationKeys:Dt.enableLinkDelete})},(()=>this.blueprint.removeGraphElement(this.element)))]}willUpdate(e){super.willUpdate(e),(e.has("fromX")||e.has("toX"))&&this.#ae(e)}update(e){super.update(e);const t=this.element.getOutputPin(!0);t&&this.element.style.setProperty("--ueb-link-color-rgb",Oe.printLinearColor(t.color)),this.element.style.setProperty("--ueb-start-percentage",`${Math.round(this.element.startPercentage)}%`),this.element.style.setProperty("--ueb-link-start",`${Math.round(this.element.startPixels)}`);const i=(this.element.fromY>this.element.toY?-1:1)*(this.element.originatesFromInput?-1:1)*(this.element.origin?.isInputVisually()&&this.element.target?.isInputVisually()?-1:1),s=this.element.origin?.isInputVisually()&&this.element.target?.isInputVisually()?-1:1;this.element.style.setProperty("--ueb-link-scale-y",`${i}`),this.element.style.setProperty("--ueb-link-scale-x",`${s}`)}render(){return z` ${this.element.linkMessageIcon||this.element.linkMessageText?z`${this.element.linkMessageIcon!==F?z`${this.element.linkMessageIcon}`:F} ${this.element.linkMessageText!==F?z`${this.element.linkMessageText}`:F}`:F}`}}class Rt extends le{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}addOriginLocation(e,t){this.fromX+=e,this.fromY+=t}addTargetLocation(e,t){this.toX+=e,this.toY+=t}}class Gt extends Rt{static properties={...super.properties,dragging:{type:Boolean,attribute:"data-dragging",converter:Le.booleanConverter,reflect:!0},originNode:{type:String,attribute:"data-origin-node",reflect:!0},originPin:{type:String,attribute:"data-origin-pin",reflect:!0},targetNode:{type:String,attribute:"data-target-node",reflect:!0},targetPin:{type:String,attribute:"data-target-pin",reflect:!0},originatesFromInput:{type:Boolean,attribute:"data-from-input",converter:Le.booleanConverter,reflect:!0},svgPathD:{type:String,attribute:!1},linkMessageIcon:{type:String,attribute:!1},linkMessageText:{type:String,attribute:!1}};#oe;get origin(){return this.#oe}set origin(e){this.#le(e,!1)}#Y;get target(){return this.#Y}set target(e){this.#le(e,!0)}#ce=()=>this.remove();#ue=e=>this.addOriginLocation(...e.detail.value);#he=e=>this.addTargetLocation(...e.detail.value);#pe=e=>{this.origin.isKnot()&&(this.originatesFromInput=this.origin.isInputVisually()),this.setOriginLocation()};#de=e=>this.setTargetLocation();linkMessageIcon=F;linkMessageText=F;pathElement;constructor(){super(),this.dragging=!1,this.originNode="",this.originPin="",this.targetNode="",this.targetPin="",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 Bt),e&&(this.origin=e,t||(this.toX=this.fromX,this.toY=this.fromY)),t&&(this.target=t,e||(this.fromX=this.toX,this.fromY=this.toY))}#le(e,t){const i=()=>t?this.target:this.origin;if(i()!=e){if(i()){const e=i().getNodeElement();e.removeEventListener(ae.removeEventName,this.#ce),e.removeEventListener(ae.nodeDragEventName,t?this.#he:this.#ue),e.removeEventListener(ae.nodeReflowEventName,t?this.#de:this.#pe),this.#me()}if(t?(this.#Y=e,this.targetNode=e?.nodeElement.nodeTitle,this.targetPin=e?.pinId.toString()):(this.#oe=e,this.originNode=e?.nodeElement.nodeTitle,this.originPin=e?.pinId.toString()),i()){const e=i().getNodeElement();e.addEventListener(ae.removeEventName,this.#ce),e.addEventListener(ae.nodeDragEventName,t?this.#he:this.#ue),e.addEventListener(ae.nodeReflowEventName,t?this.#de:this.#pe),t?this.setTargetLocation():(this.setOriginLocation(),this.originatesFromInput=this.origin.isInputVisually()),this.#ge()}}}#ge(){this.origin&&this.target&&(this.origin.linkTo(this.target),this.target.linkTo(this.origin))}#me(){this.origin&&this.target&&(this.origin.unlinkFrom(this.target,!1),this.target.unlinkFrom(this.origin,!1))}cleanup(){super.cleanup(),this.#me(),this.origin=null,this.target=null}setOriginLocation(e=null,t=!0){if(null==e){const i=this;if(t&&(!this.hasUpdated||!this.origin.hasUpdated))return void Promise.all([this.updateComplete,this.origin.updateComplete]).then((()=>i.setOriginLocation(null,!1)));e=this.origin.template.getLinkLocation()}const[i,s]=e;this.fromX=i,this.fromY=s}setTargetLocation(e=null,t=!0){if(null==e){const i=this;if(t&&(!this.hasUpdated||!this.target.hasUpdated))return void Promise.all([this.updateComplete,this.target.updateComplete]).then((()=>i.setTargetLocation(null,!1)));e=this.target.template.getLinkLocation()}this.toX=e[0],this.toY=e[1]}getInputPin(e=!1){return this.origin?.isInput()?this.origin:this.target?.isInput()?this.target:e?this.origin??this.target:void 0}setInputPin(e){this.origin?.isInput()&&(this.origin=e),this.target=e}getOutputPin(e=!1){return this.origin?.isOutput()?this.origin:this.target?.isOutput()?this.target:e?this.origin??this.target:void 0}setOutputPin(e){this.target?.isOutput()&&(this.target=e),this.origin=e}getOtherPin(e){return this.origin?.nodeElement===e?this.target:this.target?.nodeElement===e?this.origin:void 0}startDragging(){this.dragging=!0}finishDragging(){this.dragging=!1}removeMessage(){this.linkMessageIcon=F,this.linkMessageText=F}setMessageConvertType(){this.linkMessageIcon=ce.convert,this.linkMessageText=z`Convert ${this.origin.pinType} to ${this.target.pinType}.`}setMessageCorrect(){this.linkMessageIcon=ce.correct,this.linkMessageText=F}setMessageReplace(){this.linkMessageIcon=ce.correct,this.linkMessageText=F}setMessageDirectionsIncompatible(){this.linkMessageIcon=ce.reject,this.linkMessageText=z`Directions are not compatbile.`}setMessagePlaceNode(){this.linkMessageIcon=F,this.linkMessageText=z`Place a new node.`}setMessageReplaceLink(){this.linkMessageIcon=ce.correct,this.linkMessageText=z`Replace existing input connections.`}setMessageReplaceOutputLink(){this.linkMessageIcon=ce.correct,this.linkMessageText=z`Replace existing output connections.`}setMessageSameNode(){this.linkMessageIcon=ce.reject,this.linkMessageText=z`Both are on the same node.`}setMessageTypesIncompatible(e,t){this.linkMessageIcon=ce.reject,this.linkMessageText=z`${oe.capitalFirstLetter(e.pinType)} is not compatible with ${oe.capitalFirstLetter(t.pinType)}.`}}class Ht extends le{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=ae.dragEventName;static dragGeneralEventName=ae.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=oe.snapToGrid(this.locationX,this.locationY,ae.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 zt extends It{#J=e=>{if(this.blueprint.setFocused(!0),e.button===this.options.clickButton)this.options.strictTarget&&e.target!=e.currentTarget||(this.consumeEvent&&e.stopImmediatePropagation(),this.#be.addEventListener("mousemove",this.#ve),document.addEventListener("mouseup",this.#ee),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 Ht&&(this.clickedOffset=[this.clickedPosition[0]-this.target.locationX,this.clickedPosition[1]-this.target.locationY]),this.clicked(this.clickedPosition));else this.options.exitAnyButton||this.#ee(e)};#ve=e=>{this.consumeEvent&&e.stopImmediatePropagation(),this.#be.removeEventListener("mousemove",this.#ve),this.#be.addEventListener("mousemove",this.#fe);const t=this.getEvent(ae.trackingMouseEventName.begin);this.#ye=0==this.target.dispatchEvent(t),this.setLocationFromEvent(e),this.lastLocation=oe.snapToGrid(this.clickedPosition[0],this.clickedPosition[1],this.stepSize),this.startDrag(this.location),this.started=!0,this.#fe(e)};#fe=e=>{this.consumeEvent&&e.stopImmediatePropagation();const t=this.setLocationFromEvent(e),i=[e.movementX,e.movementY];if(this.dragTo(t,i),this.#ye&&(this.blueprint.mousePosition=t),this.options.scrollGraphEdge){const e=Math.sqrt(i[0]*i[0]+i[1]*i[1]),s=this.blueprint.scaleCorrect(ae.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=oe.clamp(this.blueprint.scaleCorrectReverse(a)**3*e*.6,-20,20),c=oe.clamp(this.blueprint.scaleCorrectReverse(c)**3*e*.6,-20,20),this.blueprint.scrollDelta(a,c)}};#ee=e=>{if(!this.options.exitAnyButton||e.button==this.options.clickButton){if(this.consumeEvent&&e.stopImmediatePropagation(),this.#be.removeEventListener("mousemove",this.#ve),this.#be.removeEventListener("mousemove",this.#fe),document.removeEventListener("mouseup",this.#ee),this.started&&this.endDrag(),this.unclicked(),this.#ye){const e=this.getEvent(ae.trackingMouseEventName.end);this.target.dispatchEvent(e),this.#ye=!1}this.started=!1}};#ye=!1;#be;#we;get draggableElement(){return this.#we}clickedOffset=[0,0];clickedPosition=[0,0];lastLocation=[0,0];started=!1;stepSize=1;constructor(e,t,i={}){i.clickButton??=ae.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??ae.gridSize),this.#be=this.options.moveEverywhere?document.documentElement:this.movementSpace,this.#we=this.options.draggableElement,this.listenEvents()}listenEvents(){super.listenEvents(),this.#we.addEventListener("mousedown",this.#J),this.options.clickButton===ae.mouseRightClickButton&&this.#we.addEventListener("contextmenu",(e=>e.preventDefault()))}unlistenEvents(){super.unlistenEvents(),this.#we.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 _t extends zt{clicked(e){this.options.repositionOnClick&&(this.target.setLocation(...this.stepSize>1?oe.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?[oe.snapToGrid(e[0],e[1],this.stepSize),oe.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 Ft extends _t{#Se;#Ee;#Ce;#Ne;constructor(e,t,i={}){super(e,t,i),i.onClicked&&(this.#Se=i.onClicked),i.onStartDrag&&(this.#Ee=i.onStartDrag),i.onDrag&&(this.#Ce=i.onDrag),i.onEndDrag&&(this.#Ne=i.onEndDrag)}clicked(e){super.clicked(e),this.#Se?.()}startDrag(){super.startDrag(),this.#Ee?.()}dragAction(e,t){this.#Ce?.(e,t)}endDrag(){super.endDrag(),this.#Ne?.()}}class jt extends _t{constructor(e,t,i={}){super(e,t,i),this.draggableElement.classList.add("ueb-draggable")}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 Ut extends $t{getDraggableElement(){return this.element}createDraggableObject(){const e=this.getDraggableElement();return new _t(this.element,this.blueprint,{draggableElement:e})}createInputObjects(){return[...super.createInputObjects(),this.createDraggableObject(),new Mt(this.element,this.blueprint,{activationKeys:[ae.Keys.ArrowUp,ae.Keys.ArrowRight,ae.Keys.ArrowDown,ae.Keys.ArrowLeft]},(e=>e.target.acknowledgeDrag([e.pressedKey===ae.Keys.ArrowLeft?-ae.gridSize:e.pressedKey===ae.Keys.ArrowRight?ae.gridSize:0,e.pressedKey===ae.Keys.ArrowUp?-ae.gridSize:e.pressedKey===ae.Keys.ArrowDown?ae.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 Kt extends Ut{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 Yt extends Kt{getDraggableElement(){return this.element}createDraggableObject(){return new jt(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 qt extends Yt{static nodeStyleClasses=["ueb-node-style-default"];#xe;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=Ae.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.#xe=function(e){switch(e.getType()){case ae.paths.addDelegate:case ae.paths.clearDelegate:case ae.paths.callDelegate:case ae.paths.removeDelegate:return null}const t=e.getPinEntities().find((e=>!e.isHidden()&&"self"===e.PinName?.toString()&&"Target"===Ze(e)));if(t){const i=e.FunctionReference?.MemberParent?.getName()??t.PinType?.PinSubCategoryObject?.getName()??"Untitled";return i.length>0?`Target is ${oe.formatStringName(i)}`:null}return null}(e.entity),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 z`${this.renderTop()}${this.pinInserter?z`Add pin ${ce.plusCircle}`:F} ${this.element.entity.isDevelopmentOnly()?z`Development Only`:F} ${this.element.advancedPinDisplay?z`${ce.expandIcon}`:F}`}renderNodeIcon(){return this.element.entity.nodeIcon()}renderNodeName(){return this.element.nodeDisplayName}renderTop(){const e=this.renderNodeIcon(),t=this.renderNodeName();return z`${e?z`${e}`:F} ${t?z`${t} ${this.#xe?z`${this.#xe}`:F}`:F}`}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.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")}getPinElements(){return this.element.getPinElements()}createPinElements(){return this.element.getPinEntities().filter((e=>!e.isHidden())).map((e=>this.createPinElement(e)))}linksChanged(){}getAllConnectedLinks(){const e=this.element.nodeTitle,t=`ueb-link[data-origin-node="${e}"],ueb-link[data-target-node="${e}"]`;return[...this.blueprint.querySelectorAll(t)]}}class Xt extends qt{#Pe=document.createElement("div");#ke=document.createElement("div");#Le=document.createElement("div");#Ae=document.createElement("div");#Me=document.createElement("div");#Ie=document.createElement("div");#Te=document.createElement("div");#Oe=document.createElement("div");initialize(e){super.initialize(e),this.element.classList.add("ueb-resizeable"),this.#Pe.classList.add("ueb-resizeable-top"),this.#ke.classList.add("ueb-resizeable-right"),this.#Le.classList.add("ueb-resizeable-bottom"),this.#Ae.classList.add("ueb-resizeable-left"),this.#Me.classList.add("ueb-resizeable-top-right"),this.#Ie.classList.add("ueb-resizeable-bottom-right"),this.#Te.classList.add("ueb-resizeable-bottom-left"),this.#Oe.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.#Pe,this.#ke,this.#Le,this.#Ae,this.#Me,this.#Ie,this.#Te,this.#Oe)}createInputObjects(){return[...super.createInputObjects(),new Ft(this.#Pe,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 Ft(this.#ke,this.blueprint,{onDrag:(e,t)=>{t[0]=e[0]-this.element.rightBoundary(),this.setSizeX(this.element.sizeX+t[0])},onEndDrag:()=>this.endResize()}),new Ft(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 Ft(this.#Ae,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 Ft(this.#Me,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 Ft(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 Ft(this.#Te,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 Ft(this.#Oe,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 Zt extends Xt{#De=0;initialize(e){super.initialize(e),e.classList.add("ueb-node-style-comment","ueb-node-resizeable"),e.sizeX=25*ae.gridSize,e.sizeY=6*ae.gridSize,super.initialize(e)}getDraggableElement(){return this.element.querySelector(".ueb-node-top")}render(){return z``}firstUpdated(e){super.firstUpdated(e);const t=this.getDraggableElement().getBoundingClientRect();this.#De=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*ae.gridSize&&(this.element.setNodeWidth(e),!0)}setSizeY(e){return(e=Math.round(e))>=2*ae.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.#De:super.bottomBoundary()}leftBoundary(e=!1){return this.element.locationX}}class Wt extends zt{#$e;#Ve=null;#Be=e=>{if(!this.enteredPin){this.linkValid=!1,this.enteredPin=e.target;const t=this.link.origin??this.target,i=this.enteredPin,s=t.isOutput()?t:i;t.isKnot()||i.isKnot()?(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.valueOf()&&"object"==i.entity.PinType.PinCategory.valueOf()||t.pinType==i.pinType?(this.link.setMessageCorrect(),this.linkValid=!0):(this.link.setMessageTypesIncompatible(t,i),this.linkValid=!1)}};#Re=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.isKnot()&&(this.#Ve=this.target),this.link=Ae.getConstructor("ueb-link").newObject(this.target,null),this.blueprint.template.linksContainerElement.prepend(this.link),this.link.setMessagePlaceNode(),this.#$e=this.blueprint.querySelectorAll("ueb-pin"),this.#$e.forEach((e=>{e!=this.target&&(e.addEventListener("mouseenter",this.#Be),e.addEventListener("mouseleave",this.#Re))})),this.link.startDragging(),this.link.setTargetLocation(e)}dragTo(e,t){this.link.setTargetLocation(e)}endDrag(){if(this.#$e.forEach((e=>{e.removeEventListener("mouseenter",this.#Be),e.removeEventListener("mouseleave",this.#Re)})),this.#$e=null,this.enteredPin&&this.linkValid){if(this.#Ve){const e=this.#Ve!==this.link.origin?this.link.origin:this.enteredPin;if(this.#Ve.isInput()&&e.isInput()||this.#Ve.isOutput()&&e.isOutput()){const e=this.#Ve.template.getoppositePin();this.#Ve===this.link.origin?this.link.origin=e:this.enteredPin=e}}else this.enteredPin.isKnot()&&(this.#Ve=this.enteredPin,this.link.origin.isOutput()&&(this.enteredPin=this.enteredPin.template.getoppositePin()));this.link.origin.getLinks().find((e=>e.equals(this.enteredPin.createPinReference())))?this.link.remove():(this.blueprint.addGraphElement(this.link),this.link.target=this.enteredPin)}else this.link.remove();this.enteredPin=null,this.link.removeMessage(),this.link.finishDragging(),this.link=null,this.#Ve=null}}class Qt extends qt{#Ge=!1;#He=!1;displayName="";static nodeStyleClasses=["ueb-node-style-glass"];initialize(e){super.initialize(e),this.displayName=this.element.nodeDisplayName}render(){return z`${this.displayName?z`${this.displayName}`:F} ${this.#Ge?z``:F} ${this.#He?z``:F} ${this.pinInserter?z`Add pin ${ce.plusCircle}`:F}`}createPinElements(){return this.element.getPinEntities().filter((e=>!e.isHidden())).map((e=>{this.#Ge||=e.isInput(),this.#He||=e.isOutput();return Ae.getConstructor("ueb-pin").newObject(e,void 0,this.element)}))}}class Jt extends Qt{static nodeStyleClasses=["ueb-node-style-metasound","ueb-node-style-operation"]}class ei extends Qt{static nodeStyleClasses=[...super.nodeStyleClasses,"ueb-node-style-conversion"]}class ti extends Qt{static nodeStyleClasses=[...super.nodeStyleClasses,"ueb-node-style-operation"]}class ii extends $t{static canWrapInput=!0;#ze;get iconElement(){return this.#ze}#_e;get wrapperElement(){return this.#_e}isNameRendered=!0;initialize(e){if(super.initialize(e),this.element.nodeElement){const e=this.element.nodeElement.template;this.isNameRendered=!(e instanceof ei||e instanceof ti||e instanceof Jt)}}setup(){super.setup(),this.element.nodeElement=this.element.closest("ueb-node");const e=this.element.nodeElement.template;(e instanceof ei||e instanceof ti)&&(this.isNameRendered=!1,this.element.requestUpdate())}createInputObjects(){return[new Wt(this.element,this.blueprint,{moveEverywhere:!0,draggableElement:this.getClickableElement()})]}render(){const e=z`${this.renderIcon()}`,t=z`${this.isNameRendered?this.renderName():F} ${this.isInputRendered()?this.renderInput():z``}`;return z`${this.element.isInput()?z`${e}${t}`:z`${t}${e}`}`}renderIcon(){if(this.element.nodeElement.entity.isPcg())switch(this.element.entity.getType()){case"Any":return ce.pcgPin;case"Param":case"Param[]":return ce.pcgParamPin;case"Spatial":case"Spatial[]":return ce.pcgSpatialPin;case"Any[]":case"Point[]":case"Surface[]":case"Volume[]":if(this.element.isOutput())return ce.pcgPin;case"Point":case"Surface":case"Volume":return ce.pcgStackPin}switch(this.element.entity.PinType.ContainerType?.toString()){case"Array":return ce.arrayPin;case"Set":return ce.setPin;case"Map":return ce.mapPin}return"delegate"===this.element.entity.PinType.PinCategory?.toString().toLocaleLowerCase()?ce.delegate:this.element.nodeElement?.template instanceof ti?ce.operationPin:"statictype"===this.element.entity.PinType.PinCategory?.toString().toLocaleLowerCase()?ce.staticPin:ce.genericPin}renderName(){let e=this.element.getPinDisplayName();const t=this.element.nodeElement,i=this.element.getPinName();return t.getType()==ae.paths.makeStruct&&i==t.entity.StructType.getName()&&(e=i),z`${e}`}isInputRendered(){return this.element.isInput()&&!this.element.entity.bDefaultValueIsIgnored?.valueOf()&&!this.element.entity.PinType.bIsReference?.valueOf()}renderInput(){return z``}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.#ze=this.element.querySelector(".ueb-pin-icon svg")??this.element,this.#_e=this.element.querySelector(".ueb-pin-wrapper")}getLinkLocation(){const e=(this.#ze??this.element).getBoundingClientRect(),t=[this.element.isInputVisually()?e.left:e.right+1,(e.top+e.bottom)/2],i=oe.convertLocation(t,this.blueprint.template.gridElement);return this.blueprint.compensateTranslation(i[0],i[1])}getClickableElement(){return this.#_e??this.element}getAllConnectedLinks(){if(!this.element.isLinked)return[];const e=this.element.nodeElement.nodeTitle,t=this.element.pinId,i=`ueb-link[data-origin-node="${e}"][data-origin-pin="${t}"],ueb-link[data-target-node="${e}"][data-target-pin="${t}"]`;return[...this.blueprint.querySelectorAll(i)]}}class si extends ii{render(){return z`${this.renderIcon()}`}}class ri extends qt{static nodeStyleClasses=[...super.nodeStyleClasses,"ueb-node-style-event"];#Fe;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()===ae.paths.customEvent&&(this.element.entity.CustomFunctionName||this.element.entity.FunctionReference.MemberParent);return z`${e?z`${e}`:F} ${t?z`${t} ${i?z`Custom Event`:F}`:F}`}getPinElements(){return this.element.getPinElements().filter((e=>"delegate"!==e.entity.PinType.PinCategory?.toString()))}createDelegatePinElement(){return this.#Fe||(this.#Fe=Ae.getConstructor("ueb-pin").newObject(this.element.getPinEntities().find((e=>!e.isHidden()&&"delegate"===e.PinType.PinCategory?.toString())),new si,this.element),this.#Fe.template.isNameRendered=!1),this.#Fe}createPinElements(){return[this.createDelegatePinElement(),...this.element.getPinEntities().filter((e=>!e.isHidden()&&"delegate"!==e.PinType.PinCategory?.toString())).map((e=>Ae.getConstructor("ueb-pin").newObject(e,void 0,this.element)))]}}class ni extends si{render(){return this.element.isOutput()?super.render():z``}getoppositePin(){const e=this.element.nodeElement.template;return this.element.isOutput()?e.inputPin:e.outputPin}getLinkLocation(){return this.element.isInput()?this.getoppositePin().getLinkLocation():super.getLinkLocation()}}class ai extends qt{#je=!1;get switchDirectionsVisually(){return this.#je}set switchDirectionsVisually(e){this.#je!=e&&(this.#je=e,this.element.acknowledgeReflow())}#Ue;get inputPin(){return this.#Ue}#Ke;get outputPin(){return this.#Ke}initialize(e){super.initialize(e),this.element.classList.add("ueb-node-style-minimal")}render(){return z``}setupPins(){for(const e of this.getPinElements())this.element.querySelector(".ueb-node-border").appendChild(e)}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=Ae.getConstructor("ueb-pin");return[this.#Ue=s.newObject(t,new ni,this.element),this.#Ke=s.newObject(i,new ni,this.element)]}linksChanged(){}checkSwtichDirectionsVisually(){let e=0,t=0,i=0,s=0;const r=this.getAllConnectedLinks();for(const n of r){const r=n.getOtherPin(this.element);r?.isInput()?(i+=r.getLinkLocation()[0],++s):r?.isOutput()&&(e+=r.getLinkLocation()[0],++t)}e/=t,i/=s,i!e.entity.isHidden()&&!e.entity.isExecution()));this.element.style.setProperty("--ueb-node-color",e.getColor().cssText)}}const ci=["Boolean::LogicEq","Boolean::LogicNEq","Integer::EnumNEq","Integer::EnumEq",...["Abs","Add","ArcCosine(Degrees)","ArcCosine(Radians)","ArcSine(Degrees)","ArcSine(Radians)","ArcTangent(Degrees)","ArcTangent(Radians)","Ceil","CmpEQ","CmpGE","CmpGT","CmpLE","CmpLT","CmpNEQ","Cosine(Degrees)","Cosine(Radians)","DegreesToRadians","Div","Dot","Exp","Exp2","Floor","FMod","Frac","Length","Lerp","Log","Log2","Madd","Max","Min","Mul","Negate","Normalize","OneMinus","PI","RadiansToDegrees","Rcp","RcpFast","Round","RSqrt","Sign","Sine(Degrees)","Sine(Radians)","Sqrt","Step","Subtract","Tangent(Degrees)","Tangent(Radians)","Trunc","TWO_PI"].map((e=>"Numeric::"+e)),"Vector3::Cross"],ui=ae.paths;function hi(e){if(e.getClass()===ui.callFunction||e.getClass()===ui.commutativeAssociativeBinaryOperator||e.getClass()===ui.callArrayFunction){const t=e.FunctionReference?.MemberParent?.path??"",i=e.FunctionReference?.MemberName?.toString();if(i&&(t===ui.kismetMathLibrary||t===ui.kismetArrayLibrary)){if(i.startsWith("Conv_"))return ei;if(i.startsWith("Add_")||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 ti;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 ti}}if(t===ui.blueprintSetLibrary)return ti;if(t===ui.blueprintMapLibrary)return ti}switch(e.getClass()){case ui.comment:case ui.materialGraphNodeComment:return Zt;case ui.createDelegate:return qt;case ui.metasoundEditorGraphExternalNode:return"Add"==e.ClassName?.Name?Jt:oi;case ui.niagaraNodeOp:if(ci.includes(e.OpName?.toString()))return ti;break;case ui.promotableOperator:return ti;case ui.knot:return ai;case ui.literal:case ui.self:case ui.variableGet:case ui.variableSet:return li}return e.isEvent()?ri:qt}class pi extends Ht{static properties={...super.properties,selected:{type:Boolean,attribute:"data-selected",reflect:!0,converter:Le.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(ae.nodeDragGeneralEventName,this.dragHandler)}setSelected(e=!0){this.selected=e,this.blueprint&&(this.selected?(this.listeningDrag=!0,this.blueprint.addEventListener(ae.nodeDragGeneralEventName,this.dragHandler)):(this.blueprint.removeEventListener(ae.nodeDragGeneralEventName,this.dragHandler),this.listeningDrag=!1))}}class di extends pi{static properties={...pi.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:et.attributeConverter,reflect:!0},enabledState:{type:String,attribute:"data-enabled-state",reflect:!0},nodeDisplayName:{type:String,attribute:!1},pureFunction:{type:Boolean,converter:Le.booleanConverter,attribute:"data-pure-function",reflect:!0}};static dragEventName=ae.nodeDragEventName;static dragGeneralEventName=ae.nodeDragGeneralEventName;get blueprint(){return super.blueprint}set blueprint(e){super.blueprint=e,this.#Ye.forEach((t=>t.blueprint=e))}#qe;get nodeNameElement(){return this.#qe}set nodeNameElement(e){this.#qe=e}#Ye=[];boundComments=[];#Xe=!1;#Ze=e=>{this.selected||this.#Xe||(this.#Xe=!0,this.requestUpdate(),this.updateComplete.then((()=>this.#Xe=!1)),this.addLocation(...e.detail.value))};static fromSerializedObject(e){e=e.trim();let t=Pt.grammar.parse(e);return di.newObject(t)}static newObject(e=new Pt,t=new(hi(e))){const i=new di;return i.initialize(e,t),i}#We(e){for(let t of this.getPinElements())for(let i of t.getLinks())this.blueprint.getPin(i).redirectLink(t,new lt(new et(e),t.entity.PinId))}initialize(e=new Pt,t=new(hi(e))){this.typePath=e.getType(),this.nodeTitle=e.getObjectName(),this.advancedPinDisplay=e.AdvancedPinDisplay?.toString(),this.enabledState=e.EnabledState,this.nodeDisplayName=_e(e),this.pureFunction=e.bIsPureFunc?.valueOf(),this.dragLinkObjects=[],super.initialize(e,t),this.#Ye=this.template.createPinElements(),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())),e.listenAttribute("Name",(t=>{this.#We(t?.toString()),this.nodeTitle=t?.toString(),this.nodeDisplayName=_e(e)}))}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(ae.nodeDragEventName,this.#Ze),this.boundComments.push(e))}unbindFromComment(e){const t=this.boundComments.indexOf(e);t>=0&&(e.removeEventListener(ae.nodeDragEventName,this.#Ze),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()}computeNodeDisplayName(){this.nodeDisplayName=_e(this.entity)}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)))}getPinElements(){return this.#Ye}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(ae.nodeReflowEventName);this.dispatchEvent(e)}setShowAdvancedPinDisplay(e){this.entity.AdvancedPinDisplay=new et(e?"Shown":"Hidden"),this.advancedPinDisplay=this.entity.AdvancedPinDisplay}toggleShowAdvancedPinDisplay(){this.setShowAdvancedPinDisplay("Shown"!=this.entity.AdvancedPinDisplay?.toString())}}class mi extends Pt{#Qe=new Map;#Je=[];get objectEntities(){return this.#Je}static attributes={...super.attributes,ScriptVariables:super.attributes.ScriptVariables.asUniqueClass(!0).withDefault()};constructor(...e){super(...e),this.Name||(this.Name=new this.constructor.attributes.Name("Blueprint"))}getHomonymObjectEntity(e){const t=e.getObjectName();return this.#Je.find((e=>e.getObjectName()==t))}takeFreeName(e){e=e.replace(/_\d+$/,"");const t=(this.#Qe.get(e)??-1)+1;return this.#Qe.set(e,t),ae.nodeTitle(e,t)}updateNameIndex(e){const t=e.match(/(.+)_(\d+)$/);if(t){e=t[1];const i=Number(t[2]);this.#Qe.set(e,Math.max(i,this.#Qe.get(e)??0))}}addObjectEntity(e){if(!this.#Je.includes(e)){this.#Je.push(e);const[t,i]=e.getNameAndCounter();return this.#Qe.set(t,Math.max(this.#Qe.get(t)??0,i)),!0}return!1}removeObjectEntity(e){const t=this.#Je.indexOf(e);if(t>=0){const e=this.#Je.pop();return t{let i=this[ae.subObjectAttributeNameFromReference(e,t)];i.Name.value=s,i.Name=i.Name})),e.path.replace(i,s),s}variableName(e){return this[ae.subObjectAttributeNameFromReference(e.ScriptVariable,!0)]?.Variable?.Name?.toString()}variableIndex(e){let t=0;for(const i of this.ScriptVariables?.valueOf()){if(e==this.variableName(i))return t;++t}}mergeWith(e){if(0===(e.ScriptVariables?.length??0))return this;const t=this.ScriptVariables.valueOf().map((e=>e.ScriptVariable.getName()));let i=oe.mergeArrays(this.ScriptVariables.valueOf(),e.ScriptVariables.valueOf(),((e,t)=>this.variableName(e)==this.variableName(t)),(i=>{let s=i.ScriptVariable.getName();t.includes(s)&&(s=this.renameScriptVariable(i.ScriptVariable,e)),this.updateNameIndex(s)}));if(i.length===this.ScriptVariables.length)return this;i.reverse();const s=this.constructor,r=i.concat(i).map(((t,s)=>{const r=ae.subObjectAttributeNameFromReference(t.ScriptVariable,s>=i.length),n=this[r]??e[r];return n?[r,n]:null})).filter((e=>e));r.push(...Object.entries(this).filter((([e,t])=>!e.startsWith(ae.subObjectAttributeNamePrefix)&&"ExportedNodes"!==e)),["ScriptVariables",new s.attributes.ScriptVariables(i.reverse())]);const n=new mi(Object.fromEntries(r));return n.mirrorNameInExportPaths(e.Name?.toString()),n.#Qe=this.#Qe,n.#Je=this.#Je,n}getVariablesAttributesReferringTo(...e){let t=new Set(...e.flatMap((e=>e.getPinEntities())).map((e=>e.PinName.toString())));return this.ScriptVariables.valueOf().map((e=>{const t=ae.subObjectAttributeNameFromReference(e.ScriptVariable,!1),i=ae.subObjectAttributeNameFromReference(e.ScriptVariable,!0);return{simple:[t,this[t]],full:[i,this[i]],variable:e}})).filter((e=>t.has(e.full?.Variable?.Name))).reduce(((e,t)=>(e.simple.push([t.simple[0],t.simple[1]]),e.full.push([t.full[0],t.full[1]]),e.ScriptVariables.push(t.variable),e)),{simple:[],full:[],ScriptVariables:[]}),{}}}class gi extends Pt{constructor(e,t){const i=ae.paths.niagaraClipboardContent,s=e.takeFreeName("NiagaraClipboardContent"),r=`/Engine/Transient.${s}`,n=new Set;let a="";for(const i of t)i.exported&&(i.getPinEntities().map((t=>e.variableIndex(t.PinName.toString()))).filter((e=>null!=e)).forEach((e=>n.add(e))),a+=i.serialize());const o=e.ScriptVariables.valueOf().filter(((e,t)=>n.has(t))),l=o.concat(o).map(((t,i)=>{const s=ae.subObjectAttributeNameFromReference(t.ScriptVariable,i>=o.length);return[s,e[s]]}));super({Class:new ot(i),Name:new Qe(s),...Object.fromEntries(l),ExportPath:new ot(i,r),ScriptVariables:new gi.attributes.ScriptVariables(o),ExportedNodes:new Qe(btoa(a))})}}class bi extends Lt{#et;constructor(e,t,i={}){i.listenOnFocus??=!0,i.unlistenOnTextEdit??=!0,super(e,t,i);let s=this;this.#et=()=>s.copied()}listenEvents(){window.addEventListener("copy",this.#et)}unlistenEvents(){window.removeEventListener("copy",this.#et)}copied(){const e=this.blueprint.getSerializedText();return navigator.clipboard.writeText(e),e}}class vi extends Lt{#tt;constructor(e,t,i={}){i.listenOnFocus??=!0,i.unlistenOnTextEdit??=!0,super(e,t,i);let s=this;this.#tt=()=>s.cut()}listenEvents(){window.addEventListener("cut",this.#tt)}unlistenEvents(){window.removeEventListener("cut",this.#tt)}cut(){this.blueprint.template.getCopyInputObject().copied(),this.blueprint.removeGraphElement(...this.blueprint.getNodes(!0))}}class fi extends Lt{#it;constructor(e,t,i={}){i.listenOnFocus??=!0,i.unlistenOnTextEdit??=!0,super(e,t,i);let s=this;this.#it=e=>s.pasted(e.clipboardData.getData("Text"))}listenEvents(){window.addEventListener("paste",this.#it)}unlistenEvents(){window.removeEventListener("paste",this.#it)}pasted(e){let t=0,i=0,s=0,r=Pt.grammarMultipleObjects.parse(e).map((e=>{let r=Ae.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;for(const e of r)e.addLocation(n[0]-i,n[1]-t),e.snapToGrid(),e.setSelected(!0);return this.blueprint.addGraphElement(...r),r}}class yi extends It{static#q=e=>{};#st=0;get variation(){return this.#st}#rt=e=>{this.enablerKey&&!this.enablerActivated||(e.preventDefault(),this.#st=e.deltaY,this.setLocationFromEvent(e),this.wheel())};#nt=e=>e.preventDefault();constructor(e,t,i={},s=yi.#q){i.listenOnFocus=!0,i.strictTarget??=!1,super(e,t,i),this.strictTarget=i.strictTarget,this.onWheel=s}listenEvents(){this.movementSpace.addEventListener("wheel",this.#rt,!1),this.movementSpace.parentElement?.addEventListener("wheel",this.#nt)}unlistenEvents(){this.movementSpace.removeEventListener("wheel",this.#rt,!1),this.movementSpace.parentElement?.removeEventListener("wheel",this.#nt)}wheel(){this.onWheel(this)}}class wi extends yi{#at=0;#ot=!1;get enableZoonIn(){return this.#ot}set enableZoonIn(e){e!=this.#ot&&(this.#ot=e)}wheel(){if(this.#at+=-this.variation,Math.abs(this.#at)0||(e+=Math.sign(this.#at),this.blueprint.setZoom(e,this.location),this.#at=0)}}class Si extends Mt{#lt;constructor(e,t,i={}){i.activationKeys=Dt.enableZoomIn,super(e,t,i)}fire(){this.#lt=this.blueprint.template.getZoomInputObject(),this.#lt.enableZoonIn=!0}unfire(){this.#lt.enableZoonIn=!1}}class Ei extends zt{startDrag(){this.blueprint.scrolling=!0}dragTo(e,t){this.blueprint.scrollDelta(-t[0],-t[1])}endDrag(){this.blueprint.scrolling=!1}}class Ci extends It{#ct=null;#ut=e=>{e.preventDefault(),this.setLocationFromEvent(e),this.blueprint.mousePosition=[...this.location]};#ht=e=>{this.#ct||(e.preventDefault(),this.#ct=e.detail.tracker,this.unlistenMouseMove())};#pt=e=>{this.#ct==e.detail.tracker&&(e.preventDefault(),this.#ct=null,this.listenMouseMove())};constructor(e,t,i={}){i.listenOnFocus=!0,super(e,t,i)}listenMouseMove(){this.target.addEventListener("mousemove",this.#ut)}unlistenMouseMove(){this.target.removeEventListener("mousemove",this.#ut)}listenEvents(){this.listenMouseMove(),this.blueprint.addEventListener(ae.trackingMouseEventName.begin,this.#ht),this.blueprint.addEventListener(ae.trackingMouseEventName.end,this.#pt)}unlistenEvents(){this.unlistenMouseMove(),this.blueprint.removeEventListener(ae.trackingMouseEventName.begin,this.#ht),this.blueprint.removeEventListener(ae.trackingMouseEventName.end,this.#pt)}}class Ni extends zt{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 xi extends Lt{#dt=e=>this.clickedSomewhere(e.target);constructor(e,t,i={}){i.listenOnFocus=!0,super(e,t,i),this.blueprint.focus&&document.addEventListener("click",this.#dt)}clickedSomewhere(e){e.closest("ueb-blueprint")||this.blueprint.setFocused(!1)}listenEvents(){document.addEventListener("click",this.#dt)}unlistenEvents(){document.removeEventListener("click",this.#dt)}}class Pi extends $t{static styleVariables={"--ueb-font-size":`${ae.fontSize}`,"--ueb-grid-axis-line-color":`${ae.gridAxisLineColor}`,"--ueb-grid-expand":`${ae.expandGridSize}px`,"--ueb-grid-line-color":`${ae.gridLineColor}`,"--ueb-grid-line-width":`${ae.gridLineWidth}px`,"--ueb-grid-set-line-color":`${ae.gridSetLineColor}`,"--ueb-grid-set":`${ae.gridSet}`,"--ueb-grid-size":`${ae.gridSize}px`,"--ueb-link-min-width":`${ae.linkMinWidth}`,"--ueb-node-radius":`${ae.nodeRadius}px`};#mt=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)}));#gt;#bt;#lt;headerElement;overlayElement;viewportElement;selectorElement;gridElement;linksContainerElement;nodesContainerElement;viewportSize=[0,0];#vt=()=>this.headerElement.classList.remove("ueb-zoom-changed");initialize(e){super.initialize(e),this.element.style.cssText=Object.entries(Pi.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.#mt.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.#mt.unobserve(this.viewportElement)}createInputObjects(){const e=this.element.getGridDOMElement();return this.#gt=new bi(e,this.blueprint),this.#bt=new fi(e,this.blueprint),this.#lt=new wi(e,this.blueprint),[...super.createInputObjects(),this.#gt,this.#bt,this.#lt,new vi(e,this.blueprint),new Mt(e,this.blueprint,{activationKeys:Dt.duplicateNodes},(()=>this.blueprint.template.getPasteInputObject().pasted(this.blueprint.template.getCopyInputObject().copied()))),new Mt(e,this.blueprint,{activationKeys:Dt.deleteNodes},(()=>this.blueprint.removeGraphElement(...this.blueprint.getNodes(!0)))),new Mt(e,this.blueprint,{activationKeys:Dt.selectAllNodes},(()=>this.blueprint.selectAll())),new Ni(e,this.blueprint,{clickButton:ae.mouseClickButton,exitAnyButton:!0,moveEverywhere:!0}),new Ei(e,this.blueprint,{clickButton:ae.mouseRightClickButton,exitAnyButton:!1,moveEverywhere:!0}),new xi(e,this.blueprint),new Ci(e,this.blueprint),new Si(e,this.blueprint)]}render(){return z`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(ae.expandGridSize,ae.expandGridSize)}willUpdate(e){super.willUpdate(e),this.headerElement&&e.has("zoom")&&(this.headerElement.classList.contains("ueb-zoom-changed")&&(this.headerElement.classList.remove("ueb-zoom-changed"),this.headerElement.offsetWidth),this.headerElement.classList.add("ueb-zoom-changed"),this.headerElement.addEventListener("animationend",this.#vt,{once:!0}))}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=oe.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="${ae.paths.comment}"]${e?'[data-selected="true"]':""}, ueb-node[data-type="${ae.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.#gt}getPasteInputObject(){return this.#bt}getZoomInputObject(){return this.#lt}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 ki extends le{static properties={selecting:{type:Boolean,attribute:"data-selecting",reflect:!0,converter:Le.booleanConverter},scrolling:{type:Boolean,attribute:"data-scrolling",reflect:!0,converter:Le.booleanConverter},focused:{type:Boolean,attribute:"data-focused",reflect:!0,converter:Le.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)};#ft=0;#yt=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=ae.expandGridSize,this.scrollY=ae.expandGridSize,this.translateX=ae.expandGridSize,this.translateY=ae.expandGridSize,super.initialize(new mi,new Pi)}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=ae.smoothScrollTime){if(i){let i=[0,0];this.#ft&&cancelAnimationFrame(this.#ft),this.#yt&&cancelAnimationFrame(this.#yt),oe.animate(0,e,s,(e=>{this.scrollDelta(e-i[0],0,!1),i[0]=e}),(e=>this.#ft=e)),oe.animate(0,t,s,(e=>{this.scrollDelta(0,e-i[1],!1),i[1]=e}),(e=>this.#yt=e))}else{const i=[2*ae.expandGridSize,2*ae.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]-ae.gridExpandThreshold*ae.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 oe.snapToGrid(e,t,ae.gridSize)}seamlessExpand(e,t){e=Math.round(e),t=Math.round(t);let i=this.getScale();[e,t]=[-e*ae.expandGridSize,-t*ae.expandGridSize],0!=e&&(this.scrollX+=e,e/=i),0!=t&&(this.scrollY+=t,t/=i),this.translateX+=e,this.translateY+=t}progressiveSnapToGrid(e){return ae.expandGridSize*Math.round(e/ae.expandGridSize+.5*Math.sign(e))}getZoom(){return this.zoom}setZoom(e,t){if((e=oe.clamp(e,ae.minZoom,ae.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 ae.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){let t=this.nodes;return e&&(t=t.filter((e=>e.selected))),t}getCommentNodes(e=!1){let t=[...this.template.getCommentNodes(e)];return 0===t.length&&(t=this.nodes.filter((t=>t.getType()===ae.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.origin==i||e.target==i))}return null!=e&&null!=t?this.links.filter((i=>i.origin==e&&i.target==t||i.origin==t&&i.target==e)):this.links}getLink(e,t,i=!1){return this.links.find((s=>s.origin==e&&s.target==t||!i&&s.origin==t&&s.target==e))}selectAll(){this.getNodes().forEach((e=>ki.nodeSelectToggleFunction(e,!0)))}unselectAll(){this.getNodes().forEach((e=>ki.nodeSelectToggleFunction(e,!1)))}getSerializedText(){const e=this.blueprint.getNodes(!0).map((e=>e.entity));let t=!1,i=e.filter((e=>(t||=e.exported,!e.exported))).reduce(((e,t)=>e+t.serialize()),"");if(t){i=new gi(this.blueprint.entity,e).serialize()+i}return i}addGraphElement(...e){const t=e=>{const i=e.currentTarget;i.removeEventListener(ae.removeEventName,t);const[s,r]=i instanceof di?[this.nodes,i.entity]:i instanceof Gt?[this.links]:null,n=s?.indexOf(i);if(n>=0){const e=s.pop();ne.entity.exported=!0));continue}const s=this.entity.getHomonymObjectEntity(i.entity);if(s){const t=this.entity.takeFreeName(e);s.Name=new s.Name.constructor(t)}this.nodes.push(i),this.entity.addObjectEntity(i.entity),i.addEventListener(ae.removeEventName,t),this.template.nodesContainerElement?.appendChild(i)}else i instanceof Gt&&!this.links.includes(i)&&(this.links.push(i),i.addEventListener(ae.removeEventName,t),this.template.linksContainerElement&&!this.template.linksContainerElement.contains(i)&&this.template.linksContainerElement.appendChild(i));e.filter((e=>e instanceof di)).forEach((t=>t.sanitizeLinks(e))),e.filter((e=>e instanceof di&&e.getType()==ae.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?ae.focusEventName.begin:ae.focusEventName.end);this.focused=e,this.focused||this.unselectAll(),this.dispatchEvent(t)}acknowledgeEditText(e){const t=new CustomEvent(e?ae.editTextEventName.begin:ae.editTextEventName.end);this.dispatchEvent(t)}}customElements.define("ueb-blueprint",ki);class Li extends Ut{#wt;get locationChangeCallback(){return this.#wt}set locationChangeCallback(e){this.#wt=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 _t(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 Li{adjustLocation(e,t){const i=Math.round(this.movementSpaceSize[0]/2);e-=i,t=-(t-i);let[s,r]=oe.getPolarCoordinates(e,t);return s=Math.min(s,i),[e,t]=oe.getCartesianCoordinates(s,r),this.locationChangeCallback?.(e/i,t/i),[e=Math.round(e+i),t=Math.round(-t+i)]}}class Mi extends Ht{windowElement;setup(){super.setup(),this.windowElement=this.closest("ueb-window")}setLocation(e,t){super.setLocation(...this.template.adjustLocation(e,t))}}class Ii extends Mi{constructor(){super(),super.initialize({},new Ai)}static newObject(){return new Ii}initialize(){}}class Ti extends Li{adjustLocation(e,t){return e=oe.clamp(e,0,this.movementSpaceSize[0]),t=oe.clamp(t,0,this.movementSpaceSize[1]),this.locationChangeCallback?.(e/this.movementSpaceSize[0],1-t/this.movementSpaceSize[1]),[e,t]}}class Oi extends Mi{constructor(){super(),super.initialize({},new Ti)}static newObject(){return new Oi}initialize(){}}class Di extends zt{constructor(e,t,i={}){i.consumeEvent=!0,super(e,t,i)}}class $i extends $t{#St;#Et;#Ct=e=>this.element.selectedOption=e.target.selectedOptions[0].value;render(){return z`${this.element.options.map((([e,t])=>z`${t}`))} ${this.element.selectedOption}`}firstUpdated(e){super.firstUpdated(e),this.#St=this.element.querySelector("select:first-child"),this.#Et=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.#Et.getBoundingClientRect();this.element.style.setProperty("--ueb-dropdown-width",t.width+"px")}createInputObjects(){return[...super.createInputObjects(),new Di(this.element,this.blueprint)]}setSelectedValue(e){this.element.querySelector(`option[value="${e}"]`).defaultSelected=!0}getSelectedValue(){return this.#St.value}}class Vi extends le{static properties={...super.properties,options:{type:Object},selectedOption:{type:String}};constructor(){super(),super.initialize({},new $i),this.options=[],this.selectedOption=""}static newObject(e){return new Vi}initialize(){}getValue(){return this.template.getSelectedValue()}}class Bi extends $t{#Nt=()=>{this.blueprint.acknowledgeEditText(!0),this.element.selectOnFocus&&getSelection().selectAllChildren(this.element)};#xt=()=>{this.blueprint.acknowledgeEditText(!1),getSelection().removeAllRanges()};#Pt=e=>e.target.querySelectorAll("br").forEach((e=>e.remove()));#kt=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 Di(this.element,this.blueprint)]}setup(){super.setup(),this.element.addEventListener("focus",this.#Nt),this.element.addEventListener("focusout",this.#xt),this.element.singleLine&&this.element.addEventListener("input",this.#Pt),this.element.blurOnEnter&&this.element.addEventListener("keydown",this.#kt)}cleanup(){super.cleanup(),this.element.removeEventListener("focus",this.#Nt),this.element.removeEventListener("focusout",this.#xt),this.element.removeEventListener("input",this.#Pt),this.element.removeEventListener("keydown",this.#kt)}}class Ri extends le{static properties={...super.properties,singleLine:{type:Boolean,attribute:"data-single-line",converter:Le.booleanConverter,reflect:!0},selectOnFocus:{type:Boolean,attribute:"data-select-focus",converter:Le.booleanConverter,reflect:!0},blurOnEnter:{type:Boolean,attribute:"data-blur-enter",converter:Le.booleanConverter,reflect:!0}};constructor(){super(),this.singleLine=!1,this.selectOnFocus=!0,this.blurOnEnter=!0,super.initialize({},new Bi)}static newObject(){return new Ri}initialize(){}}class Gi extends ii{#Lt;#At=()=>{const e=this.element.getDefaultValue(!0);e.value=this.#Lt.checked,this.element.setDefaultValue(e)};firstUpdated(e){super.firstUpdated(e),this.#Lt=this.element.querySelector(".ueb-pin-input")}setup(){super.setup(),this.#Lt?.addEventListener("change",this.#At)}cleanup(){super.cleanup(),this.#Lt?.removeEventListener("change",this.#At)}createInputObjects(){return[...super.createInputObjects(),new Di(this.#Lt,this.blueprint)]}renderInput(){return z``}}class Hi extends ii{static singleLineInput=!1;static selectOnFocus=!0;static saveEachInputChange=!1;#Mt;get inputWrapper(){return this.#Mt}#It;static stringFromInputToUE(e){return e.replace(/(?=\n\s*)\n$/,"")}static stringFromUEToInput(e){return e.replaceAll(/(?:\r|(?<=(?:^|[^\\])(?:\\\\)*)\\r)(?=\n)/g,"").replace(/(?<=\n\s*)$/,"\n")}#Tt=()=>this.setInputs(this.getInputs(),!0);#Ot=e=>this.#Dt(e.target);#Dt(e){if(this.element.querySelector(".ueb-pin-name")?.getBoundingClientRect().width<20)return;const t=this.blueprint.scaleCorrect(this.#Mt.getBoundingClientRect().width)+this.nameWidth,i=this.element.classList.contains("ueb-pin-input-wrap");!i&&t>ae.pinInputWrapWidth?this.element.classList.add("ueb-pin-input-wrap"):i&&t<=ae.pinInputWrapWidth&&this.element.classList.remove("ueb-pin-input-wrap")}firstUpdated(e){super.firstUpdated(e);this.constructor.canWrapInput&&this.isInputRendered()&&(this.element.addEventListener("input",this.#Ot),this.nameWidth=this.blueprint.scaleCorrect(this.element.querySelector(".ueb-pin-name")?.getBoundingClientRect().width??0)),this.#Mt=this.element.querySelector(".ueb-pin-input-wrapper"),this.#It=[...this.element.querySelectorAll("ueb-input")]}setup(){super.setup();const e=this.constructor;e.saveEachInputChange?this.element.addEventListener("input",this.#Tt):this.element.addEventListener("focusout",this.#Tt),e.canWrapInput&&this.isInputRendered()&&(this.element.addEventListener("input",this.#Ot),this.element.nodeElement.addEventListener(ae.nodeReflowEventName,this.#Ot))}cleanup(){super.cleanup(),this.element.nodeElement.removeEventListener(ae.nodeReflowEventName,this.#Ot),this.element.removeEventListener("input",this.#Ot),this.element.removeEventListener("input",this.#Tt),this.element.removeEventListener("focusout",this.#Tt)}getInput(){return this.getInputs().reduce(((e,t)=>e+t),"")}getInputs(){return this.#It.map((e=>oe.clearHTMLWhitespace(e.innerHTML)))}setInputs(e=[],t=!0){this.#It.forEach(this.constructor.singleLineInput?(t,i)=>t.innerText=e[i]:(t,i)=>t.innerText=e[i].replaceAll("\n","")),t&&this.setDefaultValue(e.map((e=>Hi.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 z``}}class zi extends ii{renderIcon(){return ce.execPin}renderName(){let e=this.element.entity.PinName?.toString();if(this.element.entity.PinFriendlyName)e=this.element.entity.PinFriendlyName.toString();else if("execute"===e||"then"===e)return z``;return z`${this.element.getPinDisplayName()}`}}class _i extends Hi{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){const i=this.element.getDefaultValue();i.value=e[0],this.element.setDefaultValue(i),this.element.requestUpdate()}}class Fi extends _i{renderInput(){return z``}} /** * @license * Copyright 2017 Google LLC * SPDX-License-Identifier: BSD-3-Clause - */const Hi=1;class Vi{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 ji=1;class Ui{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 Ri="important",_i=" !"+Ri,zi=(e=>(...t)=>({_$litDirective$:e,values:t}))(class extends Vi{constructor(e){var t;if(super(e),e.type!==Hi||"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(_i);e.includes("-")||t?i.setProperty(e,t?s.slice(0,-11):s,t?Ri:""):i[e]=s}}return H}});class Fi extends Ft{toggleAdvancedDisplayHandler;getDraggableElement(){return this.element.querySelector(".ueb-window-top")}createDraggableObject(){return new Vt(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 G`${this.renderWindowName()}this.element.remove()}">${le.close}${this.renderContent()}`}renderWindowName(){return G`Window`}renderContent(){return G``}apply(){this.element.dispatchEvent(new CustomEvent(re.windowApplyEventName)),this.element.remove()}cancel(){this.element.dispatchEvent(new CustomEvent(re.windowCancelEventName)),this.element.remove()}}class ji extends Fi{#$t;#Bt;#Gt;#Ht;#Vt;#Rt;#_t;#zt;#Ft;#jt;#Ut=e=>{const t=ae.clearHTMLWhitespace(e.target.innerHTML),i=parseInt(t,16);isNaN(i)||(this.color.setFromRGBANumber(i),this.element.requestUpdate())};#Yt=e=>{const t=ae.clearHTMLWhitespace(e.target.innerHTML),i=parseInt(t,16);isNaN(i)||(this.color.setFromSRGBANumber(i),this.element.requestUpdate())};#Kt=e=>t=>{"Enter"==t.code&&(t.preventDefault(),e(t))};#Xt=new Ie;get color(){return this.#Xt}set color(e){e.toNumber()!=this.color?.toNumber()&&(this.element.requestUpdate("color",this.#Xt),this.#Xt=e)}#qt=new Ie;get fullColor(){return this.#qt}#Zt;get initialColor(){return this.#Zt}#Wt=new Ie;#Qt(e,t,i=!1){const s=this.color.toRGBAString(),n=`${s.substring(0,2*e)}${t}${s.substring(2+2*e)}`;return i?`${n.substring(0,6)}FF`:n}initialize(e){super.initialize(e),this.#Zt=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.#$t=this.element.querySelector(".ueb-color-picker-wheel ueb-color-handler"),this.#Bt=this.element.querySelector(".ueb-color-picker-saturation ueb-ui-slider"),this.#Gt=this.element.querySelector(".ueb-color-picker-value ueb-ui-slider"),this.#Ht=this.element.querySelector(".ueb-color-picker-r ueb-ui-slider"),this.#Vt=this.element.querySelector(".ueb-color-picker-g ueb-ui-slider"),this.#Rt=this.element.querySelector(".ueb-color-picker-b ueb-ui-slider"),this.#_t=this.element.querySelector(".ueb-color-picker-a ueb-ui-slider"),this.#zt=this.element.querySelector(".ueb-color-picker-h ueb-ui-slider"),this.#Ft=this.element.querySelector(".ueb-color-picker-s ueb-ui-slider"),this.#jt=this.element.querySelector(".ueb-color-picker-v ueb-ui-slider"),this.#$t.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.#Bt.template.locationChangeCallback=(e,t)=>{this.color.setFromHSVA(this.color.H.value,t,this.color.V.value,this.color.A.value),this.element.requestUpdate()},this.#Gt.template.locationChangeCallback=(e,t)=>{this.color.setFromHSVA(this.color.H.value,this.color.S.value,t,this.color.A.value),this.element.requestUpdate()},this.#Ht.template.locationChangeCallback=(e,t)=>{this.color.setFromRGBA(e,this.color.G.value,this.color.B.value,this.color.A.value),this.element.requestUpdate()},this.#Vt.template.locationChangeCallback=(e,t)=>{this.color.setFromRGBA(this.color.R.value,e,this.color.B.value,this.color.A.value),this.element.requestUpdate()},this.#Rt.template.locationChangeCallback=(e,t)=>{this.color.setFromRGBA(this.color.R.value,this.color.G.value,e,this.color.A.value),this.element.requestUpdate()},this.#_t.template.locationChangeCallback=(e,t)=>{this.color.setFromRGBA(this.color.R.value,this.color.G.value,this.color.B.value,e),this.element.requestUpdate()},this.#zt.template.locationChangeCallback=(e,t)=>{this.color.setFromHSVA(e,this.color.S.value,this.color.V.value,this.color.A.value),this.element.requestUpdate()},this.#Ft.template.locationChangeCallback=(e,t)=>{this.color.setFromHSVA(this.color.H.value,e,this.color.V.value,this.color.A.value),this.element.requestUpdate()},this.#jt.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 n=e=>`linear-gradient(to right, #${this.#Qt(e,"00",!0)}, #${this.#Qt(e,"ff",!0)})`;switch(e){case 0:t="r",i=this.color.R.value,s=n(e);break;case 1:t="g",i=this.color.G.value,s=n(e);break;case 2:t="b",i=this.color.B.value,s=n(e);break;case 3:t="a",i=this.color.A.value,s=`${re.alphaPattern}, ${n(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.#Wt.setFromHSVA(this.color.H.value,0,this.color.V.value,1),this.#Wt.toRGBAString()},#${this.#Wt.setFromHSVA(this.color.H.value,1,this.color.V.value,1),this.#Wt.toRGBAString()})`;break;case 6:t="v",i=this.color.V.value,s=`linear-gradient(to right, #000, #${this.fullColor.toRGBAString()})`}return s=`background: ${s};`,G`${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(),n=this.fullColor.toRGBAString();return G`OldNewAdvanced${this.renderSlider(0)} ${this.renderSlider(1)} ${this.renderSlider(2)} ${this.renderSlider(3)}${this.renderSlider(4)} ${this.renderSlider(5)} ${this.renderSlider(6)}Hex LinearHex sRGBthis.apply()}">${re.windowApplyButtonText}this.cancel()}">${re.windowCancelButtonText}`}renderWindowName(){return G`${re.colorWindowName}`}}class Ui extends Bi{#Jt(){return De.printNumber(this.element.getDefaultValue()?.X.valueOf()??0)}#ei(){return De.printNumber(this.element.getDefaultValue()?.Y.valueOf()??0)}setDefaultValue(e,t){const i=this.element.getDefaultValue(!0);i.X.value=e[0],i.Y.value=e[1],this.element.setDefaultValue(i)}renderInput(){return G`XY`}}class Yi extends Bi{#Jt(){return De.printNumber(this.element.getDefaultValue()?.X.valueOf()??0)}#ei(){return De.printNumber(this.element.getDefaultValue()?.Y.valueOf()??0)}#ti(){return De.printNumber(this.element.getDefaultValue()?.Z.valueOf()??0)}setDefaultValue(e,t){const i=this.element.getDefaultValue(!0);if(!(i instanceof $e))throw new TypeError("Expected DefaultValue to be a VectorEntity");i.X.value=e[0],i.Y.value=e[1],i.Z.value=e[2],this.element.requestUpdate("DefaultValue",i)}renderInput(){return G`XYZ`}}const Ki={bool:Oi,byte:Gi,enum:class extends Di{static saveEachInputChange=!0;#ii;#si=[];setup(){super.setup();const e=this.element.nodeElement.entity.EnumEntries?.valueOf();this.#si=e?.map((e=>(""===e.valueOf()&&(e=new qe("None")),[e,this.element.nodeElement.getPinEntities().find((t=>e===t.PinName))?.PinFriendlyName.toString()??e])))??re.CommonEnums[this.element.entity.getSubCategory()]?.map((e=>e instanceof Array?e:[e,ae.formatStringName(e)]))??[];const t=this.element.getDefaultValue().toString();this.#si.find((([e,i])=>e===t))||this.#si.push([t,ae.formatStringName(t)]),this.element.requestUpdate()}renderInput(){return G``}firstUpdated(e){super.firstUpdated(e),this.#ii=this.element.querySelector("ueb-dropdown")}getInputs(){return[this.#ii.getValue()]}setDefaultValue(e=[],t){const i=this.element.getDefaultValue();i.value=e[0],this.element.setDefaultValue(i),this.element.requestUpdate()}},int:Gi,int64:class extends Bi{setDefaultValue(e=[],t){const i=this.element.getDefaultValue();i.value=BigInt(e[0]),this.element.setDefaultValue(i),this.element.requestUpdate()}renderInput(){return G``}},MUTABLE_REFERENCE:class extends Jt{renderIcon(){return le.referencePin}},name:class extends Di{static singleLineInput=!0},real:class extends Bi{renderInput(){return G``}},rg:Ui,string:class extends Di{},[re.paths.linearColor]:class extends Jt{#ni;#ri=e=>{e.preventDefault(),this.blueprint.setFocused(!0),this.#ni=Ae.getConstructor("ueb-window").newObject({type:new ji,windowOptions:{getPinColor:()=>this.element.defaultValue,setPinColor:e=>this.element.setDefaultValue(e)}}),this.blueprint.append(this.#ni);const t=()=>{this.element.setDefaultValue(this.#ni.template.color)},i=()=>{this.#ni.removeEventListener(re.windowApplyEventName,t),this.#ni.removeEventListener(re.windowCloseEventName,i),this.#ni=null};this.#ni.addEventListener(re.windowApplyEventName,t),this.#ni.addEventListener(re.windowCloseEventName,i)};renderInput(){return G``}},[re.paths.niagaraBool]:Oi,[re.paths.niagaraPosition]:Yi,[re.paths.rotator]:class extends Bi{#ai(){return De.printNumber(this.element.getDefaultValue()?.R.valueOf()??0)}#oi(){return De.printNumber(this.element.getDefaultValue()?.P.valueOf()??0)}#ei(){return De.printNumber(this.element.getDefaultValue()?.Y.valueOf()??0)}setDefaultValue(e=[],t=e){const i=this.element.getDefaultValue(!0);if(!(i instanceof ct))throw new TypeError("Expected DefaultValue to be a RotatorEntity");i.R.value=e[0],i.P.value=e[1],i.Y.value=e[2],this.element.requestUpdate("DefaultValue",i)}renderInput(){return G`XYZ`}},[re.paths.vector]:Yi,[re.paths.vector2D]:Ui,[re.paths.vector3f]:Yi,[re.paths.vector4f]:class extends Bi{#Jt(){return De.printNumber(this.element.getDefaultValue()?.X.valueOf()??0)}#ei(){return De.printNumber(this.element.getDefaultValue()?.Y.valueOf()??0)}#ti(){return De.printNumber(this.element.getDefaultValue()?.Z.valueOf()??0)}#li(){return De.printNumber(this.element.getDefaultValue()?.W.valueOf()??0)}setDefaultValue(e,t){const i=this.element.getDefaultValue(!0);if(!(i instanceof dt))throw new TypeError("Expected DefaultValue to be a Vector4DEntity");i.X.value=e[0],i.Y.value=e[1],i.Z.value=e[2],i.W.value=e[3],this.element.requestUpdate("DefaultValue",i)}renderInput(){return G`XYZW`}}};function Xi(e){if("Array"===e.PinType.ContainerType?.toString())return Jt;if(e.PinType.bIsReference?.valueOf()&&!e.PinType.bIsConst?.valueOf())return Ki.MUTABLE_REFERENCE;const t=e.getType();return"exec"===t?$i:(e.isInput()?Ki[t]:Jt)??Jt}class qi extends oe{static properties={pinId:{type:ze,converter:{fromAttribute:(e,t)=>e?ze.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:Ie,converter:{fromAttribute:(e,t)=>e?Ie.getLinearColorFromAnyFormat().parse(e):null,toAttribute:(e,t)=>e?Ie.printLinearColor(e):null},attribute:"data-color",reflect:!0},defaultValue:{type:String,attribute:!1},isLinked:{type:Boolean,converter:ke.booleanConverter,attribute:"data-linked",reflect:!0},pinDirection:{type:String,attribute:"data-direction",reflect:!0},connectable:{type:Boolean,converter:ke.booleanConverter,attribute:"data-connectable",reflect:!0}};nodeElement;static newObject(e=new bt,t=new(Xi(e)),i=void 0){const s=new qi;return s.initialize(e,t,i),s}initialize(e=new bt,t=new(Xi(e)),i=void 0){this.nodeElement=i,this.advancedView=e.bAdvancedView?.valueOf(),this.isLinked=!1,this.connectable=!e.bNotConnectable?.valueOf(),super.initialize(e,t),this.pinId=this.entity.PinId,this.pinType=this.entity.getType(),this.defaultValue=this.entity.getDefaultValue(),this.color=qi.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 rt(new We(this.nodeElement.getNodeName()),this.getPinId())}getPinId(){return this.entity.PinId}getPinName(){return this.entity.PinName?.toString()??""}getPinDisplayName(){return this.entity.pinTitle()}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?.valueOf()??[]}getDefaultValue(e=!1){return this.defaultValue=this.entity.getDefaultValue(e)}setDefaultValue(e){this.entity.DefaultValue=e,this.defaultValue=e,this.entity.recomputesNodeTitleOnChange&&this.nodeElement?.computeNodeDisplayName()}sanitizeLinks(e=[]){this.entity.LinkedTo=new bt.attributes.LinkedTo(this.entity.LinkedTo?.valueOf().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=Ae.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(),this.entity.recomputesNodeTitleOnChange&&this.nodeElement?.computeNodeDisplayName())}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(),this.entity.recomputesNodeTitleOnChange&&this.nodeElement?.computeNodeDisplayName())}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.toString()==e.entity.PinId.toString()));return i>=0&&(this.entity.LinkedTo.valueOf()[i]=t,!0)}}class Zi{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 Wi{constructor(e,t,i,s){this.initialPosition=e,this.finalPosition=e,this.metadata=new Array(t.length),this.primaryOrder=new Zi((e=>this.metadata[e].primaryBoundary)),this.secondaryOrder=new Zi((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 n={primaryBoundary:this.initialPosition[0],secondaryBoundary:this.initialPosition[1],rectangle:t,onSecondaryAxis:!1};this.metadata[t]=n,s(e,!1);const r=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]es.#ui[e],toAttribute:(e,t)=>Object.entries(es.#ui).find((([t,i])=>e.constructor===i))?.[0]}}};static newObject(e={},t=e.type??new Fi){const i=new es;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(re.windowCloseEventName);this.dispatchEvent(e)}}class ts extends Pe{static grammar=this.createGrammar();static{Pe.unknownEntity=this}static createGrammar(){return xe.seq(xe.reg(new RegExp(`(${Me.Regex.Path.source}|${Me.Regex.Symbol.source}\\s*)?\\(\\s*`),1),xe.seq(Me.attributeName,Me.equalSeparation).map((([e,t])=>e)).chain((e=>this.unknownEntityGrammar.map((t=>i=>i[e]=t)))).sepBy(Me.commaSeparation),xe.reg(/\s*(?:,\s*)?\)/)).map((([e,t,i])=>{e??="";let s={};return e.length&&(s.lookbehind=e),t.forEach((e=>e(s))),new this(s)})).label("UnknownKeysEntity")}}Pe.unknownEntityGrammar=xe.alt(ke.grammar,ze.grammar,xe.str("None").map((()=>nt.createNoneInstance())),yt.grammar,De.grammar,xe.alt(nt.fullReferenceGrammar,xe.regArray(new RegExp(`"(${Me.Regex.Path.source})'(${Me.Regex.Path.source}|${Me.symbol.getParser().regexp.source})'"`)).map((([e,t,i])=>new nt(t,i,e)))),qe.grammar,tt.grammar,et.grammar,it.grammar,rt.grammar,dt.grammar,$e.grammar,lt.grammar,ct.grammar,Ie.grammar,ts.grammar,We.grammar,Re.of(rt).grammar,Re.of(Le.accepting(De,qe,We)).grammar,xe.lazy((()=>Re.createGrammar(Pe.unknownEntityGrammar)))),function(){const e=(e,t)=>{customElements.define(e,t),Ae.registerElement(e,t)};e("ueb-color-handler",xi),e("ueb-dropdown",Mi),e("ueb-input",Ii),e("ueb-link",Bt),e("ueb-node",li),e("ueb-pin",qi),e("ueb-selector",Ji),e("ueb-ui-slider",ki),e("ueb-window",es)}();export{Si as Blueprint,re as Configuration,Bt as LinkElement,li as NodeElement,ae as Utility}; + */const Ki="important",Yi=" !"+Ki,qi=(e=>(...t)=>({_$litDirective$:e,values:t}))(class extends Ui{constructor(e){if(super(e),e.type!==ji||"style"!==e.name||e.strings?.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.ft)return this.ft=new Set(Object.keys(t)),this.render(t);for(const e of this.ft)null==t[e]&&(this.ft.delete(e),e.includes("-")?i.removeProperty(e):i[e]=null);for(const e in t){const s=t[e];if(null!=s){this.ft.add(e);const t="string"==typeof s&&s.endsWith(Yi);e.includes("-")||t?i.setProperty(e,t?s.slice(0,-11):s,t?Ki:""):i[e]=s}}return _}});class Xi extends Kt{toggleAdvancedDisplayHandler;getDraggableElement(){return this.element.querySelector(".ueb-window-top")}createDraggableObject(){return new _t(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 z`${this.renderWindowName()}this.element.remove()}">${ce.close}${this.renderContent()}`}renderWindowName(){return z`Window`}renderContent(){return z``}apply(){this.element.dispatchEvent(new CustomEvent(ae.windowApplyEventName)),this.element.remove()}cancel(){this.element.dispatchEvent(new CustomEvent(ae.windowCancelEventName)),this.element.remove()}}class Zi extends Xi{#$t;#Vt;#Bt;#Rt;#Gt;#Ht;#zt;#_t;#Ft;#jt;#Ut=e=>{const t=oe.clearHTMLWhitespace(e.target.innerHTML),i=parseInt(t,16);isNaN(i)||(this.color.setFromRGBANumber(i),this.element.requestUpdate())};#Kt=e=>{const t=oe.clearHTMLWhitespace(e.target.innerHTML),i=parseInt(t,16);isNaN(i)||(this.color.setFromSRGBANumber(i),this.element.requestUpdate())};#Yt=e=>t=>{"Enter"==t.code&&(t.preventDefault(),e(t))};#qt=new Oe;get color(){return this.#qt}set color(e){e.toNumber()!=this.color?.toNumber()&&(this.element.requestUpdate("color",this.#qt),this.#qt=e)}#Xt=new Oe;get fullColor(){return this.#Xt}#Zt;get initialColor(){return this.#Zt}#Wt=new Oe;#Qt(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.#Zt=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.#$t=this.element.querySelector(".ueb-color-picker-wheel ueb-color-handler"),this.#Vt=this.element.querySelector(".ueb-color-picker-saturation ueb-ui-slider"),this.#Bt=this.element.querySelector(".ueb-color-picker-value ueb-ui-slider"),this.#Rt=this.element.querySelector(".ueb-color-picker-r ueb-ui-slider"),this.#Gt=this.element.querySelector(".ueb-color-picker-g ueb-ui-slider"),this.#Ht=this.element.querySelector(".ueb-color-picker-b ueb-ui-slider"),this.#zt=this.element.querySelector(".ueb-color-picker-a ueb-ui-slider"),this.#_t=this.element.querySelector(".ueb-color-picker-h ueb-ui-slider"),this.#Ft=this.element.querySelector(".ueb-color-picker-s ueb-ui-slider"),this.#jt=this.element.querySelector(".ueb-color-picker-v ueb-ui-slider"),this.#$t.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.#Vt.template.locationChangeCallback=(e,t)=>{this.color.setFromHSVA(this.color.H.value,t,this.color.V.value,this.color.A.value),this.element.requestUpdate()},this.#Bt.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.#Gt.template.locationChangeCallback=(e,t)=>{this.color.setFromRGBA(this.color.R.value,e,this.color.B.value,this.color.A.value),this.element.requestUpdate()},this.#Ht.template.locationChangeCallback=(e,t)=>{this.color.setFromRGBA(this.color.R.value,this.color.G.value,e,this.color.A.value),this.element.requestUpdate()},this.#zt.template.locationChangeCallback=(e,t)=>{this.color.setFromRGBA(this.color.R.value,this.color.G.value,this.color.B.value,e),this.element.requestUpdate()},this.#_t.template.locationChangeCallback=(e,t)=>{this.color.setFromHSVA(e,this.color.S.value,this.color.V.value,this.color.A.value),this.element.requestUpdate()},this.#Ft.template.locationChangeCallback=(e,t)=>{this.color.setFromHSVA(this.color.H.value,e,this.color.V.value,this.color.A.value),this.element.requestUpdate()},this.#jt.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.#Qt(e,"00",!0)}, #${this.#Qt(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=`${ae.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.#Wt.setFromHSVA(this.color.H.value,0,this.color.V.value,1),this.#Wt.toRGBAString()},#${this.#Wt.setFromHSVA(this.color.H.value,1,this.color.V.value,1),this.#Wt.toRGBAString()})`;break;case 6:t="v",i=this.color.V.value,s=`linear-gradient(to right, #000, #${this.fullColor.toRGBAString()})`}return s=`background: ${s};`,z`${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 z`OldNewAdvanced${this.renderSlider(0)} ${this.renderSlider(1)} ${this.renderSlider(2)} ${this.renderSlider(3)}${this.renderSlider(4)} ${this.renderSlider(5)} ${this.renderSlider(6)}Hex LinearHex sRGBthis.apply()}">${ae.windowApplyButtonText}this.cancel()}">${ae.windowCancelButtonText}`}renderWindowName(){return z`${ae.colorWindowName}`}}class Wi extends _i{renderInput(){return z``}}class Qi extends _i{#Jt(){return $e.printNumber(this.element.getDefaultValue()?.X.valueOf()??0)}#ei(){return $e.printNumber(this.element.getDefaultValue()?.Y.valueOf()??0)}setDefaultValue(e,t){const i=this.element.getDefaultValue(!0);i.X.value=e[0],i.Y.value=e[1],this.element.setDefaultValue(i)}renderInput(){return z`XY`}}class Ji extends _i{#Jt(){return $e.printNumber(this.element.getDefaultValue()?.X.valueOf()??0)}#ei(){return $e.printNumber(this.element.getDefaultValue()?.Y.valueOf()??0)}#ti(){return $e.printNumber(this.element.getDefaultValue()?.Z.valueOf()??0)}setDefaultValue(e,t){const i=this.element.getDefaultValue(!0);if(!(i instanceof Ve))throw new TypeError("Expected DefaultValue to be a VectorEntity");i.X.value=e[0],i.Y.value=e[1],i.Z.value=e[2],this.element.requestUpdate("DefaultValue",i)}renderInput(){return z`XYZ`}}const es={bool:Gi,byte:Fi,enum:class extends Hi{static saveEachInputChange=!0;#ii;#si=[];setup(){super.setup();const e=this.element.nodeElement.entity.EnumEntries?.valueOf();this.#si=e?.map((e=>(""===e.valueOf()&&(e=new Qe("None")),[e,this.element.nodeElement.getPinEntities().find((t=>e===t.PinName))?.PinFriendlyName.toString()??e])))??ae.CommonEnums[this.element.entity.getSubCategory()]?.map((e=>e instanceof Array?e:[e,oe.formatStringName(e)]))??[];const t=this.element.getDefaultValue()?.toString();this.#si.find((([e,i])=>e===t))||this.#si.push([t,oe.formatStringName(t)]),this.element.requestUpdate()}renderInput(){return z``}firstUpdated(e){super.firstUpdated(e),this.#ii=this.element.querySelector("ueb-dropdown")}getInputs(){return[this.#ii.getValue()]}setDefaultValue(e=[],t){const i=this.element.getDefaultValue();i.value=e[0],this.element.setDefaultValue(i),this.element.requestUpdate()}},float:Wi,int:Fi,int64:class extends _i{setDefaultValue(e=[],t){const i=this.element.getDefaultValue();i.value=BigInt(e[0]),this.element.setDefaultValue(i),this.element.requestUpdate()}renderInput(){return z``}},MUTABLE_REFERENCE:class extends ii{renderIcon(){return ce.referencePin}},name:class extends Hi{static singleLineInput=!0},real:Wi,rg:Qi,string:class extends Hi{},[ae.paths.linearColor]:class extends ii{#ri;#ni=e=>{e.preventDefault(),this.blueprint.setFocused(!0),this.#ri=Ae.getConstructor("ueb-window").newObject({type:new Zi,windowOptions:{getPinColor:()=>this.element.defaultValue,setPinColor:e=>this.element.setDefaultValue(e)}}),this.blueprint.append(this.#ri);const t=()=>{this.element.setDefaultValue(this.#ri.template.color)},i=()=>{this.#ri.removeEventListener(ae.windowApplyEventName,t),this.#ri.removeEventListener(ae.windowCloseEventName,i),this.#ri=null};this.#ri.addEventListener(ae.windowApplyEventName,t),this.#ri.addEventListener(ae.windowCloseEventName,i)};renderInput(){return z``}},[ae.paths.niagaraBool]:Gi,[ae.paths.niagaraFloat]:Wi,[ae.paths.niagaraInt32]:Fi,[ae.paths.niagaraPosition]:Ji,[ae.paths.rotator]:class extends _i{#ai(){return $e.printNumber(this.element.getDefaultValue()?.R.valueOf()??0)}#oi(){return $e.printNumber(this.element.getDefaultValue()?.P.valueOf()??0)}#ei(){return $e.printNumber(this.element.getDefaultValue()?.Y.valueOf()??0)}setDefaultValue(e=[],t=e){const i=this.element.getDefaultValue(!0);if(!(i instanceof dt))throw new TypeError("Expected DefaultValue to be a RotatorEntity");i.R.value=e[0],i.P.value=e[1],i.Y.value=e[2],this.element.requestUpdate("DefaultValue",i)}renderInput(){return z`XYZ`}},[ae.paths.vector]:Ji,[ae.paths.vector2D]:Qi,[ae.paths.vector2f]:Qi,[ae.paths.vector3f]:Ji,[ae.paths.vector4f]:class extends _i{#Jt(){return $e.printNumber(this.element.getDefaultValue()?.X.valueOf()??0)}#ei(){return $e.printNumber(this.element.getDefaultValue()?.Y.valueOf()??0)}#ti(){return $e.printNumber(this.element.getDefaultValue()?.Z.valueOf()??0)}#li(){return $e.printNumber(this.element.getDefaultValue()?.W.valueOf()??0)}setDefaultValue(e,t){const i=this.element.getDefaultValue(!0);if(!(i instanceof bt))throw new TypeError("Expected DefaultValue to be a Vector4DEntity");i.X.value=e[0],i.Y.value=e[1],i.Z.value=e[2],i.W.value=e[3],this.element.requestUpdate("DefaultValue",i)}renderInput(){return z`XYZW`}}};function ts(e){if("Array"===e.PinType.ContainerType?.toString())return ii;if(e.PinType.bIsReference?.valueOf()&&!e.PinType.bIsConst?.valueOf())return es.MUTABLE_REFERENCE;if(e.isExecution())return zi;const t=e.getType();return(e.isInput()?es[t]:ii)??ii}class is extends le{static properties={pinId:{type:Ue,converter:{fromAttribute:(e,t)=>e?Ue.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?Oe.printLinearColor(e):null},attribute:"data-color",reflect:!0},defaultValue:{type:String,attribute:!1},isLinked:{type:Boolean,converter:Le.booleanConverter,attribute:"data-linked",reflect:!0},pinDirection:{type:String,attribute:"data-direction",reflect:!0},connectable:{type:Boolean,converter:Le.booleanConverter,attribute:"data-connectable",reflect:!0}};nodeElement;static newObject(e=new yt,t=new(ts(e)),i=void 0){const s=new is;return s.initialize(e,t,i),s}initialize(e=new yt,t=new(ts(e)),i=void 0){this.nodeElement=i,this.advancedView=e.bAdvancedView?.valueOf(),this.isLinked=!1,this.connectable=!e.bNotConnectable?.valueOf(),super.initialize(e,t),this.pinId=this.entity.PinId,this.pinType=this.entity.getType(),this.defaultValue=this.entity.getDefaultValue(),this.color=is.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 lt(new et(this.nodeElement.getNodeName()),this.getPinId())}getPinId(){return this.entity.PinId}getPinName(){return this.entity.PinName?.toString()??""}getPinDisplayName(){return this.entity.pinTitle()}getColor(){return this.entity.pinColor()}#ci(e){for(;e?.isKnot();){const t=e.nodeElement.getPinElements();e=(e=e===t[0]?t[1]:t[0]).isLinked?this.blueprint.getPin(e.getLinks()[0]):null}return e?.isKnot()?void 0:e}isInput(e=!1){let t=this;return e?this.#ci(t)?.isInput():t.entity.isInput()}isInputLoosely(){return this.isInput(!1)&&void 0===this.isInput(!0)}isInputVisually(){const e=this.nodeElement.template,t=this.isKnot();return t&&this.isInput()!=e.switchDirectionsVisually||!t&&this.isInput()}isOutput(e=!1){let t=this;return e&&e?this.#ci(t)?.isOutput():t.entity.isOutput()}isOutputLoosely(){return this.isOutput(!1)&&void 0===this.isOutput(!0)}isOutputVisually(){const e=this.nodeElement.template,t=this.isKnot();return t&&this.isOutput()!=e.switchDirectionsVisually||!t&&this.isOutput()}isKnot(){return this.nodeElement?.getType()==ae.paths.knot}getLinkLocation(){return this.template.getLinkLocation()}getNodeElement(){return this.nodeElement}getLinks(){return this.entity.LinkedTo?.valueOf()??[]}getDefaultValue(e=!1){return this.defaultValue=this.entity.getDefaultValue(e)}setDefaultValue(e){this.entity.DefaultValue=e,this.defaultValue=e,this.entity.recomputesNodeTitleOnChange&&this.nodeElement?.computeNodeDisplayName()}sanitizeLinks(e=[]){this.entity.LinkedTo=new yt.attributes.LinkedTo(this.entity.LinkedTo?.valueOf().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=Ae.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.isInput(!0)||this.isOutput(!0)&&(this.entity.isExecution()||e.entity.isExecution()))&&!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(),this.entity.recomputesNodeTitleOnChange&&this.nodeElement?.computeNodeDisplayName())}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(),this.entity.recomputesNodeTitleOnChange&&this.nodeElement?.computeNodeDisplayName())}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.toString()==e.entity.PinId.toString()));return i>=0&&(this.entity.LinkedTo.valueOf()[i]=t,!0)}}class ss{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 rs{constructor(e,t,i,s){this.initialPosition=e,this.finalPosition=e,this.metadata=new Array(t.length),this.primaryOrder=new ss((e=>this.metadata[e].primaryBoundary)),this.secondaryOrder=new ss((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]os.#ui[e],toAttribute:(e,t)=>Object.entries(os.#ui).find((([t,i])=>e.constructor===i))?.[0]}}};static newObject(e={},t=e.type??new Xi){const i=new os;return i.initialize(e,t),i}initialize(e={},t=e.type??new Xi){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(ae.windowCloseEventName);this.dispatchEvent(e)}}class ls extends ke{static attributes={...super.attributes,VariableGuid:Ue};static grammar=this.createGrammar();static{ke.unknownEntity=this}static createGrammar(){return Pe.seq(Pe.reg(new RegExp(`(${Ie.Regex.Path.source}|${Ie.Regex.Symbol.source}\\s*)?\\(\\s*`),1),Pe.seq(Ie.attributeName,Ie.equalSeparation).map((([e,t])=>e)).chain((e=>this.unknownEntityGrammar.map((t=>i=>i[e]=t)))).sepBy(Ie.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)})).label("UnknownKeysEntity")}}ke.unknownEntityGrammar=Pe.alt(Le.grammar,Ue.grammar,Pe.str("None").map((()=>ot.createNoneInstance())),Et.grammar,$e.grammar,Pe.alt(ot.fullReferenceGrammar,Pe.regArray(new RegExp(`"(${Ie.Regex.Path.source})'(${Ie.Regex.Path.source}|${Ie.symbol.getParser().regexp.source})'"`)).map((([e,t,i])=>new ot(t,i,((e,t)=>`"${e}'${t}'"`))))),Qe.grammar,rt.grammar,st.grammar,nt.grammar,lt.grammar,bt.grammar,Ve.grammar,ht.grammar,dt.grammar,Oe.grammar,ls.grammar,et.grammar,Fe.of(lt).grammar,Fe.of(Me.accepting($e,Qe,et)).grammar,Pe.lazy((()=>Fe.createGrammar(ke.unknownEntityGrammar)))),function(){const e=(e,t)=>{customElements.define(e,t),Ae.registerElement(e,t)};e("ueb-color-handler",Ii),e("ueb-dropdown",Vi),e("ueb-input",Ri),e("ueb-link",Gt),e("ueb-node",di),e("ueb-pin",is),e("ueb-selector",as),e("ueb-ui-slider",Oi),e("ueb-window",os)}();export{ki as Blueprint,ae as Configuration,Gt as LinkElement,di as NodeElement,oe as Utility}; diff --git a/empty.html b/empty.html index 19f2757..d9059d1 100755 --- a/empty.html +++ b/empty.html @@ -11,7 +11,6 @@ padding: 0; --ueb-height: 100vh; } - diff --git a/js/Blueprint.js b/js/Blueprint.js index bb0dfd2..8c078bd 100755 --- a/js/Blueprint.js +++ b/js/Blueprint.js @@ -5,6 +5,7 @@ import LinkElement from "./element/LinkElement.js" import NodeElement from "./element/NodeElement.js" import BlueprintEntity from "./entity/BlueprintEntity.js" import BooleanEntity from "./entity/BooleanEntity.js" +import NiagaraClipboardContent from "./entity/objects/NiagaraClipboardContent.js" import BlueprintTemplate from "./template/BlueprintTemplate.js" /** @extends {IElement} */ @@ -297,29 +298,11 @@ export default class Blueprint extends IElement { return [x, y] } - getNodes( - selected = false, - [t, r, b, l] = [ - Number.MIN_SAFE_INTEGER, - Number.MAX_SAFE_INTEGER, - Number.MAX_SAFE_INTEGER, - Number.MIN_SAFE_INTEGER, - ] - ) { + getNodes(selected = false) { let result = this.nodes if (selected) { result = result.filter(n => n.selected) } - if ( - t > Number.MIN_SAFE_INTEGER - || r < Number.MAX_SAFE_INTEGER - || b < Number.MAX_SAFE_INTEGER - || l > Number.MIN_SAFE_INTEGER - ) { - result = result.filter(n => { - return n.topBoundary() >= t && n.rightBoundary() <= r && n.bottomBoundary() <= b && n.leftBoundary() >= l - }) - } return result } @@ -354,25 +337,25 @@ export default class Blueprint extends IElement { getLinks(a = null, b = null) { if ((a == null) != (b == null)) { const pin = a ?? b - return this.links.filter(link => link.source == pin || link.destination == pin) + return this.links.filter(link => link.origin == pin || link.target == pin) } if (a != null && b != null) { return this.links.filter(link => - link.source == a && link.destination == b - || link.source == b && link.destination == a + link.origin == a && link.target == b + || link.origin == b && link.target == a ) } return this.links } /** - * @param {PinElement} sourcePin - * @param {PinElement} destinationPin + * @param {PinElement} originPin + * @param {PinElement} targetPin */ - getLink(sourcePin, destinationPin, strictDirection = false) { + getLink(originPin, targetPin, strictDirection = false) { return this.links.find(link => - link.source == sourcePin && link.destination == destinationPin - || !strictDirection && link.source == destinationPin && link.destination == sourcePin + link.origin == originPin && link.target == targetPin + || !strictDirection && link.origin == targetPin && link.target == originPin ) } @@ -384,6 +367,22 @@ export default class Blueprint extends IElement { this.getNodes().forEach(node => Blueprint.nodeSelectToggleFunction(node, false)) } + getSerializedText() { + const nodes = this.blueprint.getNodes(true).map(n => n.entity) + let exports = false + let result = nodes + .filter(n => { + exports ||= n.exported + return !n.exported + }) + .reduce((acc, cur) => acc + cur.serialize(), "") + if (exports) { + const object = new NiagaraClipboardContent(this.blueprint.entity, nodes) + result = object.serialize() + result + } + return result + } + /** @param {...IElement} graphElements */ addGraphElement(...graphElements) { /** @param {CustomEvent} event */ @@ -410,14 +409,17 @@ export default class Blueprint extends IElement { for (const element of graphElements) { element.blueprint = this if (element instanceof NodeElement && !this.nodes.includes(element)) { + const name = element.entity.getObjectName() + this.entity.updateNameIndex(name) if (element.getType() == Configuration.paths.niagaraClipboardContent) { this.entity = this.entity.mergeWith(element.entity) - const additionalSerialization = atob(element.entity.ExportedNodes.toString()) - this.template.getPasteInputObject().pasted(additionalSerialization) - .forEach(node => node.entity._exported = true) + const additionalSerialization = atob(element.entity.ExportedNodes?.toString() ?? "") + if (additionalSerialization) { + this.template.getPasteInputObject().pasted(additionalSerialization) + .forEach(node => node.entity.exported = true) + } continue } - const name = element.entity.getObjectName() const homonym = this.entity.getHomonymObjectEntity(element.entity) if (homonym) { const newName = this.entity.takeFreeName(name) diff --git a/js/Configuration.js b/js/Configuration.js index 319b5e2..e4293d7 100755 --- a/js/Configuration.js +++ b/js/Configuration.js @@ -23,7 +23,7 @@ export default class Configuration { static colorWindowName = "Color Picker" static defaultCommentHeight = 96 static defaultCommentWidth = 400 - static distanceThreshold = 5 // px + static distanceThreshold = 20 // px static dragEventName = "ueb-drag" static dragGeneralEventName = "ueb-drag-general" static edgeScrollThreshold = 50 @@ -79,9 +79,13 @@ export default class Configuration { * @param {Number} c1 * @param {Number} c2 */ - static linkRightSVGPath = (start, c1, c2) => { - let end = 100 - start - return `M ${start} 0 C ${c1.toFixed(3)} 0, ${c2.toFixed(3)} 0, 50 50 S ${(end - c1 + start).toFixed(3)} 100, ` + static linkRightSVGPath = (start, c1, c2, arc = false) => { + const end = 100 - start + const mid = arc + ? 50 + (c2 - start) + : 50 + const fin = arc ? end + c1 - start : end - c1 + start + return `M ${start} 0 C ${c1.toFixed(2)} 0, ${c2.toFixed(2)} 0, ${mid.toFixed(2)} 50 S ${fin.toFixed(2)} 100, ` + `${end.toFixed(3)} 100` } static maxZoom = 7 @@ -178,12 +182,16 @@ export default class Configuration { multiGate: "/Script/BlueprintGraph.K2Node_MultiGate", niagaraBool: "/Script/Niagara.NiagaraBool", niagaraClipboardContent: "/Script/NiagaraEditor.NiagaraClipboardContent", + niagaraDataInterfaceCollisionQuery: "/Script/Niagara.NiagaraDataInterfaceCollisionQuery", + niagaraDataInterfaceCurlNoise: "/Script/Niagara.NiagaraDataInterfaceCurlNoise", niagaraDataInterfaceVolumeTexture: "/Script/Niagara.NiagaraDataInterfaceVolumeTexture", niagaraFloat: "/Script/Niagara.NiagaraFloat", - niagaraMatrix: "/Script/Niagara.NiagaraMatrix", + niagaraInt32: "/Script/Niagara.NiagaraInt32", + niagaraNodeConvert: "/Script/NiagaraEditor.NiagaraNodeConvert", niagaraNodeFunctionCall: "/Script/NiagaraEditor.NiagaraNodeFunctionCall", + niagaraNodeInput: "/Script/NiagaraEditor.NiagaraNodeInput", niagaraNodeOp: "/Script/NiagaraEditor.NiagaraNodeOp", - niagaraNumeric: "/Script/Niagara.NiagaraNumeric", + niagaraParameterMap: "/Script/Niagara.NiagaraParameterMap", niagaraPosition: "/Script/Niagara.NiagaraPosition", pawn: "/Script/Engine.Pawn", pcgEditorGraphNode: "/Script/PCGEditor.PCGEditorGraphNode", @@ -213,6 +221,7 @@ export default class Configuration { variableSet: "/Script/BlueprintGraph.K2Node_VariableSet", vector: "/Script/CoreUObject.Vector", vector2D: "/Script/CoreUObject.Vector2D", + vector2f: "/Script/CoreUObject.Vector2f", vector3f: "/Script/CoreUObject.Vector3f", vector4f: "/Script/CoreUObject.Vector4f", whileLoop: "/Engine/EditorBlueprintResources/StandardMacros.StandardMacros:WhileLoop", diff --git a/js/SVGIcon.js b/js/SVGIcon.js old mode 100644 new mode 100755 index 9b8c47a..e1a70f3 --- a/js/SVGIcon.js +++ b/js/SVGIcon.js @@ -388,6 +388,13 @@ export default class SVGIcon { ` + static staticPin = html` + + + + + ` + static switch = html` diff --git a/js/Shortcuts.js b/js/Shortcuts.js old mode 100644 new mode 100755 diff --git a/js/Utility.js b/js/Utility.js index 123ae81..deb56ec 100755 --- a/js/Utility.js +++ b/js/Utility.js @@ -80,7 +80,7 @@ export default class Utility { } /** - * @param {Attribute} entity + * @param {IEntity} entity * @param {String} key * @returns {Boolean} */ @@ -147,29 +147,31 @@ export default class Utility { /** * @template T - * @param {Array} a - * @param {Array} b + * @param {T[]} reference + * @param {T[]} additional + * @param {(v: T) => void} adding - Process added element * @param {(l: T, r: T) => Boolean} predicate + * @returns {T[]} */ - static mergeArrays(a = [], b = [], predicate = (l, r) => l == r) { + static mergeArrays(reference = [], additional = [], predicate = (l, r) => l == r, adding = v => { }) { let result = [] - a = [...a] - b = [...b] + reference = [...reference] + additional = [...additional] restart: while (true) { - for (let j = 0; j < b.length; ++j) { - for (let i = 0; i < a.length; ++i) { - if (predicate(a[i], b[j])) { + for (let j = 0; j < additional.length; ++j) { + for (let i = 0; i < reference.length; ++i) { + if (predicate(reference[i], additional[j])) { // Found an element in common in the two arrays result.push( // Take and append all the elements skipped from a - ...a.splice(0, i), + ...reference.splice(0, i), // Take and append all the elements skippend from b - ...b.splice(0, j), + ...additional.splice(0, j).map(v => (adding(v), v)), // Take and append the element in common - ...a.splice(0, 1) + ...reference.splice(0, 1) ) - b.shift() // Remove the same element from b + additional.shift() // Remove the same element from b continue restart } } @@ -177,7 +179,13 @@ export default class Utility { break restart } // Append remaining the elements in the arrays and make it unique - return [...(new Set(result.concat(...a, ...b)))] + result.push(...reference) + result.push( + ...additional + .filter(vb => !result.some(vr => predicate(vr, vb))) + .map((v, k) => (adding(v), v)) + ) + return result } /** @param {String} value */ diff --git a/js/action/RemoveAllNodes.js b/js/action/RemoveAllNodes.js old mode 100644 new mode 100755 diff --git a/js/decoding/nodeColor.js b/js/decoding/nodeColor.js old mode 100644 new mode 100755 index e187756..7df12fd --- a/js/decoding/nodeColor.js +++ b/js/decoding/nodeColor.js @@ -20,6 +20,15 @@ export default function nodeColor(entity) { return Configuration.nodeColors.blue case Configuration.paths.materialExpressionTextureSample: return Configuration.nodeColors.darkTurquoise + case Configuration.paths.niagaraNodeInput: + switch (entity["Usage"]?.toString()) { + case "Attribute": return Configuration.nodeColors.intenseGreen + case "Parameter": return Configuration.nodeColors.red + case "RapidIterationParameter": return Configuration.nodeColors.black + case "SystemConstant": return Configuration.nodeColors.gray + case "TranslatorConstant": return Configuration.nodeColors.gray + default: return Configuration.nodeColors.red + } } switch (entity.getClass()) { case Configuration.paths.callFunction: @@ -76,5 +85,8 @@ export default function nodeColor(entity) { if (entity.bIsPureFunc?.valueOf()) { return Configuration.nodeColors.green } + if (entity["Input"]?.["Name"]) { + return Configuration.nodeColors.gray + } return Configuration.nodeColors.blue } diff --git a/js/decoding/nodeIcon.js b/js/decoding/nodeIcon.js old mode 100644 new mode 100755 diff --git a/js/decoding/nodeSubtitle.js b/js/decoding/nodeSubtitle.js old mode 100644 new mode 100755 index 8e46743..d8c9039 --- a/js/decoding/nodeSubtitle.js +++ b/js/decoding/nodeSubtitle.js @@ -10,12 +10,13 @@ export default function nodeSubtitle(entity) { switch (entity.getType()) { case Configuration.paths.addDelegate: case Configuration.paths.clearDelegate: + case Configuration.paths.callDelegate: case Configuration.paths.removeDelegate: return null } const targetPin = entity .getPinEntities() - .find(pin => pin.PinName?.toString() === "self" && pinTitle(pin) === "Target") + .find(pin => !pin.isHidden() && pin.PinName?.toString() === "self" && pinTitle(pin) === "Target") if (targetPin) { const target = entity.FunctionReference?.MemberParent?.getName() ?? targetPin.PinType?.PinSubCategoryObject?.getName() diff --git a/js/decoding/nodeTemplate.js b/js/decoding/nodeTemplate.js old mode 100644 new mode 100755 index 424d863..6098fcf --- a/js/decoding/nodeTemplate.js +++ b/js/decoding/nodeTemplate.js @@ -9,22 +9,86 @@ import VariableAccessNodeTemplate from "../template/node/VariableAccessNodeTempl import VariableConversionNodeTemplate from "../template/node/VariableConversionNodeTemplate.js" import VariableOperationNodeTemplate from "../template/node/VariableOperationNodeTemplate.js" +const niagaraOperationNodes = [ + "Boolean::LogicEq", + "Boolean::LogicNEq", + "Integer::EnumNEq", + "Integer::EnumEq", + ...[ + "Abs", + "Add", + "ArcCosine(Degrees)", + "ArcCosine(Radians)", + "ArcSine(Degrees)", + "ArcSine(Radians)", + "ArcTangent(Degrees)", + "ArcTangent(Radians)", + "Ceil", + "CmpEQ", + "CmpGE", + "CmpGT", + "CmpLE", + "CmpLT", + "CmpNEQ", + "Cosine(Degrees)", + "Cosine(Radians)", + "DegreesToRadians", + "Div", + "Dot", + "Exp", + "Exp2", + "Floor", + "FMod", + "Frac", + "Length", + "Lerp", + "Log", + "Log2", + "Madd", + "Max", + "Min", + "Mul", + "Negate", + "Normalize", + "OneMinus", + "PI", + "RadiansToDegrees", + "Rcp", + "RcpFast", + "Round", + "RSqrt", + "Sign", + "Sine(Degrees)", + "Sine(Radians)", + "Sqrt", + "Step", + "Subtract", + "Tangent(Degrees)", + "Tangent(Radians)", + "Trunc", + "TWO_PI", + ].map(v => "Numeric::" + v), + "Vector3::Cross", +] + +const paths = Configuration.paths + /** * @param {ObjectEntity} nodeEntity * @return {new () => NodeTemplate} */ export default function nodeTemplateClass(nodeEntity) { if ( - nodeEntity.getClass() === Configuration.paths.callFunction - || nodeEntity.getClass() === Configuration.paths.commutativeAssociativeBinaryOperator - || nodeEntity.getClass() === Configuration.paths.callArrayFunction + nodeEntity.getClass() === paths.callFunction + || nodeEntity.getClass() === paths.commutativeAssociativeBinaryOperator + || nodeEntity.getClass() === paths.callArrayFunction ) { const memberParent = nodeEntity.FunctionReference?.MemberParent?.path ?? "" const memberName = nodeEntity.FunctionReference?.MemberName?.toString() if ( memberName && ( - memberParent === Configuration.paths.kismetMathLibrary - || memberParent === Configuration.paths.kismetArrayLibrary + memberParent === paths.kismetMathLibrary + || memberParent === paths.kismetArrayLibrary )) { if (memberName.startsWith("Conv_")) { return VariableConversionNodeTemplate @@ -77,45 +141,37 @@ export default function nodeTemplateClass(nodeEntity) { return VariableOperationNodeTemplate } } - if (memberParent === Configuration.paths.blueprintSetLibrary) { + if (memberParent === paths.blueprintSetLibrary) { return VariableOperationNodeTemplate } - if (memberParent === Configuration.paths.blueprintMapLibrary) { + if (memberParent === paths.blueprintMapLibrary) { return VariableOperationNodeTemplate } } switch (nodeEntity.getClass()) { - case Configuration.paths.comment: - case Configuration.paths.materialGraphNodeComment: + case paths.comment: + case paths.materialGraphNodeComment: return CommentNodeTemplate - case Configuration.paths.createDelegate: + case paths.createDelegate: return NodeTemplate - case Configuration.paths.metasoundEditorGraphExternalNode: + case paths.metasoundEditorGraphExternalNode: if (nodeEntity["ClassName"]?.["Name"] == "Add") { return MetasoundOperationTemplate } return MetasoundNodeTemplate - case Configuration.paths.niagaraNodeOp: - if ( - [ - "Boolean::LogicEq", - "Boolean::LogicNEq", - "Numeric::Abs", - "Numeric::Add", - "Numeric::Mul", - ].includes(nodeEntity.OpName?.toString()) - ) { + case paths.niagaraNodeOp: + if (niagaraOperationNodes.includes(nodeEntity.OpName?.toString())) { return VariableOperationNodeTemplate } break - case Configuration.paths.promotableOperator: + case paths.promotableOperator: return VariableOperationNodeTemplate - case Configuration.paths.knot: + case paths.knot: return KnotNodeTemplate - case Configuration.paths.literal: - case Configuration.paths.self: - case Configuration.paths.variableGet: - case Configuration.paths.variableSet: + case paths.literal: + case paths.self: + case paths.variableGet: + case paths.variableSet: return VariableAccessNodeTemplate } if (nodeEntity.isEvent()) { diff --git a/js/decoding/nodeTitle.js b/js/decoding/nodeTitle.js old mode 100644 new mode 100755 index 63964b7..9b0b8d5 --- a/js/decoding/nodeTitle.js +++ b/js/decoding/nodeTitle.js @@ -5,6 +5,7 @@ import LinearColorEntity from "../entity/LinearColorEntity.js" import MirroredEntity from "../entity/MirroredEntity.js" import VectorEntity from "../entity/VectorEntity.js" +const paths = Configuration.paths const sequencerScriptingNameRegex = /\/Script\/SequencerScripting\.MovieSceneScripting(.+)Channel/ const keyNameValue = { "A_AccentGrave": "à", @@ -34,6 +35,66 @@ const keyNameValue = { "Subtract": "Num -", "Tilde": "`", } +const niagaraNodeNames = { + "Boolean::LogicAnd": "Logic AND", + "Boolean::LogicEq": "==", + "Boolean::LogicNEq": "!=", + "Boolean::LogicNot": "Logic NOT", + "Boolean::LogicOr": "Logic OR", + "Integer::BitAnd": "Bitwise AND", + "Integer::BitLShift": "Bitwise Left Shift", + "Integer::BitNot": "Bitwise NOT", + "Integer::BitOr": "Bitwise OR", + "Integer::BitRShift": "Bitwise Right Shift", + "Integer::BitXOr": "Bitwise XOR", + "Integer::EnumEq": "==", + "Integer::EnumNEq": "!=", + "Matrix::MatrixMultiply": "Multiply (Matrix * Matrix)", + "Matrix::MatrixVectorMultiply": "Multiply (Matrix * Vector4)", + // Numeric:: + ...Object.fromEntries(Object.entries({ + "Add": "+", + "ArcCosine": "ArcCosine", + "ArcCosine(Degrees)": "ArcCos(D)", + "ArcCosine(Radians)": "ArcCos(R)", + "ArcSine": "ArcSine", + "ArcSine(Degrees)": "ArcSin(D)", + "ArcSine(Radians)": "ArcSin(R)", + "ArcTangent(Degrees)": "ArcTan(D)", + "ArcTangent(Radians)": "ArcTan(R)", + "CmpEQ": "==", + "CmpGE": ">=", + "CmpGT": ">", + "CmpLE": "<=", + "CmpLT": "<", + "CmpNEQ": "!=", + "Cosine(Degrees)": "Cos(D)", + "Cosine(Radians)": "Cos(R)", + "DegreesToRadians": "DegToRad", + "DistancePos": "Distance", + "Div": String.fromCharCode(0x00f7), + "FMod": "%", + "FModFast": "Modulo Fast", + "Length": "Len", + "Madd": `(A${String.fromCharCode(0x2a2f)}B)+C`, + "Mul": String.fromCharCode(0x2a2f), + "Negate": "-A", + "OneMinus": "1-A", + "PI": String.fromCharCode(0x03C0), + "RadiansToDegrees": "RadToDeg", + "Rand Float": "Random Float", + "Rand Integer": "Random Integer", + "Rand": "Random", + "Rcp": "Reciprocal", + "RSqrt": "Rcp Sqrt", + "Sine(Degrees)": "Sin(D)", + "Sine(Radians)": "Sin(R)", + "Subtract": "-", + "Tangent(Degrees)": "Tan(D)", + "Tangent(Radians)": "Tan(R)", + "TWO_PI": `2 ${String.fromCharCode(0x03C0)}`, + }).map(([k, v]) => ["Numeric::" + k, v])), +} /** @param {String} value */ function numberFromText(value = "") { @@ -78,58 +139,58 @@ function keyName(value) { export default function nodeTitle(entity) { let value switch (entity.getType()) { - case Configuration.paths.addDelegate: + case paths.addDelegate: value ??= "Bind Event to " - case Configuration.paths.clearDelegate: + case paths.clearDelegate: value ??= "Unbind all Events from " - case Configuration.paths.removeDelegate: + case paths.removeDelegate: value ??= "Unbind Event from " return value + Utility.formatStringName( entity.DelegateReference?.MemberName?.toString().replace(/Delegate$/, "") ?? "None" ) - case Configuration.paths.asyncAction: + case paths.asyncAction: if (entity.ProxyFactoryFunctionName) { return Utility.formatStringName(entity.ProxyFactoryFunctionName?.toString()) } - case Configuration.paths.actorBoundEvent: - case Configuration.paths.componentBoundEvent: + case paths.actorBoundEvent: + case paths.componentBoundEvent: return `${Utility.formatStringName(entity.DelegatePropertyName?.toString())} (${entity.ComponentPropertyName?.toString() ?? "Unknown"})` - case Configuration.paths.callDelegate: + case paths.callDelegate: return `Call ${entity.DelegateReference?.MemberName?.toString() ?? "None"}` - case Configuration.paths.createDelegate: + case paths.createDelegate: return "Create Event" - case Configuration.paths.customEvent: + case paths.customEvent: if (entity.CustomFunctionName) { return entity.CustomFunctionName?.toString() } - case Configuration.paths.dynamicCast: + case paths.dynamicCast: if (!entity.TargetType) { return "Bad cast node" // Target type not found } return `Cast To ${entity.TargetType?.getName()}` - case Configuration.paths.enumLiteral: + case paths.enumLiteral: return `Literal enum ${entity.Enum?.getName()}` - case Configuration.paths.event: + case paths.event: return `Event ${(entity.EventReference?.MemberName?.toString() ?? "").replace(/^Receive/, "")}` - case Configuration.paths.executionSequence: + case paths.executionSequence: return "Sequence" - case Configuration.paths.forEachElementInEnum: + case paths.forEachElementInEnum: return `For Each ${entity.Enum?.getName()}` - case Configuration.paths.forEachLoopWithBreak: + case paths.forEachLoopWithBreak: return "For Each Loop with Break" - case Configuration.paths.functionEntry: + case paths.functionEntry: return entity.FunctionReference?.MemberName?.toString() === "UserConstructionScript" ? "Construction Script" : entity.FunctionReference?.MemberName?.toString() - case Configuration.paths.functionResult: + case paths.functionResult: return "Return Node" - case Configuration.paths.ifThenElse: + case paths.ifThenElse: return "Branch" - case Configuration.paths.makeStruct: + case paths.makeStruct: if (entity.StructType) { return `Make ${entity.StructType.getName()}` } - case Configuration.paths.materialExpressionComponentMask: { + case paths.materialExpressionComponentMask: { const materialObject = entity.getMaterialSubobject() if (materialObject) { return `Mask ( ${Configuration.rgba @@ -138,15 +199,15 @@ export default function nodeTitle(entity) { .join("")})` } } - case Configuration.paths.materialExpressionConstant: + case paths.materialExpressionConstant: value ??= [entity.getCustomproperties().find(pinEntity => pinEntity.PinName.toString() == "Value")?.DefaultValue] - case Configuration.paths.materialExpressionConstant2Vector: + case paths.materialExpressionConstant2Vector: value ??= [ entity.getCustomproperties().find(pinEntity => pinEntity.PinName?.toString() == "X")?.DefaultValue, entity.getCustomproperties().find(pinEntity => pinEntity.PinName?.toString() == "Y")?.DefaultValue, ] - case Configuration.paths.materialExpressionConstant3Vector: - case Configuration.paths.materialExpressionConstant4Vector: + case paths.materialExpressionConstant3Vector: + case paths.materialExpressionConstant4Vector: if (!value) { const vector = entity.getCustomproperties() .find(pinEntity => pinEntity.PinName?.toString() == "Constant") @@ -160,32 +221,32 @@ export default function nodeTitle(entity) { } value = undefined break - case Configuration.paths.materialExpressionFunctionInput: { + case paths.materialExpressionFunctionInput: { const materialObject = entity.getMaterialSubobject() const inputName = materialObject?.InputName ?? "In" const inputType = materialObject?.InputType?.value.match(/^.+?_(\w+)$/)?.[1] ?? "Vector3" return `Input ${inputName} (${inputType})` } - case Configuration.paths.materialExpressionLogarithm: + case paths.materialExpressionLogarithm: return "Ln" - case Configuration.paths.materialExpressionLogarithm10: + case paths.materialExpressionLogarithm10: return "Log10" - case Configuration.paths.materialExpressionLogarithm2: + case paths.materialExpressionLogarithm2: return "Log2" - case Configuration.paths.materialExpressionMaterialFunctionCall: + case paths.materialExpressionMaterialFunctionCall: const materialFunction = entity.getMaterialSubobject()?.MaterialFunction if (materialFunction) { return materialFunction.getName() } break - case Configuration.paths.materialExpressionSquareRoot: + case paths.materialExpressionSquareRoot: return "Sqrt" - case Configuration.paths.materialExpressionSubtract: + case paths.materialExpressionSubtract: const materialObject = entity.getMaterialSubobject() if (materialObject) { return `Subtract(${materialObject.ConstA ?? "1"},${materialObject.ConstB ?? "1"})` } - case Configuration.paths.metasoundEditorGraphExternalNode: { + case paths.metasoundEditorGraphExternalNode: { const name = entity["ClassName"]?.["Name"] if (name) { switch (name) { @@ -194,11 +255,19 @@ export default function nodeTitle(entity) { } } } - case Configuration.paths.pcgEditorGraphNodeInput: + case paths.niagaraNodeConvert: + /** @type {String} */ + const targetType = (entity["AutowireMakeType"]?.["ClassStructOrEnum"] ?? "") + .toString() + .match(/(?:Niagara)?(\w+)['"]*$/) + ?.[1] + ?? "" + return `Make ${targetType}` + case paths.pcgEditorGraphNodeInput: return "Input" - case Configuration.paths.pcgEditorGraphNodeOutput: + case paths.pcgEditorGraphNodeOutput: return "Output" - case Configuration.paths.spawnActorFromClass: + case paths.spawnActorFromClass: let className = entity.getCustomproperties() .find(pinEntity => pinEntity.PinName.toString() == "ReturnValue") ?.PinType @@ -208,15 +277,16 @@ export default function nodeTitle(entity) { className = null } return `SpawnActor ${Utility.formatStringName(className ?? "NONE")}` - case Configuration.paths.switchEnum: + case paths.switchEnum: return `Switch on ${entity.Enum?.getName() ?? "Enum"}` - case Configuration.paths.switchInteger: + case paths.switchInteger: return `Switch on Int` - case Configuration.paths.variableGet: + case paths.variableGet: return "" - case Configuration.paths.variableSet: + case paths.variableSet: return "SET" } + const className = entity.getClass() let switchTarget = entity.switchTarget() if (switchTarget) { if (switchTarget[0] !== "E") { @@ -231,18 +301,19 @@ export default function nodeTitle(entity) { if (keyNameSymbol) { const name = keyNameSymbol.toString() let title = keyName(name) ?? Utility.formatStringName(name) - if (entity.getClass() === Configuration.paths.inputDebugKey) { + if (className === paths.inputDebugKey) { title = "Debug Key " + title - } else if (entity.getClass() === Configuration.paths.getInputAxisKeyValue) { + } else if (className === paths.getInputAxisKeyValue) { title = "Get " + title } return title } - if (entity.getClass() === Configuration.paths.macro) { + if (className === paths.macro) { return Utility.formatStringName(entity.MacroGraphReference?.getMacroName()) } - if (entity.isMaterial() && entity.getMaterialSubobject()) { - let result = nodeTitle(entity.getMaterialSubobject()) + const materialSubobject = entity.getMaterialSubobject() + if (materialSubobject) { + let result = nodeTitle(materialSubobject) result = result.match(/Material Expression (.+)/)?.[1] ?? result return result } @@ -257,7 +328,7 @@ export default function nodeTitle(entity) { } const settingsObject = entity.getSettingsObject() if (settingsObject) { - if (settingsObject.ExportPath.type === Configuration.paths.pcgHiGenGridSizeSettings) { + if (settingsObject.ExportPath?.valueOf()?.type === paths.pcgHiGenGridSizeSettings) { return `Grid Size: ${( settingsObject.HiGenGridSize?.toString().match(/\d+/)?.[0]?.concat("00") ?? settingsObject.HiGenGridSize?.toString().match(/^\w+$/)?.[0] @@ -299,10 +370,10 @@ export default function nodeTitle(entity) { ) } switch (memberParent) { - case Configuration.paths.blueprintGameplayTagLibrary: - case Configuration.paths.kismetMathLibrary: - case Configuration.paths.slateBlueprintLibrary: - case Configuration.paths.timeManagementBlueprintLibrary: + case paths.blueprintGameplayTagLibrary: + case paths.kismetMathLibrary: + case paths.slateBlueprintLibrary: + case paths.timeManagementBlueprintLibrary: const leadingLetter = memberName.match(/[BF]([A-Z]\w+)/) if (leadingLetter) { // Some functions start with B or F (Like FCeil, FMax, BMin) @@ -386,7 +457,7 @@ export default function nodeTitle(entity) { return "^" } break - case Configuration.paths.blueprintSetLibrary: + case paths.blueprintSetLibrary: { const setOperationMatch = memberName.match(/Set_(\w+)/) if (setOperationMatch) { @@ -394,7 +465,7 @@ export default function nodeTitle(entity) { } } break - case Configuration.paths.blueprintMapLibrary: + case paths.blueprintMapLibrary: { const setOperationMatch = memberName.match(/Map_(\w+)/) if (setOperationMatch) { @@ -402,7 +473,7 @@ export default function nodeTitle(entity) { } } break - case Configuration.paths.kismetArrayLibrary: + case paths.kismetArrayLibrary: { const arrayOperationMath = memberName.match(/Array_(\w+)/) if (arrayOperationMath) { @@ -414,20 +485,8 @@ export default function nodeTitle(entity) { return Utility.formatStringName(memberName) } if (entity.OpName) { - switch (entity.OpName.toString()) { - case "Boolean::LogicAnd": return "Logic AND" - case "Boolean::LogicEq": return "==" - case "Boolean::LogicNEq": return "!=" - case "Boolean::LogicNot": return "Logic NOT" - case "Boolean::LogicOr": return "Logic OR" - case "Matrix::MatrixMultiply": return "Multiply (Matrix * Matrix)" - case "Matrix::MatrixVectorMultiply": return "Multiply (Matrix * Vector4)" - case "Numeric::Abs": return "Abs" - case "Numeric::Add": return "+" - case "Numeric::DistancePos": return "Distance" - case "Numeric::Mul": return String.fromCharCode(0x2a2f) - } - return Utility.formatStringName(entity.OpName.toString()).replaceAll("::", " ") + return niagaraNodeNames[entity.OpName.toString()] + ?? Utility.formatStringName(entity.OpName.toString().replaceAll(/(?:^\w+(? this.remove() /** @param {UEBDragEvent} e */ - #nodeDragSourceHandler = e => this.addSourceLocation(...e.detail.value) + #nodeDragOriginHandler = e => this.addOriginLocation(...e.detail.value) /** @param {UEBDragEvent} e */ - #nodeDragDestinatonHandler = e => this.addDestinationLocation(...e.detail.value) - #nodeReflowSourceHandler = e => this.setSourceLocation() - #nodeReflowDestinatonHandler = e => this.setDestinationLocation() + #nodeDragTargetHandler = e => this.addTargetLocation(...e.detail.value) + #nodeReflowOriginHandler = e => { + if (this.origin.isKnot()) { + this.originatesFromInput = this.origin.isInputVisually() + } + this.setOriginLocation() + } + #nodeReflowTargetHandler = e => this.setTargetLocation() /** @type {TemplateResult | nothing} */ linkMessageIcon = nothing @@ -72,6 +99,10 @@ export default class LinkElement extends IFromToPositionedElement { constructor() { super() this.dragging = false + this.originNode = "" + this.originPin = "" + this.targetNode = "" + this.targetPin = "" this.originatesFromInput = false this.startPercentage = 0 this.svgPathD = "" @@ -79,32 +110,32 @@ export default class LinkElement extends IFromToPositionedElement { } /** - * @param {PinElement} source - * @param {PinElement?} destination + * @param {PinElement} origin + * @param {PinElement?} target */ - static newObject(source, destination) { + static newObject(origin, target) { const result = new LinkElement() - result.initialize(source, destination) + result.initialize(origin, target) return result } /** - * @param {PinElement} source - * @param {PinElement?} destination + * @param {PinElement} origin + * @param {PinElement?} target */ // @ts-expect-error - initialize(source, destination) { + initialize(origin, target) { super.initialize({}, new LinkTemplate()) - if (source) { - this.source = source - if (!destination) { + if (origin) { + this.origin = origin + if (!target) { this.toX = this.fromX this.toY = this.fromY } } - if (destination) { - this.destination = destination - if (!source) { + if (target) { + this.target = target + if (!origin) { this.fromX = this.toX this.fromY = this.toY } @@ -113,10 +144,10 @@ export default class LinkElement extends IFromToPositionedElement { /** * @param {PinElement} pin - * @param {Boolean} isDestinationPin + * @param {Boolean} isTargetPin */ - #setPin(pin, isDestinationPin) { - const getCurrentPin = () => isDestinationPin ? this.destination : this.source + #setPin(pin, isTargetPin) { + const getCurrentPin = () => isTargetPin ? this.target : this.origin if (getCurrentPin() == pin) { return } @@ -125,66 +156,72 @@ export default class LinkElement extends IFromToPositionedElement { nodeElement.removeEventListener(Configuration.removeEventName, this.#nodeDeleteHandler) nodeElement.removeEventListener( Configuration.nodeDragEventName, - isDestinationPin ? this.#nodeDragDestinatonHandler : this.#nodeDragSourceHandler + isTargetPin ? this.#nodeDragTargetHandler : this.#nodeDragOriginHandler ) nodeElement.removeEventListener( Configuration.nodeReflowEventName, - isDestinationPin ? this.#nodeReflowDestinatonHandler : this.#nodeReflowSourceHandler + isTargetPin ? this.#nodeReflowTargetHandler : this.#nodeReflowOriginHandler ) this.#unlinkPins() } - isDestinationPin - ? this.#destination = pin - : this.#source = pin + if (isTargetPin) { + this.#target = pin + this.targetNode = pin?.nodeElement.nodeTitle + this.targetPin = pin?.pinId.toString() + } else { + this.#origin = pin + this.originNode = pin?.nodeElement.nodeTitle + this.originPin = pin?.pinId.toString() + } if (getCurrentPin()) { const nodeElement = getCurrentPin().getNodeElement() nodeElement.addEventListener(Configuration.removeEventName, this.#nodeDeleteHandler) nodeElement.addEventListener( Configuration.nodeDragEventName, - isDestinationPin ? this.#nodeDragDestinatonHandler : this.#nodeDragSourceHandler + isTargetPin ? this.#nodeDragTargetHandler : this.#nodeDragOriginHandler ) nodeElement.addEventListener( Configuration.nodeReflowEventName, - isDestinationPin ? this.#nodeReflowDestinatonHandler : this.#nodeReflowSourceHandler + isTargetPin ? this.#nodeReflowTargetHandler : this.#nodeReflowOriginHandler ) - isDestinationPin - ? this.setDestinationLocation() - : (this.setSourceLocation(), this.originatesFromInput = this.source.isInput()) + isTargetPin + ? this.setTargetLocation() + : (this.setOriginLocation(), this.originatesFromInput = this.origin.isInputVisually()) this.#linkPins() } } #linkPins() { - if (this.source && this.destination) { - this.source.linkTo(this.destination) - this.destination.linkTo(this.source) + if (this.origin && this.target) { + this.origin.linkTo(this.target) + this.target.linkTo(this.origin) } } #unlinkPins() { - if (this.source && this.destination) { - this.source.unlinkFrom(this.destination, false) - this.destination.unlinkFrom(this.source, false) + if (this.origin && this.target) { + this.origin.unlinkFrom(this.target, false) + this.target.unlinkFrom(this.origin, false) } } cleanup() { super.cleanup() this.#unlinkPins() - this.source = null - this.destination = null + this.origin = null + this.target = null } /** @param {Coordinates} location */ - setSourceLocation(location = null, canPostpone = true) { + setOriginLocation(location = null, canPostpone = true) { if (location == null) { const self = this - if (canPostpone && (!this.hasUpdated || !this.source.hasUpdated)) { - Promise.all([this.updateComplete, this.source.updateComplete]) - .then(() => self.setSourceLocation(null, false)) + if (canPostpone && (!this.hasUpdated || !this.origin.hasUpdated)) { + Promise.all([this.updateComplete, this.origin.updateComplete]) + .then(() => self.setOriginLocation(null, false)) return } - location = this.source.template.getLinkLocation() + location = this.origin.template.getLinkLocation() } const [x, y] = location this.fromX = x @@ -192,58 +229,68 @@ export default class LinkElement extends IFromToPositionedElement { } /** @param {Coordinates} location */ - setDestinationLocation(location = null, canPostpone = true) { + setTargetLocation(location = null, canPostpone = true) { if (location == null) { const self = this - if (canPostpone && (!this.hasUpdated || !this.destination.hasUpdated)) { - Promise.all([this.updateComplete, this.destination.updateComplete]) - .then(() => self.setDestinationLocation(null, false)) + if (canPostpone && (!this.hasUpdated || !this.target.hasUpdated)) { + Promise.all([this.updateComplete, this.target.updateComplete]) + .then(() => self.setTargetLocation(null, false)) return } - location = this.destination.template.getLinkLocation() + location = this.target.template.getLinkLocation() } this.toX = location[0] this.toY = location[1] } getInputPin(getSomething = false) { - if (this.source?.isInput()) { - return this.source + if (this.origin?.isInput()) { + return this.origin } - if (this.destination?.isInput()) { - return this.destination + if (this.target?.isInput()) { + return this.target } if (getSomething) { - return this.source ?? this.destination + return this.origin ?? this.target } } /** @param {PinElement} pin */ setInputPin(pin) { - if (this.source?.isInput()) { - this.source = pin + if (this.origin?.isInput()) { + this.origin = pin } - this.destination = pin + this.target = pin } getOutputPin(getSomething = false) { - if (this.source?.isOutput()) { - return this.source + if (this.origin?.isOutput()) { + return this.origin } - if (this.destination?.isOutput()) { - return this.destination + if (this.target?.isOutput()) { + return this.target } if (getSomething) { - return this.source ?? this.destination + return this.origin ?? this.target } } /** @param {PinElement} pin */ setOutputPin(pin) { - if (this.destination?.isOutput()) { - this.destination = pin + if (this.target?.isOutput()) { + this.target = pin + } + this.origin = pin + } + + /** @param {NodeElement} pin */ + getOtherPin(pin) { + if (this.origin?.nodeElement === pin) { + return this.target + } + if (this.target?.nodeElement === pin) { + return this.origin } - this.source = pin } startDragging() { @@ -261,7 +308,7 @@ export default class LinkElement extends IFromToPositionedElement { setMessageConvertType() { this.linkMessageIcon = SVGIcon.convert - this.linkMessageText = html`Convert ${this.source.pinType} to ${this.destination.pinType}.` + this.linkMessageText = html`Convert ${this.origin.pinType} to ${this.target.pinType}.` } setMessageCorrect() { diff --git a/js/element/NodeElement.js b/js/element/NodeElement.js old mode 100644 new mode 100755 index cec7314..1129ac5 --- a/js/element/NodeElement.js +++ b/js/element/NodeElement.js @@ -101,13 +101,13 @@ export default class NodeElement extends ISelectableDraggableElement { /** @param {String} name */ #redirectLinksBeforeRename(name) { - for (let sourcePinElement of this.getPinElements()) { - for (let targetPinReference of sourcePinElement.getLinks()) { + for (let originPinElement of this.getPinElements()) { + for (let targetPinReference of originPinElement.getLinks()) { this.blueprint.getPin(targetPinReference).redirectLink( - sourcePinElement, + originPinElement, new PinReferenceEntity( new SymbolEntity(name), - sourcePinElement.entity.PinId, + originPinElement.entity.PinId, ) ) } @@ -135,8 +135,8 @@ export default class NodeElement extends ISelectableDraggableElement { "Name", /** @param {InstanceType} newName */ newName => { - this.#redirectLinksBeforeRename(newName.value) - this.nodeTitle = newName.value + this.#redirectLinksBeforeRename(newName?.toString()) + this.nodeTitle = newName?.toString() this.nodeDisplayName = nodeTitle(entity) } ) diff --git a/js/element/PinElement.js b/js/element/PinElement.js old mode 100644 new mode 100755 index 78a45d9..0444e45 --- a/js/element/PinElement.js +++ b/js/element/PinElement.js @@ -1,5 +1,5 @@ +import Configuration from "../Configuration.js" import pinTemplate from "../decoding/pinTemplate.js" -import ArrayEntity from "../entity/ArrayEntity.js" import BooleanEntity from "../entity/BooleanEntity.js" import GuidEntity from "../entity/GuidEntity.js" import LinearColorEntity from "../entity/LinearColorEntity.js" @@ -128,12 +128,66 @@ export default class PinElement extends IElement { return this.entity.pinColor() } - isInput() { - return this.entity.isInput() + /** @param {PinElement} pin */ + #traverseKnots(pin) { + while (pin?.isKnot()) { + const pins = pin.nodeElement.getPinElements() + pin = pin === pins[0] ? pins[1] : pins[0] + pin = pin.isLinked ? this.blueprint.getPin(pin.getLinks()[0]) : null + } + return pin?.isKnot() ? undefined : pin } - isOutput() { - return this.entity.isOutput() + isInput(ignoreKnots = false) { + /** @type {PinElement} */ + let result = this + if (ignoreKnots) { + return this.#traverseKnots(result)?.isInput() + } + return result.entity.isInput() + } + + /** @returns {boolean} True when the pin is the input part of a knot that can switch direction */ + isInputLoosely() { + return this.isInput(false) && this.isInput(true) === undefined + } + + /** @returns {boolean} True when the pin is input and if it is a knot it appears input */ + isInputVisually() { + const template = /** @type {KnotNodeTemplate} */(this.nodeElement.template) + const isKnot = this.isKnot() + return isKnot && this.isInput() != template.switchDirectionsVisually + || !isKnot && this.isInput() + } + + isOutput(ignoreKnots = false) { + /** @type {PinElement} */ + let result = this + if (ignoreKnots) { + if (ignoreKnots) { + return this.#traverseKnots(result)?.isOutput() + } + } + return result.entity.isOutput() + } + + /** @returns {boolean} True when the pin is the output part of a knot that can switch direction */ + isOutputLoosely() { + return this.isOutput(false) && this.isOutput(true) === undefined + } + + /** @returns {boolean} True when the pin is output and if it is a knot it appears output */ + isOutputVisually() { + const template = /** @type {KnotNodeTemplate} */(this.nodeElement.template) + const isKnot = this.isKnot() + return isKnot && this.isOutput() != template.switchDirectionsVisually + || !isKnot && this.isOutput() + } + + + /** @returns {value is InstanceType>} */ + isKnot() { + return this.nodeElement?.getType() == Configuration.paths.knot } getLinkLocation() { @@ -188,9 +242,12 @@ export default class PinElement extends IElement { const pinReference = this.createPinReference() if ( this.isLinked - && this.isOutput() - && (this.pinType === "exec" || targetPinElement.pinType === "exec") - && !this.getLinks().some(ref => pinReference.equals(ref))) { + && ( + this.isInput(true) + || this.isOutput(true) && (this.entity.isExecution() || targetPinElement.entity.isExecution()) + ) + && !this.getLinks().some(ref => pinReference.equals(ref)) + ) { this.unlinkFromAll() } if (this.entity.linkTo(targetPinElement.getNodeElement().getNodeName(), targetPinElement.entity)) { diff --git a/js/element/SelectorElement.js b/js/element/SelectorElement.js old mode 100644 new mode 100755 diff --git a/js/element/WindowElement.js b/js/element/WindowElement.js old mode 100644 new mode 100755 diff --git a/js/element/defineElements.js b/js/element/defineElements.js old mode 100644 new mode 100755 diff --git a/js/entity/AlternativesEntity.js b/js/entity/AlternativesEntity.js old mode 100644 new mode 100755 diff --git a/js/entity/ArrayEntity.js b/js/entity/ArrayEntity.js old mode 100644 new mode 100755 index 2d73d44..898c18b --- a/js/entity/ArrayEntity.js +++ b/js/entity/ArrayEntity.js @@ -33,8 +33,7 @@ export default class ArrayEntity extends IEntity { if ((trailing !== undefined) !== Self.trailing) { Self = Self.flagTrailing(trailing !== undefined) } - const result = new Self(values) - return result + return new Self(values) }).label(`ArrayEntity of ${this.type?.className() ?? "unknown values"}`) } diff --git a/js/entity/BlueprintEntity.js b/js/entity/BlueprintEntity.js old mode 100644 new mode 100755 index 221e2ae..3f2abbd --- a/js/entity/BlueprintEntity.js +++ b/js/entity/BlueprintEntity.js @@ -1,6 +1,7 @@ import Configuration from "../Configuration.js" import Utility from "../Utility.js" import ObjectEntity from "./ObjectEntity.js" +import ScriptVariableEntity from "./ScriptVariableEntity.js" export default class BlueprintEntity extends ObjectEntity { @@ -13,6 +14,18 @@ export default class BlueprintEntity extends ObjectEntity { return this.#objectEntities } + static attributes = { + ...super.attributes, + ScriptVariables: super.attributes.ScriptVariables.asUniqueClass(true).withDefault(), + } + + constructor(...args) { + super(...args) + if (!this.Name) { + this.Name = new (/** @type {typeof ObjectEntity} */(this.constructor).attributes.Name)("Blueprint") + } + } + /** @param {ObjectEntity} entity */ getHomonymObjectEntity(entity) { const name = entity.getObjectName() @@ -27,6 +40,16 @@ export default class BlueprintEntity extends ObjectEntity { return Configuration.nodeTitle(name, counter) } + /** @param {String} name */ + updateNameIndex(name) { + const match = name.match(/(.+)_(\d+)$/) + if (match) { + name = match[1] + const index = Number(match[2]) + this.#objectEntitiesNameCounter.set(name, Math.max(index, this.#objectEntitiesNameCounter.get(name) ?? 0)) + } + } + /** @param {ObjectEntity} entity */ addObjectEntity(entity) { if (!this.#objectEntities.includes(entity)) { @@ -54,35 +77,121 @@ export default class BlueprintEntity extends ObjectEntity { return false } + /** + * @param {ObjectReferenceEntity} variable + * @param {IEntity} entity + */ + renameScriptVariable(variable, entity) { + const name = variable.getName() + const newName = this.takeFreeName(name) + { + [true, false].forEach(v => { + /** @type {ObjectEntity} */ + let object = this[Configuration.subObjectAttributeNameFromReference(variable, v)] + object.Name.value = newName + object.Name = object.Name + }) + } + variable.path.replace(name, newName) + return newName + } + + /** + * @param {ScriptVariableEntity} scriptVariableEntity + * @returns {String} + */ + variableName(scriptVariableEntity) { + return this[Configuration.subObjectAttributeNameFromReference(scriptVariableEntity.ScriptVariable, true)] + ?.["Variable"] + ?.["Name"] + ?.toString() + } + + /** @param {String} variableName */ + variableIndex(variableName) { + let i = 0 + for (const v of this.ScriptVariables?.valueOf()) { + if (variableName == this.variableName(v)) { + return i + } + ++i + } + } + /** @param {ObjectEntity} entity */ mergeWith(entity) { - if (!entity.ScriptVariables || entity.ScriptVariables.length === 0) { + if ((entity.ScriptVariables?.length ?? 0) === 0) { + // The entity does not add new variables return this } - if (!this.ScriptVariables || this.ScriptVariables.length === 0) { - this.ScriptVariables = entity.ScriptVariables - } + const variableObjectNames = this.ScriptVariables.valueOf().map(v => v.ScriptVariable.getName()) let scriptVariables = Utility.mergeArrays( this.ScriptVariables.valueOf(), entity.ScriptVariables.valueOf(), - (l, r) => l.OriginalChangeId.value == r.OriginalChangeId.value + (l, r) => this.variableName(l) == this.variableName(r), + added => { + let name = added.ScriptVariable.getName() + if (variableObjectNames.includes(name)) { + name = this.renameScriptVariable(added.ScriptVariable, entity) + } + this.updateNameIndex(name) + } ) if (scriptVariables.length === this.ScriptVariables.length) { + // The entity does not add new variables return this } + scriptVariables.reverse() + const blueprintEntity = /** @type {typeof BlueprintEntity} */(this.constructor) const entries = scriptVariables.concat(scriptVariables).map((v, i) => { - const name = Configuration.subObjectAttributeNameFromReference(v.ScriptVariable, i >= scriptVariables.length) - return [ - name, - this[name] ?? entity[name] - ] + const name = Configuration.subObjectAttributeNameFromReference( + v.ScriptVariable, + i >= scriptVariables.length // First take all the small objects then all name only + ) + const object = this[name] ?? entity[name] + return object ? [name, object] : null }) + .filter(v => v) entries.push( ...Object.entries(this).filter(([k, v]) => !k.startsWith(Configuration.subObjectAttributeNamePrefix) && k !== "ExportedNodes" - ) + ), + ["ScriptVariables", new (blueprintEntity.attributes.ScriptVariables)(scriptVariables.reverse())] ) - return new BlueprintEntity(Object.fromEntries(entries)) + const result = new BlueprintEntity(Object.fromEntries(entries)) + result.mirrorNameInExportPaths(entity.Name?.toString()) + result.#objectEntitiesNameCounter = this.#objectEntitiesNameCounter + result.#objectEntities = this.#objectEntities + return result + } + + /** @param {ObjectEntity[]} entities */ + getVariablesAttributesReferringTo(...entities) { + let pins = new Set(...entities.flatMap(entity => entity.getPinEntities()).map(pin => pin.PinName.toString())) + let attributes = this.ScriptVariables + .valueOf() + .map(v => { + const keySimple = Configuration.subObjectAttributeNameFromReference(v.ScriptVariable, false) + const keyFull = Configuration.subObjectAttributeNameFromReference(v.ScriptVariable, true) + return { + simple: [keySimple, this[keySimple]], + full: [keyFull, this[keyFull]], + variable: v, + } + }) + .filter(v => pins.has(v.full?.["Variable"]?.["Name"])) + .reduce( + (acc, cur) => { + acc.simple.push([cur.simple[0], cur.simple[1]]) + acc.full.push([cur.full[0], cur.full[1]]) + acc.ScriptVariables.push(cur.variable) + return acc + }, + ({ simple: [], full: [], ScriptVariables: [] }) + ) + return { + + } } } diff --git a/js/entity/ColorChannelEntity.js b/js/entity/ColorChannelEntity.js old mode 100644 new mode 100755 diff --git a/js/entity/ComputedTypeEntity.js b/js/entity/ComputedTypeEntity.js old mode 100644 new mode 100755 diff --git a/js/entity/FormatTextEntity.js b/js/entity/FormatTextEntity.js old mode 100644 new mode 100755 diff --git a/js/entity/IEntity.js b/js/entity/IEntity.js old mode 100644 new mode 100755 index 1ae1f99..6b88fca --- a/js/entity/IEntity.js +++ b/js/entity/IEntity.js @@ -44,6 +44,7 @@ export default class IEntity { this.#keys = [... new Set(value)] } + // @ts-expect-error #lookbehind = /** @type {String} */(this.constructor.lookbehind) get lookbehind() { return this.#lookbehind.trim() @@ -145,9 +146,9 @@ export default class IEntity { * @this {T} * @returns {T} */ - static asUniqueClass() { + static asUniqueClass(alwaysCreate = false) { let result = this - if (this.name.length) { + if (this.name.length || alwaysCreate) { // @ts-expect-error result = (() => class extends this { })() // Comes from a lambda otherwise the class will have name "result" result.grammar = result.createGrammar() // Reassign grammar to capture the correct this from subclass @@ -429,4 +430,9 @@ export default class IEntity { } return true } + + /** @returns {IEntity | Boolean | Number | String | BigInt | (IEntity | Boolean | Number | String | BigInt)[]} */ + valueOf() { + return this + } } diff --git a/js/entity/InvariantTextEntity.js b/js/entity/InvariantTextEntity.js old mode 100644 new mode 100755 index 270a925..9551424 --- a/js/entity/InvariantTextEntity.js +++ b/js/entity/InvariantTextEntity.js @@ -19,18 +19,22 @@ export default class InvariantTextEntity extends IEntity { P.reg(new RegExp(`${this.lookbehind}\\s*\\(`)), P.doubleQuotedString, P.reg(/\s*\)/) - ).map(([_0, value, _2]) => Number(value)), - P.reg(new RegExp(this.lookbehind)).map(() => 0) // InvariantTextEntity can not have arguments + ).map(([_0, value, _2]) => value), + P.reg(new RegExp(this.lookbehind)).map(() => "") // InvariantTextEntity can have no arguments ) .map(value => new this(value)) .label("InvariantTextEntity") } doSerialize() { - return this.lookbehind + "(" + this.value + ")" + return this.lookbehind + '("' + this.value + '")' } valueOf() { return this.value } + + toString() { + return this.value + } } diff --git a/js/entity/KeyBindingEntity.js b/js/entity/KeyBindingEntity.js old mode 100644 new mode 100755 diff --git a/js/entity/LinearColorEntity.js b/js/entity/LinearColorEntity.js old mode 100644 new mode 100755 diff --git a/js/entity/MirroredEntity.js b/js/entity/MirroredEntity.js old mode 100644 new mode 100755 index 1c15d16..8a83508 --- a/js/entity/MirroredEntity.js +++ b/js/entity/MirroredEntity.js @@ -66,13 +66,13 @@ export default class MirroredEntity extends IEntity { return this.getter?.().equals(other) } - valueOf() { - this.valueOf = this.getter().valueOf.bind(this.getter()) - return this.valueOf() + /** @returns {InstanceType} */ + valueOf(arg) { + // @ts-expect-error + return this.getter(arg).valueOf() } toString() { - this.toString = this.getter().toString.bind(this.getter()) - return this.toString() + return this.getter().toString() } } diff --git a/js/entity/NullEntity.js b/js/entity/NullEntity.js old mode 100644 new mode 100755 diff --git a/js/entity/ObjectEntity.js b/js/entity/ObjectEntity.js index c1c537b..8809e9a 100755 --- a/js/entity/ObjectEntity.js +++ b/js/entity/ObjectEntity.js @@ -47,7 +47,7 @@ export default class ObjectEntity extends IEntity { Class: ObjectReferenceEntity, Name: StringEntity, Archetype: ObjectReferenceEntity, - ExportPath: ObjectReferenceEntity, + ExportPath: MirroredEntity.of(ObjectReferenceEntity), ObjectRef: ObjectReferenceEntity, BlueprintElementType: ObjectReferenceEntity, BlueprintElementInstance: ObjectReferenceEntity, @@ -107,8 +107,11 @@ export default class ObjectEntity extends IEntity { SizeX: MirroredEntity.of(IntegerEntity), SizeY: MirroredEntity.of(IntegerEntity), Text: MirroredEntity.of(StringEntity), + ParameterName: StringEntity, + ExpressionGUID: GuidEntity, MaterialExpressionEditorX: MirroredEntity.of(IntegerEntity), MaterialExpressionEditorY: MirroredEntity.of(IntegerEntity), + MaterialExpressionGuid: GuidEntity, NodeTitle: StringEntity, NodeTitleColor: LinearColorEntity, PositionX: MirroredEntity.of(IntegerEntity), @@ -136,10 +139,13 @@ export default class ObjectEntity extends IEntity { NodeGuid: GuidEntity, ErrorType: IntegerEntity, ErrorMsg: StringEntity, - ScriptVariables: ArrayEntity.of(ScriptVariableEntity), + ScriptVariables: ArrayEntity.flagInlined().of(ScriptVariableEntity), Node: MirroredEntity.of(ObjectReferenceEntity), ExportedNodes: StringEntity, - CustomProperties: ArrayEntity.of(AlternativesEntity.accepting(PinEntity, UnknownPinEntity)).withDefault().flagSilent(), + CustomProperties: ArrayEntity + .of(AlternativesEntity.accepting(PinEntity, UnknownPinEntity)) + .withDefault() + .flagSilent(), } static customPropertyGrammar = P.seq( P.reg(/CustomProperties\s+/), @@ -154,29 +160,28 @@ export default class ObjectEntity extends IEntity { Grammar.symbolQuoted.map(v => [v, true]), Grammar.symbol.map(v => [v, false]), ), - P.reg(new RegExp(String.raw`\s*\(\s*(\d+)\s*\)\s*\=\s*`), 1).map(Number) - ) - .chain( - /** @param {[[keyof ObjectEntity.attributes, Boolean], Number]} param */ - ([[symbol, quoted], index]) => - (this.attributes[symbol]?.grammar ?? IEntity.unknownEntityGrammar).map(currentValue => - values => { - if (values[symbol] === undefined) { - let arrayEntity = ArrayEntity - if (quoted != arrayEntity.quoted) { - arrayEntity = arrayEntity.flagQuoted(quoted) - } - if (!arrayEntity.inlined) { - arrayEntity = arrayEntity.flagInlined() - } - values[symbol] = new arrayEntity() + P.reg(new RegExp(String.raw`\s*\(\s*(\d+)\s*\)\s*\=\s*`), 1).map(Number) // Number in parentheses then equal + ).chain( + /** @param {[[keyof ObjectEntity.attributes, Boolean], Number]} param */ + ([[symbol, quoted], index]) => + (this.attributes[symbol]?.grammar ?? IEntity.unknownEntityGrammar).map(currentValue => + values => { + if (values[symbol] === undefined) { + let arrayEntity = ArrayEntity + if (quoted != arrayEntity.quoted) { + arrayEntity = arrayEntity.flagQuoted(quoted) } - /** @type {ArrayEntity} */ - const target = values[symbol] - target.values[index] = currentValue + if (!arrayEntity.inlined) { + arrayEntity = arrayEntity.flagInlined() + } + values[symbol] = new arrayEntity() } - ) - ) + /** @type {ArrayEntity} */ + const target = values[symbol] + target.values[index] = currentValue + } + ) + ) static grammar = this.createGrammar() static grammarMultipleObjects = P.seq( P.whitespaceOpt, @@ -202,20 +207,20 @@ export default class ObjectEntity extends IEntity { super(values) // Attributes + /** @type {ArrayEntity} */ this.CustomProperties /** @type {InstanceType} */ this.AddedPins /** @type {InstanceType} */ this.AdvancedPinDisplay /** @type {InstanceType} */ this.Archetype /** @type {InstanceType} */ this.AxisKey /** @type {InstanceType} */ this.bIsPureFunc /** @type {InstanceType} */ this.BlueprintElementInstance - /** @type {InstanceType} */ this.ConstA - /** @type {InstanceType} */ this.ConstB /** @type {InstanceType} */ this.BlueprintElementType /** @type {InstanceType} */ this.Class /** @type {InstanceType} */ this.CommentColor /** @type {InstanceType} */ this.ComponentPropertyName + /** @type {InstanceType} */ this.ConstA + /** @type {InstanceType} */ this.ConstB /** @type {InstanceType} */ this.CustomFunctionName - /** @type {ArrayEntity} */ this.CustomProperties /** @type {InstanceType} */ this.DelegatePropertyName /** @type {InstanceType} */ this.DelegateReference /** @type {InstanceType} */ this.EnabledState @@ -254,9 +259,10 @@ export default class ObjectEntity extends IEntity { /** @type {InstanceType} */ this.Operation /** @type {InstanceType} */ this.OpName /** @type {InstanceType} */ this.OutputPins + /** @type {InstanceType} */ this.ParameterName /** @type {InstanceType} */ this.PCGNode - /** @type {InstanceType} */ this.PinTags /** @type {InstanceType} */ this.PinNames + /** @type {InstanceType} */ this.PinTags /** @type {InstanceType} */ this.PositionX /** @type {InstanceType} */ this.PositionY /** @type {InstanceType} */ this.ProxyFactoryFunctionName @@ -364,6 +370,7 @@ export default class ObjectEntity extends IEntity { ? outputIndex++ : i }) + this.mirrorNameInExportPaths() } /** @returns {P} */ @@ -409,12 +416,46 @@ export default class ObjectEntity extends IEntity { ) } + /** + * @protected + * Mirror then name part of the objects contained in this one in ExportPath + */ + mirrorNameInExportPaths(originalName = this.Name?.toString()) { + if (!originalName) { + return + } + const values = [this] + for (let i = 0; i < values.length; ++i) { + const value = values[i] + if (value instanceof ObjectEntity) { + values.push(...Object.values(value)) + if (!value.ExportPath?.valueOf().path.includes(originalName)) { + continue + } + } else { + continue + } + const mirroredEntity = /** @type {typeof ObjectEntity} */(value.constructor).attributes.ExportPath + let originalExportPath = value.ExportPath + value.ExportPath = new mirroredEntity( + () => { + const exportPath = originalExportPath.valueOf() + return new (mirroredEntity.type)( + exportPath.type, + exportPath.path.replace(originalName, this.Name?.toString() ?? ""), + exportPath.full + ) + } + ) + } + } + /** @type {String} */ #class getClass() { if (!this.#class) { this.#class = (this.Class?.path ? this.Class.path : this.Class?.type) - ?? this.ExportPath?.type + ?? this.ExportPath?.valueOf()?.type ?? "" if (this.#class && !this.#class.startsWith("/")) { // Old path names did not start with /Script or /Engine, check tests/resources/LegacyNodes.js @@ -428,14 +469,14 @@ export default class ObjectEntity extends IEntity { } getType() { - let classValue = this.getClass() - if (this.MacroGraphReference?.MacroGraph?.path) { - return this.MacroGraphReference.MacroGraph.path + const path = this.MacroGraphReference?.MacroGraph?.path + if (path) { + return path } if (this.MaterialExpression) { return this.MaterialExpression.type } - return classValue + return this.getClass() } getObjectName(dropCounter = false) { @@ -555,24 +596,10 @@ export default class ObjectEntity extends IEntity { } isMaterial() { - - return this.getClass() === Configuration.paths.materialGraphNode - // return [ - // Configuration.paths.materialExpressionConstant, - // Configuration.paths.materialExpressionConstant2Vector, - // Configuration.paths.materialExpressionConstant3Vector, - // Configuration.paths.materialExpressionConstant4Vector, - // Configuration.paths.materialExpressionLogarithm, - // Configuration.paths.materialExpressionLogarithm10, - // Configuration.paths.materialExpressionLogarithm2, - // Configuration.paths.materialExpressionMaterialFunctionCall, - // Configuration.paths.materialExpressionSquareRoot, - // Configuration.paths.materialExpressionTextureCoordinate, - // Configuration.paths.materialExpressionTextureSample, - // Configuration.paths.materialGraphNode, - // Configuration.paths.materialGraphNodeComment, - // ] - // .includes(this.getClass()) + const classValue = this.getClass() + return classValue.startsWith("/Script/Engine.MaterialExpression") + || classValue.startsWith("/Script/InterchangeImport.MaterialExpression") + || classValue.startsWith("/Script/UnrealEd.MaterialGraph") } /** @return {ObjectEntity} */ @@ -666,9 +693,10 @@ export default class ObjectEntity extends IEntity { attributeSeparator = Self.attributeSeparator, wrap = Self.wrap, ) { + const isSelfOverriden = Self !== this.constructor const deeperIndentation = indentation + Configuration.indentation const initial_trailing = this.trailing - this.trailing = false + this.trailing = true const content = super.doSerialize(insideString, deeperIndentation, Self, printKey, keySeparator, attributeSeparator, wrap) this.trailing = initial_trailing let result = indentation + "Begin Object" @@ -690,27 +718,27 @@ export default class ObjectEntity extends IEntity { ? ` Archetype${keySeparator}${this.Archetype.serialize(insideString)}` : "" ) - + ((this.ExportPath?.type || this.ExportPath?.path) - // && Self.attributes.ExportPath.ignored !== true - // && this.ExportPath.ignored !== true + + ((this.ExportPath?.valueOf()?.type || this.ExportPath?.valueOf()?.path) + // && Self.attributes.ExportPath.valueOf().ignored !== true + // && this.ExportPath.valueOf().ignored !== true ? ` ExportPath${keySeparator}${this.ExportPath.serialize(insideString)}` : "" ) - + (content ? attributeSeparator + content : "") + + attributeSeparator + + content + (Self.attributes.CustomProperties.ignored !== true && this.CustomProperties.ignored !== true ? this.getCustomproperties() .map(pin => - attributeSeparator - + deeperIndentation + deeperIndentation + printKey("CustomProperties ") + pin.serialize(insideString) + + attributeSeparator ) .join("") : "" ) - + attributeSeparator + indentation + "End Object" - + (this.trailing ? attributeSeparator : "") + + (isSelfOverriden && Self.trailing || this.trailing ? attributeSeparator : "") return result } } diff --git a/js/entity/ObjectReferenceEntity.js b/js/entity/ObjectReferenceEntity.js index b59147a..a855bdf 100755 --- a/js/entity/ObjectReferenceEntity.js +++ b/js/entity/ObjectReferenceEntity.js @@ -5,12 +5,6 @@ import IEntity from "./IEntity.js" export default class ObjectReferenceEntity extends IEntity { - /** @protected */ - static _quotedParser = P.regArray(new RegExp( - `'"(${Grammar.Regex.InsideString.source})"'` - + "|" - + `'(${Grammar.Regex.InsideSingleQuotedString.source})'` - )).map(([_0, a, b]) => a ?? b) static typeReference = P.reg( // @ts-expect-error new RegExp(Grammar.Regex.Path.source + "|" + Grammar.symbol.getParser().regexp.source) @@ -31,29 +25,31 @@ export default class ObjectReferenceEntity extends IEntity { return this.#path } set path(value) { + this.#name = "" this.#path = value } - #fullEscaped - /** @type {String} */ - #full + #serializer get full() { - return this.#full + return this.#serializer } set full(value) { - this.#full = value + this.#serializer = value } + #name = "" - constructor(type = "None", path = "", full = null) { + /** @param {(t: String, p: String) => String} serializer */ + constructor( + type = "None", + path = "", + serializer = type.includes("/") || path + ? (t, p) => `"${t + (p ? (`'${p}'`) : "")}"` + : (t, p) => t) { super() this.#type = type this.#path = path - this.#full = full ?? ( - this.type.includes("/") || this.path - ? `"${this.type + (this.path ? (`'${this.path}'`) : "")}"` - : this.type - ) + this.#serializer = serializer } /** @returns {P} */ @@ -71,10 +67,21 @@ export default class ObjectReferenceEntity extends IEntity { new RegExp( // @ts-expect-error "(" + this.typeReference.getParser().regexp.source + ")" - // @ts-expect-error - + "(?:" + this._quotedParser.getParser().parser.regexp.source + ")" + + "(?:" + + `'"(${Grammar.Regex.InsideString.source})"'` + + "|" + + `'(${Grammar.Regex.InsideSingleQuotedString.source})'` + + ")" ) - ).map(([full, type, ...path]) => new this(type, path.find(v => v), full)) + ).map(([full, type, fullQuotedPath, simpleQuotedPath]) => { + let fullQuoted = fullQuotedPath ? true : false + let quotes = fullQuoted ? [`'"`, `"'`] : ["'", "'"] + return new this( + type, + fullQuoted ? fullQuotedPath : simpleQuotedPath, + (t, p) => t + quotes[0] + p + quotes[1] + ) + }) } /** @returns {P} */ @@ -84,30 +91,34 @@ export default class ObjectReferenceEntity extends IEntity { '"(' + Grammar.Regex.InsideString.source + "?)" + "(?:'(" + Grammar.Regex.InsideSingleQuotedString.source + `?)')?"` ) - ).map(([full, type, path]) => new this(type, path, full)) + ).map(([_0, type, path]) => new this(type, path, (t, p) => `"${t}${p ? `'${p}'` : ""}"`)) } /** @returns {P} */ static createTypeReferenceGrammar() { - return this.typeReference.map(v => new this(v, "", v)) + return this.typeReference.map(v => new this(v, "", (t, p) => t)) } static createNoneInstance() { - return new ObjectReferenceEntity("None", "", "None") + return new this("None") } getName(dropCounter = false) { - return Utility.getNameFromPath(this.path.replace(/_C$/, ""), dropCounter) + if (!this.#name) { + if (!dropCounter) { + return this.#name = Utility.getNameFromPath(this.path.replace(/_C$/, ""), dropCounter) + } + return Utility.getNameFromPath(this.path.replace(/_C$/, ""), dropCounter) + } + return this.#name } doSerialize(insideString = false) { + let result = this.full(this.type, this.path) if (insideString) { - if (this.#fullEscaped === undefined) { - this.#fullEscaped = Utility.escapeString(this.#full, false) - } - return this.#fullEscaped + result = Utility.escapeString(result, false) } - return this.full + return result } /** @param {IEntity} other */ @@ -117,4 +128,8 @@ export default class ObjectReferenceEntity extends IEntity { } return this.type == other.type && this.path == other.path } + + toString() { + return this.full(this.type, this.path) + } } diff --git a/js/entity/PinEntity.js b/js/entity/PinEntity.js index 7c4ef29..9f214b7 100755 --- a/js/entity/PinEntity.js +++ b/js/entity/PinEntity.js @@ -43,12 +43,15 @@ export default class PinEntity extends IEntity { "byte": ByteEntity, "enum": EnumEntity, "exec": StringEntity, + "float": NumberEntity, "int": IntegerEntity, "int64": Integer64Entity, "name": StringEntity, "real": NumberEntity, "string": StringEntity, [Configuration.paths.linearColor]: LinearColorEntity, + [Configuration.paths.niagaraBool]: BooleanEntity, + [Configuration.paths.niagaraFloat]: NumberEntity, [Configuration.paths.niagaraPosition]: VectorEntity, [Configuration.paths.rotator]: RotatorEntity, [Configuration.paths.vector]: VectorEntity, @@ -170,9 +173,10 @@ export default class PinEntity extends IEntity { return new PinEntity(objectEntity) } + /** @returns {String} */ getType() { const category = this.PinType.PinCategory?.toString().toLocaleLowerCase() - if (category === "struct" || category === "class" || category === "object" || category === "type") { + if (["struct", "class", "object", "type", "statictype"].includes(category)) { return this.PinType.PinSubCategoryObject?.path } if (this.isEnum()) { @@ -257,6 +261,7 @@ export default class PinEntity extends IEntity { isExecution() { return this.PinType.PinCategory.toString() === "exec" + || this.getType() === Configuration.paths.niagaraParameterMap } isHidden() { @@ -272,7 +277,7 @@ export default class PinEntity extends IEntity { } isLinked() { - return this.LinkedTo?.length > 0 ?? false + return this.LinkedTo?.length > 0 } /** diff --git a/js/entity/RBSerializationVector2DEntity.js b/js/entity/RBSerializationVector2DEntity.js old mode 100644 new mode 100755 diff --git a/js/entity/RotatorEntity.js b/js/entity/RotatorEntity.js old mode 100644 new mode 100755 diff --git a/js/entity/ScriptVariableEntity.js b/js/entity/ScriptVariableEntity.js old mode 100644 new mode 100755 diff --git a/js/entity/SimpleSerializationRotatorEntity.js b/js/entity/SimpleSerializationRotatorEntity.js old mode 100644 new mode 100755 diff --git a/js/entity/SimpleSerializationVector2DEntity.js b/js/entity/SimpleSerializationVector2DEntity.js old mode 100644 new mode 100755 diff --git a/js/entity/SimpleSerializationVector4DEntity.js b/js/entity/SimpleSerializationVector4DEntity.js old mode 100644 new mode 100755 diff --git a/js/entity/SimpleSerializationVectorEntity.js b/js/entity/SimpleSerializationVectorEntity.js old mode 100644 new mode 100755 diff --git a/js/entity/SymbolEntity.js b/js/entity/SymbolEntity.js old mode 100644 new mode 100755 diff --git a/js/entity/TerminalTypeEntity.js b/js/entity/TerminalTypeEntity.js old mode 100644 new mode 100755 diff --git a/js/entity/UnknownKeysEntity.js b/js/entity/UnknownKeysEntity.js old mode 100644 new mode 100755 index 266d28e..82180a4 --- a/js/entity/UnknownKeysEntity.js +++ b/js/entity/UnknownKeysEntity.js @@ -1,9 +1,14 @@ import P from "parsernostrum" import Grammar from "../serialization/Grammar.js" +import GuidEntity from "./GuidEntity.js" import IEntity from "./IEntity.js" export default class UnknownKeysEntity extends IEntity { + static attributes = { + ...super.attributes, + VariableGuid: GuidEntity, + } static grammar = this.createGrammar() static { diff --git a/js/entity/UnknownPinEntity.js b/js/entity/UnknownPinEntity.js index 7f910c8..f7b362e 100755 --- a/js/entity/UnknownPinEntity.js +++ b/js/entity/UnknownPinEntity.js @@ -16,7 +16,7 @@ export default class UnknownPinEntity extends PinEntity { static createGrammar() { return P.seq( // Lookbehind - P.reg(new RegExp(`(${Grammar.Regex.Symbol.source}\\s*)\\(\\s*`), 1), + P.reg(new RegExp(`(${Grammar.Regex.Symbol.source}\\s*)?\\(\\s*`), 1), Grammar.createAttributeGrammar(this).sepBy(Grammar.commaSeparation), P.reg(/\s*(?:,\s*)?\)/) ).map(([lookbehind, attributes, _2]) => { diff --git a/js/entity/Vector2DEntity.js b/js/entity/Vector2DEntity.js old mode 100644 new mode 100755 diff --git a/js/entity/Vector4DEntity.js b/js/entity/Vector4DEntity.js old mode 100644 new mode 100755 diff --git a/js/entity/VectorEntity.js b/js/entity/VectorEntity.js old mode 100644 new mode 100755 diff --git a/js/entity/objects/KnotEntity.js b/js/entity/objects/KnotEntity.js old mode 100644 new mode 100755 index 550dbde..4c00333 --- a/js/entity/objects/KnotEntity.js +++ b/js/entity/objects/KnotEntity.js @@ -25,7 +25,7 @@ export default class KnotEntity extends ObjectEntity { inputPinEntity.copyTypeFrom(pinReferenceForType) outputPinEntity.copyTypeFrom(pinReferenceForType) } - values["CustomProperties"] = new (ObjectEntity.attributes.CustomProperties)([inputPinEntity, outputPinEntity]) + values.CustomProperties = new (ObjectEntity.attributes.CustomProperties)([inputPinEntity, outputPinEntity]) super(values) } } diff --git a/js/entity/objects/NiagaraClipboardContent.js b/js/entity/objects/NiagaraClipboardContent.js new file mode 100755 index 0000000..30beadd --- /dev/null +++ b/js/entity/objects/NiagaraClipboardContent.js @@ -0,0 +1,45 @@ +import Configuration from "../../Configuration.js" +import ObjectEntity from "../ObjectEntity.js" +import ObjectReferenceEntity from "../ObjectReferenceEntity.js" +import StringEntity from "../StringEntity.js" + +export default class NiagaraClipboardContent extends ObjectEntity { + + /** + * @param {BlueprintEntity} blueprint + * @param {ObjectEntity[]} nodes + */ + constructor(blueprint, nodes) { + const typePath = Configuration.paths.niagaraClipboardContent + const name = blueprint.takeFreeName("NiagaraClipboardContent") + const exportPath = `/Engine/Transient.${name}` + /** @type {Set} */ + const variableIndexes = new Set() + let exported = "" + for (const node of nodes) { + if (node.exported) { + node.getPinEntities() + .map(pin => blueprint.variableIndex(pin.PinName.toString())) + .filter(v => v != null) + .forEach(i => variableIndexes.add(i)) + exported += node.serialize() + } + } + const scriptVariables = blueprint.ScriptVariables.valueOf().filter((v, i) => variableIndexes.has(i)) + const variableObjects = scriptVariables.concat(scriptVariables).map((v, i) => { + const name = Configuration.subObjectAttributeNameFromReference( + v.ScriptVariable, + i >= scriptVariables.length // First take all the small objects then all name only + ) + return [name, blueprint[name]] + }) + super({ + Class: new ObjectReferenceEntity(typePath), + Name: new StringEntity(name), + ...Object.fromEntries(variableObjects), + ExportPath: new ObjectReferenceEntity(typePath, exportPath), + ScriptVariables: new (NiagaraClipboardContent.attributes.ScriptVariables)(scriptVariables), + ExportedNodes: new StringEntity(btoa(exported)) + }) + } +} diff --git a/js/input/IInput.js b/js/input/IInput.js old mode 100644 new mode 100755 diff --git a/js/input/InputCombination.js b/js/input/InputCombination.js old mode 100644 new mode 100755 diff --git a/js/input/common/Copy.js b/js/input/common/Copy.js index 123dc59..6b472b6 100755 --- a/js/input/common/Copy.js +++ b/js/input/common/Copy.js @@ -1,3 +1,4 @@ +import NiagaraClipboardContent from "../../entity/objects/NiagaraClipboardContent.js" import IInput from "../IInput.js" /** @@ -28,20 +29,8 @@ export default class Copy extends IInput { window.removeEventListener("copy", this.#copyHandler) } - getSerializedText() { - const allNodes = this.blueprint.getNodes(true).map(n => n.entity) - const exported = allNodes.filter(n => n.exported).map(n => n.serialize()) - const result = allNodes.filter(n => !n.exported).map(n => n.serialize()) - if (exported.length) { - this.blueprint.entity.ExportedNodes.value = btoa(exported.join("")) - result.splice(0, 0, this.blueprint.entity.serialize(false)) - delete this.blueprint.entity.ExportedNodes - } - return result.join("") - } - copied() { - const value = this.getSerializedText() + const value = this.blueprint.getSerializedText() navigator.clipboard.writeText(value) return value } diff --git a/js/input/common/Cut.js b/js/input/common/Cut.js index c41728d..03de7b3 100755 --- a/js/input/common/Cut.js +++ b/js/input/common/Cut.js @@ -33,13 +33,6 @@ export default class Cut extends IInput { window.removeEventListener("cut", this.#cutHandler) } - getSerializedText() { - return this.blueprint - .getNodes(true) - .map(node => node.entity.serialize()) - .join("") - } - cut() { this.blueprint.template.getCopyInputObject().copied() this.blueprint.removeGraphElement(...this.blueprint.getNodes(true)) diff --git a/js/input/keyboard/KeyboardEnableZoom.js b/js/input/keyboard/KeyboardEnableZoom.js old mode 100644 new mode 100755 diff --git a/js/input/keyboard/KeyboardShortcut.js b/js/input/keyboard/KeyboardShortcut.js old mode 100644 new mode 100755 diff --git a/js/input/mouse/IMouseClickDrag.js b/js/input/mouse/IMouseClickDrag.js old mode 100644 new mode 100755 diff --git a/js/input/mouse/IPointing.js b/js/input/mouse/IPointing.js old mode 100644 new mode 100755 diff --git a/js/input/mouse/MouseClick.js b/js/input/mouse/MouseClick.js old mode 100644 new mode 100755 diff --git a/js/input/mouse/MouseCreateLink.js b/js/input/mouse/MouseCreateLink.js index 2ed2848..3ef87ab 100755 --- a/js/input/mouse/MouseCreateLink.js +++ b/js/input/mouse/MouseCreateLink.js @@ -22,13 +22,10 @@ export default class MouseCreateLink extends IMouseClickDrag { if (!this.enteredPin) { this.linkValid = false this.enteredPin = /** @type {PinElement} */(e.target) - const a = this.link.source ?? this.target // Remember target might have change + const a = this.link.origin ?? this.target // Remember target might have change const b = this.enteredPin const outputPin = a.isOutput() ? a : b - if ( - a.nodeElement.getType() === Configuration.paths.knot - || b.nodeElement.getType() === Configuration.paths.knot - ) { + if (a.isKnot() || b.isKnot()) { // A knot can be linked to any pin, it doesn't matter the type or input/output direction this.link.setMessageCorrect() this.linkValid = true @@ -83,7 +80,7 @@ export default class MouseCreateLink extends IMouseClickDrag { } startDrag(location) { - if (this.target.nodeElement.getType() == Configuration.paths.knot) { + if (this.target.isKnot()) { this.#knotPin = this.target } /** @type {LinkElement} */ @@ -99,11 +96,11 @@ export default class MouseCreateLink extends IMouseClickDrag { } }) this.link.startDragging() - this.link.setDestinationLocation(location) + this.link.setTargetLocation(location) } dragTo(location, movement) { - this.link.setDestinationLocation(location) + this.link.setTargetLocation(location) } endDrag() { @@ -115,26 +112,26 @@ export default class MouseCreateLink extends IMouseClickDrag { if (this.enteredPin && this.linkValid) { // Knot can use wither the input or output (by default) part indifferently, check if a switch is needed if (this.#knotPin) { - const otherPin = this.#knotPin !== this.link.source ? this.link.source : this.enteredPin + const otherPin = this.#knotPin !== this.link.origin ? this.link.origin : this.enteredPin // Knot pin direction correction if (this.#knotPin.isInput() && otherPin.isInput() || this.#knotPin.isOutput() && otherPin.isOutput()) { - const oppositePin = /** @type {KnotPinTemplate} */(this.#knotPin.template).getOppositePin() - if (this.#knotPin === this.link.source) { - this.link.source = oppositePin + const oppositePin = /** @type {KnotPinTemplate} */(this.#knotPin.template).getoppositePin() + if (this.#knotPin === this.link.origin) { + this.link.origin = oppositePin } else { this.enteredPin = oppositePin } } - } else if (this.enteredPin.nodeElement.getType() === Configuration.paths.knot) { + } else if (this.enteredPin.isKnot()) { this.#knotPin = this.enteredPin - if (this.link.source.isOutput()) { - // Knot uses by default the output pin, let's switch to keep it coherent with the source node we have - this.enteredPin = /** @type {KnotPinTemplate} */(this.enteredPin.template).getOppositePin() + if (this.link.origin.isOutput()) { + // Knot uses by default the output pin, let's switch to keep it coherent with the origin node we have + this.enteredPin = /** @type {KnotPinTemplate} */(this.enteredPin.template).getoppositePin() } } - if (!this.link.source.getLinks().find(ref => ref.equals(this.enteredPin.createPinReference()))) { + if (!this.link.origin.getLinks().find(ref => ref.equals(this.enteredPin.createPinReference()))) { this.blueprint.addGraphElement(this.link) - this.link.destination = this.enteredPin + this.link.target = this.enteredPin } else { this.link.remove() } @@ -145,5 +142,6 @@ export default class MouseCreateLink extends IMouseClickDrag { this.link.removeMessage() this.link.finishDragging() this.link = null + this.#knotPin = null } } diff --git a/js/input/mouse/MouseDbClick.js b/js/input/mouse/MouseDbClick.js old mode 100644 new mode 100755 diff --git a/js/input/mouse/MouseIgnore.js b/js/input/mouse/MouseIgnore.js old mode 100644 new mode 100755 diff --git a/js/input/mouse/MouseWheel.js b/js/input/mouse/MouseWheel.js old mode 100644 new mode 100755 diff --git a/js/serialization/initializeSerializerFactory.js b/js/serialization/initializeSerializerFactory.js index d4ec5bf..06b4ac1 100755 --- a/js/serialization/initializeSerializerFactory.js +++ b/js/serialization/initializeSerializerFactory.js @@ -35,7 +35,7 @@ export default function initializeSerializerFactory() { Parsernostrum.regArray(new RegExp( // @ts-expect-error `"(${Grammar.Regex.Path.source})'(${Grammar.Regex.Path.source}|${Grammar.symbol.getParser().regexp.source})'"` - )).map(([full, type, path]) => new ObjectReferenceEntity(type, path, full)) + )).map(([_0, type, path]) => new ObjectReferenceEntity(type, path, (t, p) => `"${t}'${p}'"`)) ), StringEntity.grammar, LocalizedTextEntity.grammar, diff --git a/js/template/BlueprintTemplate.js b/js/template/BlueprintTemplate.js index 1b8310c..5608007 100755 --- a/js/template/BlueprintTemplate.js +++ b/js/template/BlueprintTemplate.js @@ -55,6 +55,7 @@ export default class BlueprintTemplate extends ITemplate { /** @type {HTMLElement} */ linksContainerElement /** @type {HTMLElement} */ nodesContainerElement viewportSize = [0, 0] + #removeZoomChanged = () => this.headerElement.classList.remove("ueb-zoom-changed") /** @param {Blueprint} element */ initialize(element) { @@ -176,11 +177,12 @@ export default class BlueprintTemplate extends ITemplate { willUpdate(changedProperties) { super.willUpdate(changedProperties) if (this.headerElement && changedProperties.has("zoom")) { + if (this.headerElement.classList.contains("ueb-zoom-changed")) { + this.headerElement.classList.remove("ueb-zoom-changed") + void this.headerElement.offsetWidth // To trigger the reflow + } this.headerElement.classList.add("ueb-zoom-changed") - this.headerElement.addEventListener( - "animationend", - () => this.headerElement.classList.remove("ueb-zoom-changed") - ) + this.headerElement.addEventListener("animationend", this.#removeZoomChanged, { once: true }) } } diff --git a/js/template/IDraggableControlTemplate.js b/js/template/IDraggableControlTemplate.js old mode 100644 new mode 100755 diff --git a/js/template/IDraggablePositionedTemplate.js b/js/template/IDraggablePositionedTemplate.js old mode 100644 new mode 100755 diff --git a/js/template/IResizeableTemplate.js b/js/template/IResizeableTemplate.js old mode 100644 new mode 100755 diff --git a/js/template/ITemplate.js b/js/template/ITemplate.js old mode 100644 new mode 100755 diff --git a/js/template/LinkTemplate.js b/js/template/LinkTemplate.js index 706644a..b792907 100755 --- a/js/template/LinkTemplate.js +++ b/js/template/LinkTemplate.js @@ -33,41 +33,19 @@ export default class LinkTemplate extends IFromToPositionedTemplate { return x => a / x + q } - /** - * Returns a function providing a clamped line passing through two points. It is clamped after and before the - * points. It is easier explained with the following ascii draw. - * b ______ - * / - * / - * / - * ______/ a - */ - static clampedLine(a, b) { - if (a[0] > b[0]) { - const temp = a - a = b - b = temp - } - const m = (b[1] - a[1]) / (b[0] - a[0]) - const q = a[1] - m * a[0] - return x => x < a[0] - ? a[1] - : x > b[0] - ? b[1] - : m * x + q - } + static clampedLine = x => Math.min(Math.max(0, x), 1) static c1DecreasingValue = LinkTemplate.decreasingValue(-0.15, [100, 15]) static c2DecreasingValue = LinkTemplate.decreasingValue(-0.05, [500, 130]) - static c2Clamped = LinkTemplate.clampedLine([0, 80], [200, 40]) + static c2Clamped = x => -40 * LinkTemplate.clampedLine(x / 200) + 80 #uniqueId = `ueb-id-${Math.floor(Math.random() * 1E12)}` /** @param {Coordinates} location */ #createKnot = location => { - const knotEntity = new KnotEntity({}, this.element.source.entity) + const knotEntity = new KnotEntity({}, this.element.origin.entity) const knot = /** @type {NodeElementConstructor} */(ElementFactory.getConstructor("ueb-node")) .newObject(knotEntity) knot.setLocation(...this.blueprint.snapToGrid(...location)) @@ -75,13 +53,90 @@ export default class LinkTemplate extends IFromToPositionedTemplate { this.blueprint.addGraphElement(knot) // Important: keep it before changing existing links const inputPin = this.element.getInputPin() const outputPin = this.element.getOutputPin() - this.element.source = null - this.element.destination = null + this.element.origin = null + this.element.target = null const link = /** @type {LinkElementConstructor} */(ElementFactory.getConstructor("ueb-link")) .newObject(outputPin, knotTemplate.inputPin) this.blueprint.addGraphElement(link) - this.element.source = knotTemplate.outputPin - this.element.destination = inputPin + this.element.origin = knotTemplate.outputPin + this.element.target = inputPin + } + + /** @param {PropertyValues} changedProperties */ + #calculateSVGPath(changedProperties) { + const originPin = this.element.origin + const targetPin = this.element.target + const isOriginAKnot = originPin?.isKnot() + const isTargetAKnot = targetPin?.isKnot() + const from = this.element.fromX + const to = this.element.toX + + // Switch actual input/output pins if allowed and makes sense + if (isOriginAKnot && (!targetPin || isTargetAKnot)) { + if (originPin?.isInputLoosely() && to > from + Configuration.distanceThreshold) { + this.element.origin = /** @type {KnotPinTemplate} */(originPin.template).getoppositePin() + } else if (originPin?.isOutputLoosely() && to < from - Configuration.distanceThreshold) { + this.element.origin = /** @type {KnotPinTemplate} */(originPin.template).getoppositePin() + } + } + if (isTargetAKnot && (!originPin || isOriginAKnot)) { + if (targetPin?.isInputLoosely() && to < from - Configuration.distanceThreshold) { + this.element.target = /** @type {KnotPinTemplate} */(targetPin.template).getoppositePin() + } else if (targetPin?.isOutputLoosely() && to > from + Configuration.distanceThreshold) { + this.element.target = /** @type {KnotPinTemplate} */(targetPin.template).getoppositePin() + } + } + + // Switch visual input/output pins if allowed and makes sense + if (originPin && targetPin) { + let directionsCheckedKnot + if (originPin?.isKnot()) { + // The target end has moved and origin end is a knot + directionsCheckedKnot = originPin.nodeElement + } else if (targetPin?.isKnot()) { + // The origin end has moved and target end is a knot + directionsCheckedKnot = targetPin.nodeElement + } + if (directionsCheckedKnot && directionsCheckedKnot.hasUpdated) { + /** @type {KnotNodeTemplate} */(directionsCheckedKnot.template).checkSwtichDirectionsVisually() + } + } + + let sameDirection = originPin?.isOutputVisually() == targetPin?.isOutputVisually() + + // Actual computation + const dx = Math.max(Math.abs(this.element.fromX - this.element.toX), 1) + const dy = Math.max(Math.abs(this.element.fromY - this.element.toY), 1) + const width = Math.max(dx, Configuration.linkMinWidth) + const fillRatio = dx / width + const xInverted = this.element.originatesFromInput + ? this.element.fromX < this.element.toX + : this.element.toX < this.element.fromX + this.element.startPixels = dx < width // If under minimum width + ? (width - dx) / 2 // Start from half the empty space + : 0 // Otherwise start from the beginning + const startPercentage = xInverted ? this.element.startPixels + fillRatio * 100 : this.element.startPixels + this.element.startPercentage = startPercentage + const c1 = startPercentage + (sameDirection + ? 5 + : ( + (xInverted + ? LinkTemplate.c1DecreasingValue(width) + : 10 + ) + * fillRatio + ) + ) + const aspectRatio = dy / Math.max(30, dx) + const c2 = sameDirection + // ? 100 - Math.abs(100 - 2 * startPercentage) + 15 + ? 100 * LinkTemplate.clampedLine(startPercentage / 50) + 15 + : ( + LinkTemplate.c2Clamped(dx) + * LinkTemplate.sigmoidPositive(fillRatio * 1.2 + aspectRatio * 0.5, 1.5, 1.8) + + startPercentage + ) + this.element.svgPathD = Configuration.linkRightSVGPath(startPercentage, c1, c2, sameDirection) } createInputObjects() { @@ -117,70 +172,26 @@ export default class LinkTemplate extends IFromToPositionedTemplate { /** @param {PropertyValues} changedProperties */ willUpdate(changedProperties) { super.willUpdate(changedProperties) - const sourcePin = this.element.source - const destinationPin = this.element.destination if (changedProperties.has("fromX") || changedProperties.has("toX")) { - const from = this.element.fromX - const to = this.element.toX - const isSourceAKnot = sourcePin?.nodeElement.getType() == Configuration.paths.knot - const isDestinationAKnot = destinationPin?.nodeElement.getType() == Configuration.paths.knot - if (isSourceAKnot && (!destinationPin || isDestinationAKnot)) { - if (sourcePin?.isInput() && to > from + Configuration.distanceThreshold) { - this.element.source = /** @type {KnotNodeTemplate} */(sourcePin.nodeElement.template).outputPin - } else if (sourcePin?.isOutput() && to < from - Configuration.distanceThreshold) { - this.element.source = /** @type {KnotNodeTemplate} */(sourcePin.nodeElement.template).inputPin - } - } - if (isDestinationAKnot && (!sourcePin || isSourceAKnot)) { - if (destinationPin?.isInput() && to < from - Configuration.distanceThreshold) { - this.element.destination = - /** @type {KnotNodeTemplate} */(destinationPin.nodeElement.template).outputPin - } else if (destinationPin?.isOutput() && to > from + Configuration.distanceThreshold) { - this.element.destination = - /** @type {KnotNodeTemplate} */(destinationPin.nodeElement.template).inputPin - } - } + this.#calculateSVGPath(changedProperties) } - const dx = Math.max(Math.abs(this.element.fromX - this.element.toX), 1) - const dy = Math.max(Math.abs(this.element.fromY - this.element.toY), 1) - const width = Math.max(dx, Configuration.linkMinWidth) - // const height = Math.max(Math.abs(link.fromY - link.toY), 1) - const fillRatio = dx / width - const xInverted = this.element.originatesFromInput - ? this.element.fromX < this.element.toX - : this.element.toX < this.element.fromX - this.element.startPixels = dx < width // If under minimum width - ? (width - dx) / 2 // Start from half the empty space - : 0 // Otherwise start from the beginning - this.element.startPercentage = xInverted ? this.element.startPixels + fillRatio * 100 : this.element.startPixels - const c1 = - this.element.startPercentage - + (xInverted - ? LinkTemplate.c1DecreasingValue(width) - : 10 - ) - * fillRatio - const aspectRatio = dy / Math.max(30, dx) - const c2 = - LinkTemplate.c2Clamped(dx) - * LinkTemplate.sigmoidPositive(fillRatio * 1.2 + aspectRatio * 0.5, 1.5, 1.8) - + this.element.startPercentage - this.element.svgPathD = Configuration.linkRightSVGPath(this.element.startPercentage, c1, c2) } /** @param {PropertyValues} changedProperties */ update(changedProperties) { super.update(changedProperties) - if (changedProperties.has("originatesFromInput")) { - this.element.style.setProperty("--ueb-from-input", this.element.originatesFromInput ? "1" : "0") - } const referencePin = this.element.getOutputPin(true) if (referencePin) { this.element.style.setProperty("--ueb-link-color-rgb", LinearColorEntity.printLinearColor(referencePin.color)) } - this.element.style.setProperty("--ueb-y-reflected", `${this.element.fromY > this.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)}`) + const mirrorV = (this.element.fromY > this.element.toY ? -1 : 1) // If from is below to => mirror + * (this.element.originatesFromInput ? -1 : 1) // Unless fro refers to an input pin + * (this.element.origin?.isInputVisually() && this.element.target?.isInputVisually() ? -1 : 1) + const mirrorH = (this.element.origin?.isInputVisually() && this.element.target?.isInputVisually() ? -1 : 1) + this.element.style.setProperty("--ueb-link-scale-y", `${mirrorV}`) + this.element.style.setProperty("--ueb-link-scale-x", `${mirrorH}`) } render() { diff --git a/js/template/node/CommentNodeTemplate.js b/js/template/node/CommentNodeTemplate.js old mode 100644 new mode 100755 diff --git a/js/template/node/KnotNodeTemplate.js b/js/template/node/KnotNodeTemplate.js old mode 100644 new mode 100755 index 0d06f6e..3b74d16 --- a/js/template/node/KnotNodeTemplate.js +++ b/js/template/node/KnotNodeTemplate.js @@ -1,15 +1,21 @@ import { html } from "lit" -import Configuration from "../../Configuration.js" import ElementFactory from "../../element/ElementFactory.js" import KnotPinTemplate from "../pin/KnotPinTemplate.js" import NodeTemplate from "./NodeTemplate.js" export default class KnotNodeTemplate extends NodeTemplate { - static #traversedPin = new Set() - - /** @type {Boolean?} */ - #chainDirection = null // The node is part of a chain connected to an input or output pin + #switchDirectionsVisually = false + get switchDirectionsVisually() { + return this.#switchDirectionsVisually + } + set switchDirectionsVisually(value) { + if (this.#switchDirectionsVisually == value) { + return + } + this.#switchDirectionsVisually = value + this.element.acknowledgeReflow() + } /** @type {PinElement} */ #inputPin @@ -29,24 +35,6 @@ export default class KnotNodeTemplate extends NodeTemplate { this.element.classList.add("ueb-node-style-minimal") } - /** @param {PinElement} startingPin */ - findDirectionaPin(startingPin) { - if ( - startingPin.nodeElement.getType() !== Configuration.paths.knot - || KnotNodeTemplate.#traversedPin.has(startingPin) - ) { - KnotNodeTemplate.#traversedPin.clear() - return true - } - KnotNodeTemplate.#traversedPin.add(startingPin) - for (let pin of startingPin.getLinks().map(l => this.blueprint.getPin(l))) { - if (this.findDirectionaPin(pin)) { - return true - } - } - return false - } - render() { return html` @@ -72,6 +60,28 @@ export default class KnotNodeTemplate extends NodeTemplate { } linksChanged() { + } + checkSwtichDirectionsVisually() { + let leftPinsLocation = 0 + let leftPinsCount = 0 + let rightPinsLocation = 0 + let rightPinsCount = 0 + const links = this.getAllConnectedLinks() + for (const link of links) { + const pin = link.getOtherPin(this.element) + if (pin?.isInput()) { + rightPinsLocation += pin.getLinkLocation()[0] + ++rightPinsCount + } else if (pin?.isOutput()) { + leftPinsLocation += pin.getLinkLocation()[0] + ++leftPinsCount + } + } + leftPinsLocation /= leftPinsCount + rightPinsLocation /= rightPinsCount + if ((rightPinsLocation < leftPinsLocation) != this.switchDirectionsVisually) { + this.switchDirectionsVisually = rightPinsLocation < leftPinsLocation + } } } diff --git a/js/template/node/MetasoundNodeTemplate.js b/js/template/node/MetasoundNodeTemplate.js old mode 100644 new mode 100755 diff --git a/js/template/node/MetasoundOperationTemplate.js b/js/template/node/MetasoundOperationTemplate.js old mode 100644 new mode 100755 diff --git a/js/template/node/NodeTemplate.js b/js/template/node/NodeTemplate.js index e9e474a..e728c8c 100755 --- a/js/template/node/NodeTemplate.js +++ b/js/template/node/NodeTemplate.js @@ -170,4 +170,11 @@ export default class NodeTemplate extends ISelectableDraggableTemplate { } linksChanged() { } + + /** All the link connected to this node */ + getAllConnectedLinks() { + const nodeTitle = this.element.nodeTitle + const query = `ueb-link[data-origin-node="${nodeTitle}"],ueb-link[data-target-node="${nodeTitle}"]` + return /** @type {LinkElement[]} */([...this.blueprint.querySelectorAll(query)]) + } } diff --git a/js/template/node/VariableAccessNodeTemplate.js b/js/template/node/VariableAccessNodeTemplate.js old mode 100644 new mode 100755 diff --git a/js/template/node/VariableConversionNodeTemplate.js b/js/template/node/VariableConversionNodeTemplate.js old mode 100644 new mode 100755 diff --git a/js/template/node/VariableMangementNodeTemplate.js b/js/template/node/VariableMangementNodeTemplate.js old mode 100644 new mode 100755 diff --git a/js/template/node/VariableOperationNodeTemplate.js b/js/template/node/VariableOperationNodeTemplate.js old mode 100644 new mode 100755 diff --git a/js/template/pin/BoolPinTemplate.js b/js/template/pin/BoolPinTemplate.js old mode 100644 new mode 100755 index 044042f..c65e5d1 --- a/js/template/pin/BoolPinTemplate.js +++ b/js/template/pin/BoolPinTemplate.js @@ -10,7 +10,7 @@ export default class BoolPinTemplate extends PinTemplate { #input #onChangeHandler = () => { - const entity = this.element.getDefaultValue() + const entity = this.element.getDefaultValue(true) entity.value = this.#input.checked this.element.setDefaultValue(entity) } diff --git a/js/template/pin/DropdownTemplate.js b/js/template/pin/DropdownTemplate.js old mode 100644 new mode 100755 diff --git a/js/template/pin/EnumPinTemplate.js b/js/template/pin/EnumPinTemplate.js old mode 100644 new mode 100755 index 622eeba..76bb0dd --- a/js/template/pin/EnumPinTemplate.js +++ b/js/template/pin/EnumPinTemplate.js @@ -35,7 +35,7 @@ export default class EnumPinTemplate extends IInputPinTemplate { : [k, Utility.formatStringName(k)] ) ?? [] - const defaultEntry = this.element.getDefaultValue().toString() + const defaultEntry = this.element.getDefaultValue()?.toString() if (!this.#dropdownEntries.find(([k, v]) => k === defaultEntry)) { this.#dropdownEntries.push([defaultEntry, Utility.formatStringName(defaultEntry)]) } diff --git a/js/template/pin/ExecPinTemplate.js b/js/template/pin/ExecPinTemplate.js old mode 100644 new mode 100755 diff --git a/js/template/pin/IInputPinTemplate.js b/js/template/pin/IInputPinTemplate.js old mode 100644 new mode 100755 diff --git a/js/template/pin/INumericPinTemplate.js b/js/template/pin/INumericPinTemplate.js old mode 100644 new mode 100755 diff --git a/js/template/pin/InputTemplate.js b/js/template/pin/InputTemplate.js old mode 100644 new mode 100755 diff --git a/js/template/pin/Int64PinTemplate.js b/js/template/pin/Int64PinTemplate.js old mode 100644 new mode 100755 diff --git a/js/template/pin/IntPinTemplate.js b/js/template/pin/IntPinTemplate.js old mode 100644 new mode 100755 diff --git a/js/template/pin/InternalPinTemplate.js b/js/template/pin/InternalPinTemplate.js old mode 100644 new mode 100755 diff --git a/js/template/pin/KnotPinTemplate.js b/js/template/pin/KnotPinTemplate.js old mode 100644 new mode 100755 index 48d3068..d066d0c --- a/js/template/pin/KnotPinTemplate.js +++ b/js/template/pin/KnotPinTemplate.js @@ -1,5 +1,4 @@ import { html } from "lit" -import Utility from "../../Utility.js" import MinimalPinTemplate from "./MinimalPinTemplate.js" /** @extends MinimalPinTemplate */ @@ -9,21 +8,16 @@ export default class KnotPinTemplate extends MinimalPinTemplate { return this.element.isOutput() ? super.render() : html`` } - getOppositePin() { + getoppositePin() { const nodeTemplate = /** @type {KnotNodeTemplate} */(this.element.nodeElement.template) return this.element.isOutput() ? nodeTemplate.inputPin : nodeTemplate.outputPin } + /** Location on the grid of a link connecting to this pin */ getLinkLocation() { - const rect = ( - this.element.isInput() - ? /** @type {KnotNodeTemplate} */(this.element.nodeElement.template).outputPin.template - : this - ) - .iconElement.getBoundingClientRect() - /** @type {Coordinates} */ - const boundingLocation = [this.element.isInput() ? rect.left : rect.right + 1, (rect.top + rect.bottom) / 2] - const location = Utility.convertLocation(boundingLocation, this.blueprint.template.gridElement) - return this.blueprint.compensateTranslation(location[0], location[1]) + if (this.element.isInput()) { + return this.getoppositePin().getLinkLocation() + } + return super.getLinkLocation() } } diff --git a/js/template/pin/LinearColorPinTemplate.js b/js/template/pin/LinearColorPinTemplate.js old mode 100644 new mode 100755 diff --git a/js/template/pin/MinimalPinTemplate.js b/js/template/pin/MinimalPinTemplate.js old mode 100644 new mode 100755 diff --git a/js/template/pin/NamePinTemplate.js b/js/template/pin/NamePinTemplate.js old mode 100644 new mode 100755 diff --git a/js/template/pin/PinTemplate.js b/js/template/pin/PinTemplate.js index b527578..d4f551b 100755 --- a/js/template/pin/PinTemplate.js +++ b/js/template/pin/PinTemplate.js @@ -121,6 +121,9 @@ export default class PinTemplate extends ITemplate { if (this.element.nodeElement?.template instanceof VariableOperationNodeTemplate) { return SVGIcon.operationPin } + if (this.element.entity.PinType.PinCategory?.toString().toLocaleLowerCase() === "statictype") { + return SVGIcon.staticPin + } return SVGIcon.genericPin } @@ -169,9 +172,12 @@ export default class PinTemplate extends ITemplate { } getLinkLocation() { - const rect = this.iconElement.getBoundingClientRect() + const rect = (this.#iconElement ?? this.element).getBoundingClientRect() /** @type {[Number, Number]} */ - const boundingLocation = [this.element.isInput() ? rect.left : rect.right + 1, (rect.top + rect.bottom) / 2] + const boundingLocation = [ + this.element.isInputVisually() ? rect.left : rect.right + 1, + (rect.top + rect.bottom) / 2 + ] const location = Utility.convertLocation(boundingLocation, this.blueprint.template.gridElement) return this.blueprint.compensateTranslation(location[0], location[1]) } @@ -179,4 +185,16 @@ export default class PinTemplate extends ITemplate { getClickableElement() { return this.#wrapperElement ?? this.element } + + /** All the link connected to this pin */ + getAllConnectedLinks() { + if (!this.element.isLinked) { + return [] + } + const nodeTitle = this.element.nodeElement.nodeTitle + const pinId = this.element.pinId + const query = `ueb-link[data-origin-node="${nodeTitle}"][data-origin-pin="${pinId}"],` + + `ueb-link[data-target-node="${nodeTitle}"][data-target-pin="${pinId}"]` + return /** @type {LinkElement[]} */([...this.blueprint.querySelectorAll(query)]) + } } diff --git a/js/template/pin/RealPinTemplate.js b/js/template/pin/RealPinTemplate.js old mode 100644 new mode 100755 diff --git a/js/template/pin/ReferencePinTemplate.js b/js/template/pin/ReferencePinTemplate.js old mode 100644 new mode 100755 diff --git a/js/template/pin/RotatorPinTemplate.js b/js/template/pin/RotatorPinTemplate.js old mode 100644 new mode 100755 diff --git a/js/template/pin/StringPinTemplate.js b/js/template/pin/StringPinTemplate.js old mode 100644 new mode 100755 diff --git a/js/template/pin/Vector2DPinTemplate.js b/js/template/pin/Vector2DPinTemplate.js old mode 100644 new mode 100755 diff --git a/js/template/pin/Vector4DPinTemplate.js b/js/template/pin/Vector4DPinTemplate.js old mode 100644 new mode 100755 diff --git a/js/template/pin/VectorPinTemplate.js b/js/template/pin/VectorPinTemplate.js old mode 100644 new mode 100755 diff --git a/jsconfig.json b/jsconfig.json old mode 100644 new mode 100755 diff --git a/package.json b/package.json index 3fd45b6..939ab41 100755 --- a/package.json +++ b/package.json @@ -25,11 +25,11 @@ }, "homepage": "https://github.com/barsdeveloper/ueblueprint#readme", "devDependencies": { - "@playwright/test": "1.46", - "@rollup/plugin-commonjs": "^25", - "@rollup/plugin-node-resolve": "^15", + "@playwright/test": "1.49", + "@rollup/plugin-commonjs": "^28", + "@rollup/plugin-node-resolve": "^16", "@rollup/plugin-terser": "^0", - "concurrently": "^8", + "concurrently": "^9", "http-server": "^14", "rollup": "^4 || ^3 || ^2", "rollup-plugin-copy": "^3", @@ -38,7 +38,7 @@ "terser": "^5" }, "dependencies": { - "lit": "^2", + "lit": "^3", "parsernostrum": "^1" } } diff --git a/playwright.config.js b/playwright.config.js old mode 100644 new mode 100755 index 578af83..b785ab3 --- a/playwright.config.js +++ b/playwright.config.js @@ -38,15 +38,15 @@ defineConfig({ use: { ...devices['Desktop Chrome'] }, }, - { - name: 'firefox', - use: { ...devices['Desktop Firefox'] }, - }, + // { + // name: 'firefox', + // use: { ...devices['Desktop Firefox'] }, + // }, - { - name: 'webkit', - use: { ...devices['Desktop Safari'] }, - }, + // { + // name: 'webkit', + // use: { ...devices['Desktop Safari'] }, + // }, /* Test against mobile viewports. */ // { diff --git a/scss/export.scss b/scss/export.scss old mode 100644 new mode 100755 diff --git a/scss/style.scss b/scss/style.scss old mode 100644 new mode 100755 index 7e9dccb..5151017 --- a/scss/style.scss +++ b/scss/style.scss @@ -47,7 +47,7 @@ ueb-blueprint svg { } .ueb-zoom-changed .ueb-viewport-zoom { - animation: 600ms ueb-zoom-animation; + animation: 1500ms ueb-zoom-animation; } .ueb-viewport-zoom { diff --git a/scss/ueb-knot.scss b/scss/ueb-knot.scss old mode 100644 new mode 100755 diff --git a/scss/ueb-link.scss b/scss/ueb-link.scss old mode 100644 new mode 100755 index 7ed82a6..fe0e317 --- a/scss/ueb-link.scss +++ b/scss/ueb-link.scss @@ -3,9 +3,7 @@ ueb-link { position: absolute; --ueb-link-color: rgb(var(--ueb-link-color-rgb)); - --ueb-from-input-coefficient: calc(2 * var(--ueb-from-input) - 1); /* when from-y > to-y */ - --ueb-y-reflected: clamp(0, var(--ueb-from-y) - var(--ueb-to-y) - 1, 1); display: block; margin-left: calc(var(--ueb-link-start) * -1px); min-width: calc(var(--ueb-link-min-width) * 1px); @@ -17,12 +15,11 @@ ueb-link { } ueb-link>svg { - --ueb-y-reflected-coefficient: calc(2 * var(--ueb-y-reflected) - 1); position: absolute; width: 100% !important; height: 100% !important; min-height: 1px !important; - transform: scaleY(calc(var(--ueb-y-reflected-coefficient) * var(--ueb-from-input-coefficient))); + transform: scaleX(var(--ueb-link-scale-x)) scaleY(var(--ueb-link-scale-y)); z-index: 1; } @@ -49,16 +46,12 @@ ueb-link[data-dragging="true"] .ueb-link-message { } .ueb-link-message { + --ueb-link-message-top: calc(50% * (var(--ueb-link-scale-y) + 1) + 22px); + --ueb-link-message-left: calc(100% - var(--ueb-start-percentage) + 15px); display: none; position: absolute; - top: calc(100% * (1 - var(--ueb-y-reflected)) + 22px); - left: calc( - /* If originates from an output pin, start with 100% */ - (1 - var(--ueb-from-input)) * 100% - /* If originates from an input pin, then sum, otherwise subtract */ - + (var(--ueb-from-input-coefficient)) * var(--ueb-start-percentage) - /* Fixed offset */ - + 15px); + top: var(--ueb-link-message-top); + left: var(--ueb-link-message-left); border: 1px solid #000; border-radius: 2px; background: linear-gradient(to bottom, #2a2a2a 0, #151515 50%, #2a2a2a 100%); @@ -67,6 +60,11 @@ ueb-link[data-dragging="true"] .ueb-link-message { z-index: 1000000; } +ueb-link[data-from-input="true"] .ueb-link-message { + --ueb-link-message-top: calc(-50% * (var(--ueb-link-scale-y) - 1) + 22px); + --ueb-link-message-left: calc(var(--ueb-start-percentage) + 15px); +} + .ueb-link-message-icon { display: inline-block; padding: 4px; diff --git a/scss/ueb-node.scss b/scss/ueb-node.scss old mode 100644 new mode 100755 diff --git a/scss/ueb-pin.scss b/scss/ueb-pin.scss old mode 100644 new mode 100755 index 9dee905..f40087d --- a/scss/ueb-pin.scss +++ b/scss/ueb-pin.scss @@ -164,6 +164,25 @@ ueb-node[data-type="/Script/BlueprintGraph.K2Node_VariableSet"] ueb-pin[data-dir } } +.ueb-pin-input[type="checkbox"] { + display: grid; + place-content: center; + appearance: none; + width: 18px; + height: 18px; + border: 1px solid #353535; + background: #0f0f0f; + + &:checked::before { + content: ""; + height: 0.7em; + width: 0.8em; + clip-path: polygon(14% 44%, 0 65%, 50% 100%, 100% 16%, 80% 0%, 43% 62%); + background: #0070e0; + } + +} + ueb-pin[data-linked="true"] .ueb-pin-input, ueb-pin[data-linked="true"] .ueb-pin-input-wrapper { display: none; diff --git a/scss/ueb-ui-controls.scss b/scss/ueb-ui-controls.scss old mode 100644 new mode 100755 diff --git a/scss/ueb-window.scss b/scss/ueb-window.scss old mode 100644 new mode 100755 diff --git a/tests/colorPicker.spec.js b/tests/colorPicker.spec.js old mode 100644 new mode 100755 diff --git a/tests/customEntities.spec.js b/tests/customEntities.spec.js old mode 100644 new mode 100755 diff --git a/tests/entities.spec.js b/tests/entities.spec.js old mode 100644 new mode 100755 index f590757..e4c928f --- a/tests/entities.spec.js +++ b/tests/entities.spec.js @@ -11,6 +11,7 @@ import GuidEntity from "../js/entity/GuidEntity.js" import IEntity from "../js/entity/IEntity.js" import Integer64Entity from "../js/entity/Integer64Entity.js" import IntegerEntity from "../js/entity/IntegerEntity.js" +import InvariantTextEntity from "../js/entity/InvariantTextEntity.js" import KeyBindingEntity from "../js/entity/KeyBindingEntity.js" import LinearColorEntity from "../js/entity/LinearColorEntity.js" import MirroredEntity from "../js/entity/MirroredEntity.js" @@ -469,7 +470,7 @@ test("Integer64Entity", () => { }) test("IntegerEntity", () => { - let grammar = IntegerEntity.grammar + const grammar = IntegerEntity.grammar let value = grammar.parse("0") expect(value).toBeInstanceOf(IntegerEntity) @@ -527,6 +528,19 @@ test("IntegerEntity", () => { expect(IntegerEntity.flagSerialized().grammar.parse("589").serialize()).toEqual(`"589"`) }) +test("InvariantTextEntity", () => { + const grammar = InvariantTextEntity.grammar + + let value = grammar.parse('INVTEXT("NiagaraWildcard")') + expect(value).toBeInstanceOf(InvariantTextEntity) + expect(value).toEqual(new InvariantTextEntity("NiagaraWildcard")) + expect(value.equals(new InvariantTextEntity("NiagaraWildcard"))).toBeTruthy() + expect(value.equals(new InvariantTextEntity("Unrelated"))).toBeFalsy() + expect(value.equals(new StringEntity("NiagaraWildcard"))).toBeFalsy() + expect(value.toString()).toEqual("NiagaraWildcard") + expect(value.serialize()).toEqual('INVTEXT("NiagaraWildcard")') +}) + test("KeyBindingEntity", () => { let grammar = KeyBindingEntity.grammar @@ -919,6 +933,13 @@ test("ObjectReferenceEntity", () => { "MetasoundEditorGraphVariable_1" )) expect(value.serialize()).toEqual(`"/Script/MetasoundEditor.MetasoundEditorGraphVariable'MetasoundEditorGraphVariable_1'"`) + value = grammar.parse('"/Script/Engine.Default__KismetMathLibrary"') + expect(value).toBeInstanceOf(ObjectReferenceEntity) + expect(value).toEqual(new ObjectReferenceEntity( + "/Script/Engine.Default__KismetMathLibrary", + "" + )) + expect(value.serialize()).toEqual('"/Script/Engine.Default__KismetMathLibrary"') }) test("PinEntity", () => { diff --git a/tests/fixtures/BlueprintFixture.js b/tests/fixtures/BlueprintFixture.js old mode 100644 new mode 100755 index 37cfc99..3ecdf84 --- a/tests/fixtures/BlueprintFixture.js +++ b/tests/fixtures/BlueprintFixture.js @@ -1,3 +1,4 @@ +import http from "http" import httpServer from "http-server" @@ -54,6 +55,21 @@ export default class BlueprintFixture { } } + async checkServerReady(url) { + return new Promise((resolve, reject) => { + const request = http.get(url, res => { + if (res.statusCode === 200) { + resolve() + } else { + reject(new Error(`Server not ready, status code: ${res.statusCode}`)) + } + }) + + request.on("error", error => reject(error)) + request.end() + }) + } + createServer() { return new Promise((resolve, reject) => { const webserver = httpServer.createServer({ @@ -69,23 +85,35 @@ export default class BlueprintFixture { resolve(null) } }) - webserver.listen(this.#port, "127.0.0.1", () => resolve(webserver)) + webserver.listen(this.#port, "127.0.0.1", async () => { + console.log(`Server started on http://127.0.0.1:${this.#port}`) + const url = `http://127.0.0.1:${this.#port}/empty.html` + try { + await this.checkServerReady(url) + BlueprintFixture.server = webserver + resolve(webserver) + } catch (error) { + console.error("Server failed readiness check:", error) + reject(error) + } + }) process.addListener("SIGTERM", () => { console.log("SIGTERM signal received: closing HTTP server") webserver.close() }) - BlueprintFixture.server = webserver }) } 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) + for (let i = 0; i < 1E4; ++i) { + try { + await this.page.goto(url, { waitUntil: "domcontentloaded" }) + break + } catch (e) { + if (e.message.includes("ERR_CONNECTION_REFUSED")) { + await this.createServer() + } } } this.#blueprintLocator = this.page.locator("ueb-blueprint") @@ -125,7 +153,7 @@ export default class BlueprintFixture { getSerializedNodes() { return this.blueprintLocator.evaluate(blueprint => { blueprint.selectAll() - return blueprint.template.getCopyInputObject().getSerializedText() + return blueprint.getSerializedText() }) } } diff --git a/tests/fixtures/test.js b/tests/fixtures/test.js old mode 100644 new mode 100755 index f4ea5bd..7383e11 --- a/tests/fixtures/test.js +++ b/tests/fixtures/test.js @@ -1,6 +1,26 @@ import base from "@playwright/test" +import Configuration from "../../js/Configuration.js" +import Utility from "../../js/Utility.js" import BlueprintFixture from "./BlueprintFixture.js" +/** + * @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[], blueprintPage: BlueprintFixture) => void, + * }} TestData + */ + export const test = /** @type {typeof base.extend<{}, { sharedContext: import("@playwright/test").BrowserContext, @@ -18,9 +38,181 @@ export const test = /** const blueprintPage = new BlueprintFixture(page) await blueprintPage.setup() await use(blueprintPage) + await blueprintPage.cleanup() + await page.close() }, { scope: "worker" }] } ) +test.setTimeout(10000) + export const expect = base.expect export * from "@playwright/test" + +/** @param {TestData} testData */ +export function testNode(testData) { + + test.beforeAll(async ({ blueprintPage }) => { + await blueprintPage.removeNodes() + await blueprintPage.paste(testData.value) + }) + + testData.title ??= testData.name + + if (testData.color) { + test( + `${testData.name}: Has correct color`, + async ({ blueprintPage }) => { + expect( + await blueprintPage.node.evaluate(node => node.entity.nodeColor().toString()) + ).toBe(testData.color.toString()) + } + ) + } + + test( + `${testData.name}: Has correct delegate`, + async ({ blueprintPage }) => { + const delegate = blueprintPage.blueprintLocator.locator( + 'ueb-node .ueb-node-top ueb-pin[data-type="delegate"]' + ) + if (testData.delegate) { + await expect(delegate).toBeVisible() + } else { + await expect(delegate).toBeHidden() + } + } + ) + + test( + `${testData.name}: Has title ${testData.title}`, + async ({ blueprintPage }) => expect( + await blueprintPage.node.evaluate(node => node.nodeDisplayName) + ).toBe(testData.title) + ) + + if (testData.subtitle) { + test( + `${testData.name}: Has expected subtitle ${testData.subtitle}`, + async ({ blueprintPage }) => await expect(blueprintPage.node.locator(".ueb-node-subtitle-text")) + .toHaveText(testData.subtitle, { useInnerText: true }) + ) + } else { + test( + `${testData.name}: Has no subtitle`, + async ({ blueprintPage }) => await expect(blueprintPage.node.locator(".ueb-node-subtitle-text")) + .toBeHidden() + ) + } + + if (testData.size) { + test( + `${testData.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(testData.size[0] - expectedSize[0])).toBeLessThanOrEqual(1.5) + expect(Math.abs(testData.size[1] - expectedSize[1])).toBeLessThanOrEqual(1.5) + if ( + Math.abs(testData.size[0] - expectedSize[0]) > 0.6 + || Math.abs(testData.size[1] - expectedSize[1]) > 0.6 + ) { + console.error(`Node "${testData.name}" size does not match`) + } + } + ) + } + + if (testData.icon) { + test( + `${testData.name}: Has the correct icon`, + async ({ blueprintPage }) => expect( + await blueprintPage.node.evaluate( + node => node.entity.nodeIcon()?.strings.join("") + ) + ).toBe(testData.icon?.strings.join("")) + ) + } else if (testData.icon === null) { + test( + `${testData.name}: Has no icon`, + async ({ blueprintPage }) => expect( + await blueprintPage.node.evaluate( + node => node.entity.nodeIcon() + ) + ).toBeNull() + ) + } + + if (testData.pins !== undefined) { + test( + `${testData.name}: Has ${testData.pins} pins`, + async ({ blueprintPage }) => expect( + await blueprintPage.node.evaluate( + node => node.querySelectorAll("ueb-pin").length + ) + ).toBe(testData.pins) + ) + } + + if (testData.pinNames) { + test( + `${testData.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(testData.pinNames) + } + ) + } + + test( + `${testData.name}: Expected development`, + async ({ blueprintPage }) => expect( + await blueprintPage.node.evaluate(node => node.entity.isDevelopmentOnly()) + ).toBe(testData.development) + ) + + test( + `${testData.name}: Maintains the order of attributes`, + async ({ blueprintPage }) => { + const actualSerialization = await blueprintPage.getSerializedNodes() + const expectedWords = testData.value + .split("\n") + .map(row => row.match(/\s*("?\w+(\s+\w+)*).+/)?.[1]) + .filter(v => v?.length > 0) + expect(actualSerialization).toMatch(Utility.getFirstWordOrder(expectedWords)) + } + ) + + if (testData.variadic) { + test( + `${testData.name}: Can add new pins`, + async ({ blueprintPage }) => { + const variadic = blueprintPage.node.getByText("Add pin") + await expect(variadic).toBeVisible() + await variadic.hover({ timeout: 10000 }) + await variadic.click({ timeout: 10000 }) + expect(await blueprintPage.node.locator("ueb-pin").all()).toHaveLength(testData.pins + 1) + await variadic.blur() + } + ) + } + + if (testData.additionalTest) { + test( + `${testData.name}: Additional tests`, + async ({ blueprintPage }) => + testData.additionalTest( + blueprintPage.node, + await blueprintPage.node.locator("ueb-pin").all(), + blueprintPage, + ) + ) + } +} diff --git a/tests/inputOutputKnots.spec.js b/tests/inputOutputKnots.spec.js new file mode 100644 index 0000000..5eda104 --- /dev/null +++ b/tests/inputOutputKnots.spec.js @@ -0,0 +1,84 @@ +import { expect, test } from "./fixtures/test.js" + +test.describe.configure({ mode: "parallel" }) + +test("Linked knots direction", async ({ blueprintPage }) => { + await blueprintPage.paste(String.raw` + Begin Object Class=/Script/BlueprintGraph.K2Node_CallFunction Name="K2Node_CallFunction_2" ExportPath="/Script/BlueprintGraph.K2Node_CallFunction'/Game/NewWorld.NewWorld:PersistentLevel.NewWorld.EventGraph.K2Node_CallFunction_2'" + FunctionReference=(MemberParent="/Script/CoreUObject.Class'/Script/Engine.KismetSystemLibrary'",MemberName="PrintString") + NodePosX=-688 + NodePosY=-480 + AdvancedPinDisplay=Hidden + EnabledState=DevelopmentOnly + NodeGuid=C799F457FC974BE39AB9DFDB06B147CC + CustomProperties Pin (PinId=50BB0275555A476DAB6E032CEC8DCB8D,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=3329E83DBF9142F1ADED050DE676AAC8,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,LinkedTo=(K2Node_Knot_1 A35C55E791824F0191083ADDC60B9254,),PersistentGuid=00000000000000000000000000000000,bHidden=False,bNotConnectable=False,bDefaultValueIsReadOnly=False,bDefaultValueIsIgnored=False,bAdvancedView=False,bOrphanedPin=False,) + CustomProperties Pin (PinId=2780BC41A1984038AD716F4B57D62AD4,PinName="self",PinFriendlyName=NSLOCTEXT("K2Node", "Target", "Target"),PinToolTip="Target\nKismet System Library Riferimento Oggetto",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=DCF3983679684A848212FC27B6423EEA,PinName="WorldContextObject",PinToolTip="World Context Object\nRiferimento Oggetto",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=21B1587740814579A3BC176A388DFB27,PinName="InString",PinToolTip="In String\nStringa\n\nLa stringa per il logout",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,DefaultValue="Hello",AutogeneratedDefaultValue="Hello",PersistentGuid=00000000000000000000000000000000,bHidden=False,bNotConnectable=False,bDefaultValueIsReadOnly=False,bDefaultValueIsIgnored=False,bAdvancedView=False,bOrphanedPin=False,) + CustomProperties Pin (PinId=7F32726B6E2D4568B4E0811500A4AB87,PinName="bPrintToScreen",PinToolTip="Print to Screen\nBooleano\n\nDetermina se stampare o meno l\'output sullo schermo",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=FC4CF2634AC04418B6CD018200F40DAD,PinName="bPrintToLog",PinToolTip="Print to Log\nBooleano\n\nDetermina se stampare o meno l\'output nel registro",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=BE821BA0834B482A90DF017A1734B56A,PinName="TextColor",PinToolTip="Text Color\nLinear Color Struttura\n\nIl colore del testo da visualizzare",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=0.660000,B=1.000000,A=1.000000)",AutogeneratedDefaultValue="(R=0.000000,G=0.660000,B=1.000000,A=1.000000)",PersistentGuid=00000000000000000000000000000000,bHidden=False,bNotConnectable=False,bDefaultValueIsReadOnly=False,bDefaultValueIsIgnored=False,bAdvancedView=True,bOrphanedPin=False,) + CustomProperties Pin (PinId=619EDE83100D4623862F2230152495A8,PinName="Duration",PinToolTip="Duration\nFloat (precisione singola)",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="2.000000",AutogeneratedDefaultValue="2.000000",PersistentGuid=00000000000000000000000000000000,bHidden=False,bNotConnectable=False,bDefaultValueIsReadOnly=False,bDefaultValueIsIgnored=False,bAdvancedView=True,bOrphanedPin=False,) + CustomProperties Pin (PinId=C1F3CDAE2AF6447D8590BD571379B513,PinName="Key",PinToolTip="Key\nNome",PinType.PinCategory="name",PinType.PinSubCategory="",PinType.PinSubCategoryObject=None,PinType.PinSubCategoryMemberReference=(),PinType.PinValueType=(),PinType.ContainerType=None,PinType.bIsReference=False,PinType.bIsConst=True,PinType.bIsWeakPointer=False,PinType.bIsUObjectWrapper=False,PinType.bSerializeAsSinglePrecisionFloat=False,DefaultValue="None",AutogeneratedDefaultValue="None",PersistentGuid=00000000000000000000000000000000,bHidden=False,bNotConnectable=False,bDefaultValueIsReadOnly=False,bDefaultValueIsIgnored=False,bAdvancedView=True,bOrphanedPin=False,) + End Object + Begin Object Class=/Script/BlueprintGraph.K2Node_Knot Name="K2Node_Knot_2" ExportPath="/Script/BlueprintGraph.K2Node_Knot'/Game/NewWorld.NewWorld:PersistentLevel.NewWorld.EventGraph.K2Node_Knot_2'" + NodePosX=-32 + NodePosY=-448 + NodeGuid=4142F276B8B742FFAF51B6CEDC0714E2 + CustomProperties Pin (PinId=0E00FF0E15AC4F62A0BB73ABC3790946,PinName="InputPin",PinType.PinCategory="exec",PinType.PinSubCategory="",PinType.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_3 0AE5CBEFA57A4D4E8264ED1DC9A6F0A7,),PersistentGuid=00000000000000000000000000000000,bHidden=False,bNotConnectable=False,bDefaultValueIsReadOnly=False,bDefaultValueIsIgnored=True,bAdvancedView=False,bOrphanedPin=False,) + CustomProperties Pin (PinId=E87E272E9A5A43E8AD2DBA1953C48B7A,PinName="OutputPin",Direction="EGPD_Output",PinType.PinCategory="exec",PinType.PinSubCategory="",PinType.PinSubCategoryObject=None,PinType.PinSubCategoryMemberReference=(),PinType.PinValueType=(),PinType.ContainerType=None,PinType.bIsReference=False,PinType.bIsConst=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 + Begin Object Class=/Script/BlueprintGraph.K2Node_Knot Name="K2Node_Knot_1" ExportPath="/Script/BlueprintGraph.K2Node_Knot'/Game/NewWorld.NewWorld:PersistentLevel.NewWorld.EventGraph.K2Node_Knot_1'" + NodePosX=-304 + NodePosY=-448 + NodeGuid=22B23583558A4BA9824A7A9133F0F4ED + CustomProperties Pin (PinId=A35C55E791824F0191083ADDC60B9254,PinName="InputPin",PinType.PinCategory="exec",PinType.PinSubCategory="",PinType.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_2 3329E83DBF9142F1ADED050DE676AAC8,K2Node_Knot_4 B323C11F77EF430CB3AE50CE0DD0AC33,),PersistentGuid=00000000000000000000000000000000,bHidden=False,bNotConnectable=False,bDefaultValueIsReadOnly=False,bDefaultValueIsIgnored=True,bAdvancedView=False,bOrphanedPin=False,) + CustomProperties Pin (PinId=689F0EA87F0B4B7484251AD1A30B191B,PinName="OutputPin",Direction="EGPD_Output",PinType.PinCategory="exec",PinType.PinSubCategory="",PinType.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_3 AA76283BC9FE4FD2A5B51BA15487E851,),PersistentGuid=00000000000000000000000000000000,bHidden=False,bNotConnectable=False,bDefaultValueIsReadOnly=False,bDefaultValueIsIgnored=False,bAdvancedView=False,bOrphanedPin=False,) + End Object + Begin Object Class=/Script/BlueprintGraph.K2Node_CallFunction Name="K2Node_CallFunction_1" ExportPath="/Script/BlueprintGraph.K2Node_CallFunction'/Game/NewWorld.NewWorld:PersistentLevel.NewWorld.EventGraph.K2Node_CallFunction_1'" + FunctionReference=(MemberParent="/Script/CoreUObject.Class'/Script/Engine.KismetSystemLibrary'",MemberName="PrintString") + NodePosX=-688 + NodePosY=-224 + AdvancedPinDisplay=Hidden + EnabledState=DevelopmentOnly + NodeGuid=AB1E1BA7A8794D20AB0D495D7241AE95 + CustomProperties Pin (PinId=50BB0275555A476DAB6E032CEC8DCB8D,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=3329E83DBF9142F1ADED050DE676AAC8,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,LinkedTo=(K2Node_Knot_4 3591D0F670F347A2A2C9A3CADE28DDB1,),PersistentGuid=00000000000000000000000000000000,bHidden=False,bNotConnectable=False,bDefaultValueIsReadOnly=False,bDefaultValueIsIgnored=False,bAdvancedView=False,bOrphanedPin=False,) + CustomProperties Pin (PinId=2780BC41A1984038AD716F4B57D62AD4,PinName="self",PinFriendlyName=NSLOCTEXT("K2Node", "Target", "Target"),PinToolTip="Target\nKismet System Library Riferimento Oggetto",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=DCF3983679684A848212FC27B6423EEA,PinName="WorldContextObject",PinToolTip="World Context Object\nRiferimento Oggetto",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=21B1587740814579A3BC176A388DFB27,PinName="InString",PinToolTip="In String\nStringa\n\nLa stringa per il logout",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,DefaultValue="Hello",AutogeneratedDefaultValue="Hello",PersistentGuid=00000000000000000000000000000000,bHidden=False,bNotConnectable=False,bDefaultValueIsReadOnly=False,bDefaultValueIsIgnored=False,bAdvancedView=False,bOrphanedPin=False,) + CustomProperties Pin (PinId=7F32726B6E2D4568B4E0811500A4AB87,PinName="bPrintToScreen",PinToolTip="Print to Screen\nBooleano\n\nDetermina se stampare o meno l\'output sullo schermo",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=FC4CF2634AC04418B6CD018200F40DAD,PinName="bPrintToLog",PinToolTip="Print to Log\nBooleano\n\nDetermina se stampare o meno l\'output nel registro",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=BE821BA0834B482A90DF017A1734B56A,PinName="TextColor",PinToolTip="Text Color\nLinear Color Struttura\n\nIl colore del testo da visualizzare",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=0.660000,B=1.000000,A=1.000000)",AutogeneratedDefaultValue="(R=0.000000,G=0.660000,B=1.000000,A=1.000000)",PersistentGuid=00000000000000000000000000000000,bHidden=False,bNotConnectable=False,bDefaultValueIsReadOnly=False,bDefaultValueIsIgnored=False,bAdvancedView=True,bOrphanedPin=False,) + CustomProperties Pin (PinId=619EDE83100D4623862F2230152495A8,PinName="Duration",PinToolTip="Duration\nFloat (precisione singola)",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="2.000000",AutogeneratedDefaultValue="2.000000",PersistentGuid=00000000000000000000000000000000,bHidden=False,bNotConnectable=False,bDefaultValueIsReadOnly=False,bDefaultValueIsIgnored=False,bAdvancedView=True,bOrphanedPin=False,) + CustomProperties Pin (PinId=C1F3CDAE2AF6447D8590BD571379B513,PinName="Key",PinToolTip="Key\nNome",PinType.PinCategory="name",PinType.PinSubCategory="",PinType.PinSubCategoryObject=None,PinType.PinSubCategoryMemberReference=(),PinType.PinValueType=(),PinType.ContainerType=None,PinType.bIsReference=False,PinType.bIsConst=True,PinType.bIsWeakPointer=False,PinType.bIsUObjectWrapper=False,PinType.bSerializeAsSinglePrecisionFloat=False,DefaultValue="None",AutogeneratedDefaultValue="None",PersistentGuid=00000000000000000000000000000000,bHidden=False,bNotConnectable=False,bDefaultValueIsReadOnly=False,bDefaultValueIsIgnored=False,bAdvancedView=True,bOrphanedPin=False,) + End Object + Begin Object Class=/Script/BlueprintGraph.K2Node_Knot Name="K2Node_Knot_3" ExportPath="/Script/BlueprintGraph.K2Node_Knot'/Game/NewWorld.NewWorld:PersistentLevel.NewWorld.EventGraph.K2Node_Knot_3'" + NodePosX=-192 + NodePosY=-448 + NodeGuid=8ACF9A163F4B43CFB78DDC8F71B35EF0 + CustomProperties Pin (PinId=AA76283BC9FE4FD2A5B51BA15487E851,PinName="InputPin",PinType.PinCategory="exec",PinType.PinSubCategory="",PinType.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_1 689F0EA87F0B4B7484251AD1A30B191B,),PersistentGuid=00000000000000000000000000000000,bHidden=False,bNotConnectable=False,bDefaultValueIsReadOnly=False,bDefaultValueIsIgnored=True,bAdvancedView=False,bOrphanedPin=False,) + CustomProperties Pin (PinId=0AE5CBEFA57A4D4E8264ED1DC9A6F0A7,PinName="OutputPin",Direction="EGPD_Output",PinType.PinCategory="exec",PinType.PinSubCategory="",PinType.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_2 0E00FF0E15AC4F62A0BB73ABC3790946,),PersistentGuid=00000000000000000000000000000000,bHidden=False,bNotConnectable=False,bDefaultValueIsReadOnly=False,bDefaultValueIsIgnored=False,bAdvancedView=False,bOrphanedPin=False,) + End Object + Begin Object Class=/Script/BlueprintGraph.K2Node_Knot Name="K2Node_Knot_4" ExportPath="/Script/BlueprintGraph.K2Node_Knot'/Game/NewWorld.NewWorld:PersistentLevel.NewWorld.EventGraph.K2Node_Knot_4'" + NodePosX=-432 + NodePosY=-336 + NodeGuid=A6DAC4D17B254618A2251D0707836CC8 + CustomProperties Pin (PinId=3591D0F670F347A2A2C9A3CADE28DDB1,PinName="InputPin",PinType.PinCategory="exec",PinType.PinSubCategory="",PinType.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_1 3329E83DBF9142F1ADED050DE676AAC8,),PersistentGuid=00000000000000000000000000000000,bHidden=False,bNotConnectable=False,bDefaultValueIsReadOnly=False,bDefaultValueIsIgnored=True,bAdvancedView=False,bOrphanedPin=False,) + CustomProperties Pin (PinId=B323C11F77EF430CB3AE50CE0DD0AC33,PinName="OutputPin",Direction="EGPD_Output",PinType.PinCategory="exec",PinType.PinSubCategory="",PinType.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_1 A35C55E791824F0191083ADDC60B9254,),PersistentGuid=00000000000000000000000000000000,bHidden=False,bNotConnectable=False,bDefaultValueIsReadOnly=False,bDefaultValueIsIgnored=False,bAdvancedView=False,bOrphanedPin=False,) + End Object + `) + /** @type {Locator} */ + let pinLocator = blueprintPage.blueprintLocator.locator("ueb-node").nth(2).locator("ueb-pin").nth(0) + expect(await pinLocator.evaluate(pin => pin.isInput())).toStrictEqual(true) + expect(await pinLocator.evaluate(pin => pin.isInput(true))).toBeUndefined() + expect(await pinLocator.evaluate(pin => pin.isOutput())).toStrictEqual(false) + expect(await pinLocator.evaluate(pin => pin.isOutput(true))).toBeUndefined() + + pinLocator = blueprintPage.blueprintLocator.locator("ueb-node").nth(2).locator("ueb-pin").nth(1) + expect(await pinLocator.evaluate(pin => pin.isInput())).toStrictEqual(false) + expect(await pinLocator.evaluate(pin => pin.isInput(true))).toStrictEqual(false) + expect(await pinLocator.evaluate(pin => pin.isOutput())).toStrictEqual(true) + expect(await pinLocator.evaluate(pin => pin.isOutput(true))).toStrictEqual(true) +}) diff --git a/tests/issue18.spec.js b/tests/issue18.spec.js new file mode 100755 index 0000000..a0105a5 --- /dev/null +++ b/tests/issue18.spec.js @@ -0,0 +1,93 @@ +import Configuration from "../js/Configuration.js" +import Utility from "../js/Utility.js" +import { expect, testNode } from "./fixtures/test.js" + +testNode({ + name: "Issue 18", + title: "Mask ( R )", + value: String.raw` + Begin Object Class=/Script/UnrealEd.MaterialGraphNode Name="MaterialGraphNode_37" ExportPath="/Script/UnrealEd.MaterialGraphNode'/Engine/Transient.NewMaterial:MaterialGraph_0.MaterialGraphNode_37'" + Begin Object Class=/Script/Engine.MaterialExpressionComponentMask Name="MaterialExpressionComponentMask_0" ExportPath="/Script/Engine.MaterialExpressionComponentMask'/Engine/Transient.NewMaterial:MaterialGraph_0.MaterialGraphNode_37.MaterialExpressionComponentMask_0'" + End Object + Begin Object Name="MaterialExpressionComponentMask_0" ExportPath="/Script/Engine.MaterialExpressionComponentMask'/Engine/Transient.NewMaterial:MaterialGraph_0.MaterialGraphNode_37.MaterialExpressionComponentMask_0'" + R=True + MaterialExpressionEditorX=-544 + MaterialExpressionEditorY=32 + MaterialExpressionGuid=8EFA535CAE3A4DAF9DAE27B200E06EDC + Material="/Script/UnrealEd.PreviewMaterial'/Engine/Transient.NewMaterial'" + End Object + MaterialExpression="/Script/Engine.MaterialExpressionComponentMask'MaterialExpressionComponentMask_0'" + NodePosX=-544 + NodePosY=32 + AdvancedPinDisplay=Shown + NodeGuid=54A40610EEC646A0954F310727D1B888 + CustomProperties Pin (PinId=DC3859AB4C8C12645EEA1AA4E500A637,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=D5C8F4DF4AFE5EEB605ED382CD5744DE,PinName="R",PinType.PinCategory="optional",PinType.PinSubCategory="bool",PinType.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=True,bDefaultValueIsReadOnly=False,bDefaultValueIsIgnored=False,bAdvancedView=True,bOrphanedPin=False,) + CustomProperties Pin (PinId=7E43455B4D2232C4E99BB098631CAFCE,PinName="G",PinType.PinCategory="optional",PinType.PinSubCategory="bool",PinType.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",PersistentGuid=00000000000000000000000000000000,bHidden=False,bNotConnectable=True,bDefaultValueIsReadOnly=False,bDefaultValueIsIgnored=False,bAdvancedView=True,bOrphanedPin=False,) + CustomProperties Pin (PinId=46CEC6754365CB39F9FC39944B40D5C6,PinName="B",PinType.PinCategory="optional",PinType.PinSubCategory="bool",PinType.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",PersistentGuid=00000000000000000000000000000000,bHidden=False,bNotConnectable=True,bDefaultValueIsReadOnly=False,bDefaultValueIsIgnored=False,bAdvancedView=True,bOrphanedPin=False,) + CustomProperties Pin (PinId=F658E76C400B0AF242DFE292C92702C8,PinName="A",PinType.PinCategory="optional",PinType.PinSubCategory="bool",PinType.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",PersistentGuid=00000000000000000000000000000000,bHidden=False,bNotConnectable=True,bDefaultValueIsReadOnly=False,bDefaultValueIsIgnored=False,bAdvancedView=True,bOrphanedPin=False,) + CustomProperties Pin (PinId=2EC8C8234D570AB2A03DB59A1FF65987,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 + `, + size: [7, 14.5], + color: Configuration.nodeColors.green, + icon: null, + pins: 6, + pinNames: Configuration.rgba, + delegate: false, + development: false, + additionalTest: async (node, pins, blueprintPage) => { + const relevantPins = [] + for (const pin of pins) { + const innerText = await pin.innerText() + if (Configuration.rgba.includes(innerText)) { + relevantPins.push(pin) + } + } + for (const pin of relevantPins) { + const pinName = await pin.innerText() + // Only pin R is checked + await expect(pin.locator('input[type="checkbox"]')).toBeChecked({ checked: pinName === "R" }) + } + await relevantPins[0].locator('input[type="checkbox"]').uncheck() // Uncheck "R" + await relevantPins[2].locator('input[type="checkbox"]').check() // Check "B" + await relevantPins[3].locator('input[type="checkbox"]').check() // Check "A" + await relevantPins[2].locator('input[type="checkbox"]').uncheck() // Uncheck "B" + await relevantPins[2].locator('input[type="checkbox"]').check() // Check "B" + await expect(node.locator(".ueb-node-name")).toHaveText("Mask ( B A )") + const resultSerialization = await blueprintPage.blueprintLocator.evaluate(blueprint => { + blueprint.selectAll() + return blueprint.getSerializedText() + }) + const expectedSerialization = String.raw` + Begin Object Class=/Script/UnrealEd.MaterialGraphNode Name="MaterialGraphNode_37" ExportPath="/Script/UnrealEd.MaterialGraphNode'/Engine/Transient.NewMaterial:MaterialGraph_0.MaterialGraphNode_37'" + Begin Object Class=/Script/Engine.MaterialExpressionComponentMask Name="MaterialExpressionComponentMask_0" ExportPath="/Script/Engine.MaterialExpressionComponentMask'/Engine/Transient.NewMaterial:MaterialGraph_0.MaterialGraphNode_37.MaterialExpressionComponentMask_0'" + End Object + Begin Object Name="MaterialExpressionComponentMask_0" ExportPath="/Script/Engine.MaterialExpressionComponentMask'/Engine/Transient.NewMaterial:MaterialGraph_0.MaterialGraphNode_37.MaterialExpressionComponentMask_0'" + B=True + A=True + MaterialExpressionEditorX=-544 + MaterialExpressionEditorY=32 + MaterialExpressionGuid=8EFA535CAE3A4DAF9DAE27B200E06EDC + Material="/Script/UnrealEd.PreviewMaterial'/Engine/Transient.NewMaterial'" + End Object + MaterialExpression="/Script/Engine.MaterialExpressionComponentMask'MaterialExpressionComponentMask_0'" + NodePosX=-544 + NodePosY=32 + AdvancedPinDisplay=Shown + NodeGuid=54A40610EEC646A0954F310727D1B888 + CustomProperties Pin (PinId=DC3859AB4C8C12645EEA1AA4E500A637,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=D5C8F4DF4AFE5EEB605ED382CD5744DE,PinName="R",PinType.PinCategory="optional",PinType.PinSubCategory="bool",PinType.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",PersistentGuid=00000000000000000000000000000000,bHidden=False,bNotConnectable=True,bDefaultValueIsReadOnly=False,bDefaultValueIsIgnored=False,bAdvancedView=True,bOrphanedPin=False,) + CustomProperties Pin (PinId=7E43455B4D2232C4E99BB098631CAFCE,PinName="G",PinType.PinCategory="optional",PinType.PinSubCategory="bool",PinType.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",PersistentGuid=00000000000000000000000000000000,bHidden=False,bNotConnectable=True,bDefaultValueIsReadOnly=False,bDefaultValueIsIgnored=False,bAdvancedView=True,bOrphanedPin=False,) + CustomProperties Pin (PinId=46CEC6754365CB39F9FC39944B40D5C6,PinName="B",PinType.PinCategory="optional",PinType.PinSubCategory="bool",PinType.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=True,bDefaultValueIsReadOnly=False,bDefaultValueIsIgnored=False,bAdvancedView=True,bOrphanedPin=False,) + CustomProperties Pin (PinId=F658E76C400B0AF242DFE292C92702C8,PinName="A",PinType.PinCategory="optional",PinType.PinSubCategory="bool",PinType.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=True,bDefaultValueIsReadOnly=False,bDefaultValueIsIgnored=False,bAdvancedView=True,bOrphanedPin=False,) + CustomProperties Pin (PinId=2EC8C8234D570AB2A03DB59A1FF65987,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 + ` + const words = expectedSerialization + .split("\n") + .map(row => row.match(/\s*("?\w+(\s+\w+)*).+/)?.[1]) + .filter(v => v?.length > 0) + expect(resultSerialization).toMatch(Utility.getFirstWordOrder(words)) + } +}) diff --git a/tests/issue21.spec.js b/tests/issue21.spec.js new file mode 100755 index 0000000..ed680b3 --- /dev/null +++ b/tests/issue21.spec.js @@ -0,0 +1,46 @@ +import Configuration from "../js/Configuration.js" +import { expect, testNode } from "./fixtures/test.js" + +testNode({ + name: "Issue 21", + title: "Subtract(1,1)", + value: String.raw` + Begin Object Class=/Script/UnrealEd.MaterialGraphNode Name="MaterialGraphNode_202" ExportPath=/Script/UnrealEd.MaterialGraphNode'/Engine/Transient.卡通:MaterialGraph_0.MaterialGraphNode_202' + Begin Object Class=/Script/Engine.MaterialExpressionSubtract Name="MaterialExpressionSubtract_10" ExportPath=/Script/Engine.MaterialExpressionSubtract'/Engine/Transient.卡通:MaterialGraph_0.MaterialGraphNode_202.MaterialExpressionSubtract_10' + End Object + Begin Object Name="MaterialExpressionSubtract_10" ExportPath=/Script/Engine.MaterialExpressionSubtract'/Engine/Transient.卡通:MaterialGraph_0.MaterialGraphNode_202.MaterialExpressionSubtract_10' + A=(Expression="/Script/Engine.MaterialExpressionSaturate'MaterialGraphNode_237.MaterialExpressionSaturate_3'") + B=(Expression="/Script/Engine.MaterialExpressionSaturate'MaterialGraphNode_201.MaterialExpressionSaturate_7'") + MaterialExpressionEditorX=0 + MaterialExpressionEditorY=0 + MaterialExpressionGuid=7202C13642DA1225C118CF867599387C + Material="/Script/UnrealEd.PreviewMaterial'/Engine/Transient.卡通'" + End Object + MaterialExpression=/Script/Engine.MaterialExpressionSubtract'MaterialExpressionSubtract_10' + NodePosX=0 + NodePosY=0 + NodeGuid=7008F5AC49E8F5BFD4C707819A58C021 + CustomProperties Pin (PinId=86D4DE5E48C71A576ED0519B982907B3,PinName="A",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="1",LinkedTo=(),PersistentGuid=00000000000000000000000000000000,bHidden=False,bNotConnectable=False,bDefaultValueIsReadOnly=False,bDefaultValueIsIgnored=False,bAdvancedView=False,bOrphanedPin=False,) + CustomProperties Pin (PinId=5C75E1374E1E7436C72B9FA072875C04,PinName="B",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="1",LinkedTo=(),PersistentGuid=00000000000000000000000000000000,bHidden=False,bNotConnectable=False,bDefaultValueIsReadOnly=False,bDefaultValueIsIgnored=False,bAdvancedView=False,bOrphanedPin=False,) + CustomProperties Pin (PinId=528D346A49976B0854764CA755AF2F93,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,LinkedTo=(),PersistentGuid=00000000000000000000000000000000,bHidden=False,bNotConnectable=False,bDefaultValueIsReadOnly=False,bDefaultValueIsIgnored=False,bAdvancedView=False,bOrphanedPin=False,) + End Object + `, + size: [8, 6], + color: Configuration.nodeColors.green, + icon: null, + pins: 3, + pinNames: ["A", "B"], + delegate: false, + development: false, + additionalTest: async (node, pins, blueprintPage) => { + await expect(pins[0].locator("ueb-input")).toHaveText("1.0") + await expect(pins[1].locator("ueb-input")).toHaveText("1.0") + let inputs = await node.locator("ueb-input").all() + await inputs[0].fill("-8") + await blueprintPage.blur() + expect(await node.evaluate(n => n.nodeDisplayName)).toEqual("Subtract(-8,1)") + await inputs[1].fill("9.2") + await blueprintPage.blur() + expect(await node.evaluate(n => n.nodeDisplayName)).toEqual("Subtract(-8,9.2)") + } +}) diff --git a/tests/issues.spec.js b/tests/issue27.spec.js old mode 100644 new mode 100755 similarity index 96% rename from tests/issues.spec.js rename to tests/issue27.spec.js index e1ab2b3..de12bee --- a/tests/issues.spec.js +++ b/tests/issue27.spec.js @@ -1,10 +1,5 @@ import { expect, test } from "./fixtures/test.js" - -test.beforeEach(async ({ blueprintPage }) => { - await blueprintPage.removeNodes() -}) - test("Issue 27", async ({ blueprintPage }) => { await blueprintPage.paste(String.raw` Begin Object Class=/Script/BlueprintGraph.K2Node_CustomEvent Name="K2Node_CustomEvent_0" ExportPath="/Script/BlueprintGraph.K2Node_CustomEvent'/Game/Examples/BallShooter/Blueprints/BallShooterEnvironment.BallShooterEnvironment:EventGraph.K2Node_CustomEvent_0'" @@ -38,9 +33,9 @@ test("Issue 27", async ({ blueprintPage }) => { CustomProperties Pin (PinId=424DC49B456B27D825A8F690E6CAA096,PinName="OutputPin",Direction="EGPD_Output",PinType.PinCategory="delegate",PinType.PinSubCategory="",PinType.PinSubCategoryObject=None,PinType.PinSubCategoryMemberReference=(MemberParent="/Script/Engine.BlueprintGeneratedClass'/Game/Examples/BallShooter/Blueprints/BallShooterEnvironment.BallShooterEnvironment_C'",MemberName="CustomEvent",MemberGuid=8955D806490FF62840F229BD64AC0F8B),PinType.PinValueType=(),PinType.ContainerType=None,PinType.bIsReference=False,PinType.bIsConst=False,PinType.bIsWeakPointer=False,PinType.bIsUObjectWrapper=False,PinType.bSerializeAsSinglePrecisionFloat=False,LinkedTo=(K2Node_AssignDelegate_0 3C0089524CDDA9E63853BEA28156FACD,),PersistentGuid=00000000000000000000000000000000,bHidden=False,bNotConnectable=False,bDefaultValueIsReadOnly=False,bDefaultValueIsIgnored=False,bAdvancedView=False,bOrphanedPin=False,) End Object `) - const eventNode = await blueprintPage.blueprintLocator.locator("ueb-node").nth(0) - const knotNode = await blueprintPage.blueprintLocator.locator("ueb-node").nth(2) - const assignNode = await blueprintPage.blueprintLocator.locator("ueb-node").nth(1) + const eventNode = blueprintPage.blueprintLocator.locator("ueb-node").nth(0) + const knotNode = blueprintPage.blueprintLocator.locator("ueb-node").nth(2) + const assignNode = blueprintPage.blueprintLocator.locator("ueb-node").nth(1) const pin1 = eventNode.locator("ueb-pin").nth(0) const pin2A = knotNode.locator("ueb-pin").nth(0) const pin2B = knotNode.locator("ueb-pin").nth(1) @@ -49,5 +44,5 @@ test("Issue 27", async ({ blueprintPage }) => { expect(await pin2A.evaluate(/** @param {PinElement} pin */ pin => pin.isLinked)).toBeTruthy() expect(await pin2B.evaluate(/** @param {PinElement} pin */ pin => pin.isLinked)).toBeTruthy() expect(await pin3.evaluate(/** @param {PinElement} pin */ pin => pin.isLinked)).toBeTruthy() - expect(await blueprintPage.blueprintLocator.locator("ueb-link")).toHaveCount(2) + await expect(blueprintPage.blueprintLocator.locator("ueb-link")).toHaveCount(2) }) diff --git a/tests/issue30.spec.js b/tests/issue30.spec.js new file mode 100755 index 0000000..8cd413c --- /dev/null +++ b/tests/issue30.spec.js @@ -0,0 +1,77 @@ +import { expect, test } from "./fixtures/test.js" + +test("Issue 30", async ({ blueprintPage }) => { + await blueprintPage.paste(String.raw` + Begin Object Class=/Script/BlueprintGraph.K2Node_CallFunction Name="K2Node_CallFunction_0" ExportPath="/Script/BlueprintGraph.K2Node_CallFunction'/Game/Examples/Tag/Blueprints/DirectionDistanceObserver.DirectionDistanceObserver:GetObservationSpace.K2Node_CallFunction_0'" + FunctionReference=(MemberParent="/Script/CoreUObject.Class'/Script/Engine.KismetSystemLibrary'",MemberName="PrintString") + NodePosX=-80 + NodePosY=432 + AdvancedPinDisplay=Hidden + EnabledState=DevelopmentOnly + NodeGuid=9A00337641B5EA70E4FFE18C1C414F32 + CustomProperties Pin (PinId=027475B440412F3ED9BA1E83CAC84E24,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=6F39E27148B1DA550F87698348335460,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,LinkedTo=(K2Node_Knot_5 47E4D9AF4CD414564F484A96E876E80B,),PersistentGuid=00000000000000000000000000000000,bHidden=False,bNotConnectable=False,bDefaultValueIsReadOnly=False,bDefaultValueIsIgnored=False,bAdvancedView=False,bOrphanedPin=False,) + CustomProperties Pin (PinId=EBCBA976448F8FF2C37253BE195D82E3,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=2C16481F475AD64490F9329556C21413,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=False,bNotConnectable=False,bDefaultValueIsReadOnly=False,bDefaultValueIsIgnored=False,bAdvancedView=False,bOrphanedPin=False,) + CustomProperties Pin (PinId=F0BAB035430EAEF7A48A43828AEB3E2D,PinName="InString",PinToolTip="In String\nString\n\nThe string to log out",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,DefaultValue="Hello",AutogeneratedDefaultValue="Hello",PersistentGuid=00000000000000000000000000000000,bHidden=False,bNotConnectable=False,bDefaultValueIsReadOnly=False,bDefaultValueIsIgnored=False,bAdvancedView=False,bOrphanedPin=False,) + CustomProperties Pin (PinId=E5E4988B4D6A9664835EB19D003E37CA,PinName="bPrintToScreen",PinToolTip="Print to Screen\nBoolean\n\nWhether or not to print the output to the screen",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=8E634AAA4701C20D0EE82E9A72A5F071,PinName="bPrintToLog",PinToolTip="Print to Log\nBoolean\n\nWhether or not to print the output to the log",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=A860B2DA4DBF4545E236CFB0E0A8C8D5,PinName="TextColor",PinToolTip="Text Color\nLinear Color Structure\n\nThe color of the text to display",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=0.660000,B=1.000000,A=1.000000)",AutogeneratedDefaultValue="(R=0.000000,G=0.660000,B=1.000000,A=1.000000)",PersistentGuid=00000000000000000000000000000000,bHidden=False,bNotConnectable=False,bDefaultValueIsReadOnly=False,bDefaultValueIsIgnored=False,bAdvancedView=True,bOrphanedPin=False,) + CustomProperties Pin (PinId=5CF65F3345D9DAF678A27EACC77F4BF5,PinName="Duration",PinToolTip="Duration\nFloat (single-precision)\n\nThe display duration (if Print to Screen is True). Using negative number will result in loading the duration time from the config.",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="2.000000",AutogeneratedDefaultValue="2.000000",PersistentGuid=00000000000000000000000000000000,bHidden=False,bNotConnectable=False,bDefaultValueIsReadOnly=False,bDefaultValueIsIgnored=False,bAdvancedView=True,bOrphanedPin=False,) + CustomProperties Pin (PinId=F8B700114CF895EB52E8B4982E27B65C,PinName="Key",PinToolTip="Key\nName\n\nIf a non-empty key is provided, the message will replace any existing on-screen messages with the same key.",PinType.PinCategory="name",PinType.PinSubCategory="",PinType.PinSubCategoryObject=None,PinType.PinSubCategoryMemberReference=(),PinType.PinValueType=(),PinType.ContainerType=None,PinType.bIsReference=False,PinType.bIsConst=True,PinType.bIsWeakPointer=False,PinType.bIsUObjectWrapper=False,PinType.bSerializeAsSinglePrecisionFloat=False,DefaultValue="None",AutogeneratedDefaultValue="None",PersistentGuid=00000000000000000000000000000000,bHidden=False,bNotConnectable=False,bDefaultValueIsReadOnly=False,bDefaultValueIsIgnored=False,bAdvancedView=True,bOrphanedPin=False,) + End Object + Begin Object Class=/Script/BlueprintGraph.K2Node_CallFunction Name="K2Node_CallFunction_1" ExportPath="/Script/BlueprintGraph.K2Node_CallFunction'/Game/Examples/Tag/Blueprints/DirectionDistanceObserver.DirectionDistanceObserver:GetObservationSpace.K2Node_CallFunction_1'" + FunctionReference=(MemberParent="/Script/CoreUObject.Class'/Script/Engine.KismetSystemLibrary'",MemberName="PrintString") + NodePosX=-80 + NodePosY=704 + AdvancedPinDisplay=Hidden + EnabledState=DevelopmentOnly + NodeGuid=61813BD748DC08CE06DF61ACEDEEE7FD + CustomProperties Pin (PinId=1CE2683A40DD5093C0C60D83B16C279B,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_Knot_6 CD2263A441CA4DB45102D398CF8E35E2,),PersistentGuid=00000000000000000000000000000000,bHidden=False,bNotConnectable=False,bDefaultValueIsReadOnly=False,bDefaultValueIsIgnored=False,bAdvancedView=False,bOrphanedPin=False,) + CustomProperties Pin (PinId=EC3D9FD140EFE18A5B83468AD0276CB3,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,LinkedTo=(K2Node_FunctionResult_1 373D59B7461DB2BD153114A9017706CD,),PersistentGuid=00000000000000000000000000000000,bHidden=False,bNotConnectable=False,bDefaultValueIsReadOnly=False,bDefaultValueIsIgnored=False,bAdvancedView=False,bOrphanedPin=False,) + CustomProperties Pin (PinId=2F02C21347711064246408A63D92C6F7,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=AD1E058B433611FD73ADB5AAC442B8DC,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=False,bNotConnectable=False,bDefaultValueIsReadOnly=False,bDefaultValueIsIgnored=False,bAdvancedView=False,bOrphanedPin=False,) + CustomProperties Pin (PinId=E3B9CCB74D46795E3F76909A3EEE3F8A,PinName="InString",PinToolTip="In String\nString\n\nThe string to log out",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,DefaultValue="Hello",AutogeneratedDefaultValue="Hello",PersistentGuid=00000000000000000000000000000000,bHidden=False,bNotConnectable=False,bDefaultValueIsReadOnly=False,bDefaultValueIsIgnored=False,bAdvancedView=False,bOrphanedPin=False,) + CustomProperties Pin (PinId=8CBDC21E4341197389703D97DB9AE47A,PinName="bPrintToScreen",PinToolTip="Print to Screen\nBoolean\n\nWhether or not to print the output to the screen",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=8552348840FCE798A65C35B3B601A8F5,PinName="bPrintToLog",PinToolTip="Print to Log\nBoolean\n\nWhether or not to print the output to the log",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=46156236498D3CEFD7B0199EC535EC64,PinName="TextColor",PinToolTip="Text Color\nLinear Color Structure\n\nThe color of the text to display",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=0.660000,B=1.000000,A=1.000000)",AutogeneratedDefaultValue="(R=0.000000,G=0.660000,B=1.000000,A=1.000000)",PersistentGuid=00000000000000000000000000000000,bHidden=False,bNotConnectable=False,bDefaultValueIsReadOnly=False,bDefaultValueIsIgnored=False,bAdvancedView=True,bOrphanedPin=False,) + CustomProperties Pin (PinId=3FFC0B5B4C9E8F775FF67880828C8933,PinName="Duration",PinToolTip="Duration\nFloat (single-precision)\n\nThe display duration (if Print to Screen is True). Using negative number will result in loading the duration time from the config.",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="2.000000",AutogeneratedDefaultValue="2.000000",PersistentGuid=00000000000000000000000000000000,bHidden=False,bNotConnectable=False,bDefaultValueIsReadOnly=False,bDefaultValueIsIgnored=False,bAdvancedView=True,bOrphanedPin=False,) + CustomProperties Pin (PinId=2FC1E9D4457421EF3D9B09A68C21FF6C,PinName="Key",PinToolTip="Key\nName\n\nIf a non-empty key is provided, the message will replace any existing on-screen messages with the same key.",PinType.PinCategory="name",PinType.PinSubCategory="",PinType.PinSubCategoryObject=None,PinType.PinSubCategoryMemberReference=(),PinType.PinValueType=(),PinType.ContainerType=None,PinType.bIsReference=False,PinType.bIsConst=True,PinType.bIsWeakPointer=False,PinType.bIsUObjectWrapper=False,PinType.bSerializeAsSinglePrecisionFloat=False,DefaultValue="None",AutogeneratedDefaultValue="None",PersistentGuid=00000000000000000000000000000000,bHidden=False,bNotConnectable=False,bDefaultValueIsReadOnly=False,bDefaultValueIsIgnored=False,bAdvancedView=True,bOrphanedPin=False,) + End Object + Begin Object Class=/Script/BlueprintGraph.K2Node_FunctionResult Name="K2Node_FunctionResult_1" ExportPath="/Script/BlueprintGraph.K2Node_FunctionResult'/Game/Examples/Tag/Blueprints/DirectionDistanceObserver.DirectionDistanceObserver:GetObservationSpace.K2Node_FunctionResult_1'" + FunctionReference=(MemberParent="/Script/CoreUObject.Class'/Script/Schola.BlueprintBoxObserver'",MemberName="GetObservationSpace") + NodePosX=320 + NodePosY=640 + NodeGuid=05D14D3E43A0FB954FE600B0911EB455 + CustomProperties Pin (PinId=373D59B7461DB2BD153114A9017706CD,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_CallFunction_1 EC3D9FD140EFE18A5B83468AD0276CB3,),PersistentGuid=00000000000000000000000000000000,bHidden=False,bNotConnectable=False,bDefaultValueIsReadOnly=False,bDefaultValueIsIgnored=False,bAdvancedView=False,bOrphanedPin=False,) + CustomProperties Pin (PinId=DCF180B6411FB3C5474BFB9A3FDC548C,PinName="ReturnValue",PinToolTip="Return Value\nBox Space Structure\n\nGet Observation Space",PinType.PinCategory="struct",PinType.PinSubCategory="",PinType.PinSubCategoryObject="/Script/CoreUObject.ScriptStruct'/Script/Schola.BoxSpace'",PinType.PinSubCategoryMemberReference=(),PinType.PinValueType=(),PinType.ContainerType=None,PinType.bIsReference=False,PinType.bIsConst=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 + Begin Object Class=/Script/BlueprintGraph.K2Node_Knot Name="K2Node_Knot_5" ExportPath="/Script/BlueprintGraph.K2Node_Knot'/Game/Examples/Tag/Blueprints/DirectionDistanceObserver.DirectionDistanceObserver:GetObservationSpace.K2Node_Knot_5'" + NodePosX=80 + NodePosY=640 + NodeGuid=E8BC1D254BC44CC5E7076388BC697D41 + CustomProperties Pin (PinId=47E4D9AF4CD414564F484A96E876E80B,PinName="InputPin",PinType.PinCategory="exec",PinType.PinSubCategory="",PinType.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_0 6F39E27148B1DA550F87698348335460,),PersistentGuid=00000000000000000000000000000000,bHidden=False,bNotConnectable=False,bDefaultValueIsReadOnly=False,bDefaultValueIsIgnored=True,bAdvancedView=False,bOrphanedPin=False,) + CustomProperties Pin (PinId=009095D54E2C15EBBB57DC9098EC7D8B,PinName="OutputPin",Direction="EGPD_Output",PinType.PinCategory="exec",PinType.PinSubCategory="",PinType.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_6 181E50FF4676A93FC497E0BF4873BCC2,),PersistentGuid=00000000000000000000000000000000,bHidden=False,bNotConnectable=False,bDefaultValueIsReadOnly=False,bDefaultValueIsIgnored=False,bAdvancedView=False,bOrphanedPin=False,) + End Object + Begin Object Class=/Script/BlueprintGraph.K2Node_Knot Name="K2Node_Knot_6" ExportPath="/Script/BlueprintGraph.K2Node_Knot'/Game/Examples/Tag/Blueprints/DirectionDistanceObserver.DirectionDistanceObserver:GetObservationSpace.K2Node_Knot_6'" + NodePosX=-80 + NodePosY=640 + NodeGuid=B7FC178E4D2E3929CE40AEB1462DC0BB + CustomProperties Pin (PinId=181E50FF4676A93FC497E0BF4873BCC2,PinName="InputPin",PinType.PinCategory="exec",PinType.PinSubCategory="",PinType.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_5 009095D54E2C15EBBB57DC9098EC7D8B,),PersistentGuid=00000000000000000000000000000000,bHidden=False,bNotConnectable=False,bDefaultValueIsReadOnly=False,bDefaultValueIsIgnored=True,bAdvancedView=False,bOrphanedPin=False,) + CustomProperties Pin (PinId=CD2263A441CA4DB45102D398CF8E35E2,PinName="OutputPin",Direction="EGPD_Output",PinType.PinCategory="exec",PinType.PinSubCategory="",PinType.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_1 1CE2683A40DD5093C0C60D83B16C279B,),PersistentGuid=00000000000000000000000000000000,bHidden=False,bNotConnectable=False,bDefaultValueIsReadOnly=False,bDefaultValueIsIgnored=False,bAdvancedView=False,bOrphanedPin=False,) + End Object + `) + await expect(blueprintPage.blueprintLocator.locator("ueb-node")).toHaveCount(5) + await expect(blueprintPage.blueprintLocator.locator("ueb-link")).toHaveCount(4) + expect(blueprintPage.blueprintLocator.evaluate(blueprint => + /** @type {KnotNodeTemplate} */( + /** @type {NodeElement} */(blueprint.querySelectorAll("ueb-node")[3]).template + ).switchDirectionsVisually + )).toBeTruthy() + expect(blueprintPage.blueprintLocator.evaluate(blueprint => + /** @type {KnotNodeTemplate} */( + /** @type {NodeElement} */(blueprint.querySelectorAll("ueb-node")[4]).template + ).switchDirectionsVisually + )).toBeTruthy() + +}) diff --git a/tests/linking.spec.js b/tests/linking.spec.js old mode 100644 new mode 100755 index cdff703..5f3b38f --- a/tests/linking.spec.js +++ b/tests/linking.spec.js @@ -60,7 +60,7 @@ test.describe("Linking", () => { await mouse.down() await mouse.move(aRect.left + aRect.width + 100, aRect.top + aRect.height + 100, { steps: 4 }) // There is one link element ... - expect(blueprintPage.blueprintLocator.locator("ueb-link")).toHaveCount(1) + await expect(blueprintPage.blueprintLocator.locator("ueb-link")).toHaveCount(1) // ... but no pins are linked yet expect(await aPin.evaluate(pin => pin.entity.isLinked())).toBeFalsy() expect(await bPin.evaluate(pin => pin.entity.isLinked())).toBeFalsy() diff --git a/tests/mirroredExportPath.spec.js b/tests/mirroredExportPath.spec.js new file mode 100644 index 0000000..0be253d --- /dev/null +++ b/tests/mirroredExportPath.spec.js @@ -0,0 +1,201 @@ +import { expect, test } from "./fixtures/test.js" + +const firstRowOnly = v => v.replaceAll(/^\s+|\n.+/gs, "") + +test.describe.configure({ mode: "parallel" }) + +test("Renaming", async ({ blueprintPage }) => { + let source = 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"' + End Object + ` + await blueprintPage.paste(source) + expect(firstRowOnly(await blueprintPage.getSerializedNodes())).toEqual( + `Begin Object Class=/Script/UnrealEd.MaterialGraphNode Name="MaterialGraphNode_40" ExportPath=/Script/UnrealEd.MaterialGraphNode'"/Engine/Transient.M_Brick_Cut_Stone:MaterialGraph_0.MaterialGraphNode_40"'` + ) + await blueprintPage.node.evaluate(n => n.entity.Name.value = "new name") + expect(firstRowOnly(await blueprintPage.getSerializedNodes())).toEqual( + `Begin Object Class=/Script/UnrealEd.MaterialGraphNode Name="new name" ExportPath=/Script/UnrealEd.MaterialGraphNode'"/Engine/Transient.M_Brick_Cut_Stone:MaterialGraph_0.new name"'` + ) + await blueprintPage.node.evaluate(n => n.entity.Name = new (n.entity.constructor.attributes.Name)("new name 2")) + expect(firstRowOnly(await blueprintPage.getSerializedNodes())).toEqual( + `Begin Object Class=/Script/UnrealEd.MaterialGraphNode Name="new name 2" ExportPath=/Script/UnrealEd.MaterialGraphNode'"/Engine/Transient.M_Brick_Cut_Stone:MaterialGraph_0.new name 2"'` + ) + await blueprintPage.node.evaluate(n => n.entity.Name = new (n.entity.constructor.attributes.Name)()) + expect(firstRowOnly(await blueprintPage.getSerializedNodes())).toEqual( + `Begin Object Class=/Script/UnrealEd.MaterialGraphNode Name="" ExportPath=/Script/UnrealEd.MaterialGraphNode'"/Engine/Transient.M_Brick_Cut_Stone:MaterialGraph_0."'` + ) + await blueprintPage.node.evaluate(n => delete n.entity.Name) + expect(firstRowOnly(await blueprintPage.getSerializedNodes())).toEqual( + `Begin Object Class=/Script/UnrealEd.MaterialGraphNode ExportPath=/Script/UnrealEd.MaterialGraphNode'"/Engine/Transient.M_Brick_Cut_Stone:MaterialGraph_0."'` + ) +}) + +test("Inner renaming", async ({ blueprintPage }) => { + let source = 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 + End Object + End Object + ` + + await blueprintPage.paste(source) + expect(firstRowOnly(await blueprintPage.node.evaluate(n => n.entity.serialize()))).toEqual( + `Begin Object Class=/Script/PCGEditor.PCGEditorGraphNode Name="PCGEditorGraphNode_2" ExportPath=/Script/PCGEditor.PCGEditorGraphNode'"/Game/NewPCGGraph.NewPCGGraph:PCGEditorGraph_1.PCGEditorGraphNode_2"'` + ) + expect(firstRowOnly(await blueprintPage.node.evaluate(n => + n.entity['#SubObject_/Script/PCG.PCGNode_ExecuteBlueprint_7'].serialize() + ))).toEqual( + `Begin Object Class=/Script/PCG.PCGNode Name="ExecuteBlueprint_7" ExportPath=/Script/PCG.PCGNode'"/Game/NewPCGGraph.NewPCGGraph:PCGEditorGraph_1.PCGEditorGraphNode_2.ExecuteBlueprint_7"'` + ) + expect(firstRowOnly(await blueprintPage.node.evaluate(n => + n.entity['#SubObject_/Script/PCG.PCGNode_ExecuteBlueprint_7']['#SubObject_/Script/PCG.PCGBlueprintSettings_PCGBlueprintSettings_0'].serialize() + ))).toEqual( + `Begin Object Class=/Script/PCG.PCGBlueprintSettings Name="PCGBlueprintSettings_0" ExportPath=/Script/PCG.PCGBlueprintSettings'"/Game/NewPCGGraph.NewPCGGraph:PCGEditorGraph_1.PCGEditorGraphNode_2.ExecuteBlueprint_7.PCGBlueprintSettings_0"'` + ) + expect(firstRowOnly(await blueprintPage.node.evaluate(n => + n.entity['#SubObject_/Script/PCG.PCGNode_ExecuteBlueprint_7']['#SubObject_/Script/PCG.PCGPin_PCGPin_0'].serialize() + ))).toEqual( + `Begin Object Class=/Script/PCG.PCGPin Name="PCGPin_0" ExportPath=/Script/PCG.PCGPin'"/Game/NewPCGGraph.NewPCGGraph:PCGEditorGraph_1.PCGEditorGraphNode_2.ExecuteBlueprint_7.PCGPin_0"'` + ) + expect(firstRowOnly(await blueprintPage.node.evaluate(n => + n.entity['#SubObject_/Script/PCG.PCGNode_ExecuteBlueprint_7']['#SubObject_/Script/PCG.PCGPin_PCGPin_2'].serialize() + ))).toEqual( + `Begin Object Class=/Script/PCG.PCGPin Name="PCGPin_2" ExportPath=/Script/PCG.PCGPin'"/Game/NewPCGGraph.NewPCGGraph:PCGEditorGraph_1.PCGEditorGraphNode_2.ExecuteBlueprint_7.PCGPin_2"'` + ) + expect(firstRowOnly(await blueprintPage.node.evaluate(n => + n.entity['#SubObject_ExecuteBlueprint_7'].serialize() + ))).toEqual( + `Begin Object Name="ExecuteBlueprint_7" ExportPath=/Script/PCG.PCGNode'"/Game/NewPCGGraph.NewPCGGraph:PCGEditorGraph_1.PCGEditorGraphNode_2.ExecuteBlueprint_7"'` + ) + expect(firstRowOnly(await blueprintPage.node.evaluate(n => + n.entity['#SubObject_ExecuteBlueprint_7']['#SubObject_PCGBlueprintSettings_0'].serialize() + ))).toEqual( + `Begin Object Name="PCGBlueprintSettings_0" ExportPath=/Script/PCG.PCGBlueprintSettings'"/Game/NewPCGGraph.NewPCGGraph:PCGEditorGraph_1.PCGEditorGraphNode_2.ExecuteBlueprint_7.PCGBlueprintSettings_0"'` + ) + + // Rename outer object PCGEditorGraphNode_2 -> Name1 + await blueprintPage.node.evaluate(n => n.entity.Name.value = "Name1") + expect(firstRowOnly(await blueprintPage.node.evaluate(n => n.entity.serialize()))).toEqual( + `Begin Object Class=/Script/PCGEditor.PCGEditorGraphNode Name="Name1" ExportPath=/Script/PCGEditor.PCGEditorGraphNode'"/Game/NewPCGGraph.NewPCGGraph:PCGEditorGraph_1.Name1"'` + ) + expect(firstRowOnly(await blueprintPage.node.evaluate(n => + n.entity['#SubObject_/Script/PCG.PCGNode_ExecuteBlueprint_7'].serialize() + ))).toEqual( + `Begin Object Class=/Script/PCG.PCGNode Name="ExecuteBlueprint_7" ExportPath=/Script/PCG.PCGNode'"/Game/NewPCGGraph.NewPCGGraph:PCGEditorGraph_1.Name1.ExecuteBlueprint_7"'` + ) + expect(firstRowOnly(await blueprintPage.node.evaluate(n => + n.entity['#SubObject_/Script/PCG.PCGNode_ExecuteBlueprint_7']['#SubObject_/Script/PCG.PCGBlueprintSettings_PCGBlueprintSettings_0'].serialize() + ))).toEqual( + `Begin Object Class=/Script/PCG.PCGBlueprintSettings Name="PCGBlueprintSettings_0" ExportPath=/Script/PCG.PCGBlueprintSettings'"/Game/NewPCGGraph.NewPCGGraph:PCGEditorGraph_1.Name1.ExecuteBlueprint_7.PCGBlueprintSettings_0"'` + ) + expect(firstRowOnly(await blueprintPage.node.evaluate(n => + n.entity['#SubObject_/Script/PCG.PCGNode_ExecuteBlueprint_7']['#SubObject_/Script/PCG.PCGPin_PCGPin_0'].serialize() + ))).toEqual( + `Begin Object Class=/Script/PCG.PCGPin Name="PCGPin_0" ExportPath=/Script/PCG.PCGPin'"/Game/NewPCGGraph.NewPCGGraph:PCGEditorGraph_1.Name1.ExecuteBlueprint_7.PCGPin_0"'` + ) + expect(firstRowOnly(await blueprintPage.node.evaluate(n => + n.entity['#SubObject_/Script/PCG.PCGNode_ExecuteBlueprint_7']['#SubObject_/Script/PCG.PCGPin_PCGPin_2'].serialize() + ))).toEqual( + `Begin Object Class=/Script/PCG.PCGPin Name="PCGPin_2" ExportPath=/Script/PCG.PCGPin'"/Game/NewPCGGraph.NewPCGGraph:PCGEditorGraph_1.Name1.ExecuteBlueprint_7.PCGPin_2"'` + ) + expect(firstRowOnly(await blueprintPage.node.evaluate(n => + n.entity['#SubObject_ExecuteBlueprint_7'].serialize() + ))).toEqual( + `Begin Object Name="ExecuteBlueprint_7" ExportPath=/Script/PCG.PCGNode'"/Game/NewPCGGraph.NewPCGGraph:PCGEditorGraph_1.Name1.ExecuteBlueprint_7"'` + ) + expect(firstRowOnly(await blueprintPage.node.evaluate(n => + n.entity['#SubObject_ExecuteBlueprint_7']['#SubObject_PCGBlueprintSettings_0'].serialize() + ))).toEqual( + `Begin Object Name="PCGBlueprintSettings_0" ExportPath=/Script/PCG.PCGBlueprintSettings'"/Game/NewPCGGraph.NewPCGGraph:PCGEditorGraph_1.Name1.ExecuteBlueprint_7.PCGBlueprintSettings_0"'` + ) + + // Rename outer object another name -> new StringEntity("another name") + await blueprintPage.node.evaluate(n => n.entity.Name = new (n.entity.constructor.attributes.Name)("another name")) + expect(firstRowOnly(await blueprintPage.node.evaluate(n => n.entity.serialize()))).toEqual( + `Begin Object Class=/Script/PCGEditor.PCGEditorGraphNode Name="another name" ExportPath=/Script/PCGEditor.PCGEditorGraphNode'"/Game/NewPCGGraph.NewPCGGraph:PCGEditorGraph_1.another name"'` + ) + expect(firstRowOnly(await blueprintPage.node.evaluate(n => + n.entity['#SubObject_/Script/PCG.PCGNode_ExecuteBlueprint_7'].serialize() + ))).toEqual( + `Begin Object Class=/Script/PCG.PCGNode Name="ExecuteBlueprint_7" ExportPath=/Script/PCG.PCGNode'"/Game/NewPCGGraph.NewPCGGraph:PCGEditorGraph_1.another name.ExecuteBlueprint_7"'` + ) + expect(firstRowOnly(await blueprintPage.node.evaluate(n => + n.entity['#SubObject_/Script/PCG.PCGNode_ExecuteBlueprint_7']['#SubObject_/Script/PCG.PCGBlueprintSettings_PCGBlueprintSettings_0'].serialize() + ))).toEqual( + `Begin Object Class=/Script/PCG.PCGBlueprintSettings Name="PCGBlueprintSettings_0" ExportPath=/Script/PCG.PCGBlueprintSettings'"/Game/NewPCGGraph.NewPCGGraph:PCGEditorGraph_1.another name.ExecuteBlueprint_7.PCGBlueprintSettings_0"'` + ) + expect(firstRowOnly(await blueprintPage.node.evaluate(n => + n.entity['#SubObject_/Script/PCG.PCGNode_ExecuteBlueprint_7']['#SubObject_/Script/PCG.PCGPin_PCGPin_0'].serialize() + ))).toEqual( + `Begin Object Class=/Script/PCG.PCGPin Name="PCGPin_0" ExportPath=/Script/PCG.PCGPin'"/Game/NewPCGGraph.NewPCGGraph:PCGEditorGraph_1.another name.ExecuteBlueprint_7.PCGPin_0"'` + ) + expect(firstRowOnly(await blueprintPage.node.evaluate(n => + n.entity['#SubObject_/Script/PCG.PCGNode_ExecuteBlueprint_7']['#SubObject_/Script/PCG.PCGPin_PCGPin_2'].serialize() + ))).toEqual( + `Begin Object Class=/Script/PCG.PCGPin Name="PCGPin_2" ExportPath=/Script/PCG.PCGPin'"/Game/NewPCGGraph.NewPCGGraph:PCGEditorGraph_1.another name.ExecuteBlueprint_7.PCGPin_2"'` + ) + expect(firstRowOnly(await blueprintPage.node.evaluate(n => + n.entity['#SubObject_ExecuteBlueprint_7'].serialize() + ))).toEqual( + `Begin Object Name="ExecuteBlueprint_7" ExportPath=/Script/PCG.PCGNode'"/Game/NewPCGGraph.NewPCGGraph:PCGEditorGraph_1.another name.ExecuteBlueprint_7"'` + ) + expect(firstRowOnly(await blueprintPage.node.evaluate(n => + n.entity['#SubObject_ExecuteBlueprint_7']['#SubObject_PCGBlueprintSettings_0'].serialize() + ))).toEqual( + `Begin Object Name="PCGBlueprintSettings_0" ExportPath=/Script/PCG.PCGBlueprintSettings'"/Game/NewPCGGraph.NewPCGGraph:PCGEditorGraph_1.another name.ExecuteBlueprint_7.PCGBlueprintSettings_0"'` + ) + + // Rename outer object another name -> null + await blueprintPage.node.evaluate(n => n.entity.Name = null) + expect(firstRowOnly(await blueprintPage.node.evaluate(n => n.entity.serialize()))).toEqual( + `Begin Object Class=/Script/PCGEditor.PCGEditorGraphNode ExportPath=/Script/PCGEditor.PCGEditorGraphNode'"/Game/NewPCGGraph.NewPCGGraph:PCGEditorGraph_1."'` + ) + expect(firstRowOnly(await blueprintPage.node.evaluate(n => + n.entity['#SubObject_/Script/PCG.PCGNode_ExecuteBlueprint_7'].serialize() + ))).toEqual( + `Begin Object Class=/Script/PCG.PCGNode Name="ExecuteBlueprint_7" ExportPath=/Script/PCG.PCGNode'"/Game/NewPCGGraph.NewPCGGraph:PCGEditorGraph_1..ExecuteBlueprint_7"'` + ) + expect(firstRowOnly(await blueprintPage.node.evaluate(n => + n.entity['#SubObject_/Script/PCG.PCGNode_ExecuteBlueprint_7']['#SubObject_/Script/PCG.PCGBlueprintSettings_PCGBlueprintSettings_0'].serialize() + ))).toEqual( + `Begin Object Class=/Script/PCG.PCGBlueprintSettings Name="PCGBlueprintSettings_0" ExportPath=/Script/PCG.PCGBlueprintSettings'"/Game/NewPCGGraph.NewPCGGraph:PCGEditorGraph_1..ExecuteBlueprint_7.PCGBlueprintSettings_0"'` + ) + expect(firstRowOnly(await blueprintPage.node.evaluate(n => + n.entity['#SubObject_/Script/PCG.PCGNode_ExecuteBlueprint_7']['#SubObject_/Script/PCG.PCGPin_PCGPin_0'].serialize() + ))).toEqual( + `Begin Object Class=/Script/PCG.PCGPin Name="PCGPin_0" ExportPath=/Script/PCG.PCGPin'"/Game/NewPCGGraph.NewPCGGraph:PCGEditorGraph_1..ExecuteBlueprint_7.PCGPin_0"'` + ) + expect(firstRowOnly(await blueprintPage.node.evaluate(n => + n.entity['#SubObject_/Script/PCG.PCGNode_ExecuteBlueprint_7']['#SubObject_/Script/PCG.PCGPin_PCGPin_2'].serialize() + ))).toEqual( + `Begin Object Class=/Script/PCG.PCGPin Name="PCGPin_2" ExportPath=/Script/PCG.PCGPin'"/Game/NewPCGGraph.NewPCGGraph:PCGEditorGraph_1..ExecuteBlueprint_7.PCGPin_2"'` + ) + expect(firstRowOnly(await blueprintPage.node.evaluate(n => + n.entity['#SubObject_ExecuteBlueprint_7'].serialize() + ))).toEqual( + `Begin Object Name="ExecuteBlueprint_7" ExportPath=/Script/PCG.PCGNode'"/Game/NewPCGGraph.NewPCGGraph:PCGEditorGraph_1..ExecuteBlueprint_7"'` + ) + expect(firstRowOnly(await blueprintPage.node.evaluate(n => + n.entity['#SubObject_ExecuteBlueprint_7']['#SubObject_PCGBlueprintSettings_0'].serialize() + ))).toEqual( + `Begin Object Name="PCGBlueprintSettings_0" ExportPath=/Script/PCG.PCGBlueprintSettings'"/Game/NewPCGGraph.NewPCGGraph:PCGEditorGraph_1..ExecuteBlueprint_7.PCGBlueprintSettings_0"'` + ) +}) diff --git a/tests/niagaraScriptVariables.spec.js b/tests/niagaraScriptVariables.spec.js new file mode 100644 index 0000000..f601291 --- /dev/null +++ b/tests/niagaraScriptVariables.spec.js @@ -0,0 +1,361 @@ +import Utility from "../js/Utility.js" +import { expect, test } from "./fixtures/test.js" + +/** + * @param {String} source + * @param {String} rename + */ +const serialized = (source, rename = "Blueprint") => { + let name = source.match(/.+?Name="([^"]+)"/)[1] + let result = source + .replaceAll(/^\n|^ {12}| +$/gm, "") + .replaceAll( + new RegExp( + [ + /(?<=^Begin Object).+?(?= Name=")/, + /(?<=^Begin Object.*? Name="[^"]*").+/, + / +$/, + /^ +ExportedNodes=.+\n/, + ] + .map(r => r.source) + .join("|"), + "gm" + ), + "" + ) + .replaceAll(" ", " ") + if (rename) { + result = result.replaceAll(name, rename) + } + return result +} + +test.describe("Niagara ScriptVariables", () => { + + test.beforeEach(async ({ blueprintPage }) => { + await blueprintPage.removeNodes() + }) + + test.describe.configure({ mode: "parallel" }) + + test("Deserialization", async ({ blueprintPage }) => { + expect(await blueprintPage.blueprintLocator.evaluate(blueprint => blueprint.entity.serialize())) + .toEqual('Begin Object Name="Blueprint"\nEnd Object\n') + const source = String.raw` + Begin Object Class=/Script/NiagaraEditor.NiagaraClipboardContent Name="NiagaraClipboardContent_6" ExportPath="/Script/NiagaraEditor.NiagaraClipboardContent'/Engine/Transient.NiagaraClipboardContent_6'" + Begin Object Class=/Script/NiagaraEditor.NiagaraScriptVariable Name="NiagaraScriptVariable_2" ExportPath="/Script/NiagaraEditor.NiagaraScriptVariable'/Engine/Transient.NiagaraClipboardContent_6:NiagaraScriptVariable_2'" + End Object + Begin Object Class=/Script/NiagaraEditor.NiagaraScriptVariable Name="NiagaraScriptVariable_1" ExportPath="/Script/NiagaraEditor.NiagaraScriptVariable'/Engine/Transient.NiagaraClipboardContent_6:NiagaraScriptVariable_1'" + End Object + Begin Object Class=/Script/NiagaraEditor.NiagaraScriptVariable Name="NiagaraScriptVariable_0" ExportPath="/Script/NiagaraEditor.NiagaraScriptVariable'/Engine/Transient.NiagaraClipboardContent_6:NiagaraScriptVariable_0'" + End Object + Begin Object Name="NiagaraScriptVariable_2" ExportPath="/Script/NiagaraEditor.NiagaraScriptVariable'/Engine/Transient.NiagaraClipboardContent_6:NiagaraScriptVariable_2'" + DefaultMode=FailIfPreviouslyNotSet + Variable=(VarData=(0,0,0,0,0,0,0,0,0,0,0,0),Name="Local.Module.NewOutput",TypeDefHandle=(RegisteredTypeIndex=91)) + Metadata=(VariableGuid=274F4E069AD943DBAAB943F92BE558EA) + DefaultValueVariant=(Bytes=(0,0,0,0,0,0,0,0,0,0,0,0),CurrentMode=Bytes) + ChangeId=DE05B442E3734F5D9AEA76603B33E271 + End Object + Begin Object Name="NiagaraScriptVariable_1" ExportPath="/Script/NiagaraEditor.NiagaraScriptVariable'/Engine/Transient.NiagaraClipboardContent_6:NiagaraScriptVariable_1'" + DefaultMode=FailIfPreviouslyNotSet + Variable=(VarData=(0,0,0,0,0,0,0,0,0,0,0,0),Name="Local.Module.Input001",TypeDefHandle=(RegisteredTypeIndex=88)) + Metadata=(VariableGuid=775A1228426C413AB95CB9049C1E993A) + DefaultValueVariant=(Bytes=(0,0,0,0,0,0,0,0,0,0,0,0),CurrentMode=Bytes) + ChangeId=C38E0F30344D4A2689CC7972DFBAA6FA + End Object + Begin Object Name="NiagaraScriptVariable_0" ExportPath="/Script/NiagaraEditor.NiagaraScriptVariable'/Engine/Transient.NiagaraClipboardContent_6:NiagaraScriptVariable_0'" + DefaultMode=FailIfPreviouslyNotSet + Variable=(Name="Local.Module.Input",TypeDefHandle=(RegisteredTypeIndex=59)) + Metadata=(VariableGuid=0DAA63BD5851469990B3FE12816255A5) + ChangeId=2312FB889A9640CFA45B3A9E4AF7FC01 + End Object + ScriptVariables(0)=(ScriptVariable="/Script/NiagaraEditor.NiagaraScriptVariable'NiagaraScriptVariable_0'",OriginalChangeId=2312FB889A9640CFA45B3A9E4AF7FC01) + ScriptVariables(1)=(ScriptVariable="/Script/NiagaraEditor.NiagaraScriptVariable'NiagaraScriptVariable_1'",OriginalChangeId=C38E0F30344D4A2689CC7972DFBAA6FA) + ScriptVariables(2)=(ScriptVariable="/Script/NiagaraEditor.NiagaraScriptVariable'NiagaraScriptVariable_2'",OriginalChangeId=DE05B442E3734F5D9AEA76603B33E271) + ExportedNodes="QmVnaW4gT2JqZWN0IENsYXNzPS9TY3JpcHQvTmlhZ2FyYUVkaXRvci5OaWFnYXJhTm9kZVBhcmFtZXRlck1hcFNldCBOYW1lPSJOaWFnYXJhTm9kZVBhcmFtZXRlck1hcFNldF8wIiBFeHBvcnRQYXRoPSIvU2NyaXB0L05pYWdhcmFFZGl0b3IuTmlhZ2FyYU5vZGVQYXJhbWV0ZXJNYXBTZXQnL0VuZ2luZS9UcmFuc2llbnQuTmV3TmlhZ2FyYVNjcmlwdDI6TmlhZ2FyYVNjcmlwdFNvdXJjZV8wLk5pYWdhcmFHcmFwaF8wLk5pYWdhcmFOb2RlUGFyYW1ldGVyTWFwU2V0XzAnIgogICBDaGFuZ2VJZD03QkU4QUZGMzlBNkU0MzUwQjY3QzlBM0FBOEYzMDVCNg0KICAgTm9kZVBvc1g9LTI1Ng0KICAgTm9kZVBvc1k9LTE2MA0KICAgTm9kZUd1aWQ9RkU5M0ZCNDlDNTI4NDMyNEE3ODBFMThGNTQzRjZBNDcNCiAgIEN1c3RvbVByb3BlcnRpZXMgUGluIChQaW5JZD1EMUMwMjMyMEJFOUU0MTgxOUZCQTdBNjhCMTE5QzU5QyxQaW5OYW1lPSJTb3VyY2UiLFBpblR5cGUuUGluQ2F0ZWdvcnk9IlR5cGUiLFBpblR5cGUuUGluU3ViQ2F0ZWdvcnk9IiIsUGluVHlwZS5QaW5TdWJDYXRlZ29yeU9iamVjdD0iL1NjcmlwdC9Db3JlVU9iamVjdC5TY3JpcHRTdHJ1Y3QnL1NjcmlwdC9OaWFnYXJhLk5pYWdhcmFQYXJhbWV0ZXJNYXAnIixQaW5UeXBlLlBpblN1YkNhdGVnb3J5TWVtYmVyUmVmZXJlbmNlPSgpLFBpblR5cGUuUGluVmFsdWVUeXBlPSgpLFBpblR5cGUuQ29udGFpbmVyVHlwZT1Ob25lLFBpblR5cGUuYklzUmVmZXJlbmNlPUZhbHNlLFBpblR5cGUuYklzQ29uc3Q9RmFsc2UsUGluVHlwZS5iSXNXZWFrUG9pbnRlcj1GYWxzZSxQaW5UeXBlLmJJc1VPYmplY3RXcmFwcGVyPUZhbHNlLFBpblR5cGUuYlNlcmlhbGl6ZUFzU2luZ2xlUHJlY2lzaW9uRmxvYXQ9RmFsc2UsUGVyc2lzdGVudEd1aWQ9MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAsYkhpZGRlbj1GYWxzZSxiTm90Q29ubmVjdGFibGU9RmFsc2UsYkRlZmF1bHRWYWx1ZUlzUmVhZE9ubHk9RmFsc2UsYkRlZmF1bHRWYWx1ZUlzSWdub3JlZD1GYWxzZSxiQWR2YW5jZWRWaWV3PUZhbHNlLGJPcnBoYW5lZFBpbj1GYWxzZSwpDQogICBDdXN0b21Qcm9wZXJ0aWVzIFBpbiAoUGluSWQ9M0VDMTczNDdDQUU4NEUwMEE3NjJFRDMyQkI4MkRBRDMsUGluTmFtZT0iRGVzdCIsRGlyZWN0aW9uPSJFR1BEX091dHB1dCIsUGluVHlwZS5QaW5DYXRlZ29yeT0iVHlwZSIsUGluVHlwZS5QaW5TdWJDYXRlZ29yeT0iIixQaW5UeXBlLlBpblN1YkNhdGVnb3J5T2JqZWN0PSIvU2NyaXB0L0NvcmVVT2JqZWN0LlNjcmlwdFN0cnVjdCcvU2NyaXB0L05pYWdhcmEuTmlhZ2FyYVBhcmFtZXRlck1hcCciLFBpblR5cGUuUGluU3ViQ2F0ZWdvcnlNZW1iZXJSZWZlcmVuY2U9KCksUGluVHlwZS5QaW5WYWx1ZVR5cGU9KCksUGluVHlwZS5Db250YWluZXJUeXBlPU5vbmUsUGluVHlwZS5iSXNSZWZlcmVuY2U9RmFsc2UsUGluVHlwZS5iSXNDb25zdD1GYWxzZSxQaW5UeXBlLmJJc1dlYWtQb2ludGVyPUZhbHNlLFBpblR5cGUuYklzVU9iamVjdFdyYXBwZXI9RmFsc2UsUGluVHlwZS5iU2VyaWFsaXplQXNTaW5nbGVQcmVjaXNpb25GbG9hdD1GYWxzZSxQZXJzaXN0ZW50R3VpZD0wMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMCxiSGlkZGVuPUZhbHNlLGJOb3RDb25uZWN0YWJsZT1GYWxzZSxiRGVmYXVsdFZhbHVlSXNSZWFkT25seT1GYWxzZSxiRGVmYXVsdFZhbHVlSXNJZ25vcmVkPUZhbHNlLGJBZHZhbmNlZFZpZXc9RmFsc2UsYk9ycGhhbmVkUGluPUZhbHNlLCkNCiAgIEN1c3RvbVByb3BlcnRpZXMgUGluIChQaW5JZD1FNDkyRDQ5RTFEQjI0NUU1QkI2QTU0NzE2OEMzRTEzMSxQaW5OYW1lPSJMb2NhbC5Nb2R1bGUuSW5wdXQiLFBpbkZyaWVuZGx5TmFtZT1JTlZURVhUKCJMb2NhbC5Nb2R1bGUuSW5wdXQiKSxQaW5UeXBlLlBpbkNhdGVnb3J5PSJDbGFzcyIsUGluVHlwZS5QaW5TdWJDYXRlZ29yeT0iUGFyYW1ldGVyUGluIixQaW5UeXBlLlBpblN1YkNhdGVnb3J5T2JqZWN0PSIvU2NyaXB0L0NvcmVVT2JqZWN0LkNsYXNzJy9TY3JpcHQvTmlhZ2FyYS5OaWFnYXJhRGF0YUludGVyZmFjZVJlbmRlclRhcmdldDJEJyIsUGluVHlwZS5QaW5TdWJDYXRlZ29yeU1lbWJlclJlZmVyZW5jZT0oKSxQaW5UeXBlLlBpblZhbHVlVHlwZT0oKSxQaW5UeXBlLkNvbnRhaW5lclR5cGU9Tm9uZSxQaW5UeXBlLmJJc1JlZmVyZW5jZT1GYWxzZSxQaW5UeXBlLmJJc0NvbnN0PUZhbHNlLFBpblR5cGUuYklzV2Vha1BvaW50ZXI9RmFsc2UsUGluVHlwZS5iSXNVT2JqZWN0V3JhcHBlcj1GYWxzZSxQaW5UeXBlLmJTZXJpYWxpemVBc1NpbmdsZVByZWNpc2lvbkZsb2F0PUZhbHNlLExpbmtlZFRvPShOaWFnYXJhTm9kZUlucHV0XzEwOSBDNUFGNzNFODNEMUQ0NEJDQjQwQjVFRENDMTY3OENCQiwpLFBlcnNpc3RlbnRHdWlkPTIwMEZDOTU0QTU2NDREM0RBNzQ3RjU1NDQ2NzE3QTY3LGJIaWRkZW49RmFsc2UsYk5vdENvbm5lY3RhYmxlPUZhbHNlLGJEZWZhdWx0VmFsdWVJc1JlYWRPbmx5PUZhbHNlLGJEZWZhdWx0VmFsdWVJc0lnbm9yZWQ9RmFsc2UsYkFkdmFuY2VkVmlldz1GYWxzZSxiT3JwaGFuZWRQaW49RmFsc2UsKQ0KICAgQ3VzdG9tUHJvcGVydGllcyBQaW4gKFBpbklkPUI3NkM5NUFEN0I4MjRBRTU4QTUzMDdERjA4NDAxOEJCLFBpbk5hbWU9IkxvY2FsLk1vZHVsZS5JbnB1dDAwMSIsUGluRnJpZW5kbHlOYW1lPUlOVlRFWFQoIkxvY2FsLk1vZHVsZS5JbnB1dDAwMSIpLFBpblR5cGUuUGluQ2F0ZWdvcnk9IlR5cGUiLFBpblR5cGUuUGluU3ViQ2F0ZWdvcnk9IlBhcmFtZXRlclBpbiIsUGluVHlwZS5QaW5TdWJDYXRlZ29yeU9iamVjdD0iL1NjcmlwdC9Db3JlVU9iamVjdC5TY3JpcHRTdHJ1Y3QnL1NjcmlwdC9Db3JlVU9iamVjdC5WZWN0b3IzZiciLFBpblR5cGUuUGluU3ViQ2F0ZWdvcnlNZW1iZXJSZWZlcmVuY2U9KCksUGluVHlwZS5QaW5WYWx1ZVR5cGU9KCksUGluVHlwZS5Db250YWluZXJUeXBlPU5vbmUsUGluVHlwZS5iSXNSZWZlcmVuY2U9RmFsc2UsUGluVHlwZS5iSXNDb25zdD1GYWxzZSxQaW5UeXBlLmJJc1dlYWtQb2ludGVyPUZhbHNlLFBpblR5cGUuYklzVU9iamVjdFdyYXBwZXI9RmFsc2UsUGluVHlwZS5iU2VyaWFsaXplQXNTaW5nbGVQcmVjaXNpb25GbG9hdD1GYWxzZSxMaW5rZWRUbz0oTmlhZ2FyYU5vZGVJbnB1dF8wIDk5QzJDOTg4NDNBOTQ0MzJEOUU3RTI4NzIwRjU1RkM3LCksUGVyc2lzdGVudEd1aWQ9MTI3QTI2QjFEMTc3NDY4NjgwM0VEMkE5NkVGNTNEMkUsYkhpZGRlbj1GYWxzZSxiTm90Q29ubmVjdGFibGU9RmFsc2UsYkRlZmF1bHRWYWx1ZUlzUmVhZE9ubHk9RmFsc2UsYkRlZmF1bHRWYWx1ZUlzSWdub3JlZD1GYWxzZSxiQWR2YW5jZWRWaWV3PUZhbHNlLGJPcnBoYW5lZFBpbj1GYWxzZSwpDQogICBDdXN0b21Qcm9wZXJ0aWVzIFBpbiAoUGluSWQ9MjJCOTk3MzVGMDVFNENDQTlBMEIxQkE4NDIxMEFENUUsUGluTmFtZT0iTG9jYWwuTW9kdWxlLk5ld091dHB1dCIsUGluRnJpZW5kbHlOYW1lPUlOVlRFWFQoIkxvY2FsLk1vZHVsZS5OZXdPdXRwdXQiKSxQaW5UeXBlLlBpbkNhdGVnb3J5PSJUeXBlIixQaW5UeXBlLlBpblN1YkNhdGVnb3J5PSJQYXJhbWV0ZXJQaW4iLFBpblR5cGUuUGluU3ViQ2F0ZWdvcnlPYmplY3Q9Ii9TY3JpcHQvQ29yZVVPYmplY3QuU2NyaXB0U3RydWN0Jy9TY3JpcHQvTmlhZ2FyYS5OaWFnYXJhUG9zaXRpb24nIixQaW5UeXBlLlBpblN1YkNhdGVnb3J5TWVtYmVyUmVmZXJlbmNlPSgpLFBpblR5cGUuUGluVmFsdWVUeXBlPSgpLFBpblR5cGUuQ29udGFpbmVyVHlwZT1Ob25lLFBpblR5cGUuYklzUmVmZXJlbmNlPUZhbHNlLFBpblR5cGUuYklzQ29uc3Q9RmFsc2UsUGluVHlwZS5iSXNXZWFrUG9pbnRlcj1GYWxzZSxQaW5UeXBlLmJJc1VPYmplY3RXcmFwcGVyPUZhbHNlLFBpblR5cGUuYlNlcmlhbGl6ZUFzU2luZ2xlUHJlY2lzaW9uRmxvYXQ9RmFsc2UsTGlua2VkVG89KE5pYWdhcmFOb2RlRnVuY3Rpb25DYWxsXzE2OCAxRDY2M0EwQUEyRjk0RjBDODJCMjA0RUMwMTIyRTdFQiwpLFBlcnNpc3RlbnRHdWlkPTg0RDhGRkFENTA4OTQ1MTQ4MzFFMjFGQTM0QTMzQTk3LGJIaWRkZW49RmFsc2UsYk5vdENvbm5lY3RhYmxlPUZhbHNlLGJEZWZhdWx0VmFsdWVJc1JlYWRPbmx5PUZhbHNlLGJEZWZhdWx0VmFsdWVJc0lnbm9yZWQ9RmFsc2UsYkFkdmFuY2VkVmlldz1GYWxzZSxiT3JwaGFuZWRQaW49RmFsc2UsKQ0KICAgQ3VzdG9tUHJvcGVydGllcyBQaW4gKFBpbklkPTA2MUNFOEJGMUFCNTQzOTI5MDBFMjgxRTUwQjZBMkFCLFBpbk5hbWU9IkFkZCIsUGluVHlwZS5QaW5DYXRlZ29yeT0iTWlzYyIsUGluVHlwZS5QaW5TdWJDYXRlZ29yeT0iRHluYW1pY0FkZFBpbiIsUGluVHlwZS5QaW5TdWJDYXRlZ29yeU9iamVjdD1Ob25lLFBpblR5cGUuUGluU3ViQ2F0ZWdvcnlNZW1iZXJSZWZlcmVuY2U9KCksUGluVHlwZS5QaW5WYWx1ZVR5cGU9KCksUGluVHlwZS5Db250YWluZXJUeXBlPU5vbmUsUGluVHlwZS5iSXNSZWZlcmVuY2U9RmFsc2UsUGluVHlwZS5iSXNDb25zdD1GYWxzZSxQaW5UeXBlLmJJc1dlYWtQb2ludGVyPUZhbHNlLFBpblR5cGUuYklzVU9iamVjdFdyYXBwZXI9RmFsc2UsUGluVHlwZS5iU2VyaWFsaXplQXNTaW5nbGVQcmVjaXNpb25GbG9hdD1GYWxzZSxQZXJzaXN0ZW50R3VpZD0wMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMCxiSGlkZGVuPUZhbHNlLGJOb3RDb25uZWN0YWJsZT1GYWxzZSxiRGVmYXVsdFZhbHVlSXNSZWFkT25seT1GYWxzZSxiRGVmYXVsdFZhbHVlSXNJZ25vcmVkPUZhbHNlLGJBZHZhbmNlZFZpZXc9RmFsc2UsYk9ycGhhbmVkUGluPUZhbHNlLCkNCkVuZCBPYmplY3QNCg==" + End Object + ` + await blueprintPage.paste(source) + // await blueprintPage.blueprintLocator.evaluate(blueprint => blueprint.entity.Name.value = "NiagaraClipboardContent_6") + expect(await blueprintPage.blueprintLocator.evaluate(blueprint => { + const entity = blueprint.entity + entity.Name.value = "###########" + return entity.serialize() + })) + .toEqual(serialized(source, "###########")) + }) + + test("Merging", async ({ blueprintPage }) => { + // Var: Local.Module.Input, Local.Module.Input001, Local.Module.NewOutput + let source = String.raw` + Begin Object Class=/Script/NiagaraEditor.NiagaraClipboardContent Name="NiagaraClipboardContent_6" ExportPath="/Script/NiagaraEditor.NiagaraClipboardContent'/Engine/Transient.NiagaraClipboardContent_6'" + Begin Object Class=/Script/NiagaraEditor.NiagaraScriptVariable Name="NiagaraScriptVariable_2" ExportPath="/Script/NiagaraEditor.NiagaraScriptVariable'/Engine/Transient.NiagaraClipboardContent_6:NiagaraScriptVariable_2'" + End Object + Begin Object Class=/Script/NiagaraEditor.NiagaraScriptVariable Name="NiagaraScriptVariable_1" ExportPath="/Script/NiagaraEditor.NiagaraScriptVariable'/Engine/Transient.NiagaraClipboardContent_6:NiagaraScriptVariable_1'" + End Object + Begin Object Class=/Script/NiagaraEditor.NiagaraScriptVariable Name="NiagaraScriptVariable_0" ExportPath="/Script/NiagaraEditor.NiagaraScriptVariable'/Engine/Transient.NiagaraClipboardContent_6:NiagaraScriptVariable_0'" + End Object + Begin Object Name="NiagaraScriptVariable_2" ExportPath="/Script/NiagaraEditor.NiagaraScriptVariable'/Engine/Transient.NiagaraClipboardContent_6:NiagaraScriptVariable_2'" + DefaultMode=FailIfPreviouslyNotSet + Variable=(VarData=(0,0,0,0,0,0,0,0,0,0,0,0),Name="Local.Module.NewOutput",TypeDefHandle=(RegisteredTypeIndex=91)) + Metadata=(VariableGuid=274F4E069AD943DBAAB943F92BE558EA) + DefaultValueVariant=(Bytes=(0,0,0,0,0,0,0,0,0,0,0,0),CurrentMode=Bytes) + ChangeId=DE05B442E3734F5D9AEA76603B33E271 + End Object + Begin Object Name="NiagaraScriptVariable_1" ExportPath="/Script/NiagaraEditor.NiagaraScriptVariable'/Engine/Transient.NiagaraClipboardContent_6:NiagaraScriptVariable_1'" + DefaultMode=FailIfPreviouslyNotSet + Variable=(VarData=(0,0,0,0,0,0,0,0,0,0,0,0),Name="Local.Module.Input001",TypeDefHandle=(RegisteredTypeIndex=88)) + Metadata=(VariableGuid=775A1228426C413AB95CB9049C1E993A) + DefaultValueVariant=(Bytes=(0,0,0,0,0,0,0,0,0,0,0,0),CurrentMode=Bytes) + ChangeId=C38E0F30344D4A2689CC7972DFBAA6FA + End Object + Begin Object Name="NiagaraScriptVariable_0" ExportPath="/Script/NiagaraEditor.NiagaraScriptVariable'/Engine/Transient.NiagaraClipboardContent_6:NiagaraScriptVariable_0'" + DefaultMode=FailIfPreviouslyNotSet + Variable=(Name="Local.Module.Input",TypeDefHandle=(RegisteredTypeIndex=59)) + Metadata=(VariableGuid=0DAA63BD5851469990B3FE12816255A5) + ChangeId=2312FB889A9640CFA45B3A9E4AF7FC01 + End Object + ScriptVariables(0)=(ScriptVariable="/Script/NiagaraEditor.NiagaraScriptVariable'NiagaraScriptVariable_0'",OriginalChangeId=2312FB889A9640CFA45B3A9E4AF7FC01) + ScriptVariables(1)=(ScriptVariable="/Script/NiagaraEditor.NiagaraScriptVariable'NiagaraScriptVariable_1'",OriginalChangeId=C38E0F30344D4A2689CC7972DFBAA6FA) + ScriptVariables(2)=(ScriptVariable="/Script/NiagaraEditor.NiagaraScriptVariable'NiagaraScriptVariable_2'",OriginalChangeId=DE05B442E3734F5D9AEA76603B33E271) + ExportedNodes="QmVnaW4gT2JqZWN0IENsYXNzPS9TY3JpcHQvTmlhZ2FyYUVkaXRvci5OaWFnYXJhTm9kZVBhcmFtZXRlck1hcFNldCBOYW1lPSJOaWFnYXJhTm9kZVBhcmFtZXRlck1hcFNldF8wIiBFeHBvcnRQYXRoPSIvU2NyaXB0L05pYWdhcmFFZGl0b3IuTmlhZ2FyYU5vZGVQYXJhbWV0ZXJNYXBTZXQnL0VuZ2luZS9UcmFuc2llbnQuTmV3TmlhZ2FyYVNjcmlwdDI6TmlhZ2FyYVNjcmlwdFNvdXJjZV8wLk5pYWdhcmFHcmFwaF8wLk5pYWdhcmFOb2RlUGFyYW1ldGVyTWFwU2V0XzAnIgogICBDaGFuZ2VJZD03QkU4QUZGMzlBNkU0MzUwQjY3QzlBM0FBOEYzMDVCNg0KICAgTm9kZVBvc1g9LTI1Ng0KICAgTm9kZVBvc1k9LTE2MA0KICAgTm9kZUd1aWQ9RkU5M0ZCNDlDNTI4NDMyNEE3ODBFMThGNTQzRjZBNDcNCiAgIEN1c3RvbVByb3BlcnRpZXMgUGluIChQaW5JZD1EMUMwMjMyMEJFOUU0MTgxOUZCQTdBNjhCMTE5QzU5QyxQaW5OYW1lPSJTb3VyY2UiLFBpblR5cGUuUGluQ2F0ZWdvcnk9IlR5cGUiLFBpblR5cGUuUGluU3ViQ2F0ZWdvcnk9IiIsUGluVHlwZS5QaW5TdWJDYXRlZ29yeU9iamVjdD0iL1NjcmlwdC9Db3JlVU9iamVjdC5TY3JpcHRTdHJ1Y3QnL1NjcmlwdC9OaWFnYXJhLk5pYWdhcmFQYXJhbWV0ZXJNYXAnIixQaW5UeXBlLlBpblN1YkNhdGVnb3J5TWVtYmVyUmVmZXJlbmNlPSgpLFBpblR5cGUuUGluVmFsdWVUeXBlPSgpLFBpblR5cGUuQ29udGFpbmVyVHlwZT1Ob25lLFBpblR5cGUuYklzUmVmZXJlbmNlPUZhbHNlLFBpblR5cGUuYklzQ29uc3Q9RmFsc2UsUGluVHlwZS5iSXNXZWFrUG9pbnRlcj1GYWxzZSxQaW5UeXBlLmJJc1VPYmplY3RXcmFwcGVyPUZhbHNlLFBpblR5cGUuYlNlcmlhbGl6ZUFzU2luZ2xlUHJlY2lzaW9uRmxvYXQ9RmFsc2UsUGVyc2lzdGVudEd1aWQ9MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAsYkhpZGRlbj1GYWxzZSxiTm90Q29ubmVjdGFibGU9RmFsc2UsYkRlZmF1bHRWYWx1ZUlzUmVhZE9ubHk9RmFsc2UsYkRlZmF1bHRWYWx1ZUlzSWdub3JlZD1GYWxzZSxiQWR2YW5jZWRWaWV3PUZhbHNlLGJPcnBoYW5lZFBpbj1GYWxzZSwpDQogICBDdXN0b21Qcm9wZXJ0aWVzIFBpbiAoUGluSWQ9M0VDMTczNDdDQUU4NEUwMEE3NjJFRDMyQkI4MkRBRDMsUGluTmFtZT0iRGVzdCIsRGlyZWN0aW9uPSJFR1BEX091dHB1dCIsUGluVHlwZS5QaW5DYXRlZ29yeT0iVHlwZSIsUGluVHlwZS5QaW5TdWJDYXRlZ29yeT0iIixQaW5UeXBlLlBpblN1YkNhdGVnb3J5T2JqZWN0PSIvU2NyaXB0L0NvcmVVT2JqZWN0LlNjcmlwdFN0cnVjdCcvU2NyaXB0L05pYWdhcmEuTmlhZ2FyYVBhcmFtZXRlck1hcCciLFBpblR5cGUuUGluU3ViQ2F0ZWdvcnlNZW1iZXJSZWZlcmVuY2U9KCksUGluVHlwZS5QaW5WYWx1ZVR5cGU9KCksUGluVHlwZS5Db250YWluZXJUeXBlPU5vbmUsUGluVHlwZS5iSXNSZWZlcmVuY2U9RmFsc2UsUGluVHlwZS5iSXNDb25zdD1GYWxzZSxQaW5UeXBlLmJJc1dlYWtQb2ludGVyPUZhbHNlLFBpblR5cGUuYklzVU9iamVjdFdyYXBwZXI9RmFsc2UsUGluVHlwZS5iU2VyaWFsaXplQXNTaW5nbGVQcmVjaXNpb25GbG9hdD1GYWxzZSxQZXJzaXN0ZW50R3VpZD0wMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMCxiSGlkZGVuPUZhbHNlLGJOb3RDb25uZWN0YWJsZT1GYWxzZSxiRGVmYXVsdFZhbHVlSXNSZWFkT25seT1GYWxzZSxiRGVmYXVsdFZhbHVlSXNJZ25vcmVkPUZhbHNlLGJBZHZhbmNlZFZpZXc9RmFsc2UsYk9ycGhhbmVkUGluPUZhbHNlLCkNCiAgIEN1c3RvbVByb3BlcnRpZXMgUGluIChQaW5JZD1FNDkyRDQ5RTFEQjI0NUU1QkI2QTU0NzE2OEMzRTEzMSxQaW5OYW1lPSJMb2NhbC5Nb2R1bGUuSW5wdXQiLFBpbkZyaWVuZGx5TmFtZT1JTlZURVhUKCJMb2NhbC5Nb2R1bGUuSW5wdXQiKSxQaW5UeXBlLlBpbkNhdGVnb3J5PSJDbGFzcyIsUGluVHlwZS5QaW5TdWJDYXRlZ29yeT0iUGFyYW1ldGVyUGluIixQaW5UeXBlLlBpblN1YkNhdGVnb3J5T2JqZWN0PSIvU2NyaXB0L0NvcmVVT2JqZWN0LkNsYXNzJy9TY3JpcHQvTmlhZ2FyYS5OaWFnYXJhRGF0YUludGVyZmFjZVJlbmRlclRhcmdldDJEJyIsUGluVHlwZS5QaW5TdWJDYXRlZ29yeU1lbWJlclJlZmVyZW5jZT0oKSxQaW5UeXBlLlBpblZhbHVlVHlwZT0oKSxQaW5UeXBlLkNvbnRhaW5lclR5cGU9Tm9uZSxQaW5UeXBlLmJJc1JlZmVyZW5jZT1GYWxzZSxQaW5UeXBlLmJJc0NvbnN0PUZhbHNlLFBpblR5cGUuYklzV2Vha1BvaW50ZXI9RmFsc2UsUGluVHlwZS5iSXNVT2JqZWN0V3JhcHBlcj1GYWxzZSxQaW5UeXBlLmJTZXJpYWxpemVBc1NpbmdsZVByZWNpc2lvbkZsb2F0PUZhbHNlLExpbmtlZFRvPShOaWFnYXJhTm9kZUlucHV0XzEwOSBDNUFGNzNFODNEMUQ0NEJDQjQwQjVFRENDMTY3OENCQiwpLFBlcnNpc3RlbnRHdWlkPTIwMEZDOTU0QTU2NDREM0RBNzQ3RjU1NDQ2NzE3QTY3LGJIaWRkZW49RmFsc2UsYk5vdENvbm5lY3RhYmxlPUZhbHNlLGJEZWZhdWx0VmFsdWVJc1JlYWRPbmx5PUZhbHNlLGJEZWZhdWx0VmFsdWVJc0lnbm9yZWQ9RmFsc2UsYkFkdmFuY2VkVmlldz1GYWxzZSxiT3JwaGFuZWRQaW49RmFsc2UsKQ0KICAgQ3VzdG9tUHJvcGVydGllcyBQaW4gKFBpbklkPUI3NkM5NUFEN0I4MjRBRTU4QTUzMDdERjA4NDAxOEJCLFBpbk5hbWU9IkxvY2FsLk1vZHVsZS5JbnB1dDAwMSIsUGluRnJpZW5kbHlOYW1lPUlOVlRFWFQoIkxvY2FsLk1vZHVsZS5JbnB1dDAwMSIpLFBpblR5cGUuUGluQ2F0ZWdvcnk9IlR5cGUiLFBpblR5cGUuUGluU3ViQ2F0ZWdvcnk9IlBhcmFtZXRlclBpbiIsUGluVHlwZS5QaW5TdWJDYXRlZ29yeU9iamVjdD0iL1NjcmlwdC9Db3JlVU9iamVjdC5TY3JpcHRTdHJ1Y3QnL1NjcmlwdC9Db3JlVU9iamVjdC5WZWN0b3IzZiciLFBpblR5cGUuUGluU3ViQ2F0ZWdvcnlNZW1iZXJSZWZlcmVuY2U9KCksUGluVHlwZS5QaW5WYWx1ZVR5cGU9KCksUGluVHlwZS5Db250YWluZXJUeXBlPU5vbmUsUGluVHlwZS5iSXNSZWZlcmVuY2U9RmFsc2UsUGluVHlwZS5iSXNDb25zdD1GYWxzZSxQaW5UeXBlLmJJc1dlYWtQb2ludGVyPUZhbHNlLFBpblR5cGUuYklzVU9iamVjdFdyYXBwZXI9RmFsc2UsUGluVHlwZS5iU2VyaWFsaXplQXNTaW5nbGVQcmVjaXNpb25GbG9hdD1GYWxzZSxMaW5rZWRUbz0oTmlhZ2FyYU5vZGVJbnB1dF8wIDk5QzJDOTg4NDNBOTQ0MzJEOUU3RTI4NzIwRjU1RkM3LCksUGVyc2lzdGVudEd1aWQ9MTI3QTI2QjFEMTc3NDY4NjgwM0VEMkE5NkVGNTNEMkUsYkhpZGRlbj1GYWxzZSxiTm90Q29ubmVjdGFibGU9RmFsc2UsYkRlZmF1bHRWYWx1ZUlzUmVhZE9ubHk9RmFsc2UsYkRlZmF1bHRWYWx1ZUlzSWdub3JlZD1GYWxzZSxiQWR2YW5jZWRWaWV3PUZhbHNlLGJPcnBoYW5lZFBpbj1GYWxzZSwpDQogICBDdXN0b21Qcm9wZXJ0aWVzIFBpbiAoUGluSWQ9MjJCOTk3MzVGMDVFNENDQTlBMEIxQkE4NDIxMEFENUUsUGluTmFtZT0iTG9jYWwuTW9kdWxlLk5ld091dHB1dCIsUGluRnJpZW5kbHlOYW1lPUlOVlRFWFQoIkxvY2FsLk1vZHVsZS5OZXdPdXRwdXQiKSxQaW5UeXBlLlBpbkNhdGVnb3J5PSJUeXBlIixQaW5UeXBlLlBpblN1YkNhdGVnb3J5PSJQYXJhbWV0ZXJQaW4iLFBpblR5cGUuUGluU3ViQ2F0ZWdvcnlPYmplY3Q9Ii9TY3JpcHQvQ29yZVVPYmplY3QuU2NyaXB0U3RydWN0Jy9TY3JpcHQvTmlhZ2FyYS5OaWFnYXJhUG9zaXRpb24nIixQaW5UeXBlLlBpblN1YkNhdGVnb3J5TWVtYmVyUmVmZXJlbmNlPSgpLFBpblR5cGUuUGluVmFsdWVUeXBlPSgpLFBpblR5cGUuQ29udGFpbmVyVHlwZT1Ob25lLFBpblR5cGUuYklzUmVmZXJlbmNlPUZhbHNlLFBpblR5cGUuYklzQ29uc3Q9RmFsc2UsUGluVHlwZS5iSXNXZWFrUG9pbnRlcj1GYWxzZSxQaW5UeXBlLmJJc1VPYmplY3RXcmFwcGVyPUZhbHNlLFBpblR5cGUuYlNlcmlhbGl6ZUFzU2luZ2xlUHJlY2lzaW9uRmxvYXQ9RmFsc2UsTGlua2VkVG89KE5pYWdhcmFOb2RlRnVuY3Rpb25DYWxsXzE2OCAxRDY2M0EwQUEyRjk0RjBDODJCMjA0RUMwMTIyRTdFQiwpLFBlcnNpc3RlbnRHdWlkPTg0RDhGRkFENTA4OTQ1MTQ4MzFFMjFGQTM0QTMzQTk3LGJIaWRkZW49RmFsc2UsYk5vdENvbm5lY3RhYmxlPUZhbHNlLGJEZWZhdWx0VmFsdWVJc1JlYWRPbmx5PUZhbHNlLGJEZWZhdWx0VmFsdWVJc0lnbm9yZWQ9RmFsc2UsYkFkdmFuY2VkVmlldz1GYWxzZSxiT3JwaGFuZWRQaW49RmFsc2UsKQ0KICAgQ3VzdG9tUHJvcGVydGllcyBQaW4gKFBpbklkPTA2MUNFOEJGMUFCNTQzOTI5MDBFMjgxRTUwQjZBMkFCLFBpbk5hbWU9IkFkZCIsUGluVHlwZS5QaW5DYXRlZ29yeT0iTWlzYyIsUGluVHlwZS5QaW5TdWJDYXRlZ29yeT0iRHluYW1pY0FkZFBpbiIsUGluVHlwZS5QaW5TdWJDYXRlZ29yeU9iamVjdD1Ob25lLFBpblR5cGUuUGluU3ViQ2F0ZWdvcnlNZW1iZXJSZWZlcmVuY2U9KCksUGluVHlwZS5QaW5WYWx1ZVR5cGU9KCksUGluVHlwZS5Db250YWluZXJUeXBlPU5vbmUsUGluVHlwZS5iSXNSZWZlcmVuY2U9RmFsc2UsUGluVHlwZS5iSXNDb25zdD1GYWxzZSxQaW5UeXBlLmJJc1dlYWtQb2ludGVyPUZhbHNlLFBpblR5cGUuYklzVU9iamVjdFdyYXBwZXI9RmFsc2UsUGluVHlwZS5iU2VyaWFsaXplQXNTaW5nbGVQcmVjaXNpb25GbG9hdD1GYWxzZSxQZXJzaXN0ZW50R3VpZD0wMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMCxiSGlkZGVuPUZhbHNlLGJOb3RDb25uZWN0YWJsZT1GYWxzZSxiRGVmYXVsdFZhbHVlSXNSZWFkT25seT1GYWxzZSxiRGVmYXVsdFZhbHVlSXNJZ25vcmVkPUZhbHNlLGJBZHZhbmNlZFZpZXc9RmFsc2UsYk9ycGhhbmVkUGluPUZhbHNlLCkNCkVuZCBPYmplY3QNCg==" + End Object + ` + await blueprintPage.paste(source) + expect(await blueprintPage.blueprintLocator.evaluate(blueprint => blueprint.entity.serialize())) + .toEqual(serialized(source)) + // Var: Local.Module.Input, Local.Module.Input001, Local.Module.Camera Relative Position, Local.Module.X + // Add: Local.Module.Camera Relative Position (3), Local.Module.X (4) + // Has: Local.Module.Input (0), Local.Module.Input001 (1) + source = String.raw` + Begin Object Class=/Script/NiagaraEditor.NiagaraClipboardContent Name="NiagaraClipboardContent_8" ExportPath="/Script/NiagaraEditor.NiagaraClipboardContent'/Engine/Transient.NiagaraClipboardContent_8'" + Begin Object Class=/Script/NiagaraEditor.NiagaraScriptVariable Name="NiagaraScriptVariable_4" ExportPath="/Script/NiagaraEditor.NiagaraScriptVariable'/Engine/Transient.NiagaraClipboardContent_8:NiagaraScriptVariable_4'" + End Object + Begin Object Class=/Script/NiagaraEditor.NiagaraScriptVariable Name="NiagaraScriptVariable_3" ExportPath="/Script/NiagaraEditor.NiagaraScriptVariable'/Engine/Transient.NiagaraClipboardContent_8:NiagaraScriptVariable_3'" + End Object + Begin Object Class=/Script/NiagaraEditor.NiagaraScriptVariable Name="NiagaraScriptVariable_1" ExportPath="/Script/NiagaraEditor.NiagaraScriptVariable'/Engine/Transient.NiagaraClipboardContent_8:NiagaraScriptVariable_1'" + End Object + Begin Object Class=/Script/NiagaraEditor.NiagaraScriptVariable Name="NiagaraScriptVariable_0" ExportPath="/Script/NiagaraEditor.NiagaraScriptVariable'/Engine/Transient.NiagaraClipboardContent_8:NiagaraScriptVariable_0'" + End Object + Begin Object Name="NiagaraScriptVariable_4" ExportPath="/Script/NiagaraEditor.NiagaraScriptVariable'/Engine/Transient.NiagaraClipboardContent_8:NiagaraScriptVariable_4'" + DefaultMode=FailIfPreviouslyNotSet + Variable=(VarData=(0,0,0,0,0,0,0,0,0,0,0,0),Name="Local.Module.X",TypeDefHandle=(RegisteredTypeIndex=88)) + Metadata=(VariableGuid=9661E7AE20234E159801C8E970F0D03D) + DefaultValueVariant=(Bytes=(0,0,0,0,0,0,0,0,0,0,0,0),CurrentMode=Bytes) + ChangeId=751E3204296A40409ADC4335E4C33CE6 + End Object + Begin Object Name="NiagaraScriptVariable_3" ExportPath="/Script/NiagaraEditor.NiagaraScriptVariable'/Engine/Transient.NiagaraClipboardContent_8:NiagaraScriptVariable_3'" + DefaultMode=FailIfPreviouslyNotSet + Variable=(VarData=(0,0,0,0,0,0,0,0,0,0,0,0),Name="Local.Module.Camera Relative Position",TypeDefHandle=(RegisteredTypeIndex=88)) + Metadata=(VariableGuid=0AD251B024C14B9AB06AAF654E8A3FF1) + DefaultValueVariant=(Bytes=(0,0,0,0,0,0,0,0,0,0,0,0),CurrentMode=Bytes) + ChangeId=4DD48BD81EA444099BB03E1AAE4F201E + End Object + Begin Object Name="NiagaraScriptVariable_1" ExportPath="/Script/NiagaraEditor.NiagaraScriptVariable'/Engine/Transient.NiagaraClipboardContent_8:NiagaraScriptVariable_1'" + DefaultMode=FailIfPreviouslyNotSet + Variable=(VarData=(0,0,0,0,0,0,0,0,0,0,0,0),Name="Local.Module.Input001",TypeDefHandle=(RegisteredTypeIndex=88)) + Metadata=(VariableGuid=775A1228426C413AB95CB9049C1E993A) + DefaultValueVariant=(Bytes=(0,0,0,0,0,0,0,0,0,0,0,0),CurrentMode=Bytes) + ChangeId=C38E0F30344D4A2689CC7972DFBAA6FA + End Object + Begin Object Name="NiagaraScriptVariable_0" ExportPath="/Script/NiagaraEditor.NiagaraScriptVariable'/Engine/Transient.NiagaraClipboardContent_8:NiagaraScriptVariable_0'" + DefaultMode=FailIfPreviouslyNotSet + Variable=(Name="Local.Module.Input",TypeDefHandle=(RegisteredTypeIndex=59)) + Metadata=(VariableGuid=0DAA63BD5851469990B3FE12816255A5) + ChangeId=2312FB889A9640CFA45B3A9E4AF7FC01 + End Object + ScriptVariables(0)=(ScriptVariable="/Script/NiagaraEditor.NiagaraScriptVariable'NiagaraScriptVariable_0'",OriginalChangeId=2312FB889A9640CFA45B3A9E4AF7FC01) + ScriptVariables(1)=(ScriptVariable="/Script/NiagaraEditor.NiagaraScriptVariable'NiagaraScriptVariable_1'",OriginalChangeId=C38E0F30344D4A2689CC7972DFBAA6FA) + ScriptVariables(2)=(ScriptVariable="/Script/NiagaraEditor.NiagaraScriptVariable'NiagaraScriptVariable_3'",OriginalChangeId=4DD48BD81EA444099BB03E1AAE4F201E) + ScriptVariables(3)=(ScriptVariable="/Script/NiagaraEditor.NiagaraScriptVariable'NiagaraScriptVariable_4'",OriginalChangeId=751E3204296A40409ADC4335E4C33CE6) + ExportedNodes="QmVnaW4gT2JqZWN0IENsYXNzPS9TY3JpcHQvTmlhZ2FyYUVkaXRvci5OaWFnYXJhTm9kZVBhcmFtZXRlck1hcFNldCBOYW1lPSJOaWFnYXJhTm9kZVBhcmFtZXRlck1hcFNldF8xIiBFeHBvcnRQYXRoPSIvU2NyaXB0L05pYWdhcmFFZGl0b3IuTmlhZ2FyYU5vZGVQYXJhbWV0ZXJNYXBTZXQnL0VuZ2luZS9UcmFuc2llbnQuTmV3TmlhZ2FyYVNjcmlwdDI6TmlhZ2FyYVNjcmlwdFNvdXJjZV8wLk5pYWdhcmFHcmFwaF8wLk5pYWdhcmFOb2RlUGFyYW1ldGVyTWFwU2V0XzEnIgogICBDaGFuZ2VJZD05MzVGMjRENzMyMUE0NTREQUNENUY4NzMzNTE3NTVEMg0KICAgTm9kZVBvc1g9LTIyNA0KICAgTm9kZVBvc1k9MTQ0DQogICBOb2RlR3VpZD0yNkEwMEIzNUI4Q0E0RDcwQkVEMTQyODJGRTZENzNFMg0KICAgQ3VzdG9tUHJvcGVydGllcyBQaW4gKFBpbklkPUVDRDQxQjgwQTc5NTQzNUJCQjQwMTA5MkZGOTgwOTQ5LFBpbk5hbWU9IlNvdXJjZSIsUGluVHlwZS5QaW5DYXRlZ29yeT0iVHlwZSIsUGluVHlwZS5QaW5TdWJDYXRlZ29yeT0iIixQaW5UeXBlLlBpblN1YkNhdGVnb3J5T2JqZWN0PSIvU2NyaXB0L0NvcmVVT2JqZWN0LlNjcmlwdFN0cnVjdCcvU2NyaXB0L05pYWdhcmEuTmlhZ2FyYVBhcmFtZXRlck1hcCciLFBpblR5cGUuUGluU3ViQ2F0ZWdvcnlNZW1iZXJSZWZlcmVuY2U9KCksUGluVHlwZS5QaW5WYWx1ZVR5cGU9KCksUGluVHlwZS5Db250YWluZXJUeXBlPU5vbmUsUGluVHlwZS5iSXNSZWZlcmVuY2U9RmFsc2UsUGluVHlwZS5iSXNDb25zdD1GYWxzZSxQaW5UeXBlLmJJc1dlYWtQb2ludGVyPUZhbHNlLFBpblR5cGUuYklzVU9iamVjdFdyYXBwZXI9RmFsc2UsUGluVHlwZS5iU2VyaWFsaXplQXNTaW5nbGVQcmVjaXNpb25GbG9hdD1GYWxzZSxQZXJzaXN0ZW50R3VpZD0wMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMCxiSGlkZGVuPUZhbHNlLGJOb3RDb25uZWN0YWJsZT1GYWxzZSxiRGVmYXVsdFZhbHVlSXNSZWFkT25seT1GYWxzZSxiRGVmYXVsdFZhbHVlSXNJZ25vcmVkPUZhbHNlLGJBZHZhbmNlZFZpZXc9RmFsc2UsYk9ycGhhbmVkUGluPUZhbHNlLCkNCiAgIEN1c3RvbVByb3BlcnRpZXMgUGluIChQaW5JZD02MEMxOEE0RjQxMkY0RDBCQkE1OEQ4NTlBNTgxRTFCOCxQaW5OYW1lPSJEZXN0IixEaXJlY3Rpb249IkVHUERfT3V0cHV0IixQaW5UeXBlLlBpbkNhdGVnb3J5PSJUeXBlIixQaW5UeXBlLlBpblN1YkNhdGVnb3J5PSIiLFBpblR5cGUuUGluU3ViQ2F0ZWdvcnlPYmplY3Q9Ii9TY3JpcHQvQ29yZVVPYmplY3QuU2NyaXB0U3RydWN0Jy9TY3JpcHQvTmlhZ2FyYS5OaWFnYXJhUGFyYW1ldGVyTWFwJyIsUGluVHlwZS5QaW5TdWJDYXRlZ29yeU1lbWJlclJlZmVyZW5jZT0oKSxQaW5UeXBlLlBpblZhbHVlVHlwZT0oKSxQaW5UeXBlLkNvbnRhaW5lclR5cGU9Tm9uZSxQaW5UeXBlLmJJc1JlZmVyZW5jZT1GYWxzZSxQaW5UeXBlLmJJc0NvbnN0PUZhbHNlLFBpblR5cGUuYklzV2Vha1BvaW50ZXI9RmFsc2UsUGluVHlwZS5iSXNVT2JqZWN0V3JhcHBlcj1GYWxzZSxQaW5UeXBlLmJTZXJpYWxpemVBc1NpbmdsZVByZWNpc2lvbkZsb2F0PUZhbHNlLFBlcnNpc3RlbnRHdWlkPTAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLGJIaWRkZW49RmFsc2UsYk5vdENvbm5lY3RhYmxlPUZhbHNlLGJEZWZhdWx0VmFsdWVJc1JlYWRPbmx5PUZhbHNlLGJEZWZhdWx0VmFsdWVJc0lnbm9yZWQ9RmFsc2UsYkFkdmFuY2VkVmlldz1GYWxzZSxiT3JwaGFuZWRQaW49RmFsc2UsKQ0KICAgQ3VzdG9tUHJvcGVydGllcyBQaW4gKFBpbklkPTI1NjE1RTJCMDQxNzRDQjVBRjVDMURGREFFREY3RUFBLFBpbk5hbWU9IkxvY2FsLk1vZHVsZS5JbnB1dCIsUGluRnJpZW5kbHlOYW1lPUlOVlRFWFQoIkxvY2FsLk1vZHVsZS5JbnB1dCIpLFBpblR5cGUuUGluQ2F0ZWdvcnk9IkNsYXNzIixQaW5UeXBlLlBpblN1YkNhdGVnb3J5PSJQYXJhbWV0ZXJQaW4iLFBpblR5cGUuUGluU3ViQ2F0ZWdvcnlPYmplY3Q9Ii9TY3JpcHQvQ29yZVVPYmplY3QuQ2xhc3MnL1NjcmlwdC9OaWFnYXJhLk5pYWdhcmFEYXRhSW50ZXJmYWNlUmVuZGVyVGFyZ2V0MkQnIixQaW5UeXBlLlBpblN1YkNhdGVnb3J5TWVtYmVyUmVmZXJlbmNlPSgpLFBpblR5cGUuUGluVmFsdWVUeXBlPSgpLFBpblR5cGUuQ29udGFpbmVyVHlwZT1Ob25lLFBpblR5cGUuYklzUmVmZXJlbmNlPUZhbHNlLFBpblR5cGUuYklzQ29uc3Q9RmFsc2UsUGluVHlwZS5iSXNXZWFrUG9pbnRlcj1GYWxzZSxQaW5UeXBlLmJJc1VPYmplY3RXcmFwcGVyPUZhbHNlLFBpblR5cGUuYlNlcmlhbGl6ZUFzU2luZ2xlUHJlY2lzaW9uRmxvYXQ9RmFsc2UsTGlua2VkVG89KE5pYWdhcmFOb2RlSW5wdXRfMTA5IEM1QUY3M0U4M0QxRDQ0QkNCNDBCNUVEQ0MxNjc4Q0JCLCksUGVyc2lzdGVudEd1aWQ9N0I1Q0M0NTRENUQzNDhFOTlBMDNFMjQ0QzE0MjVGQjAsYkhpZGRlbj1GYWxzZSxiTm90Q29ubmVjdGFibGU9RmFsc2UsYkRlZmF1bHRWYWx1ZUlzUmVhZE9ubHk9RmFsc2UsYkRlZmF1bHRWYWx1ZUlzSWdub3JlZD1GYWxzZSxiQWR2YW5jZWRWaWV3PUZhbHNlLGJPcnBoYW5lZFBpbj1GYWxzZSwpDQogICBDdXN0b21Qcm9wZXJ0aWVzIFBpbiAoUGluSWQ9NUNBMUM0N0VEMEU1NDY5MTg2NDhEMkI1NjU3MDc3M0MsUGluTmFtZT0iTG9jYWwuTW9kdWxlLkNhbWVyYSBSZWxhdGl2ZSBQb3NpdGlvbiIsUGluRnJpZW5kbHlOYW1lPUlOVlRFWFQoIkxvY2FsLk1vZHVsZS5DYW1lcmEgUmVsYXRpdmUgUG9zaXRpb24iKSxQaW5UeXBlLlBpbkNhdGVnb3J5PSJUeXBlIixQaW5UeXBlLlBpblN1YkNhdGVnb3J5PSJQYXJhbWV0ZXJQaW4iLFBpblR5cGUuUGluU3ViQ2F0ZWdvcnlPYmplY3Q9Ii9TY3JpcHQvQ29yZVVPYmplY3QuU2NyaXB0U3RydWN0Jy9TY3JpcHQvQ29yZVVPYmplY3QuVmVjdG9yM2YnIixQaW5UeXBlLlBpblN1YkNhdGVnb3J5TWVtYmVyUmVmZXJlbmNlPSgpLFBpblR5cGUuUGluVmFsdWVUeXBlPSgpLFBpblR5cGUuQ29udGFpbmVyVHlwZT1Ob25lLFBpblR5cGUuYklzUmVmZXJlbmNlPUZhbHNlLFBpblR5cGUuYklzQ29uc3Q9RmFsc2UsUGluVHlwZS5iSXNXZWFrUG9pbnRlcj1GYWxzZSxQaW5UeXBlLmJJc1VPYmplY3RXcmFwcGVyPUZhbHNlLFBpblR5cGUuYlNlcmlhbGl6ZUFzU2luZ2xlUHJlY2lzaW9uRmxvYXQ9RmFsc2UsTGlua2VkVG89KE5pYWdhcmFOb2RlRnVuY3Rpb25DYWxsXzE0IDMyRjBBQkFDREVCNTQ5OEY5MzNCRDk4N0U3RjZCMTM5LCksUGVyc2lzdGVudEd1aWQ9MTI4NTcyQTRENTIwNENCQUJGRjE1RDRGM0I4QzdFMjcsYkhpZGRlbj1GYWxzZSxiTm90Q29ubmVjdGFibGU9RmFsc2UsYkRlZmF1bHRWYWx1ZUlzUmVhZE9ubHk9RmFsc2UsYkRlZmF1bHRWYWx1ZUlzSWdub3JlZD1GYWxzZSxiQWR2YW5jZWRWaWV3PUZhbHNlLGJPcnBoYW5lZFBpbj1GYWxzZSwpDQogICBDdXN0b21Qcm9wZXJ0aWVzIFBpbiAoUGluSWQ9QzE5QzEzQjE2RUJBNDM1Q0I1NURDMzNCMkVGRjU2NkIsUGluTmFtZT0iTG9jYWwuTW9kdWxlLklucHV0MDAxIixQaW5GcmllbmRseU5hbWU9SU5WVEVYVCgiTG9jYWwuTW9kdWxlLklucHV0MDAxIiksUGluVHlwZS5QaW5DYXRlZ29yeT0iVHlwZSIsUGluVHlwZS5QaW5TdWJDYXRlZ29yeT0iUGFyYW1ldGVyUGluIixQaW5UeXBlLlBpblN1YkNhdGVnb3J5T2JqZWN0PSIvU2NyaXB0L0NvcmVVT2JqZWN0LlNjcmlwdFN0cnVjdCcvU2NyaXB0L0NvcmVVT2JqZWN0LlZlY3RvcjNmJyIsUGluVHlwZS5QaW5TdWJDYXRlZ29yeU1lbWJlclJlZmVyZW5jZT0oKSxQaW5UeXBlLlBpblZhbHVlVHlwZT0oKSxQaW5UeXBlLkNvbnRhaW5lclR5cGU9Tm9uZSxQaW5UeXBlLmJJc1JlZmVyZW5jZT1GYWxzZSxQaW5UeXBlLmJJc0NvbnN0PUZhbHNlLFBpblR5cGUuYklzV2Vha1BvaW50ZXI9RmFsc2UsUGluVHlwZS5iSXNVT2JqZWN0V3JhcHBlcj1GYWxzZSxQaW5UeXBlLmJTZXJpYWxpemVBc1NpbmdsZVByZWNpc2lvbkZsb2F0PUZhbHNlLExpbmtlZFRvPShOaWFnYXJhTm9kZUlucHV0XzAgOTlDMkM5ODg0M0E5NDQzMkQ5RTdFMjg3MjBGNTVGQzcsKSxQZXJzaXN0ZW50R3VpZD05NzYwNzZGMzU2RTg0MzM0QTQxQzY1RDgyMDE2NjE5MCxiSGlkZGVuPUZhbHNlLGJOb3RDb25uZWN0YWJsZT1GYWxzZSxiRGVmYXVsdFZhbHVlSXNSZWFkT25seT1GYWxzZSxiRGVmYXVsdFZhbHVlSXNJZ25vcmVkPUZhbHNlLGJBZHZhbmNlZFZpZXc9RmFsc2UsYk9ycGhhbmVkUGluPUZhbHNlLCkNCiAgIEN1c3RvbVByb3BlcnRpZXMgUGluIChQaW5JZD0wRTdERDc5MDhFQjM0MkFBOEZGNjA0NDdBQjU5RTE4QSxQaW5OYW1lPSJMb2NhbC5Nb2R1bGUuWCIsUGluRnJpZW5kbHlOYW1lPUlOVlRFWFQoIkxvY2FsLk1vZHVsZS5YIiksUGluVHlwZS5QaW5DYXRlZ29yeT0iVHlwZSIsUGluVHlwZS5QaW5TdWJDYXRlZ29yeT0iUGFyYW1ldGVyUGluIixQaW5UeXBlLlBpblN1YkNhdGVnb3J5T2JqZWN0PSIvU2NyaXB0L0NvcmVVT2JqZWN0LlNjcmlwdFN0cnVjdCcvU2NyaXB0L0NvcmVVT2JqZWN0LlZlY3RvcjNmJyIsUGluVHlwZS5QaW5TdWJDYXRlZ29yeU1lbWJlclJlZmVyZW5jZT0oKSxQaW5UeXBlLlBpblZhbHVlVHlwZT0oKSxQaW5UeXBlLkNvbnRhaW5lclR5cGU9Tm9uZSxQaW5UeXBlLmJJc1JlZmVyZW5jZT1GYWxzZSxQaW5UeXBlLmJJc0NvbnN0PUZhbHNlLFBpblR5cGUuYklzV2Vha1BvaW50ZXI9RmFsc2UsUGluVHlwZS5iSXNVT2JqZWN0V3JhcHBlcj1GYWxzZSxQaW5UeXBlLmJTZXJpYWxpemVBc1NpbmdsZVByZWNpc2lvbkZsb2F0PUZhbHNlLExpbmtlZFRvPShOaWFnYXJhTm9kZUZ1bmN0aW9uQ2FsbF8xNjQgQjdDNTc1QkM4RjI3NDVGQTlGRTJCQkE0RjQzOTdBNzksKSxQZXJzaXN0ZW50R3VpZD01NjBFMjc3NTNGODk0M0ZCOTM5NTU4MzYxRDVFMDFBMixiSGlkZGVuPUZhbHNlLGJOb3RDb25uZWN0YWJsZT1GYWxzZSxiRGVmYXVsdFZhbHVlSXNSZWFkT25seT1GYWxzZSxiRGVmYXVsdFZhbHVlSXNJZ25vcmVkPUZhbHNlLGJBZHZhbmNlZFZpZXc9RmFsc2UsYk9ycGhhbmVkUGluPUZhbHNlLCkNCiAgIEN1c3RvbVByb3BlcnRpZXMgUGluIChQaW5JZD0zNDUwNkNFOTc1M0U0QzEyODA2M0EwQjk0MzY5RTkyNixQaW5OYW1lPSJMb2NhbC5Nb2R1bGUuQ2FtZXJhIFJlbGF0aXZlIFBvc2l0aW9uIixQaW5GcmllbmRseU5hbWU9SU5WVEVYVCgiTG9jYWwuTW9kdWxlLkNhbWVyYSBSZWxhdGl2ZSBQb3NpdGlvbiIpLFBpblR5cGUuUGluQ2F0ZWdvcnk9IlR5cGUiLFBpblR5cGUuUGluU3ViQ2F0ZWdvcnk9IlBhcmFtZXRlclBpbiIsUGluVHlwZS5QaW5TdWJDYXRlZ29yeU9iamVjdD0iL1NjcmlwdC9Db3JlVU9iamVjdC5TY3JpcHRTdHJ1Y3QnL1NjcmlwdC9Db3JlVU9iamVjdC5WZWN0b3IzZiciLFBpblR5cGUuUGluU3ViQ2F0ZWdvcnlNZW1iZXJSZWZlcmVuY2U9KCksUGluVHlwZS5QaW5WYWx1ZVR5cGU9KCksUGluVHlwZS5Db250YWluZXJUeXBlPU5vbmUsUGluVHlwZS5iSXNSZWZlcmVuY2U9RmFsc2UsUGluVHlwZS5iSXNDb25zdD1GYWxzZSxQaW5UeXBlLmJJc1dlYWtQb2ludGVyPUZhbHNlLFBpblR5cGUuYklzVU9iamVjdFdyYXBwZXI9RmFsc2UsUGluVHlwZS5iU2VyaWFsaXplQXNTaW5nbGVQcmVjaXNpb25GbG9hdD1GYWxzZSxMaW5rZWRUbz0oTmlhZ2FyYU5vZGVGdW5jdGlvbkNhbGxfMTQgMzJGMEFCQUNERUI1NDk4RjkzM0JEOTg3RTdGNkIxMzksKSxQZXJzaXN0ZW50R3VpZD0zREJFOUNDNDA0MDA0Qzg2OTZDNTUyQjJCQkI2MDc4NixiSGlkZGVuPUZhbHNlLGJOb3RDb25uZWN0YWJsZT1GYWxzZSxiRGVmYXVsdFZhbHVlSXNSZWFkT25seT1GYWxzZSxiRGVmYXVsdFZhbHVlSXNJZ25vcmVkPUZhbHNlLGJBZHZhbmNlZFZpZXc9RmFsc2UsYk9ycGhhbmVkUGluPUZhbHNlLCkNCiAgIEN1c3RvbVByb3BlcnRpZXMgUGluIChQaW5JZD0zRjJGQjY0NkEyMDc0QjlEQkVBRkI5NEM5Qjc0MjYwRCxQaW5OYW1lPSJBZGQiLFBpblR5cGUuUGluQ2F0ZWdvcnk9Ik1pc2MiLFBpblR5cGUuUGluU3ViQ2F0ZWdvcnk9IkR5bmFtaWNBZGRQaW4iLFBpblR5cGUuUGluU3ViQ2F0ZWdvcnlPYmplY3Q9Tm9uZSxQaW5UeXBlLlBpblN1YkNhdGVnb3J5TWVtYmVyUmVmZXJlbmNlPSgpLFBpblR5cGUuUGluVmFsdWVUeXBlPSgpLFBpblR5cGUuQ29udGFpbmVyVHlwZT1Ob25lLFBpblR5cGUuYklzUmVmZXJlbmNlPUZhbHNlLFBpblR5cGUuYklzQ29uc3Q9RmFsc2UsUGluVHlwZS5iSXNXZWFrUG9pbnRlcj1GYWxzZSxQaW5UeXBlLmJJc1VPYmplY3RXcmFwcGVyPUZhbHNlLFBpblR5cGUuYlNlcmlhbGl6ZUFzU2luZ2xlUHJlY2lzaW9uRmxvYXQ9RmFsc2UsUGVyc2lzdGVudEd1aWQ9MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAsYkhpZGRlbj1GYWxzZSxiTm90Q29ubmVjdGFibGU9RmFsc2UsYkRlZmF1bHRWYWx1ZUlzUmVhZE9ubHk9RmFsc2UsYkRlZmF1bHRWYWx1ZUlzSWdub3JlZD1GYWxzZSxiQWR2YW5jZWRWaWV3PUZhbHNlLGJPcnBoYW5lZFBpbj1GYWxzZSwpDQpFbmQgT2JqZWN0DQo=" + End Object + ` + await blueprintPage.paste(source) + source = String.raw` + Begin Object Class=/Script/NiagaraEditor.NiagaraClipboardContent Name="NiagaraClipboardContent_8" ExportPath="/Script/NiagaraEditor.NiagaraClipboardContent'/Engine/Transient.NiagaraClipboardContent_8'" + Begin Object Class=/Script/NiagaraEditor.NiagaraScriptVariable Name="NiagaraScriptVariable_4" ExportPath="/Script/NiagaraEditor.NiagaraScriptVariable'/Engine/Transient.NiagaraClipboardContent_8:NiagaraScriptVariable_4'" + End Object + Begin Object Class=/Script/NiagaraEditor.NiagaraScriptVariable Name="NiagaraScriptVariable_3" ExportPath="/Script/NiagaraEditor.NiagaraScriptVariable'/Engine/Transient.NiagaraClipboardContent_8:NiagaraScriptVariable_3'" + End Object + Begin Object Class=/Script/NiagaraEditor.NiagaraScriptVariable Name="NiagaraScriptVariable_2" ExportPath="/Script/NiagaraEditor.NiagaraScriptVariable'/Engine/Transient.NiagaraClipboardContent_8:NiagaraScriptVariable_2'" + End Object + Begin Object Class=/Script/NiagaraEditor.NiagaraScriptVariable Name="NiagaraScriptVariable_1" ExportPath="/Script/NiagaraEditor.NiagaraScriptVariable'/Engine/Transient.NiagaraClipboardContent_8:NiagaraScriptVariable_1'" + End Object + Begin Object Class=/Script/NiagaraEditor.NiagaraScriptVariable Name="NiagaraScriptVariable_0" ExportPath="/Script/NiagaraEditor.NiagaraScriptVariable'/Engine/Transient.NiagaraClipboardContent_8:NiagaraScriptVariable_0'" + End Object + Begin Object Name="NiagaraScriptVariable_4" ExportPath="/Script/NiagaraEditor.NiagaraScriptVariable'/Engine/Transient.NiagaraClipboardContent_8:NiagaraScriptVariable_4'" + DefaultMode=FailIfPreviouslyNotSet + Variable=(VarData=(0,0,0,0,0,0,0,0,0,0,0,0),Name="Local.Module.X",TypeDefHandle=(RegisteredTypeIndex=88)) + Metadata=(VariableGuid=9661E7AE20234E159801C8E970F0D03D) + DefaultValueVariant=(Bytes=(0,0,0,0,0,0,0,0,0,0,0,0),CurrentMode=Bytes) + ChangeId=751E3204296A40409ADC4335E4C33CE6 + End Object + Begin Object Name="NiagaraScriptVariable_3" ExportPath="/Script/NiagaraEditor.NiagaraScriptVariable'/Engine/Transient.NiagaraClipboardContent_8:NiagaraScriptVariable_3'" + DefaultMode=FailIfPreviouslyNotSet + Variable=(VarData=(0,0,0,0,0,0,0,0,0,0,0,0),Name="Local.Module.Camera Relative Position",TypeDefHandle=(RegisteredTypeIndex=88)) + Metadata=(VariableGuid=0AD251B024C14B9AB06AAF654E8A3FF1) + DefaultValueVariant=(Bytes=(0,0,0,0,0,0,0,0,0,0,0,0),CurrentMode=Bytes) + ChangeId=4DD48BD81EA444099BB03E1AAE4F201E + End Object + Begin Object Name="NiagaraScriptVariable_2" ExportPath="/Script/NiagaraEditor.NiagaraScriptVariable'/Engine/Transient.NiagaraClipboardContent_8:NiagaraScriptVariable_2'" + DefaultMode=FailIfPreviouslyNotSet + Variable=(VarData=(0,0,0,0,0,0,0,0,0,0,0,0),Name="Local.Module.NewOutput",TypeDefHandle=(RegisteredTypeIndex=91)) + Metadata=(VariableGuid=274F4E069AD943DBAAB943F92BE558EA) + DefaultValueVariant=(Bytes=(0,0,0,0,0,0,0,0,0,0,0,0),CurrentMode=Bytes) + ChangeId=DE05B442E3734F5D9AEA76603B33E271 + End Object + Begin Object Name="NiagaraScriptVariable_1" ExportPath="/Script/NiagaraEditor.NiagaraScriptVariable'/Engine/Transient.NiagaraClipboardContent_8:NiagaraScriptVariable_1'" + DefaultMode=FailIfPreviouslyNotSet + Variable=(VarData=(0,0,0,0,0,0,0,0,0,0,0,0),Name="Local.Module.Input001",TypeDefHandle=(RegisteredTypeIndex=88)) + Metadata=(VariableGuid=775A1228426C413AB95CB9049C1E993A) + DefaultValueVariant=(Bytes=(0,0,0,0,0,0,0,0,0,0,0,0),CurrentMode=Bytes) + ChangeId=C38E0F30344D4A2689CC7972DFBAA6FA + End Object + Begin Object Name="NiagaraScriptVariable_0" ExportPath="/Script/NiagaraEditor.NiagaraScriptVariable'/Engine/Transient.NiagaraClipboardContent_8:NiagaraScriptVariable_0'" + DefaultMode=FailIfPreviouslyNotSet + Variable=(Name="Local.Module.Input",TypeDefHandle=(RegisteredTypeIndex=59)) + Metadata=(VariableGuid=0DAA63BD5851469990B3FE12816255A5) + ChangeId=2312FB889A9640CFA45B3A9E4AF7FC01 + End Object + ScriptVariables(0)=(ScriptVariable="/Script/NiagaraEditor.NiagaraScriptVariable'NiagaraScriptVariable_0'",OriginalChangeId=2312FB889A9640CFA45B3A9E4AF7FC01) + ScriptVariables(1)=(ScriptVariable="/Script/NiagaraEditor.NiagaraScriptVariable'NiagaraScriptVariable_1'",OriginalChangeId=C38E0F30344D4A2689CC7972DFBAA6FA) + ScriptVariables(2)=(ScriptVariable="/Script/NiagaraEditor.NiagaraScriptVariable'NiagaraScriptVariable_2'",OriginalChangeId=DE05B442E3734F5D9AEA76603B33E271) + ScriptVariables(3)=(ScriptVariable="/Script/NiagaraEditor.NiagaraScriptVariable'NiagaraScriptVariable_3'",OriginalChangeId=4DD48BD81EA444099BB03E1AAE4F201E) + ScriptVariables(4)=(ScriptVariable="/Script/NiagaraEditor.NiagaraScriptVariable'NiagaraScriptVariable_4'",OriginalChangeId=751E3204296A40409ADC4335E4C33CE6) + ExportedNodes="QmVnaW4gT2JqZWN0IENsYXNzPS9TY3JpcHQvTmlhZ2FyYUVkaXRvci5OaWFnYXJhTm9kZVBhcmFtZXRlck1hcFNldCBOYW1lPSJOaWFnYXJhTm9kZVBhcmFtZXRlck1hcFNldF8xIiBFeHBvcnRQYXRoPSIvU2NyaXB0L05pYWdhcmFFZGl0b3IuTmlhZ2FyYU5vZGVQYXJhbWV0ZXJNYXBTZXQnL0VuZ2luZS9UcmFuc2llbnQuTmV3TmlhZ2FyYVNjcmlwdDI6TmlhZ2FyYVNjcmlwdFNvdXJjZV8wLk5pYWdhcmFHcmFwaF8wLk5pYWdhcmFOb2RlUGFyYW1ldGVyTWFwU2V0XzEnIgogICBDaGFuZ2VJZD05MzVGMjRENzMyMUE0NTREQUNENUY4NzMzNTE3NTVEMg0KICAgTm9kZVBvc1g9LTIyNA0KICAgTm9kZVBvc1k9MTQ0DQogICBOb2RlR3VpZD0yNkEwMEIzNUI4Q0E0RDcwQkVEMTQyODJGRTZENzNFMg0KICAgQ3VzdG9tUHJvcGVydGllcyBQaW4gKFBpbklkPUVDRDQxQjgwQTc5NTQzNUJCQjQwMTA5MkZGOTgwOTQ5LFBpbk5hbWU9IlNvdXJjZSIsUGluVHlwZS5QaW5DYXRlZ29yeT0iVHlwZSIsUGluVHlwZS5QaW5TdWJDYXRlZ29yeT0iIixQaW5UeXBlLlBpblN1YkNhdGVnb3J5T2JqZWN0PSIvU2NyaXB0L0NvcmVVT2JqZWN0LlNjcmlwdFN0cnVjdCcvU2NyaXB0L05pYWdhcmEuTmlhZ2FyYVBhcmFtZXRlck1hcCciLFBpblR5cGUuUGluU3ViQ2F0ZWdvcnlNZW1iZXJSZWZlcmVuY2U9KCksUGluVHlwZS5QaW5WYWx1ZVR5cGU9KCksUGluVHlwZS5Db250YWluZXJUeXBlPU5vbmUsUGluVHlwZS5iSXNSZWZlcmVuY2U9RmFsc2UsUGluVHlwZS5iSXNDb25zdD1GYWxzZSxQaW5UeXBlLmJJc1dlYWtQb2ludGVyPUZhbHNlLFBpblR5cGUuYklzVU9iamVjdFdyYXBwZXI9RmFsc2UsUGluVHlwZS5iU2VyaWFsaXplQXNTaW5nbGVQcmVjaXNpb25GbG9hdD1GYWxzZSxQZXJzaXN0ZW50R3VpZD0wMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMCxiSGlkZGVuPUZhbHNlLGJOb3RDb25uZWN0YWJsZT1GYWxzZSxiRGVmYXVsdFZhbHVlSXNSZWFkT25seT1GYWxzZSxiRGVmYXVsdFZhbHVlSXNJZ25vcmVkPUZhbHNlLGJBZHZhbmNlZFZpZXc9RmFsc2UsYk9ycGhhbmVkUGluPUZhbHNlLCkNCiAgIEN1c3RvbVByb3BlcnRpZXMgUGluIChQaW5JZD02MEMxOEE0RjQxMkY0RDBCQkE1OEQ4NTlBNTgxRTFCOCxQaW5OYW1lPSJEZXN0IixEaXJlY3Rpb249IkVHUERfT3V0cHV0IixQaW5UeXBlLlBpbkNhdGVnb3J5PSJUeXBlIixQaW5UeXBlLlBpblN1YkNhdGVnb3J5PSIiLFBpblR5cGUuUGluU3ViQ2F0ZWdvcnlPYmplY3Q9Ii9TY3JpcHQvQ29yZVVPYmplY3QuU2NyaXB0U3RydWN0Jy9TY3JpcHQvTmlhZ2FyYS5OaWFnYXJhUGFyYW1ldGVyTWFwJyIsUGluVHlwZS5QaW5TdWJDYXRlZ29yeU1lbWJlclJlZmVyZW5jZT0oKSxQaW5UeXBlLlBpblZhbHVlVHlwZT0oKSxQaW5UeXBlLkNvbnRhaW5lclR5cGU9Tm9uZSxQaW5UeXBlLmJJc1JlZmVyZW5jZT1GYWxzZSxQaW5UeXBlLmJJc0NvbnN0PUZhbHNlLFBpblR5cGUuYklzV2Vha1BvaW50ZXI9RmFsc2UsUGluVHlwZS5iSXNVT2JqZWN0V3JhcHBlcj1GYWxzZSxQaW5UeXBlLmJTZXJpYWxpemVBc1NpbmdsZVByZWNpc2lvbkZsb2F0PUZhbHNlLFBlcnNpc3RlbnRHdWlkPTAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLGJIaWRkZW49RmFsc2UsYk5vdENvbm5lY3RhYmxlPUZhbHNlLGJEZWZhdWx0VmFsdWVJc1JlYWRPbmx5PUZhbHNlLGJEZWZhdWx0VmFsdWVJc0lnbm9yZWQ9RmFsc2UsYkFkdmFuY2VkVmlldz1GYWxzZSxiT3JwaGFuZWRQaW49RmFsc2UsKQ0KICAgQ3VzdG9tUHJvcGVydGllcyBQaW4gKFBpbklkPTI1NjE1RTJCMDQxNzRDQjVBRjVDMURGREFFREY3RUFBLFBpbk5hbWU9IkxvY2FsLk1vZHVsZS5JbnB1dCIsUGluRnJpZW5kbHlOYW1lPUlOVlRFWFQoIkxvY2FsLk1vZHVsZS5JbnB1dCIpLFBpblR5cGUuUGluQ2F0ZWdvcnk9IkNsYXNzIixQaW5UeXBlLlBpblN1YkNhdGVnb3J5PSJQYXJhbWV0ZXJQaW4iLFBpblR5cGUuUGluU3ViQ2F0ZWdvcnlPYmplY3Q9Ii9TY3JpcHQvQ29yZVVPYmplY3QuQ2xhc3MnL1NjcmlwdC9OaWFnYXJhLk5pYWdhcmFEYXRhSW50ZXJmYWNlUmVuZGVyVGFyZ2V0MkQnIixQaW5UeXBlLlBpblN1YkNhdGVnb3J5TWVtYmVyUmVmZXJlbmNlPSgpLFBpblR5cGUuUGluVmFsdWVUeXBlPSgpLFBpblR5cGUuQ29udGFpbmVyVHlwZT1Ob25lLFBpblR5cGUuYklzUmVmZXJlbmNlPUZhbHNlLFBpblR5cGUuYklzQ29uc3Q9RmFsc2UsUGluVHlwZS5iSXNXZWFrUG9pbnRlcj1GYWxzZSxQaW5UeXBlLmJJc1VPYmplY3RXcmFwcGVyPUZhbHNlLFBpblR5cGUuYlNlcmlhbGl6ZUFzU2luZ2xlUHJlY2lzaW9uRmxvYXQ9RmFsc2UsTGlua2VkVG89KE5pYWdhcmFOb2RlSW5wdXRfMTA5IEM1QUY3M0U4M0QxRDQ0QkNCNDBCNUVEQ0MxNjc4Q0JCLCksUGVyc2lzdGVudEd1aWQ9N0I1Q0M0NTRENUQzNDhFOTlBMDNFMjQ0QzE0MjVGQjAsYkhpZGRlbj1GYWxzZSxiTm90Q29ubmVjdGFibGU9RmFsc2UsYkRlZmF1bHRWYWx1ZUlzUmVhZE9ubHk9RmFsc2UsYkRlZmF1bHRWYWx1ZUlzSWdub3JlZD1GYWxzZSxiQWR2YW5jZWRWaWV3PUZhbHNlLGJPcnBoYW5lZFBpbj1GYWxzZSwpDQogICBDdXN0b21Qcm9wZXJ0aWVzIFBpbiAoUGluSWQ9NUNBMUM0N0VEMEU1NDY5MTg2NDhEMkI1NjU3MDc3M0MsUGluTmFtZT0iTG9jYWwuTW9kdWxlLkNhbWVyYSBSZWxhdGl2ZSBQb3NpdGlvbiIsUGluRnJpZW5kbHlOYW1lPUlOVlRFWFQoIkxvY2FsLk1vZHVsZS5DYW1lcmEgUmVsYXRpdmUgUG9zaXRpb24iKSxQaW5UeXBlLlBpbkNhdGVnb3J5PSJUeXBlIixQaW5UeXBlLlBpblN1YkNhdGVnb3J5PSJQYXJhbWV0ZXJQaW4iLFBpblR5cGUuUGluU3ViQ2F0ZWdvcnlPYmplY3Q9Ii9TY3JpcHQvQ29yZVVPYmplY3QuU2NyaXB0U3RydWN0Jy9TY3JpcHQvQ29yZVVPYmplY3QuVmVjdG9yM2YnIixQaW5UeXBlLlBpblN1YkNhdGVnb3J5TWVtYmVyUmVmZXJlbmNlPSgpLFBpblR5cGUuUGluVmFsdWVUeXBlPSgpLFBpblR5cGUuQ29udGFpbmVyVHlwZT1Ob25lLFBpblR5cGUuYklzUmVmZXJlbmNlPUZhbHNlLFBpblR5cGUuYklzQ29uc3Q9RmFsc2UsUGluVHlwZS5iSXNXZWFrUG9pbnRlcj1GYWxzZSxQaW5UeXBlLmJJc1VPYmplY3RXcmFwcGVyPUZhbHNlLFBpblR5cGUuYlNlcmlhbGl6ZUFzU2luZ2xlUHJlY2lzaW9uRmxvYXQ9RmFsc2UsTGlua2VkVG89KE5pYWdhcmFOb2RlRnVuY3Rpb25DYWxsXzE0IDMyRjBBQkFDREVCNTQ5OEY5MzNCRDk4N0U3RjZCMTM5LCksUGVyc2lzdGVudEd1aWQ9MTI4NTcyQTRENTIwNENCQUJGRjE1RDRGM0I4QzdFMjcsYkhpZGRlbj1GYWxzZSxiTm90Q29ubmVjdGFibGU9RmFsc2UsYkRlZmF1bHRWYWx1ZUlzUmVhZE9ubHk9RmFsc2UsYkRlZmF1bHRWYWx1ZUlzSWdub3JlZD1GYWxzZSxiQWR2YW5jZWRWaWV3PUZhbHNlLGJPcnBoYW5lZFBpbj1GYWxzZSwpDQogICBDdXN0b21Qcm9wZXJ0aWVzIFBpbiAoUGluSWQ9QzE5QzEzQjE2RUJBNDM1Q0I1NURDMzNCMkVGRjU2NkIsUGluTmFtZT0iTG9jYWwuTW9kdWxlLklucHV0MDAxIixQaW5GcmllbmRseU5hbWU9SU5WVEVYVCgiTG9jYWwuTW9kdWxlLklucHV0MDAxIiksUGluVHlwZS5QaW5DYXRlZ29yeT0iVHlwZSIsUGluVHlwZS5QaW5TdWJDYXRlZ29yeT0iUGFyYW1ldGVyUGluIixQaW5UeXBlLlBpblN1YkNhdGVnb3J5T2JqZWN0PSIvU2NyaXB0L0NvcmVVT2JqZWN0LlNjcmlwdFN0cnVjdCcvU2NyaXB0L0NvcmVVT2JqZWN0LlZlY3RvcjNmJyIsUGluVHlwZS5QaW5TdWJDYXRlZ29yeU1lbWJlclJlZmVyZW5jZT0oKSxQaW5UeXBlLlBpblZhbHVlVHlwZT0oKSxQaW5UeXBlLkNvbnRhaW5lclR5cGU9Tm9uZSxQaW5UeXBlLmJJc1JlZmVyZW5jZT1GYWxzZSxQaW5UeXBlLmJJc0NvbnN0PUZhbHNlLFBpblR5cGUuYklzV2Vha1BvaW50ZXI9RmFsc2UsUGluVHlwZS5iSXNVT2JqZWN0V3JhcHBlcj1GYWxzZSxQaW5UeXBlLmJTZXJpYWxpemVBc1NpbmdsZVByZWNpc2lvbkZsb2F0PUZhbHNlLExpbmtlZFRvPShOaWFnYXJhTm9kZUlucHV0XzAgOTlDMkM5ODg0M0E5NDQzMkQ5RTdFMjg3MjBGNTVGQzcsKSxQZXJzaXN0ZW50R3VpZD05NzYwNzZGMzU2RTg0MzM0QTQxQzY1RDgyMDE2NjE5MCxiSGlkZGVuPUZhbHNlLGJOb3RDb25uZWN0YWJsZT1GYWxzZSxiRGVmYXVsdFZhbHVlSXNSZWFkT25seT1GYWxzZSxiRGVmYXVsdFZhbHVlSXNJZ25vcmVkPUZhbHNlLGJBZHZhbmNlZFZpZXc9RmFsc2UsYk9ycGhhbmVkUGluPUZhbHNlLCkNCiAgIEN1c3RvbVByb3BlcnRpZXMgUGluIChQaW5JZD0wRTdERDc5MDhFQjM0MkFBOEZGNjA0NDdBQjU5RTE4QSxQaW5OYW1lPSJMb2NhbC5Nb2R1bGUuWCIsUGluRnJpZW5kbHlOYW1lPUlOVlRFWFQoIkxvY2FsLk1vZHVsZS5YIiksUGluVHlwZS5QaW5DYXRlZ29yeT0iVHlwZSIsUGluVHlwZS5QaW5TdWJDYXRlZ29yeT0iUGFyYW1ldGVyUGluIixQaW5UeXBlLlBpblN1YkNhdGVnb3J5T2JqZWN0PSIvU2NyaXB0L0NvcmVVT2JqZWN0LlNjcmlwdFN0cnVjdCcvU2NyaXB0L0NvcmVVT2JqZWN0LlZlY3RvcjNmJyIsUGluVHlwZS5QaW5TdWJDYXRlZ29yeU1lbWJlclJlZmVyZW5jZT0oKSxQaW5UeXBlLlBpblZhbHVlVHlwZT0oKSxQaW5UeXBlLkNvbnRhaW5lclR5cGU9Tm9uZSxQaW5UeXBlLmJJc1JlZmVyZW5jZT1GYWxzZSxQaW5UeXBlLmJJc0NvbnN0PUZhbHNlLFBpblR5cGUuYklzV2Vha1BvaW50ZXI9RmFsc2UsUGluVHlwZS5iSXNVT2JqZWN0V3JhcHBlcj1GYWxzZSxQaW5UeXBlLmJTZXJpYWxpemVBc1NpbmdsZVByZWNpc2lvbkZsb2F0PUZhbHNlLExpbmtlZFRvPShOaWFnYXJhTm9kZUZ1bmN0aW9uQ2FsbF8xNjQgQjdDNTc1QkM4RjI3NDVGQTlGRTJCQkE0RjQzOTdBNzksKSxQZXJzaXN0ZW50R3VpZD01NjBFMjc3NTNGODk0M0ZCOTM5NTU4MzYxRDVFMDFBMixiSGlkZGVuPUZhbHNlLGJOb3RDb25uZWN0YWJsZT1GYWxzZSxiRGVmYXVsdFZhbHVlSXNSZWFkT25seT1GYWxzZSxiRGVmYXVsdFZhbHVlSXNJZ25vcmVkPUZhbHNlLGJBZHZhbmNlZFZpZXc9RmFsc2UsYk9ycGhhbmVkUGluPUZhbHNlLCkNCiAgIEN1c3RvbVByb3BlcnRpZXMgUGluIChQaW5JZD0zNDUwNkNFOTc1M0U0QzEyODA2M0EwQjk0MzY5RTkyNixQaW5OYW1lPSJMb2NhbC5Nb2R1bGUuQ2FtZXJhIFJlbGF0aXZlIFBvc2l0aW9uIixQaW5GcmllbmRseU5hbWU9SU5WVEVYVCgiTG9jYWwuTW9kdWxlLkNhbWVyYSBSZWxhdGl2ZSBQb3NpdGlvbiIpLFBpblR5cGUuUGluQ2F0ZWdvcnk9IlR5cGUiLFBpblR5cGUuUGluU3ViQ2F0ZWdvcnk9IlBhcmFtZXRlclBpbiIsUGluVHlwZS5QaW5TdWJDYXRlZ29yeU9iamVjdD0iL1NjcmlwdC9Db3JlVU9iamVjdC5TY3JpcHRTdHJ1Y3QnL1NjcmlwdC9Db3JlVU9iamVjdC5WZWN0b3IzZiciLFBpblR5cGUuUGluU3ViQ2F0ZWdvcnlNZW1iZXJSZWZlcmVuY2U9KCksUGluVHlwZS5QaW5WYWx1ZVR5cGU9KCksUGluVHlwZS5Db250YWluZXJUeXBlPU5vbmUsUGluVHlwZS5iSXNSZWZlcmVuY2U9RmFsc2UsUGluVHlwZS5iSXNDb25zdD1GYWxzZSxQaW5UeXBlLmJJc1dlYWtQb2ludGVyPUZhbHNlLFBpblR5cGUuYklzVU9iamVjdFdyYXBwZXI9RmFsc2UsUGluVHlwZS5iU2VyaWFsaXplQXNTaW5nbGVQcmVjaXNpb25GbG9hdD1GYWxzZSxMaW5rZWRUbz0oTmlhZ2FyYU5vZGVGdW5jdGlvbkNhbGxfMTQgMzJGMEFCQUNERUI1NDk4RjkzM0JEOTg3RTdGNkIxMzksKSxQZXJzaXN0ZW50R3VpZD0zREJFOUNDNDA0MDA0Qzg2OTZDNTUyQjJCQkI2MDc4NixiSGlkZGVuPUZhbHNlLGJOb3RDb25uZWN0YWJsZT1GYWxzZSxiRGVmYXVsdFZhbHVlSXNSZWFkT25seT1GYWxzZSxiRGVmYXVsdFZhbHVlSXNJZ25vcmVkPUZhbHNlLGJBZHZhbmNlZFZpZXc9RmFsc2UsYk9ycGhhbmVkUGluPUZhbHNlLCkNCiAgIEN1c3RvbVByb3BlcnRpZXMgUGluIChQaW5JZD0zRjJGQjY0NkEyMDc0QjlEQkVBRkI5NEM5Qjc0MjYwRCxQaW5OYW1lPSJBZGQiLFBpblR5cGUuUGluQ2F0ZWdvcnk9Ik1pc2MiLFBpblR5cGUuUGluU3ViQ2F0ZWdvcnk9IkR5bmFtaWNBZGRQaW4iLFBpblR5cGUuUGluU3ViQ2F0ZWdvcnlPYmplY3Q9Tm9uZSxQaW5UeXBlLlBpblN1YkNhdGVnb3J5TWVtYmVyUmVmZXJlbmNlPSgpLFBpblR5cGUuUGluVmFsdWVUeXBlPSgpLFBpblR5cGUuQ29udGFpbmVyVHlwZT1Ob25lLFBpblR5cGUuYklzUmVmZXJlbmNlPUZhbHNlLFBpblR5cGUuYklzQ29uc3Q9RmFsc2UsUGluVHlwZS5iSXNXZWFrUG9pbnRlcj1GYWxzZSxQaW5UeXBlLmJJc1VPYmplY3RXcmFwcGVyPUZhbHNlLFBpblR5cGUuYlNlcmlhbGl6ZUFzU2luZ2xlUHJlY2lzaW9uRmxvYXQ9RmFsc2UsUGVyc2lzdGVudEd1aWQ9MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAsYkhpZGRlbj1GYWxzZSxiTm90Q29ubmVjdGFibGU9RmFsc2UsYkRlZmF1bHRWYWx1ZUlzUmVhZE9ubHk9RmFsc2UsYkRlZmF1bHRWYWx1ZUlzSWdub3JlZD1GYWxzZSxiQWR2YW5jZWRWaWV3PUZhbHNlLGJPcnBoYW5lZFBpbj1GYWxzZSwpDQpFbmQgT2JqZWN0DQo=" + End Object + ` + expect(await blueprintPage.blueprintLocator.evaluate(blueprint => blueprint.entity.serialize())) + .toEqual(serialized(source)) + + // Var: Local.Module.Input, Local.Module.Camera Relative Position, Local.Module.X, Particles.RibbonLinkOrder, Particles.SubImageIndex + // Add: Particles.RibbonLinkOrder, Particles.SubImageIndex + // Has: Local.Module.Input, Local.Module.Camera Relative Position, Local.Module.X + source = String.raw` + Begin Object Class=/Script/NiagaraEditor.NiagaraClipboardContent Name="NiagaraClipboardContent_8" ExportPath="/Script/NiagaraEditor.NiagaraClipboardContent'/Engine/Transient.NiagaraClipboardContent_8'" + Begin Object Class=/Script/NiagaraEditor.NiagaraScriptVariable Name="NiagaraScriptVariable_4" ExportPath="/Script/NiagaraEditor.NiagaraScriptVariable'/Engine/Transient.NiagaraClipboardContent_8:NiagaraScriptVariable_4'" + End Object + Begin Object Class=/Script/NiagaraEditor.NiagaraScriptVariable Name="NiagaraScriptVariable_3" ExportPath="/Script/NiagaraEditor.NiagaraScriptVariable'/Engine/Transient.NiagaraClipboardContent_8:NiagaraScriptVariable_3'" + End Object + Begin Object Class=/Script/NiagaraEditor.NiagaraScriptVariable Name="NiagaraScriptVariable_1" ExportPath="/Script/NiagaraEditor.NiagaraScriptVariable'/Engine/Transient.NiagaraClipboardContent_8:NiagaraScriptVariable_1'" + End Object + Begin Object Class=/Script/NiagaraEditor.NiagaraScriptVariable Name="NiagaraScriptVariable_0" ExportPath="/Script/NiagaraEditor.NiagaraScriptVariable'/Engine/Transient.NiagaraClipboardContent_8:NiagaraScriptVariable_0'" + End Object + Begin Object Name="NiagaraScriptVariable_4" ExportPath="/Script/NiagaraEditor.NiagaraScriptVariable'/Engine/Transient.NiagaraClipboardContent_8:NiagaraScriptVariable_4'" + DefaultMode=FailIfPreviouslyNotSet + Variable=(VarData=(0,0,0,0,0,0,0,0,0,0,0,0),Name="Local.Module.X",TypeDefHandle=(RegisteredTypeIndex=88)) + Metadata=(VariableGuid=9661E7AE20234E159801C8E970F0D03D) + DefaultValueVariant=(Bytes=(0,0,0,0,0,0,0,0,0,0,0,0),CurrentMode=Bytes) + ChangeId=751E3204296A40409ADC4335E4C33CE6 + End Object + Begin Object Name="NiagaraScriptVariable_3" ExportPath="/Script/NiagaraEditor.NiagaraScriptVariable'/Engine/Transient.NiagaraClipboardContent_8:NiagaraScriptVariable_3'" + DefaultMode=FailIfPreviouslyNotSet + Variable=(VarData=(0,0,0,0,0,0,0,0,0,0,0,0),Name="Local.Module.Camera Relative Position",TypeDefHandle=(RegisteredTypeIndex=88)) + Metadata=(VariableGuid=0AD251B024C14B9AB06AAF654E8A3FF1) + DefaultValueVariant=(Bytes=(0,0,0,0,0,0,0,0,0,0,0,0),CurrentMode=Bytes) + ChangeId=4DD48BD81EA444099BB03E1AAE4F201E + End Object + Begin Object Name="NiagaraScriptVariable_1" ExportPath="/Script/NiagaraEditor.NiagaraScriptVariable'/Engine/Transient.NiagaraClipboardContent_8:NiagaraScriptVariable_1'" + DefaultMode=FailIfPreviouslyNotSet + Variable=(VarData=(0,0,0,0,0,0,0,0,0,0,0,0),Name="Local.Module.Input001",TypeDefHandle=(RegisteredTypeIndex=88)) + Metadata=(VariableGuid=775A1228426C413AB95CB9049C1E993A) + DefaultValueVariant=(Bytes=(0,0,0,0,0,0,0,0,0,0,0,0),CurrentMode=Bytes) + ChangeId=C38E0F30344D4A2689CC7972DFBAA6FA + End Object + Begin Object Name="NiagaraScriptVariable_0" ExportPath="/Script/NiagaraEditor.NiagaraScriptVariable'/Engine/Transient.NiagaraClipboardContent_8:NiagaraScriptVariable_0'" + DefaultMode=FailIfPreviouslyNotSet + Variable=(Name="Local.Module.Input",TypeDefHandle=(RegisteredTypeIndex=59)) + Metadata=(VariableGuid=0DAA63BD5851469990B3FE12816255A5) + ChangeId=2312FB889A9640CFA45B3A9E4AF7FC01 + End Object + ScriptVariables(0)=(ScriptVariable="/Script/NiagaraEditor.NiagaraScriptVariable'NiagaraScriptVariable_0'",OriginalChangeId=2312FB889A9640CFA45B3A9E4AF7FC01) + ScriptVariables(1)=(ScriptVariable="/Script/NiagaraEditor.NiagaraScriptVariable'NiagaraScriptVariable_1'",OriginalChangeId=C38E0F30344D4A2689CC7972DFBAA6FA) + ScriptVariables(2)=(ScriptVariable="/Script/NiagaraEditor.NiagaraScriptVariable'NiagaraScriptVariable_3'",OriginalChangeId=4DD48BD81EA444099BB03E1AAE4F201E) + ScriptVariables(3)=(ScriptVariable="/Script/NiagaraEditor.NiagaraScriptVariable'NiagaraScriptVariable_4'",OriginalChangeId=751E3204296A40409ADC4335E4C33CE6) + ExportedNodes="QmVnaW4gT2JqZWN0IENsYXNzPS9TY3JpcHQvTmlhZ2FyYUVkaXRvci5OaWFnYXJhTm9kZVBhcmFtZXRlck1hcFNldCBOYW1lPSJOaWFnYXJhTm9kZVBhcmFtZXRlck1hcFNldF8xIiBFeHBvcnRQYXRoPSIvU2NyaXB0L05pYWdhcmFFZGl0b3IuTmlhZ2FyYU5vZGVQYXJhbWV0ZXJNYXBTZXQnL0VuZ2luZS9UcmFuc2llbnQuTmV3TmlhZ2FyYVNjcmlwdDI6TmlhZ2FyYVNjcmlwdFNvdXJjZV8wLk5pYWdhcmFHcmFwaF8wLk5pYWdhcmFOb2RlUGFyYW1ldGVyTWFwU2V0XzEnIgogICBDaGFuZ2VJZD05MzVGMjRENzMyMUE0NTREQUNENUY4NzMzNTE3NTVEMg0KICAgTm9kZVBvc1g9LTIyNA0KICAgTm9kZVBvc1k9MTQ0DQogICBOb2RlR3VpZD0yNkEwMEIzNUI4Q0E0RDcwQkVEMTQyODJGRTZENzNFMg0KICAgQ3VzdG9tUHJvcGVydGllcyBQaW4gKFBpbklkPUVDRDQxQjgwQTc5NTQzNUJCQjQwMTA5MkZGOTgwOTQ5LFBpbk5hbWU9IlNvdXJjZSIsUGluVHlwZS5QaW5DYXRlZ29yeT0iVHlwZSIsUGluVHlwZS5QaW5TdWJDYXRlZ29yeT0iIixQaW5UeXBlLlBpblN1YkNhdGVnb3J5T2JqZWN0PSIvU2NyaXB0L0NvcmVVT2JqZWN0LlNjcmlwdFN0cnVjdCcvU2NyaXB0L05pYWdhcmEuTmlhZ2FyYVBhcmFtZXRlck1hcCciLFBpblR5cGUuUGluU3ViQ2F0ZWdvcnlNZW1iZXJSZWZlcmVuY2U9KCksUGluVHlwZS5QaW5WYWx1ZVR5cGU9KCksUGluVHlwZS5Db250YWluZXJUeXBlPU5vbmUsUGluVHlwZS5iSXNSZWZlcmVuY2U9RmFsc2UsUGluVHlwZS5iSXNDb25zdD1GYWxzZSxQaW5UeXBlLmJJc1dlYWtQb2ludGVyPUZhbHNlLFBpblR5cGUuYklzVU9iamVjdFdyYXBwZXI9RmFsc2UsUGluVHlwZS5iU2VyaWFsaXplQXNTaW5nbGVQcmVjaXNpb25GbG9hdD1GYWxzZSxQZXJzaXN0ZW50R3VpZD0wMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMCxiSGlkZGVuPUZhbHNlLGJOb3RDb25uZWN0YWJsZT1GYWxzZSxiRGVmYXVsdFZhbHVlSXNSZWFkT25seT1GYWxzZSxiRGVmYXVsdFZhbHVlSXNJZ25vcmVkPUZhbHNlLGJBZHZhbmNlZFZpZXc9RmFsc2UsYk9ycGhhbmVkUGluPUZhbHNlLCkNCiAgIEN1c3RvbVByb3BlcnRpZXMgUGluIChQaW5JZD02MEMxOEE0RjQxMkY0RDBCQkE1OEQ4NTlBNTgxRTFCOCxQaW5OYW1lPSJEZXN0IixEaXJlY3Rpb249IkVHUERfT3V0cHV0IixQaW5UeXBlLlBpbkNhdGVnb3J5PSJUeXBlIixQaW5UeXBlLlBpblN1YkNhdGVnb3J5PSIiLFBpblR5cGUuUGluU3ViQ2F0ZWdvcnlPYmplY3Q9Ii9TY3JpcHQvQ29yZVVPYmplY3QuU2NyaXB0U3RydWN0Jy9TY3JpcHQvTmlhZ2FyYS5OaWFnYXJhUGFyYW1ldGVyTWFwJyIsUGluVHlwZS5QaW5TdWJDYXRlZ29yeU1lbWJlclJlZmVyZW5jZT0oKSxQaW5UeXBlLlBpblZhbHVlVHlwZT0oKSxQaW5UeXBlLkNvbnRhaW5lclR5cGU9Tm9uZSxQaW5UeXBlLmJJc1JlZmVyZW5jZT1GYWxzZSxQaW5UeXBlLmJJc0NvbnN0PUZhbHNlLFBpblR5cGUuYklzV2Vha1BvaW50ZXI9RmFsc2UsUGluVHlwZS5iSXNVT2JqZWN0V3JhcHBlcj1GYWxzZSxQaW5UeXBlLmJTZXJpYWxpemVBc1NpbmdsZVByZWNpc2lvbkZsb2F0PUZhbHNlLFBlcnNpc3RlbnRHdWlkPTAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLGJIaWRkZW49RmFsc2UsYk5vdENvbm5lY3RhYmxlPUZhbHNlLGJEZWZhdWx0VmFsdWVJc1JlYWRPbmx5PUZhbHNlLGJEZWZhdWx0VmFsdWVJc0lnbm9yZWQ9RmFsc2UsYkFkdmFuY2VkVmlldz1GYWxzZSxiT3JwaGFuZWRQaW49RmFsc2UsKQ0KICAgQ3VzdG9tUHJvcGVydGllcyBQaW4gKFBpbklkPTI1NjE1RTJCMDQxNzRDQjVBRjVDMURGREFFREY3RUFBLFBpbk5hbWU9IkxvY2FsLk1vZHVsZS5JbnB1dCIsUGluRnJpZW5kbHlOYW1lPUlOVlRFWFQoIkxvY2FsLk1vZHVsZS5JbnB1dCIpLFBpblR5cGUuUGluQ2F0ZWdvcnk9IkNsYXNzIixQaW5UeXBlLlBpblN1YkNhdGVnb3J5PSJQYXJhbWV0ZXJQaW4iLFBpblR5cGUuUGluU3ViQ2F0ZWdvcnlPYmplY3Q9Ii9TY3JpcHQvQ29yZVVPYmplY3QuQ2xhc3MnL1NjcmlwdC9OaWFnYXJhLk5pYWdhcmFEYXRhSW50ZXJmYWNlUmVuZGVyVGFyZ2V0MkQnIixQaW5UeXBlLlBpblN1YkNhdGVnb3J5TWVtYmVyUmVmZXJlbmNlPSgpLFBpblR5cGUuUGluVmFsdWVUeXBlPSgpLFBpblR5cGUuQ29udGFpbmVyVHlwZT1Ob25lLFBpblR5cGUuYklzUmVmZXJlbmNlPUZhbHNlLFBpblR5cGUuYklzQ29uc3Q9RmFsc2UsUGluVHlwZS5iSXNXZWFrUG9pbnRlcj1GYWxzZSxQaW5UeXBlLmJJc1VPYmplY3RXcmFwcGVyPUZhbHNlLFBpblR5cGUuYlNlcmlhbGl6ZUFzU2luZ2xlUHJlY2lzaW9uRmxvYXQ9RmFsc2UsTGlua2VkVG89KE5pYWdhcmFOb2RlSW5wdXRfMTA5IEM1QUY3M0U4M0QxRDQ0QkNCNDBCNUVEQ0MxNjc4Q0JCLCksUGVyc2lzdGVudEd1aWQ9N0I1Q0M0NTRENUQzNDhFOTlBMDNFMjQ0QzE0MjVGQjAsYkhpZGRlbj1GYWxzZSxiTm90Q29ubmVjdGFibGU9RmFsc2UsYkRlZmF1bHRWYWx1ZUlzUmVhZE9ubHk9RmFsc2UsYkRlZmF1bHRWYWx1ZUlzSWdub3JlZD1GYWxzZSxiQWR2YW5jZWRWaWV3PUZhbHNlLGJPcnBoYW5lZFBpbj1GYWxzZSwpDQogICBDdXN0b21Qcm9wZXJ0aWVzIFBpbiAoUGluSWQ9NUNBMUM0N0VEMEU1NDY5MTg2NDhEMkI1NjU3MDc3M0MsUGluTmFtZT0iTG9jYWwuTW9kdWxlLkNhbWVyYSBSZWxhdGl2ZSBQb3NpdGlvbiIsUGluRnJpZW5kbHlOYW1lPUlOVlRFWFQoIkxvY2FsLk1vZHVsZS5DYW1lcmEgUmVsYXRpdmUgUG9zaXRpb24iKSxQaW5UeXBlLlBpbkNhdGVnb3J5PSJUeXBlIixQaW5UeXBlLlBpblN1YkNhdGVnb3J5PSJQYXJhbWV0ZXJQaW4iLFBpblR5cGUuUGluU3ViQ2F0ZWdvcnlPYmplY3Q9Ii9TY3JpcHQvQ29yZVVPYmplY3QuU2NyaXB0U3RydWN0Jy9TY3JpcHQvQ29yZVVPYmplY3QuVmVjdG9yM2YnIixQaW5UeXBlLlBpblN1YkNhdGVnb3J5TWVtYmVyUmVmZXJlbmNlPSgpLFBpblR5cGUuUGluVmFsdWVUeXBlPSgpLFBpblR5cGUuQ29udGFpbmVyVHlwZT1Ob25lLFBpblR5cGUuYklzUmVmZXJlbmNlPUZhbHNlLFBpblR5cGUuYklzQ29uc3Q9RmFsc2UsUGluVHlwZS5iSXNXZWFrUG9pbnRlcj1GYWxzZSxQaW5UeXBlLmJJc1VPYmplY3RXcmFwcGVyPUZhbHNlLFBpblR5cGUuYlNlcmlhbGl6ZUFzU2luZ2xlUHJlY2lzaW9uRmxvYXQ9RmFsc2UsTGlua2VkVG89KE5pYWdhcmFOb2RlRnVuY3Rpb25DYWxsXzE0IDMyRjBBQkFDREVCNTQ5OEY5MzNCRDk4N0U3RjZCMTM5LCksUGVyc2lzdGVudEd1aWQ9MTI4NTcyQTRENTIwNENCQUJGRjE1RDRGM0I4QzdFMjcsYkhpZGRlbj1GYWxzZSxiTm90Q29ubmVjdGFibGU9RmFsc2UsYkRlZmF1bHRWYWx1ZUlzUmVhZE9ubHk9RmFsc2UsYkRlZmF1bHRWYWx1ZUlzSWdub3JlZD1GYWxzZSxiQWR2YW5jZWRWaWV3PUZhbHNlLGJPcnBoYW5lZFBpbj1GYWxzZSwpDQogICBDdXN0b21Qcm9wZXJ0aWVzIFBpbiAoUGluSWQ9QzE5QzEzQjE2RUJBNDM1Q0I1NURDMzNCMkVGRjU2NkIsUGluTmFtZT0iTG9jYWwuTW9kdWxlLklucHV0MDAxIixQaW5GcmllbmRseU5hbWU9SU5WVEVYVCgiTG9jYWwuTW9kdWxlLklucHV0MDAxIiksUGluVHlwZS5QaW5DYXRlZ29yeT0iVHlwZSIsUGluVHlwZS5QaW5TdWJDYXRlZ29yeT0iUGFyYW1ldGVyUGluIixQaW5UeXBlLlBpblN1YkNhdGVnb3J5T2JqZWN0PSIvU2NyaXB0L0NvcmVVT2JqZWN0LlNjcmlwdFN0cnVjdCcvU2NyaXB0L0NvcmVVT2JqZWN0LlZlY3RvcjNmJyIsUGluVHlwZS5QaW5TdWJDYXRlZ29yeU1lbWJlclJlZmVyZW5jZT0oKSxQaW5UeXBlLlBpblZhbHVlVHlwZT0oKSxQaW5UeXBlLkNvbnRhaW5lclR5cGU9Tm9uZSxQaW5UeXBlLmJJc1JlZmVyZW5jZT1GYWxzZSxQaW5UeXBlLmJJc0NvbnN0PUZhbHNlLFBpblR5cGUuYklzV2Vha1BvaW50ZXI9RmFsc2UsUGluVHlwZS5iSXNVT2JqZWN0V3JhcHBlcj1GYWxzZSxQaW5UeXBlLmJTZXJpYWxpemVBc1NpbmdsZVByZWNpc2lvbkZsb2F0PUZhbHNlLExpbmtlZFRvPShOaWFnYXJhTm9kZUlucHV0XzAgOTlDMkM5ODg0M0E5NDQzMkQ5RTdFMjg3MjBGNTVGQzcsKSxQZXJzaXN0ZW50R3VpZD05NzYwNzZGMzU2RTg0MzM0QTQxQzY1RDgyMDE2NjE5MCxiSGlkZGVuPUZhbHNlLGJOb3RDb25uZWN0YWJsZT1GYWxzZSxiRGVmYXVsdFZhbHVlSXNSZWFkT25seT1GYWxzZSxiRGVmYXVsdFZhbHVlSXNJZ25vcmVkPUZhbHNlLGJBZHZhbmNlZFZpZXc9RmFsc2UsYk9ycGhhbmVkUGluPUZhbHNlLCkNCiAgIEN1c3RvbVByb3BlcnRpZXMgUGluIChQaW5JZD0wRTdERDc5MDhFQjM0MkFBOEZGNjA0NDdBQjU5RTE4QSxQaW5OYW1lPSJMb2NhbC5Nb2R1bGUuWCIsUGluRnJpZW5kbHlOYW1lPUlOVlRFWFQoIkxvY2FsLk1vZHVsZS5YIiksUGluVHlwZS5QaW5DYXRlZ29yeT0iVHlwZSIsUGluVHlwZS5QaW5TdWJDYXRlZ29yeT0iUGFyYW1ldGVyUGluIixQaW5UeXBlLlBpblN1YkNhdGVnb3J5T2JqZWN0PSIvU2NyaXB0L0NvcmVVT2JqZWN0LlNjcmlwdFN0cnVjdCcvU2NyaXB0L0NvcmVVT2JqZWN0LlZlY3RvcjNmJyIsUGluVHlwZS5QaW5TdWJDYXRlZ29yeU1lbWJlclJlZmVyZW5jZT0oKSxQaW5UeXBlLlBpblZhbHVlVHlwZT0oKSxQaW5UeXBlLkNvbnRhaW5lclR5cGU9Tm9uZSxQaW5UeXBlLmJJc1JlZmVyZW5jZT1GYWxzZSxQaW5UeXBlLmJJc0NvbnN0PUZhbHNlLFBpblR5cGUuYklzV2Vha1BvaW50ZXI9RmFsc2UsUGluVHlwZS5iSXNVT2JqZWN0V3JhcHBlcj1GYWxzZSxQaW5UeXBlLmJTZXJpYWxpemVBc1NpbmdsZVByZWNpc2lvbkZsb2F0PUZhbHNlLExpbmtlZFRvPShOaWFnYXJhTm9kZUZ1bmN0aW9uQ2FsbF8xNjQgQjdDNTc1QkM4RjI3NDVGQTlGRTJCQkE0RjQzOTdBNzksKSxQZXJzaXN0ZW50R3VpZD01NjBFMjc3NTNGODk0M0ZCOTM5NTU4MzYxRDVFMDFBMixiSGlkZGVuPUZhbHNlLGJOb3RDb25uZWN0YWJsZT1GYWxzZSxiRGVmYXVsdFZhbHVlSXNSZWFkT25seT1GYWxzZSxiRGVmYXVsdFZhbHVlSXNJZ25vcmVkPUZhbHNlLGJBZHZhbmNlZFZpZXc9RmFsc2UsYk9ycGhhbmVkUGluPUZhbHNlLCkNCiAgIEN1c3RvbVByb3BlcnRpZXMgUGluIChQaW5JZD0zNDUwNkNFOTc1M0U0QzEyODA2M0EwQjk0MzY5RTkyNixQaW5OYW1lPSJMb2NhbC5Nb2R1bGUuQ2FtZXJhIFJlbGF0aXZlIFBvc2l0aW9uIixQaW5GcmllbmRseU5hbWU9SU5WVEVYVCgiTG9jYWwuTW9kdWxlLkNhbWVyYSBSZWxhdGl2ZSBQb3NpdGlvbiIpLFBpblR5cGUuUGluQ2F0ZWdvcnk9IlR5cGUiLFBpblR5cGUuUGluU3ViQ2F0ZWdvcnk9IlBhcmFtZXRlclBpbiIsUGluVHlwZS5QaW5TdWJDYXRlZ29yeU9iamVjdD0iL1NjcmlwdC9Db3JlVU9iamVjdC5TY3JpcHRTdHJ1Y3QnL1NjcmlwdC9Db3JlVU9iamVjdC5WZWN0b3IzZiciLFBpblR5cGUuUGluU3ViQ2F0ZWdvcnlNZW1iZXJSZWZlcmVuY2U9KCksUGluVHlwZS5QaW5WYWx1ZVR5cGU9KCksUGluVHlwZS5Db250YWluZXJUeXBlPU5vbmUsUGluVHlwZS5iSXNSZWZlcmVuY2U9RmFsc2UsUGluVHlwZS5iSXNDb25zdD1GYWxzZSxQaW5UeXBlLmJJc1dlYWtQb2ludGVyPUZhbHNlLFBpblR5cGUuYklzVU9iamVjdFdyYXBwZXI9RmFsc2UsUGluVHlwZS5iU2VyaWFsaXplQXNTaW5nbGVQcmVjaXNpb25GbG9hdD1GYWxzZSxMaW5rZWRUbz0oTmlhZ2FyYU5vZGVGdW5jdGlvbkNhbGxfMTQgMzJGMEFCQUNERUI1NDk4RjkzM0JEOTg3RTdGNkIxMzksKSxQZXJzaXN0ZW50R3VpZD0zREJFOUNDNDA0MDA0Qzg2OTZDNTUyQjJCQkI2MDc4NixiSGlkZGVuPUZhbHNlLGJOb3RDb25uZWN0YWJsZT1GYWxzZSxiRGVmYXVsdFZhbHVlSXNSZWFkT25seT1GYWxzZSxiRGVmYXVsdFZhbHVlSXNJZ25vcmVkPUZhbHNlLGJBZHZhbmNlZFZpZXc9RmFsc2UsYk9ycGhhbmVkUGluPUZhbHNlLCkNCiAgIEN1c3RvbVByb3BlcnRpZXMgUGluIChQaW5JZD0zRjJGQjY0NkEyMDc0QjlEQkVBRkI5NEM5Qjc0MjYwRCxQaW5OYW1lPSJBZGQiLFBpblR5cGUuUGluQ2F0ZWdvcnk9Ik1pc2MiLFBpblR5cGUuUGluU3ViQ2F0ZWdvcnk9IkR5bmFtaWNBZGRQaW4iLFBpblR5cGUuUGluU3ViQ2F0ZWdvcnlPYmplY3Q9Tm9uZSxQaW5UeXBlLlBpblN1YkNhdGVnb3J5TWVtYmVyUmVmZXJlbmNlPSgpLFBpblR5cGUuUGluVmFsdWVUeXBlPSgpLFBpblR5cGUuQ29udGFpbmVyVHlwZT1Ob25lLFBpblR5cGUuYklzUmVmZXJlbmNlPUZhbHNlLFBpblR5cGUuYklzQ29uc3Q9RmFsc2UsUGluVHlwZS5iSXNXZWFrUG9pbnRlcj1GYWxzZSxQaW5UeXBlLmJJc1VPYmplY3RXcmFwcGVyPUZhbHNlLFBpblR5cGUuYlNlcmlhbGl6ZUFzU2luZ2xlUHJlY2lzaW9uRmxvYXQ9RmFsc2UsUGVyc2lzdGVudEd1aWQ9MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAsYkhpZGRlbj1GYWxzZSxiTm90Q29ubmVjdGFibGU9RmFsc2UsYkRlZmF1bHRWYWx1ZUlzUmVhZE9ubHk9RmFsc2UsYkRlZmF1bHRWYWx1ZUlzSWdub3JlZD1GYWxzZSxiQWR2YW5jZWRWaWV3PUZhbHNlLGJPcnBoYW5lZFBpbj1GYWxzZSwpDQpFbmQgT2JqZWN0DQo=" + End Object + ` + await blueprintPage.paste(source) + source = String.raw` + Begin Object Class=/Script/NiagaraEditor.NiagaraClipboardContent Name="NiagaraClipboardContent_8" ExportPath="/Script/NiagaraEditor.NiagaraClipboardContent'/Engine/Transient.NiagaraClipboardContent_8'" + Begin Object Class=/Script/NiagaraEditor.NiagaraScriptVariable Name="NiagaraScriptVariable_4" ExportPath="/Script/NiagaraEditor.NiagaraScriptVariable'/Engine/Transient.NiagaraClipboardContent_8:NiagaraScriptVariable_4'" + End Object + Begin Object Class=/Script/NiagaraEditor.NiagaraScriptVariable Name="NiagaraScriptVariable_3" ExportPath="/Script/NiagaraEditor.NiagaraScriptVariable'/Engine/Transient.NiagaraClipboardContent_8:NiagaraScriptVariable_3'" + End Object + Begin Object Class=/Script/NiagaraEditor.NiagaraScriptVariable Name="NiagaraScriptVariable_2" ExportPath="/Script/NiagaraEditor.NiagaraScriptVariable'/Engine/Transient.NiagaraClipboardContent_8:NiagaraScriptVariable_2'" + End Object + Begin Object Class=/Script/NiagaraEditor.NiagaraScriptVariable Name="NiagaraScriptVariable_1" ExportPath="/Script/NiagaraEditor.NiagaraScriptVariable'/Engine/Transient.NiagaraClipboardContent_8:NiagaraScriptVariable_1'" + End Object + Begin Object Class=/Script/NiagaraEditor.NiagaraScriptVariable Name="NiagaraScriptVariable_0" ExportPath="/Script/NiagaraEditor.NiagaraScriptVariable'/Engine/Transient.NiagaraClipboardContent_8:NiagaraScriptVariable_0'" + End Object + Begin Object Name="NiagaraScriptVariable_4" ExportPath="/Script/NiagaraEditor.NiagaraScriptVariable'/Engine/Transient.NiagaraClipboardContent_8:NiagaraScriptVariable_4'" + DefaultMode=FailIfPreviouslyNotSet + Variable=(VarData=(0,0,0,0,0,0,0,0,0,0,0,0),Name="Local.Module.X",TypeDefHandle=(RegisteredTypeIndex=88)) + Metadata=(VariableGuid=9661E7AE20234E159801C8E970F0D03D) + DefaultValueVariant=(Bytes=(0,0,0,0,0,0,0,0,0,0,0,0),CurrentMode=Bytes) + ChangeId=751E3204296A40409ADC4335E4C33CE6 + End Object + Begin Object Name="NiagaraScriptVariable_3" ExportPath="/Script/NiagaraEditor.NiagaraScriptVariable'/Engine/Transient.NiagaraClipboardContent_8:NiagaraScriptVariable_3'" + DefaultMode=FailIfPreviouslyNotSet + Variable=(VarData=(0,0,0,0,0,0,0,0,0,0,0,0),Name="Local.Module.Camera Relative Position",TypeDefHandle=(RegisteredTypeIndex=88)) + Metadata=(VariableGuid=0AD251B024C14B9AB06AAF654E8A3FF1) + DefaultValueVariant=(Bytes=(0,0,0,0,0,0,0,0,0,0,0,0),CurrentMode=Bytes) + ChangeId=4DD48BD81EA444099BB03E1AAE4F201E + End Object + Begin Object Name="NiagaraScriptVariable_2" ExportPath="/Script/NiagaraEditor.NiagaraScriptVariable'/Engine/Transient.NiagaraClipboardContent_8:NiagaraScriptVariable_2'" + DefaultMode=FailIfPreviouslyNotSet + Variable=(VarData=(0,0,0,0,0,0,0,0,0,0,0,0),Name="Local.Module.NewOutput",TypeDefHandle=(RegisteredTypeIndex=91)) + Metadata=(VariableGuid=274F4E069AD943DBAAB943F92BE558EA) + DefaultValueVariant=(Bytes=(0,0,0,0,0,0,0,0,0,0,0,0),CurrentMode=Bytes) + ChangeId=DE05B442E3734F5D9AEA76603B33E271 + End Object + Begin Object Name="NiagaraScriptVariable_1" ExportPath="/Script/NiagaraEditor.NiagaraScriptVariable'/Engine/Transient.NiagaraClipboardContent_8:NiagaraScriptVariable_1'" + DefaultMode=FailIfPreviouslyNotSet + Variable=(VarData=(0,0,0,0,0,0,0,0,0,0,0,0),Name="Local.Module.Input001",TypeDefHandle=(RegisteredTypeIndex=88)) + Metadata=(VariableGuid=775A1228426C413AB95CB9049C1E993A) + DefaultValueVariant=(Bytes=(0,0,0,0,0,0,0,0,0,0,0,0),CurrentMode=Bytes) + ChangeId=C38E0F30344D4A2689CC7972DFBAA6FA + End Object + Begin Object Name="NiagaraScriptVariable_0" ExportPath="/Script/NiagaraEditor.NiagaraScriptVariable'/Engine/Transient.NiagaraClipboardContent_8:NiagaraScriptVariable_0'" + DefaultMode=FailIfPreviouslyNotSet + Variable=(Name="Local.Module.Input",TypeDefHandle=(RegisteredTypeIndex=59)) + Metadata=(VariableGuid=0DAA63BD5851469990B3FE12816255A5) + ChangeId=2312FB889A9640CFA45B3A9E4AF7FC01 + End Object + ScriptVariables(0)=(ScriptVariable="/Script/NiagaraEditor.NiagaraScriptVariable'NiagaraScriptVariable_0'",OriginalChangeId=2312FB889A9640CFA45B3A9E4AF7FC01) + ScriptVariables(1)=(ScriptVariable="/Script/NiagaraEditor.NiagaraScriptVariable'NiagaraScriptVariable_1'",OriginalChangeId=C38E0F30344D4A2689CC7972DFBAA6FA) + ScriptVariables(2)=(ScriptVariable="/Script/NiagaraEditor.NiagaraScriptVariable'NiagaraScriptVariable_2'",OriginalChangeId=DE05B442E3734F5D9AEA76603B33E271) + ScriptVariables(3)=(ScriptVariable="/Script/NiagaraEditor.NiagaraScriptVariable'NiagaraScriptVariable_3'",OriginalChangeId=4DD48BD81EA444099BB03E1AAE4F201E) + ScriptVariables(4)=(ScriptVariable="/Script/NiagaraEditor.NiagaraScriptVariable'NiagaraScriptVariable_4'",OriginalChangeId=751E3204296A40409ADC4335E4C33CE6) + ExportedNodes="QmVnaW4gT2JqZWN0IENsYXNzPS9TY3JpcHQvTmlhZ2FyYUVkaXRvci5OaWFnYXJhTm9kZVBhcmFtZXRlck1hcFNldCBOYW1lPSJOaWFnYXJhTm9kZVBhcmFtZXRlck1hcFNldF8xIiBFeHBvcnRQYXRoPSIvU2NyaXB0L05pYWdhcmFFZGl0b3IuTmlhZ2FyYU5vZGVQYXJhbWV0ZXJNYXBTZXQnL0VuZ2luZS9UcmFuc2llbnQuTmV3TmlhZ2FyYVNjcmlwdDI6TmlhZ2FyYVNjcmlwdFNvdXJjZV8wLk5pYWdhcmFHcmFwaF8wLk5pYWdhcmFOb2RlUGFyYW1ldGVyTWFwU2V0XzEnIgogICBDaGFuZ2VJZD05MzVGMjRENzMyMUE0NTREQUNENUY4NzMzNTE3NTVEMg0KICAgTm9kZVBvc1g9LTIyNA0KICAgTm9kZVBvc1k9MTQ0DQogICBOb2RlR3VpZD0yNkEwMEIzNUI4Q0E0RDcwQkVEMTQyODJGRTZENzNFMg0KICAgQ3VzdG9tUHJvcGVydGllcyBQaW4gKFBpbklkPUVDRDQxQjgwQTc5NTQzNUJCQjQwMTA5MkZGOTgwOTQ5LFBpbk5hbWU9IlNvdXJjZSIsUGluVHlwZS5QaW5DYXRlZ29yeT0iVHlwZSIsUGluVHlwZS5QaW5TdWJDYXRlZ29yeT0iIixQaW5UeXBlLlBpblN1YkNhdGVnb3J5T2JqZWN0PSIvU2NyaXB0L0NvcmVVT2JqZWN0LlNjcmlwdFN0cnVjdCcvU2NyaXB0L05pYWdhcmEuTmlhZ2FyYVBhcmFtZXRlck1hcCciLFBpblR5cGUuUGluU3ViQ2F0ZWdvcnlNZW1iZXJSZWZlcmVuY2U9KCksUGluVHlwZS5QaW5WYWx1ZVR5cGU9KCksUGluVHlwZS5Db250YWluZXJUeXBlPU5vbmUsUGluVHlwZS5iSXNSZWZlcmVuY2U9RmFsc2UsUGluVHlwZS5iSXNDb25zdD1GYWxzZSxQaW5UeXBlLmJJc1dlYWtQb2ludGVyPUZhbHNlLFBpblR5cGUuYklzVU9iamVjdFdyYXBwZXI9RmFsc2UsUGluVHlwZS5iU2VyaWFsaXplQXNTaW5nbGVQcmVjaXNpb25GbG9hdD1GYWxzZSxQZXJzaXN0ZW50R3VpZD0wMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMCxiSGlkZGVuPUZhbHNlLGJOb3RDb25uZWN0YWJsZT1GYWxzZSxiRGVmYXVsdFZhbHVlSXNSZWFkT25seT1GYWxzZSxiRGVmYXVsdFZhbHVlSXNJZ25vcmVkPUZhbHNlLGJBZHZhbmNlZFZpZXc9RmFsc2UsYk9ycGhhbmVkUGluPUZhbHNlLCkNCiAgIEN1c3RvbVByb3BlcnRpZXMgUGluIChQaW5JZD02MEMxOEE0RjQxMkY0RDBCQkE1OEQ4NTlBNTgxRTFCOCxQaW5OYW1lPSJEZXN0IixEaXJlY3Rpb249IkVHUERfT3V0cHV0IixQaW5UeXBlLlBpbkNhdGVnb3J5PSJUeXBlIixQaW5UeXBlLlBpblN1YkNhdGVnb3J5PSIiLFBpblR5cGUuUGluU3ViQ2F0ZWdvcnlPYmplY3Q9Ii9TY3JpcHQvQ29yZVVPYmplY3QuU2NyaXB0U3RydWN0Jy9TY3JpcHQvTmlhZ2FyYS5OaWFnYXJhUGFyYW1ldGVyTWFwJyIsUGluVHlwZS5QaW5TdWJDYXRlZ29yeU1lbWJlclJlZmVyZW5jZT0oKSxQaW5UeXBlLlBpblZhbHVlVHlwZT0oKSxQaW5UeXBlLkNvbnRhaW5lclR5cGU9Tm9uZSxQaW5UeXBlLmJJc1JlZmVyZW5jZT1GYWxzZSxQaW5UeXBlLmJJc0NvbnN0PUZhbHNlLFBpblR5cGUuYklzV2Vha1BvaW50ZXI9RmFsc2UsUGluVHlwZS5iSXNVT2JqZWN0V3JhcHBlcj1GYWxzZSxQaW5UeXBlLmJTZXJpYWxpemVBc1NpbmdsZVByZWNpc2lvbkZsb2F0PUZhbHNlLFBlcnNpc3RlbnRHdWlkPTAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLGJIaWRkZW49RmFsc2UsYk5vdENvbm5lY3RhYmxlPUZhbHNlLGJEZWZhdWx0VmFsdWVJc1JlYWRPbmx5PUZhbHNlLGJEZWZhdWx0VmFsdWVJc0lnbm9yZWQ9RmFsc2UsYkFkdmFuY2VkVmlldz1GYWxzZSxiT3JwaGFuZWRQaW49RmFsc2UsKQ0KICAgQ3VzdG9tUHJvcGVydGllcyBQaW4gKFBpbklkPTI1NjE1RTJCMDQxNzRDQjVBRjVDMURGREFFREY3RUFBLFBpbk5hbWU9IkxvY2FsLk1vZHVsZS5JbnB1dCIsUGluRnJpZW5kbHlOYW1lPUlOVlRFWFQoIkxvY2FsLk1vZHVsZS5JbnB1dCIpLFBpblR5cGUuUGluQ2F0ZWdvcnk9IkNsYXNzIixQaW5UeXBlLlBpblN1YkNhdGVnb3J5PSJQYXJhbWV0ZXJQaW4iLFBpblR5cGUuUGluU3ViQ2F0ZWdvcnlPYmplY3Q9Ii9TY3JpcHQvQ29yZVVPYmplY3QuQ2xhc3MnL1NjcmlwdC9OaWFnYXJhLk5pYWdhcmFEYXRhSW50ZXJmYWNlUmVuZGVyVGFyZ2V0MkQnIixQaW5UeXBlLlBpblN1YkNhdGVnb3J5TWVtYmVyUmVmZXJlbmNlPSgpLFBpblR5cGUuUGluVmFsdWVUeXBlPSgpLFBpblR5cGUuQ29udGFpbmVyVHlwZT1Ob25lLFBpblR5cGUuYklzUmVmZXJlbmNlPUZhbHNlLFBpblR5cGUuYklzQ29uc3Q9RmFsc2UsUGluVHlwZS5iSXNXZWFrUG9pbnRlcj1GYWxzZSxQaW5UeXBlLmJJc1VPYmplY3RXcmFwcGVyPUZhbHNlLFBpblR5cGUuYlNlcmlhbGl6ZUFzU2luZ2xlUHJlY2lzaW9uRmxvYXQ9RmFsc2UsTGlua2VkVG89KE5pYWdhcmFOb2RlSW5wdXRfMTA5IEM1QUY3M0U4M0QxRDQ0QkNCNDBCNUVEQ0MxNjc4Q0JCLCksUGVyc2lzdGVudEd1aWQ9N0I1Q0M0NTRENUQzNDhFOTlBMDNFMjQ0QzE0MjVGQjAsYkhpZGRlbj1GYWxzZSxiTm90Q29ubmVjdGFibGU9RmFsc2UsYkRlZmF1bHRWYWx1ZUlzUmVhZE9ubHk9RmFsc2UsYkRlZmF1bHRWYWx1ZUlzSWdub3JlZD1GYWxzZSxiQWR2YW5jZWRWaWV3PUZhbHNlLGJPcnBoYW5lZFBpbj1GYWxzZSwpDQogICBDdXN0b21Qcm9wZXJ0aWVzIFBpbiAoUGluSWQ9NUNBMUM0N0VEMEU1NDY5MTg2NDhEMkI1NjU3MDc3M0MsUGluTmFtZT0iTG9jYWwuTW9kdWxlLkNhbWVyYSBSZWxhdGl2ZSBQb3NpdGlvbiIsUGluRnJpZW5kbHlOYW1lPUlOVlRFWFQoIkxvY2FsLk1vZHVsZS5DYW1lcmEgUmVsYXRpdmUgUG9zaXRpb24iKSxQaW5UeXBlLlBpbkNhdGVnb3J5PSJUeXBlIixQaW5UeXBlLlBpblN1YkNhdGVnb3J5PSJQYXJhbWV0ZXJQaW4iLFBpblR5cGUuUGluU3ViQ2F0ZWdvcnlPYmplY3Q9Ii9TY3JpcHQvQ29yZVVPYmplY3QuU2NyaXB0U3RydWN0Jy9TY3JpcHQvQ29yZVVPYmplY3QuVmVjdG9yM2YnIixQaW5UeXBlLlBpblN1YkNhdGVnb3J5TWVtYmVyUmVmZXJlbmNlPSgpLFBpblR5cGUuUGluVmFsdWVUeXBlPSgpLFBpblR5cGUuQ29udGFpbmVyVHlwZT1Ob25lLFBpblR5cGUuYklzUmVmZXJlbmNlPUZhbHNlLFBpblR5cGUuYklzQ29uc3Q9RmFsc2UsUGluVHlwZS5iSXNXZWFrUG9pbnRlcj1GYWxzZSxQaW5UeXBlLmJJc1VPYmplY3RXcmFwcGVyPUZhbHNlLFBpblR5cGUuYlNlcmlhbGl6ZUFzU2luZ2xlUHJlY2lzaW9uRmxvYXQ9RmFsc2UsTGlua2VkVG89KE5pYWdhcmFOb2RlRnVuY3Rpb25DYWxsXzE0IDMyRjBBQkFDREVCNTQ5OEY5MzNCRDk4N0U3RjZCMTM5LCksUGVyc2lzdGVudEd1aWQ9MTI4NTcyQTRENTIwNENCQUJGRjE1RDRGM0I4QzdFMjcsYkhpZGRlbj1GYWxzZSxiTm90Q29ubmVjdGFibGU9RmFsc2UsYkRlZmF1bHRWYWx1ZUlzUmVhZE9ubHk9RmFsc2UsYkRlZmF1bHRWYWx1ZUlzSWdub3JlZD1GYWxzZSxiQWR2YW5jZWRWaWV3PUZhbHNlLGJPcnBoYW5lZFBpbj1GYWxzZSwpDQogICBDdXN0b21Qcm9wZXJ0aWVzIFBpbiAoUGluSWQ9QzE5QzEzQjE2RUJBNDM1Q0I1NURDMzNCMkVGRjU2NkIsUGluTmFtZT0iTG9jYWwuTW9kdWxlLklucHV0MDAxIixQaW5GcmllbmRseU5hbWU9SU5WVEVYVCgiTG9jYWwuTW9kdWxlLklucHV0MDAxIiksUGluVHlwZS5QaW5DYXRlZ29yeT0iVHlwZSIsUGluVHlwZS5QaW5TdWJDYXRlZ29yeT0iUGFyYW1ldGVyUGluIixQaW5UeXBlLlBpblN1YkNhdGVnb3J5T2JqZWN0PSIvU2NyaXB0L0NvcmVVT2JqZWN0LlNjcmlwdFN0cnVjdCcvU2NyaXB0L0NvcmVVT2JqZWN0LlZlY3RvcjNmJyIsUGluVHlwZS5QaW5TdWJDYXRlZ29yeU1lbWJlclJlZmVyZW5jZT0oKSxQaW5UeXBlLlBpblZhbHVlVHlwZT0oKSxQaW5UeXBlLkNvbnRhaW5lclR5cGU9Tm9uZSxQaW5UeXBlLmJJc1JlZmVyZW5jZT1GYWxzZSxQaW5UeXBlLmJJc0NvbnN0PUZhbHNlLFBpblR5cGUuYklzV2Vha1BvaW50ZXI9RmFsc2UsUGluVHlwZS5iSXNVT2JqZWN0V3JhcHBlcj1GYWxzZSxQaW5UeXBlLmJTZXJpYWxpemVBc1NpbmdsZVByZWNpc2lvbkZsb2F0PUZhbHNlLExpbmtlZFRvPShOaWFnYXJhTm9kZUlucHV0XzAgOTlDMkM5ODg0M0E5NDQzMkQ5RTdFMjg3MjBGNTVGQzcsKSxQZXJzaXN0ZW50R3VpZD05NzYwNzZGMzU2RTg0MzM0QTQxQzY1RDgyMDE2NjE5MCxiSGlkZGVuPUZhbHNlLGJOb3RDb25uZWN0YWJsZT1GYWxzZSxiRGVmYXVsdFZhbHVlSXNSZWFkT25seT1GYWxzZSxiRGVmYXVsdFZhbHVlSXNJZ25vcmVkPUZhbHNlLGJBZHZhbmNlZFZpZXc9RmFsc2UsYk9ycGhhbmVkUGluPUZhbHNlLCkNCiAgIEN1c3RvbVByb3BlcnRpZXMgUGluIChQaW5JZD0wRTdERDc5MDhFQjM0MkFBOEZGNjA0NDdBQjU5RTE4QSxQaW5OYW1lPSJMb2NhbC5Nb2R1bGUuWCIsUGluRnJpZW5kbHlOYW1lPUlOVlRFWFQoIkxvY2FsLk1vZHVsZS5YIiksUGluVHlwZS5QaW5DYXRlZ29yeT0iVHlwZSIsUGluVHlwZS5QaW5TdWJDYXRlZ29yeT0iUGFyYW1ldGVyUGluIixQaW5UeXBlLlBpblN1YkNhdGVnb3J5T2JqZWN0PSIvU2NyaXB0L0NvcmVVT2JqZWN0LlNjcmlwdFN0cnVjdCcvU2NyaXB0L0NvcmVVT2JqZWN0LlZlY3RvcjNmJyIsUGluVHlwZS5QaW5TdWJDYXRlZ29yeU1lbWJlclJlZmVyZW5jZT0oKSxQaW5UeXBlLlBpblZhbHVlVHlwZT0oKSxQaW5UeXBlLkNvbnRhaW5lclR5cGU9Tm9uZSxQaW5UeXBlLmJJc1JlZmVyZW5jZT1GYWxzZSxQaW5UeXBlLmJJc0NvbnN0PUZhbHNlLFBpblR5cGUuYklzV2Vha1BvaW50ZXI9RmFsc2UsUGluVHlwZS5iSXNVT2JqZWN0V3JhcHBlcj1GYWxzZSxQaW5UeXBlLmJTZXJpYWxpemVBc1NpbmdsZVByZWNpc2lvbkZsb2F0PUZhbHNlLExpbmtlZFRvPShOaWFnYXJhTm9kZUZ1bmN0aW9uQ2FsbF8xNjQgQjdDNTc1QkM4RjI3NDVGQTlGRTJCQkE0RjQzOTdBNzksKSxQZXJzaXN0ZW50R3VpZD01NjBFMjc3NTNGODk0M0ZCOTM5NTU4MzYxRDVFMDFBMixiSGlkZGVuPUZhbHNlLGJOb3RDb25uZWN0YWJsZT1GYWxzZSxiRGVmYXVsdFZhbHVlSXNSZWFkT25seT1GYWxzZSxiRGVmYXVsdFZhbHVlSXNJZ25vcmVkPUZhbHNlLGJBZHZhbmNlZFZpZXc9RmFsc2UsYk9ycGhhbmVkUGluPUZhbHNlLCkNCiAgIEN1c3RvbVByb3BlcnRpZXMgUGluIChQaW5JZD0zNDUwNkNFOTc1M0U0QzEyODA2M0EwQjk0MzY5RTkyNixQaW5OYW1lPSJMb2NhbC5Nb2R1bGUuQ2FtZXJhIFJlbGF0aXZlIFBvc2l0aW9uIixQaW5GcmllbmRseU5hbWU9SU5WVEVYVCgiTG9jYWwuTW9kdWxlLkNhbWVyYSBSZWxhdGl2ZSBQb3NpdGlvbiIpLFBpblR5cGUuUGluQ2F0ZWdvcnk9IlR5cGUiLFBpblR5cGUuUGluU3ViQ2F0ZWdvcnk9IlBhcmFtZXRlclBpbiIsUGluVHlwZS5QaW5TdWJDYXRlZ29yeU9iamVjdD0iL1NjcmlwdC9Db3JlVU9iamVjdC5TY3JpcHRTdHJ1Y3QnL1NjcmlwdC9Db3JlVU9iamVjdC5WZWN0b3IzZiciLFBpblR5cGUuUGluU3ViQ2F0ZWdvcnlNZW1iZXJSZWZlcmVuY2U9KCksUGluVHlwZS5QaW5WYWx1ZVR5cGU9KCksUGluVHlwZS5Db250YWluZXJUeXBlPU5vbmUsUGluVHlwZS5iSXNSZWZlcmVuY2U9RmFsc2UsUGluVHlwZS5iSXNDb25zdD1GYWxzZSxQaW5UeXBlLmJJc1dlYWtQb2ludGVyPUZhbHNlLFBpblR5cGUuYklzVU9iamVjdFdyYXBwZXI9RmFsc2UsUGluVHlwZS5iU2VyaWFsaXplQXNTaW5nbGVQcmVjaXNpb25GbG9hdD1GYWxzZSxMaW5rZWRUbz0oTmlhZ2FyYU5vZGVGdW5jdGlvbkNhbGxfMTQgMzJGMEFCQUNERUI1NDk4RjkzM0JEOTg3RTdGNkIxMzksKSxQZXJzaXN0ZW50R3VpZD0zREJFOUNDNDA0MDA0Qzg2OTZDNTUyQjJCQkI2MDc4NixiSGlkZGVuPUZhbHNlLGJOb3RDb25uZWN0YWJsZT1GYWxzZSxiRGVmYXVsdFZhbHVlSXNSZWFkT25seT1GYWxzZSxiRGVmYXVsdFZhbHVlSXNJZ25vcmVkPUZhbHNlLGJBZHZhbmNlZFZpZXc9RmFsc2UsYk9ycGhhbmVkUGluPUZhbHNlLCkNCiAgIEN1c3RvbVByb3BlcnRpZXMgUGluIChQaW5JZD0zRjJGQjY0NkEyMDc0QjlEQkVBRkI5NEM5Qjc0MjYwRCxQaW5OYW1lPSJBZGQiLFBpblR5cGUuUGluQ2F0ZWdvcnk9Ik1pc2MiLFBpblR5cGUuUGluU3ViQ2F0ZWdvcnk9IkR5bmFtaWNBZGRQaW4iLFBpblR5cGUuUGluU3ViQ2F0ZWdvcnlPYmplY3Q9Tm9uZSxQaW5UeXBlLlBpblN1YkNhdGVnb3J5TWVtYmVyUmVmZXJlbmNlPSgpLFBpblR5cGUuUGluVmFsdWVUeXBlPSgpLFBpblR5cGUuQ29udGFpbmVyVHlwZT1Ob25lLFBpblR5cGUuYklzUmVmZXJlbmNlPUZhbHNlLFBpblR5cGUuYklzQ29uc3Q9RmFsc2UsUGluVHlwZS5iSXNXZWFrUG9pbnRlcj1GYWxzZSxQaW5UeXBlLmJJc1VPYmplY3RXcmFwcGVyPUZhbHNlLFBpblR5cGUuYlNlcmlhbGl6ZUFzU2luZ2xlUHJlY2lzaW9uRmxvYXQ9RmFsc2UsUGVyc2lzdGVudEd1aWQ9MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAsYkhpZGRlbj1GYWxzZSxiTm90Q29ubmVjdGFibGU9RmFsc2UsYkRlZmF1bHRWYWx1ZUlzUmVhZE9ubHk9RmFsc2UsYkRlZmF1bHRWYWx1ZUlzSWdub3JlZD1GYWxzZSxiQWR2YW5jZWRWaWV3PUZhbHNlLGJPcnBoYW5lZFBpbj1GYWxzZSwpDQpFbmQgT2JqZWN0DQo=" + End Object + ` + expect(await blueprintPage.blueprintLocator.evaluate(blueprint => blueprint.entity.serialize())) + .toEqual(serialized(source)) + + await blueprintPage.removeNodes() + source = String.raw` + Begin Object Class=/Script/NiagaraEditor.NiagaraClipboardContent Name="NiagaraClipboardContent_16" ExportPath="/Script/NiagaraEditor.NiagaraClipboardContent'/Engine/Transient.NiagaraClipboardContent_16'" + Begin Object Class=/Script/NiagaraEditor.NiagaraScriptVariable Name="NiagaraScriptVariable_10" ExportPath="/Script/NiagaraEditor.NiagaraScriptVariable'/Engine/Transient.NiagaraClipboardContent_16:NiagaraScriptVariable_10'" + End Object + Begin Object Name="NiagaraScriptVariable_10" ExportPath="/Script/NiagaraEditor.NiagaraScriptVariable'/Engine/Transient.NiagaraClipboardContent_16:NiagaraScriptVariable_10'" + Variable=(VarData=(0,0,0,0),Name="Particles.SubImageIndex",TypeDefHandle=(RegisteredTypeIndex=83)) + Metadata=(Description=NSLOCTEXT("", "A6EEC0624C1820790D5859A816C48DF0", "A value from 0 to the number of entries in the table of SubUV images."),VariableGuid=FD5D89194EA839DE285E639670017225) + DefaultValueVariant=(Bytes=(0,0,0,0),CurrentMode=Bytes) + bSubscribedToParameterDefinitions=True + ChangeId=F1627BE74919FE97C923DDB4710A9FE7 + End Object + ScriptVariables(0)=(ScriptVariable="/Script/NiagaraEditor.NiagaraScriptVariable'NiagaraScriptVariable_10'",OriginalChangeId=F1627BE74919FE97C923DDB4710A9FE7) + ExportedNodes="QmVnaW4gT2JqZWN0IENsYXNzPS9TY3JpcHQvTmlhZ2FyYUVkaXRvci5OaWFnYXJhTm9kZVBhcmFtZXRlck1hcFNldCBOYW1lPSJOaWFnYXJhTm9kZVBhcmFtZXRlck1hcFNldF8xIiBFeHBvcnRQYXRoPSIvU2NyaXB0L05pYWdhcmFFZGl0b3IuTmlhZ2FyYU5vZGVQYXJhbWV0ZXJNYXBTZXQnL0VuZ2luZS9UcmFuc2llbnQuTmV3TmlhZ2FyYVNjcmlwdDI6TmlhZ2FyYVNjcmlwdFNvdXJjZV8wLk5pYWdhcmFHcmFwaF8wLk5pYWdhcmFOb2RlUGFyYW1ldGVyTWFwU2V0XzEnIgogICBDaGFuZ2VJZD0yQjhENTgyRjlFQjM0OUREQkMyRUU1MThCNzdENEI4RQ0KICAgTm9kZVBvc1g9LTI1Ng0KICAgTm9kZVBvc1k9NDgwDQogICBiQ29tbWVudEJ1YmJsZVBpbm5lZD1UcnVlDQogICBiQ29tbWVudEJ1YmJsZVZpc2libGU9VHJ1ZQ0KICAgTm9kZUNvbW1lbnQ9IkNvbW1lbnQiDQogICBOb2RlR3VpZD00OEJBRTgwQ0Y0MTc0OTI0QTMzMTM0MDk5MzkxRkIzMg0KICAgQ3VzdG9tUHJvcGVydGllcyBQaW4gKFBpbklkPUVDRDQxQjgwQTc5NTQzNUJCQjQwMTA5MkZGOTgwOTQ5LFBpbk5hbWU9IlNvdXJjZSIsUGluVHlwZS5QaW5DYXRlZ29yeT0iVHlwZSIsUGluVHlwZS5QaW5TdWJDYXRlZ29yeT0iIixQaW5UeXBlLlBpblN1YkNhdGVnb3J5T2JqZWN0PSIvU2NyaXB0L0NvcmVVT2JqZWN0LlNjcmlwdFN0cnVjdCcvU2NyaXB0L05pYWdhcmEuTmlhZ2FyYVBhcmFtZXRlck1hcCciLFBpblR5cGUuUGluU3ViQ2F0ZWdvcnlNZW1iZXJSZWZlcmVuY2U9KCksUGluVHlwZS5QaW5WYWx1ZVR5cGU9KCksUGluVHlwZS5Db250YWluZXJUeXBlPU5vbmUsUGluVHlwZS5iSXNSZWZlcmVuY2U9RmFsc2UsUGluVHlwZS5iSXNDb25zdD1GYWxzZSxQaW5UeXBlLmJJc1dlYWtQb2ludGVyPUZhbHNlLFBpblR5cGUuYklzVU9iamVjdFdyYXBwZXI9RmFsc2UsUGluVHlwZS5iU2VyaWFsaXplQXNTaW5nbGVQcmVjaXNpb25GbG9hdD1GYWxzZSxQZXJzaXN0ZW50R3VpZD0wMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMCxiSGlkZGVuPUZhbHNlLGJOb3RDb25uZWN0YWJsZT1GYWxzZSxiRGVmYXVsdFZhbHVlSXNSZWFkT25seT1GYWxzZSxiRGVmYXVsdFZhbHVlSXNJZ25vcmVkPUZhbHNlLGJBZHZhbmNlZFZpZXc9RmFsc2UsYk9ycGhhbmVkUGluPUZhbHNlLCkNCiAgIEN1c3RvbVByb3BlcnRpZXMgUGluIChQaW5JZD02MEMxOEE0RjQxMkY0RDBCQkE1OEQ4NTlBNTgxRTFCOCxQaW5OYW1lPSJEZXN0IixEaXJlY3Rpb249IkVHUERfT3V0cHV0IixQaW5UeXBlLlBpbkNhdGVnb3J5PSJUeXBlIixQaW5UeXBlLlBpblN1YkNhdGVnb3J5PSIiLFBpblR5cGUuUGluU3ViQ2F0ZWdvcnlPYmplY3Q9Ii9TY3JpcHQvQ29yZVVPYmplY3QuU2NyaXB0U3RydWN0Jy9TY3JpcHQvTmlhZ2FyYS5OaWFnYXJhUGFyYW1ldGVyTWFwJyIsUGluVHlwZS5QaW5TdWJDYXRlZ29yeU1lbWJlclJlZmVyZW5jZT0oKSxQaW5UeXBlLlBpblZhbHVlVHlwZT0oKSxQaW5UeXBlLkNvbnRhaW5lclR5cGU9Tm9uZSxQaW5UeXBlLmJJc1JlZmVyZW5jZT1GYWxzZSxQaW5UeXBlLmJJc0NvbnN0PUZhbHNlLFBpblR5cGUuYklzV2Vha1BvaW50ZXI9RmFsc2UsUGluVHlwZS5iSXNVT2JqZWN0V3JhcHBlcj1GYWxzZSxQaW5UeXBlLmJTZXJpYWxpemVBc1NpbmdsZVByZWNpc2lvbkZsb2F0PUZhbHNlLFBlcnNpc3RlbnRHdWlkPTAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLGJIaWRkZW49RmFsc2UsYk5vdENvbm5lY3RhYmxlPUZhbHNlLGJEZWZhdWx0VmFsdWVJc1JlYWRPbmx5PUZhbHNlLGJEZWZhdWx0VmFsdWVJc0lnbm9yZWQ9RmFsc2UsYkFkdmFuY2VkVmlldz1GYWxzZSxiT3JwaGFuZWRQaW49RmFsc2UsKQ0KICAgQ3VzdG9tUHJvcGVydGllcyBQaW4gKFBpbklkPTE5MEM1QzQ1RjdEMDQ0RjFCOEZBQzcxMDQ0ODJFRDRGLFBpbk5hbWU9IlBhcnRpY2xlcy5TdWJJbWFnZUluZGV4IixQaW5GcmllbmRseU5hbWU9SU5WVEVYVCgiUGFydGljbGVzLlN1YkltYWdlSW5kZXgiKSxQaW5UeXBlLlBpbkNhdGVnb3J5PSJUeXBlIixQaW5UeXBlLlBpblN1YkNhdGVnb3J5PSJQYXJhbWV0ZXJQaW4iLFBpblR5cGUuUGluU3ViQ2F0ZWdvcnlPYmplY3Q9Ii9TY3JpcHQvQ29yZVVPYmplY3QuU2NyaXB0U3RydWN0Jy9TY3JpcHQvTmlhZ2FyYS5OaWFnYXJhRmxvYXQnIixQaW5UeXBlLlBpblN1YkNhdGVnb3J5TWVtYmVyUmVmZXJlbmNlPSgpLFBpblR5cGUuUGluVmFsdWVUeXBlPSgpLFBpblR5cGUuQ29udGFpbmVyVHlwZT1Ob25lLFBpblR5cGUuYklzUmVmZXJlbmNlPUZhbHNlLFBpblR5cGUuYklzQ29uc3Q9RmFsc2UsUGluVHlwZS5iSXNXZWFrUG9pbnRlcj1GYWxzZSxQaW5UeXBlLmJJc1VPYmplY3RXcmFwcGVyPUZhbHNlLFBpblR5cGUuYlNlcmlhbGl6ZUFzU2luZ2xlUHJlY2lzaW9uRmxvYXQ9RmFsc2UsUGVyc2lzdGVudEd1aWQ9M0ZGMzA3Nzk4Rjg2NDZGREJEOTUwMzdGRTlFRTNENzksYkhpZGRlbj1GYWxzZSxiTm90Q29ubmVjdGFibGU9RmFsc2UsYkRlZmF1bHRWYWx1ZUlzUmVhZE9ubHk9RmFsc2UsYkRlZmF1bHRWYWx1ZUlzSWdub3JlZD1GYWxzZSxiQWR2YW5jZWRWaWV3PUZhbHNlLGJPcnBoYW5lZFBpbj1GYWxzZSwpDQogICBDdXN0b21Qcm9wZXJ0aWVzIFBpbiAoUGluSWQ9NkU5MTY5RUJBQTc2NDY0Rjk2MUJEMkQwQzYwQTNGQTgsUGluTmFtZT0iQWRkIixQaW5UeXBlLlBpbkNhdGVnb3J5PSJNaXNjIixQaW5UeXBlLlBpblN1YkNhdGVnb3J5PSJEeW5hbWljQWRkUGluIixQaW5UeXBlLlBpblN1YkNhdGVnb3J5T2JqZWN0PU5vbmUsUGluVHlwZS5QaW5TdWJDYXRlZ29yeU1lbWJlclJlZmVyZW5jZT0oKSxQaW5UeXBlLlBpblZhbHVlVHlwZT0oKSxQaW5UeXBlLkNvbnRhaW5lclR5cGU9Tm9uZSxQaW5UeXBlLmJJc1JlZmVyZW5jZT1GYWxzZSxQaW5UeXBlLmJJc0NvbnN0PUZhbHNlLFBpblR5cGUuYklzV2Vha1BvaW50ZXI9RmFsc2UsUGluVHlwZS5iSXNVT2JqZWN0V3JhcHBlcj1GYWxzZSxQaW5UeXBlLmJTZXJpYWxpemVBc1NpbmdsZVByZWNpc2lvbkZsb2F0PUZhbHNlLFBlcnNpc3RlbnRHdWlkPTAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLGJIaWRkZW49RmFsc2UsYk5vdENvbm5lY3RhYmxlPUZhbHNlLGJEZWZhdWx0VmFsdWVJc1JlYWRPbmx5PUZhbHNlLGJEZWZhdWx0VmFsdWVJc0lnbm9yZWQ9RmFsc2UsYkFkdmFuY2VkVmlldz1GYWxzZSxiT3JwaGFuZWRQaW49RmFsc2UsKQ0KRW5kIE9iamVjdA0K" + End Object + ` + await blueprintPage.paste(source) + const expectedWords = source + .split("\n") + .map(row => row.match(/\s*("?\w+(\s+\w+)*).+/)?.[1]) + .filter(v => v?.length > 0) + source = await blueprintPage.getSerializedNodes() + expect(source).toMatch(Utility.getFirstWordOrder(expectedWords)) + }) +}) diff --git a/tests/node0.spec.js b/tests/node0.spec.js new file mode 100755 index 0000000..19048c3 --- /dev/null +++ b/tests/node0.spec.js @@ -0,0 +1,25 @@ +import Configuration from "../js/Configuration.js" +import SVGIcon from "../js/SVGIcon.js" +import { testNode } from "./fixtures/test.js" + +testNode({ + 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, +}) diff --git a/tests/node1.spec.js b/tests/node1.spec.js new file mode 100755 index 0000000..192399b --- /dev/null +++ b/tests/node1.spec.js @@ -0,0 +1,25 @@ +import Configuration from "../js/Configuration.js" +import SVGIcon from "../js/SVGIcon.js" +import { testNode } from "./fixtures/test.js" + +testNode({ + 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, +}) diff --git a/tests/node2.spec.js b/tests/node2.spec.js new file mode 100755 index 0000000..bc42515 --- /dev/null +++ b/tests/node2.spec.js @@ -0,0 +1,25 @@ +import Configuration from "../js/Configuration.js" +import SVGIcon from "../js/SVGIcon.js" +import { testNode } from "./fixtures/test.js" + +testNode({ + 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, +}) diff --git a/tests/node3.spec.js b/tests/node3.spec.js new file mode 100755 index 0000000..f154992 --- /dev/null +++ b/tests/node3.spec.js @@ -0,0 +1,25 @@ +import Configuration from "../js/Configuration.js" +import SVGIcon from "../js/SVGIcon.js" +import { testNode } from "./fixtures/test.js" + +testNode({ + name: "3", + value: String.raw` + Begin Object Class=/Script/BlueprintGraph.K2Node_InputKey Name="K2Node_InputKey_2" + InputKey=Three + NodePosX=-288 + NodePosY=240 + 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, +}) diff --git a/tests/node4.spec.js b/tests/node4.spec.js new file mode 100755 index 0000000..bc8f994 --- /dev/null +++ b/tests/node4.spec.js @@ -0,0 +1,25 @@ +import Configuration from "../js/Configuration.js" +import SVGIcon from "../js/SVGIcon.js" +import { testNode } from "./fixtures/test.js" + +testNode({ + name: "4", + value: String.raw` + Begin Object Class=/Script/BlueprintGraph.K2Node_InputKey Name="K2Node_InputKey_4" + InputKey=Four + NodePosX=416 + NodePosY=16 + 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, +}) diff --git a/tests/node5.spec.js b/tests/node5.spec.js new file mode 100755 index 0000000..318d852 --- /dev/null +++ b/tests/node5.spec.js @@ -0,0 +1,25 @@ +import Configuration from "../js/Configuration.js" +import SVGIcon from "../js/SVGIcon.js" +import { testNode } from "./fixtures/test.js" + +testNode({ + 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, +}) diff --git a/tests/node6.spec.js b/tests/node6.spec.js new file mode 100755 index 0000000..8fff661 --- /dev/null +++ b/tests/node6.spec.js @@ -0,0 +1,25 @@ +import Configuration from "../js/Configuration.js" +import SVGIcon from "../js/SVGIcon.js" +import { testNode } from "./fixtures/test.js" + +testNode({ + 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, +}) diff --git a/tests/node7.spec.js b/tests/node7.spec.js new file mode 100755 index 0000000..0dfe4cf --- /dev/null +++ b/tests/node7.spec.js @@ -0,0 +1,25 @@ +import Configuration from "../js/Configuration.js" +import SVGIcon from "../js/SVGIcon.js" +import { testNode } from "./fixtures/test.js" + +testNode({ + 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, +}) diff --git a/tests/node8.spec.js b/tests/node8.spec.js new file mode 100755 index 0000000..9a64de1 --- /dev/null +++ b/tests/node8.spec.js @@ -0,0 +1,25 @@ +import Configuration from "../js/Configuration.js" +import SVGIcon from "../js/SVGIcon.js" +import { testNode } from "./fixtures/test.js" + +testNode({ + 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, +}) diff --git a/tests/node9.spec.js b/tests/node9.spec.js new file mode 100755 index 0000000..2ce7bd7 --- /dev/null +++ b/tests/node9.spec.js @@ -0,0 +1,25 @@ +import Configuration from "../js/Configuration.js" +import SVGIcon from "../js/SVGIcon.js" +import { testNode } from "./fixtures/test.js" + +testNode({ + 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, +}) diff --git a/tests/nodeA.spec.js b/tests/nodeA.spec.js new file mode 100755 index 0000000..4aa0419 --- /dev/null +++ b/tests/nodeA.spec.js @@ -0,0 +1,25 @@ +import Configuration from "../js/Configuration.js" +import SVGIcon from "../js/SVGIcon.js" +import { testNode } from "./fixtures/test.js" + +testNode({ + 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, +}) diff --git a/tests/nodeAGrave.spec.js b/tests/nodeAGrave.spec.js new file mode 100755 index 0000000..0817489 --- /dev/null +++ b/tests/nodeAGrave.spec.js @@ -0,0 +1,25 @@ +import Configuration from "../js/Configuration.js" +import SVGIcon from "../js/SVGIcon.js" +import { testNode } from "./fixtures/test.js" + +testNode({ + 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, +}) diff --git a/tests/nodeAddDoubleDouble.spec.js b/tests/nodeAddDoubleDouble.spec.js new file mode 100755 index 0000000..01fdb7a --- /dev/null +++ b/tests/nodeAddDoubleDouble.spec.js @@ -0,0 +1,39 @@ +import SVGIcon from "../js/SVGIcon.js" +import { expect, testNode } from "./fixtures/test.js" + +testNode({ + name: "Add double double", + title: "+", + value: String.raw` + Begin Object Class=/Script/BlueprintGraph.K2Node_CommutativeAssociativeBinaryOperator Name="K2Node_CommutativeAssociativeBinaryOperator_1" ExportPath="/Script/BlueprintGraph.K2Node_CommutativeAssociativeBinaryOperator'/Game/Map.Map:PersistentLevel.Map.EventGraph.K2Node_CommutativeAssociativeBinaryOperator_1'" + NumAdditionalInputs=3 + bIsPureFunc=True + FunctionReference=(MemberParent="/Script/CoreUObject.Class'/Script/Engine.KismetMathLibrary'",MemberName="Add_DoubleDouble") + NodePosX=1920 + NodePosY=-1424 + NodeGuid=898B12095E2149EB85F3D66ABF812C8D + CustomProperties Pin (PinId=7E49A86445F1A83779096DA2653ED2F9,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=42E8757A4F34479027E6F3AC60B85161,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="123.000000",AutogeneratedDefaultValue="0.0",PersistentGuid=00000000000000000000000000000000,bHidden=False,bNotConnectable=False,bDefaultValueIsReadOnly=False,bDefaultValueIsIgnored=False,bAdvancedView=False,bOrphanedPin=False,) + CustomProperties Pin (PinId=4631AA9648980812910BB6A44F8DB926,PinName="B",PinToolTip="B\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="234.000000",AutogeneratedDefaultValue="1.000000",PersistentGuid=00000000000000000000000000000000,bHidden=False,bNotConnectable=False,bDefaultValueIsReadOnly=False,bDefaultValueIsIgnored=False,bAdvancedView=False,bOrphanedPin=False,) + CustomProperties Pin (PinId=46E01E834DC9C4ADC2A371BA3E6750FD,PinName="ReturnValue",PinToolTip="Return Value\nFloat (double-precision)\n\nAddition (A + B)",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,) + CustomProperties Pin (PinId=EA79B248A6876A3D535FD66AF32AD617,PinName="C",PinToolTip="C\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="345.000000",PersistentGuid=00000000000000000000000000000000,bHidden=False,bNotConnectable=False,bDefaultValueIsReadOnly=False,bDefaultValueIsIgnored=False,bAdvancedView=False,bOrphanedPin=False,) + CustomProperties Pin (PinId=A1A5D31E765DD0B28389412697654E59,PinName="D",PinToolTip="D\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="456.000000",PersistentGuid=00000000000000000000000000000000,bHidden=False,bNotConnectable=False,bDefaultValueIsReadOnly=False,bDefaultValueIsIgnored=False,bAdvancedView=False,bOrphanedPin=False,) + CustomProperties Pin (PinId=F622CBB2B1AD29C2A0F225F8D5275852,PinName="E",PinToolTip="E\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="567.000000",PersistentGuid=00000000000000000000000000000000,bHidden=False,bNotConnectable=False,bDefaultValueIsReadOnly=False,bDefaultValueIsIgnored=False,bAdvancedView=False,bOrphanedPin=False,) + End Object + `, + size: [10.5, 11], + pins: 6, + delegate: false, + development: false, + variadic: true, + additionalTest: async (node, pins) => { + const values = ["123.0", "234.0", "345.0", "456.0", "567.0"] + for (let i = 0; i < pins.length; ++i) { + expect(await pins[i].evaluate(pin => pin.template.renderIcon().strings.join(""))) + .toStrictEqual(SVGIcon.operationPin.strings.join("")) + if (i < values.length) { + await expect(pins[i].locator("ueb-input")).toContainText(values[i]) + } + } + } +}) diff --git a/tests/nodeAddLocalNavigationGridForBox.spec.js b/tests/nodeAddLocalNavigationGridForBox.spec.js new file mode 100755 index 0000000..a42fade --- /dev/null +++ b/tests/nodeAddLocalNavigationGridForBox.spec.js @@ -0,0 +1,82 @@ +import Configuration from "../js/Configuration.js" +import SVGIcon from "../js/SVGIcon.js" +import { expect, testNode } from "./fixtures/test.js" + +testNode({ + name: "Add Local Navigation Grid For Box", + value: String.raw` + Begin Object Class=/Script/BlueprintGraph.K2Node_CallFunction Name="K2Node_CallFunction_0" ExportPath="/Script/BlueprintGraph.K2Node_CallFunction'/Temp/Untitled_1.Untitled_1:PersistentLevel.Untitled.EventGraph.K2Node_CallFunction_0'" + FunctionReference=(MemberParent="/Script/CoreUObject.Class'/Script/AIModule.NavLocalGridManager'",MemberName="AddLocalNavigationGridForBox") + NodePosX=304 + NodePosY=-496 + NodeGuid=C15FC9905D6D4BF5AF19CB81BAB598DE + CustomProperties Pin (PinId=4A315083206E46F38782139225D1CBDB,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=0E0D6F8DD32C430D9F727D4B16A6CA85,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=3A0F065EA4444A6BBD9DB667859A2139,PinName="self",PinFriendlyName=NSLOCTEXT("K2Node", "Target", "Target"),PinToolTip="Target\nNav Local Grid Manager Object Reference",PinType.PinCategory="object",PinType.PinSubCategory="",PinType.PinSubCategoryObject="/Script/CoreUObject.Class'/Script/AIModule.NavLocalGridManager'",PinType.PinSubCategoryMemberReference=(),PinType.PinValueType=(),PinType.ContainerType=None,PinType.bIsReference=False,PinType.bIsConst=False,PinType.bIsWeakPointer=False,PinType.bIsUObjectWrapper=False,PinType.bSerializeAsSinglePrecisionFloat=False,DefaultObject="/Script/AIModule.Default__NavLocalGridManager",PersistentGuid=00000000000000000000000000000000,bHidden=True,bNotConnectable=False,bDefaultValueIsReadOnly=False,bDefaultValueIsIgnored=False,bAdvancedView=False,bOrphanedPin=False,) + CustomProperties Pin (PinId=3FBC998EDAF84DC48EF01354ED460934,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=44559846BCBA449395FE1552F1ECE478,PinName="Location",PinToolTip="Location\nVector (by ref)",PinType.PinCategory="struct",PinType.PinSubCategory="",PinType.PinSubCategoryObject="/Script/CoreUObject.ScriptStruct'/Script/CoreUObject.Vector'",PinType.PinSubCategoryMemberReference=(),PinType.PinValueType=(),PinType.ContainerType=None,PinType.bIsReference=True,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=True,bAdvancedView=False,bOrphanedPin=False,) + CustomProperties Pin (PinId=C5C95F7DF3A74AF990B3093D85D70478,PinName="Extent",PinToolTip="Extent\nVector",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="15.000000,30.000000,45.000000",AutogeneratedDefaultValue="1.000000,1.000000,1.000000",PersistentGuid=00000000000000000000000000000000,bHidden=False,bNotConnectable=False,bDefaultValueIsReadOnly=False,bDefaultValueIsIgnored=False,bAdvancedView=False,bOrphanedPin=False,) + CustomProperties Pin (PinId=EE0E7856A7B54B5CBE67E4F589E82B4C,PinName="Rotation",PinToolTip="Rotation\nRotator",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="20.000000,30.000000,10.000000",AutogeneratedDefaultValue="0, 0, 0",PersistentGuid=00000000000000000000000000000000,bHidden=False,bNotConnectable=False,bDefaultValueIsReadOnly=False,bDefaultValueIsIgnored=False,bAdvancedView=False,bOrphanedPin=False,) + CustomProperties Pin (PinId=960A2A37701047D5B28353189B7199A5,PinName="Radius2D",PinToolTip="Radius 2D\nInteger",PinType.PinCategory="int",PinType.PinSubCategory="",PinType.PinSubCategoryObject=None,PinType.PinSubCategoryMemberReference=(),PinType.PinValueType=(),PinType.ContainerType=None,PinType.bIsReference=False,PinType.bIsConst=True,PinType.bIsWeakPointer=False,PinType.bIsUObjectWrapper=False,PinType.bSerializeAsSinglePrecisionFloat=False,DefaultValue="8",AutogeneratedDefaultValue="5",PersistentGuid=00000000000000000000000000000000,bHidden=False,bNotConnectable=False,bDefaultValueIsReadOnly=False,bDefaultValueIsIgnored=False,bAdvancedView=False,bOrphanedPin=False,) + CustomProperties Pin (PinId=DE5301DC038D43969F9DB9F41949AFD0,PinName="Height",PinToolTip="Height\nFloat (single-precision)",PinType.PinCategory="real",PinType.PinSubCategory="float",PinType.PinSubCategoryObject=None,PinType.PinSubCategoryMemberReference=(),PinType.PinValueType=(),PinType.ContainerType=None,PinType.bIsReference=False,PinType.bIsConst=True,PinType.bIsWeakPointer=False,PinType.bIsUObjectWrapper=False,PinType.bSerializeAsSinglePrecisionFloat=False,DefaultValue="200.500000",AutogeneratedDefaultValue="100.000000",PersistentGuid=00000000000000000000000000000000,bHidden=False,bNotConnectable=False,bDefaultValueIsReadOnly=False,bDefaultValueIsIgnored=False,bAdvancedView=False,bOrphanedPin=False,) + CustomProperties Pin (PinId=5E42C9BD542E413E9CEF9D5A98A4C5EB,PinName="bRebuildGrids",PinToolTip="Rebuild Grids\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="true",PersistentGuid=00000000000000000000000000000000,bHidden=False,bNotConnectable=False,bDefaultValueIsReadOnly=False,bDefaultValueIsIgnored=False,bAdvancedView=False,bOrphanedPin=False,) + CustomProperties Pin (PinId=5A398222D44740A98F9742B5BDDB3580,PinName="ReturnValue",PinToolTip="Return Value\nInteger\n\nAdd Local Navigation Grid for Box",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: [20.5, 19], + color: Configuration.nodeColors.blue, + icon: SVGIcon.functionSymbol, + pins: 9, + pinNames: [ + "Location", + "Extent", + "Rotation", + "Radius 2D", + "Height", + "Rebuild Grids", + "Return Value", + ], + delegate: false, + development: false, + additionalTest: async (node, pins, blueprintPage) => { + await expect(pins[2].locator("ueb-input")).toHaveText(["15.0", "30.0", "45.0"]) + await expect(pins[3].locator("ueb-input")).toHaveText(["10.0", "20.0", "30.0"]) + await expect(pins[4].locator("ueb-input")).toHaveText(["8"]) + await expect(pins[5].locator("ueb-input")).toHaveText(["200.5"]) + await expect(pins[6].locator("input")).toBeChecked({ checked: false }) + let inputs = await pins[2].locator("ueb-input").all() + await inputs[0].fill("-11.11") + await inputs[1].fill("-22.22") + await inputs[2].fill("-33.33") + await blueprintPage.blur() + expect(await pins[2].evaluate(pin => pin.entity.DefaultValue.constructor.className())) + .toBe("SimpleSerializationVectorEntity") + await expect(pins[2].locator("ueb-input")).toHaveText(["-11.11", "-22.22", "-33.33"]) + inputs = await pins[3].locator("ueb-input").all() + await inputs[0].fill("88") + await inputs[1].fill("77") + await inputs[2].fill("66") + await blueprintPage.blur() + expect(await pins[3].evaluate(pin => pin.entity.DefaultValue.constructor.className())) + .toBe("SimpleSerializationRotatorEntity") + await expect(pins[3].locator("ueb-input")).toHaveText(["88.0", "77.0", "66.0"]) + await pins[4].locator("ueb-input").fill("35.814") + await blueprintPage.blur() + expect(await pins[4].evaluate(pin => pin.entity.DefaultValue.constructor.className())) + .toBe("IntegerEntity") + await expect(pins[4].locator("ueb-input")).toHaveText("35") + await pins[6].locator("input").check() + await expect(pins[6].locator("input")).toBeChecked() + expect(await pins[6].evaluate(pin => pin.entity.DefaultValue.constructor.className())) + .toBe("BooleanEntity") + const serialization = await blueprintPage.getSerializedNodes() + await blueprintPage.removeNodes() + await blueprintPage.paste(serialization) + pins = await blueprintPage.blueprintLocator.locator("ueb-pin").all() + await expect(pins[2].locator("ueb-input")).toHaveText(["-11.11", "-22.22", "-33.33"]) + await expect(pins[3].locator("ueb-input")).toHaveText(["88.0", "77.0", "66.0"]) + await expect(pins[4].locator("ueb-input")).toHaveText(["35"]) + await expect(pins[5].locator("ueb-input")).toHaveText(["200.5"]) + await expect(pins[6].locator("input")).toBeChecked() + } +}) diff --git a/tests/nodeAlignQuaternions.spec.js b/tests/nodeAlignQuaternions.spec.js new file mode 100755 index 0000000..8ff79c1 --- /dev/null +++ b/tests/nodeAlignQuaternions.spec.js @@ -0,0 +1,34 @@ +import { css } from "lit" +import Configuration from "../js/Configuration.js" +import { expect, testNode } from "./fixtures/test.js" + +testNode({ + name: "Align Quaternions", + value: String.raw` + Begin Object Class=/Script/NiagaraEditor.NiagaraNodeFunctionCall Name="NiagaraNodeFunctionCall_125" ExportPath="/Script/NiagaraEditor.NiagaraNodeFunctionCall'/Engine/Transient.NewNiagaraScript:NiagaraScriptSource_0.NiagaraGraph_0.NiagaraNodeFunctionCall_125'" + FunctionScript="/Script/Niagara.NiagaraScript'/Niagara/Functions/Rotation/AlignQuaternions.AlignQuaternions'" + CachedChangeId=46822C6B48B121BA33580E809890283B + FunctionDisplayName="AlignQuaternions" + ChangeId=1773D73F6A644287931126B8B2F67371 + NodePosX=-512 + NodePosY=128 + NodeGuid=DF5F941A4DE7430989CE74C42E9F0E6F + CustomProperties Pin (PinId=AE6D0569136F4208B97DD62D9FB2EFF6,PinName="BaselineRotation",PinType.PinCategory="Type",PinType.PinSubCategory="",PinType.PinSubCategoryObject="/Script/CoreUObject.ScriptStruct'/Script/CoreUObject.Quat4f'",PinType.PinSubCategoryMemberReference=(),PinType.PinValueType=(),PinType.ContainerType=None,PinType.bIsReference=False,PinType.bIsConst=False,PinType.bIsWeakPointer=False,PinType.bIsUObjectWrapper=False,PinType.bSerializeAsSinglePrecisionFloat=False,DefaultValue="0.000,0.000,0.000,1.000",AutogeneratedDefaultValue="0.000,0.000,0.000,1.000",PersistentGuid=00000000000000000000000000000000,bHidden=False,bNotConnectable=False,bDefaultValueIsReadOnly=False,bDefaultValueIsIgnored=False,bAdvancedView=False,bOrphanedPin=False,) + CustomProperties Pin (PinId=32A04106CE014CF3B7A74E4CE3B7064B,PinName="NewRotation",PinType.PinCategory="Type",PinType.PinSubCategory="",PinType.PinSubCategoryObject="/Script/CoreUObject.ScriptStruct'/Script/CoreUObject.Quat4f'",PinType.PinSubCategoryMemberReference=(),PinType.PinValueType=(),PinType.ContainerType=None,PinType.bIsReference=False,PinType.bIsConst=False,PinType.bIsWeakPointer=False,PinType.bIsUObjectWrapper=False,PinType.bSerializeAsSinglePrecisionFloat=False,DefaultValue="0.000,0.000,0.000,1.000",AutogeneratedDefaultValue="0.000,0.000,0.000,1.000",PersistentGuid=00000000000000000000000000000000,bHidden=False,bNotConnectable=False,bDefaultValueIsReadOnly=False,bDefaultValueIsIgnored=False,bAdvancedView=False,bOrphanedPin=False,) + CustomProperties Pin (PinId=5F121C4330074978A1F9792824AE3B5A,PinName="NewOutput",Direction="EGPD_Output",PinType.PinCategory="Type",PinType.PinSubCategory="",PinType.PinSubCategoryObject="/Script/CoreUObject.ScriptStruct'/Script/CoreUObject.Quat4f'",PinType.PinSubCategoryMemberReference=(),PinType.PinValueType=(),PinType.ContainerType=None,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,) + End Object + `, + size: [16, 5.5], + icon: null, + color: Configuration.nodeColors.darkerBlue, + pins: 3, + delegate: false, + development: false, + additionalTest: async (node, pins) => { + expect(await node.evaluate(node => node.classList.contains("ueb-node-style-glass"))).toBeFalsy() + expect(await node.evaluate(node => node.classList.contains("ueb-node-style-default"))).toBeTruthy() + expect(await pins[0].evaluate(p => p.entity.pinColor().cssText)).toBe(css`0, 88, 200`.cssText) + expect(await pins[1].evaluate(p => p.entity.pinColor().cssText)).toBe(css`0, 88, 200`.cssText) + expect(await pins[2].evaluate(p => p.entity.pinColor().cssText)).toBe(css`0, 88, 200`.cssText) + }, +}) diff --git a/tests/nodeAnd.spec.js b/tests/nodeAnd.spec.js new file mode 100755 index 0000000..29b53e9 --- /dev/null +++ b/tests/nodeAnd.spec.js @@ -0,0 +1,43 @@ +import SVGIcon from "../js/SVGIcon.js" +import { expect, testNode } from "./fixtures/test.js" + +testNode({ + 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, blueprintPage) => { + for (const pin of pins) { + expect(await pin.evaluate(pin => pin.template.renderIcon().strings.join(""))) + .toStrictEqual(SVGIcon.operationPin.strings.join("")) + } + let inputs = await node.locator(".ueb-pin-input").all() + for (const input of inputs) { + expect(await input.isChecked()).toBeFalsy() + } + await inputs[inputs.length - 1].check() + expect(await inputs[inputs.length - 1].isChecked()).toBeTruthy() + const variadic = blueprintPage.node.getByText("Add pin") + await variadic.click() + inputs = await node.locator(".ueb-pin-input").all() + await inputs[inputs.length - 2].uncheck() + for (const input of inputs) { + expect(await input.isChecked()).toBeFalsy() + } + } +}) diff --git a/tests/nodeAppendMany.spec.js b/tests/nodeAppendMany.spec.js new file mode 100755 index 0000000..617df20 --- /dev/null +++ b/tests/nodeAppendMany.spec.js @@ -0,0 +1,54 @@ +import Configuration from "../js/Configuration.js" +import { testNode } from "./fixtures/test.js" + +testNode({ + name: "AppendMany", + value: String.raw` + Begin Object Class=/Script/UnrealEd.MaterialGraphNode Name="MaterialGraphNode_3" ExportPath="/Script/UnrealEd.MaterialGraphNode'/Engine/Transient.Material_0:MaterialGraph_0.MaterialGraphNode_3'" + Begin Object Class=/Script/Engine.MaterialExpressionMaterialFunctionCall Name="MaterialExpressionMaterialFunctionCall_0" ExportPath="/Script/Engine.MaterialExpressionMaterialFunctionCall'/Engine/Transient.Material_0:MaterialGraph_0.MaterialGraphNode_3.MaterialExpressionMaterialFunctionCall_0'" + End Object + Begin Object Name="MaterialExpressionMaterialFunctionCall_0" ExportPath="/Script/Engine.MaterialExpressionMaterialFunctionCall'/Engine/Transient.Material_0:MaterialGraph_0.MaterialGraphNode_3.MaterialExpressionMaterialFunctionCall_0'" + MaterialFunction="/Script/Engine.MaterialFunction'/Engine/Functions/Engine_MaterialFunctions02/Utility/AppendMany.AppendMany'" + FunctionInputs(0)=(ExpressionInputId=885D0D3941709A0021D522BB0D350E84,Input=(OutputIndex=-1,InputName="R")) + FunctionInputs(1)=(ExpressionInputId=66655BEF4DEEE4FBB682D1B2533B646B,Input=(OutputIndex=-1,InputName="G")) + FunctionInputs(2)=(ExpressionInputId=7971790B4C1CF3D12A6BD5849BF51222,Input=(OutputIndex=-1,InputName="B")) + FunctionInputs(3)=(ExpressionInputId=E0358D7C4B4022F69AB64786F99318D6,Input=(OutputIndex=-1,InputName="A")) + FunctionOutputs(0)=(ExpressionOutputId=FA6B13694608C010AF452E92B3981900,Output=(OutputName="RG")) + FunctionOutputs(1)=(ExpressionOutputId=C48A5AA9468A429E4D9984AD43B50CE5,Output=(OutputName="RGB")) + FunctionOutputs(2)=(ExpressionOutputId=B55BAD0C44C4D883F0D33CB57D00AB3C,Output=(OutputName="RGBA")) + MaterialExpressionEditorX=384 + MaterialExpressionEditorY=768 + MaterialExpressionGuid=971FA65449F74582B4418B816DDCBCCF + Material="/Script/Engine.Material'/Engine/Transient.Material_0'" + Outputs(0)=(OutputName="RG") + Outputs(1)=(OutputName="RGB") + Outputs(2)=(OutputName="RGBA") + End Object + MaterialExpression="/Script/Engine.MaterialExpressionMaterialFunctionCall'MaterialExpressionMaterialFunctionCall_0'" + NodePosX=384 + NodePosY=768 + NodeGuid=7CBF0C7DDBF848FE8D7E9A85D56C3772 + CustomProperties Pin (PinId=36EB45FD36FA4918947D2811918524EF,PinName="R (S)",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=3D2F2B761F6646E298BC96093285F44E,PinName="G (S)",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=4194B7FE10FC4AEEB2B9B620437618C3,PinName="B (S)",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=A29788A42F2E43E9B5F8959DF5478E8F,PinName="A (S)",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=7C55A39ECC2E4A78B0A2918AF200EED4,PinName="RG",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,) + CustomProperties Pin (PinId=A21DE80A4A454574AF9B1E0F8CD7E9F1,PinName="RGB",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,) + CustomProperties Pin (PinId=E5937F981A604CF1AF885868325FC83E,PinName="RGBA",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.blue, + icon: null, + pins: 7, + pinNames: [ + "R (S)", + "G (S)", + "B (S)", + "A (S)", + "RG", + "RGB", + "RGBA", + ], + delegate: false, + development: false, +}) diff --git a/tests/nodeAsyncChangeBundleStateForMatchingPrimaryAssets.spec.js b/tests/nodeAsyncChangeBundleStateForMatchingPrimaryAssets.spec.js new file mode 100755 index 0000000..b80af57 --- /dev/null +++ b/tests/nodeAsyncChangeBundleStateForMatchingPrimaryAssets.spec.js @@ -0,0 +1,30 @@ +import Configuration from "../js/Configuration.js" +import SVGIcon from "../js/SVGIcon.js" +import { testNode } from "./fixtures/test.js" + +testNode({ + 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, +}) diff --git a/tests/nodeBindEventtoModifiedEventDynamic.spec.js b/tests/nodeBindEventtoModifiedEventDynamic.spec.js new file mode 100755 index 0000000..d0ca1ce --- /dev/null +++ b/tests/nodeBindEventtoModifiedEventDynamic.spec.js @@ -0,0 +1,26 @@ +import Configuration from "../js/Configuration.js" +import SVGIcon from "../js/SVGIcon.js" +import { testNode } from "./fixtures/test.js" + +testNode({ + name: "Bind Event to Modified Event Dynamic", + value: String.raw` + Begin Object Class=/Script/BlueprintGraph.K2Node_AddDelegate Name="K2Node_AddDelegate_1" ExportPath="/Script/BlueprintGraph.K2Node_AddDelegate'/Engine/Maps/Templates/NewWorld.NewWorld:PersistentLevel.NewWorld.EventGraph.K2Node_AddDelegate_1'" + DelegateReference=(MemberParent="/Script/CoreUObject.Class'/Script/Engine.AnimDataModel'",MemberName="ModifiedEventDynamic") + NodePosX=1920 + NodePosY=-384 + NodeGuid=9F798056B9CB474A9EE2FE88063D4D20 + CustomProperties Pin (PinId=4D2AF198B99A445C925AA2A8380C533E,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=46363EE0231F4EA186E029977F586416,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=D3AD4B9A6EA745BD8EC70EE4B33FDB44,PinName="self",PinFriendlyName=NSLOCTEXT("K2Node", "BaseMCDelegateSelfPinName", "Target"),PinType.PinCategory="object",PinType.PinSubCategory="",PinType.PinSubCategoryObject="/Script/CoreUObject.Class'/Script/Engine.AnimDataModel'",PinType.PinSubCategoryMemberReference=(),PinType.PinValueType=(),PinType.ContainerType=None,PinType.bIsReference=False,PinType.bIsConst=False,PinType.bIsWeakPointer=False,PinType.bIsUObjectWrapper=False,PinType.bSerializeAsSinglePrecisionFloat=False,PersistentGuid=00000000000000000000000000000000,bHidden=False,bNotConnectable=False,bDefaultValueIsReadOnly=False,bDefaultValueIsIgnored=False,bAdvancedView=False,bOrphanedPin=False,) + CustomProperties Pin (PinId=48F1FF2C45A147C7B390B9D1A35FC3A2,PinName="Delegate",PinFriendlyName=NSLOCTEXT("K2Node", "PinFriendlyDelegatetName", "Event"),PinType.PinCategory="delegate",PinType.PinSubCategory="",PinType.PinSubCategoryObject=None,PinType.PinSubCategoryMemberReference=(MemberParent="/Script/CoreUObject.Package'/Script/Engine'",MemberName="AnimDataModelModifiedDynamicEvent__DelegateSignature"),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,) + End Object + `, + size: [18, 8], + color: Configuration.nodeColors.blue, + icon: SVGIcon.node, + pins: 4, + pinNames: ["Target", "Event"], + delegate: false, + development: false, +}) diff --git a/tests/nodeBindEventtoOnActorHit.spec.js b/tests/nodeBindEventtoOnActorHit.spec.js new file mode 100755 index 0000000..7bd6300 --- /dev/null +++ b/tests/nodeBindEventtoOnActorHit.spec.js @@ -0,0 +1,26 @@ +import Configuration from "../js/Configuration.js" +import SVGIcon from "../js/SVGIcon.js" +import { testNode } from "./fixtures/test.js" + +testNode({ + name: "Bind Event to On Actor Hit", + value: String.raw` + Begin Object Class=/Script/BlueprintGraph.K2Node_AddDelegate Name="K2Node_AddDelegate_0" ExportPath="/Script/BlueprintGraph.K2Node_AddDelegate'/Game/Examples/MazeSolver/Blueprints/MazeSolverTrainer.MazeSolverTrainer:EventGraph.K2Node_AddDelegate_0'" + DelegateReference=(MemberParent="/Script/CoreUObject.Class'/Script/Engine.Actor'",MemberName="OnActorHit") + NodePosX=256 + NodePosY=-48 + NodeGuid=A94C879148610E75EBAC94807E94F5DD + CustomProperties Pin (PinId=252C72EA45F1370E8B00FFB6D5C87B3A,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_Event_0 F135CD17D40347269BBBD101437B6AF0,),PersistentGuid=00000000000000000000000000000000,bHidden=False,bNotConnectable=False,bDefaultValueIsReadOnly=False,bDefaultValueIsIgnored=False,bAdvancedView=False,bOrphanedPin=False,) + CustomProperties Pin (PinId=66AE85F346F350F62B127B97DFC49563,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=D7358C004BE0EF6651DE69A7346E77D4,PinName="self",PinFriendlyName=NSLOCTEXT("K2Node", "BaseMCDelegateSelfPinName", "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,LinkedTo=(K2Node_CallFunction_0 EDE2516A4F187C93CBF2D7AE88066240,),PersistentGuid=00000000000000000000000000000000,bHidden=False,bNotConnectable=False,bDefaultValueIsReadOnly=False,bDefaultValueIsIgnored=False,bAdvancedView=False,bOrphanedPin=False,) + CustomProperties Pin (PinId=180DE95D4FD5AF2404F1CB80F0FBD29E,PinName="Delegate",PinFriendlyName=NSLOCTEXT("K2Node", "PinFriendlyDelegatetName", "Event"),PinType.PinCategory="Delegate",PinType.PinSubCategory="",PinType.PinSubCategoryObject=None,PinType.PinSubCategoryMemberReference=(MemberParent="/Script/CoreUObject.Package'/Script/Engine'",MemberName="ActorHitSignature__DelegateSignature"),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,) + End Object + `, + size: [13.5, 8], + color: Configuration.nodeColors.blue, + icon: SVGIcon.node, + pins: 4, + pinNames: ["Target", "Event"], + delegate: false, + development: false, +}) diff --git a/tests/nodeBindEventtoOnPreInitialize.spec.js b/tests/nodeBindEventtoOnPreInitialize.spec.js new file mode 100755 index 0000000..9111eca --- /dev/null +++ b/tests/nodeBindEventtoOnPreInitialize.spec.js @@ -0,0 +1,26 @@ +import Configuration from "../js/Configuration.js" +import SVGIcon from "../js/SVGIcon.js" +import { testNode } from "./fixtures/test.js" + +testNode({ + name: "Bind Event to On Pre Initialize", + value: String.raw` + Begin Object Class=/Script/BlueprintGraph.K2Node_AddDelegate Name="K2Node_AddDelegate_4" ExportPath="/Script/BlueprintGraph.K2Node_AddDelegate'/Engine/Maps/Templates/NewWorld.NewWorld:PersistentLevel.NewWorld.EventGraph.K2Node_AddDelegate_4'" + DelegateReference=(MemberParent="/Script/CoreUObject.Class'/Script/ControlRig.ControlRigComponent'",MemberName="OnPreInitializeDelegate") + NodePosX=1760 + NodePosY=-688 + NodeGuid=12A5D8F5736842F7B70C88C26D36B422 + CustomProperties Pin (PinId=CF6740C1F0A4487E91E6C33CA32F78B7,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=AD533F241A0B44A68FCDFDFE2F698A95,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=6E432C9EE60143F4890F0BDC6BCF4637,PinName="self",PinFriendlyName=NSLOCTEXT("K2Node", "BaseMCDelegateSelfPinName", "Target"),PinType.PinCategory="object",PinType.PinSubCategory="",PinType.PinSubCategoryObject="/Script/CoreUObject.Class'/Script/ControlRig.ControlRigComponent'",PinType.PinSubCategoryMemberReference=(),PinType.PinValueType=(),PinType.ContainerType=None,PinType.bIsReference=False,PinType.bIsConst=False,PinType.bIsWeakPointer=False,PinType.bIsUObjectWrapper=False,PinType.bSerializeAsSinglePrecisionFloat=False,PersistentGuid=00000000000000000000000000000000,bHidden=False,bNotConnectable=False,bDefaultValueIsReadOnly=False,bDefaultValueIsIgnored=False,bAdvancedView=False,bOrphanedPin=False,) + CustomProperties Pin (PinId=8C762AAFD03F4B89A4150D17A3C20598,PinName="Delegate",PinFriendlyName=NSLOCTEXT("K2Node", "PinFriendlyDelegatetName", "Event"),PinType.PinCategory="delegate",PinType.PinSubCategory="",PinType.PinSubCategoryObject=None,PinType.PinSubCategoryMemberReference=(MemberParent="/Script/CoreUObject.Package'/Script/ControlRig'",MemberName="ControlRigComponentDelegate__DelegateSignature"),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,) + End Object + `, + size: [15, 8], + color: Configuration.nodeColors.blue, + icon: SVGIcon.node, + pins: 4, + pinNames: ["Target", "Event"], + delegate: false, + development: false, +}) diff --git a/tests/nodeBitwiseAndInt.spec.js b/tests/nodeBitwiseAndInt.spec.js new file mode 100755 index 0000000..2771edc --- /dev/null +++ b/tests/nodeBitwiseAndInt.spec.js @@ -0,0 +1,31 @@ +import SVGIcon from "../js/SVGIcon.js" +import { expect, testNode } from "./fixtures/test.js" + +testNode({ + name: "Bitwise AND int", + 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("")) + } + } +}) diff --git a/tests/nodeBitwiseAndInt64.spec.js b/tests/nodeBitwiseAndInt64.spec.js new file mode 100755 index 0000000..81c0f76 --- /dev/null +++ b/tests/nodeBitwiseAndInt64.spec.js @@ -0,0 +1,41 @@ +import SVGIcon from "../js/SVGIcon.js" +import { expect, testNode } from "./fixtures/test.js" + +testNode({ + name: "Bitwise AND int64", + 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, blueprintPage) => { + for (const pin of pins) { + expect(await pin.evaluate(pin => pin.template.renderIcon().strings.join(""))) + .toStrictEqual(SVGIcon.operationPin.strings.join("")) + } + expect(await pins[0].evaluate(pin => pin.entity.DefaultValue.constructor.serialized)).toBeTruthy() + expect(await pins[1].evaluate(pin => pin.entity.DefaultValue.constructor.serialized)).toBeTruthy() + await pins[0].locator("ueb-input").fill("54") + await blueprintPage.blur() + expect(await pins[0].evaluate(pin => pin.entity.DefaultValue.constructor.serialized)).toBeTruthy() + expect(await pins[0].evaluate(pin => pin.entity.DefaultValue.serialize())).toEqual('"54"') + await pins[1].locator("ueb-input").fill("771") + await blueprintPage.blur() + expect(await pins[1].evaluate(pin => pin.entity.DefaultValue.constructor.serialized)).toBeTruthy() + expect(await pins[1].evaluate(pin => pin.entity.DefaultValue.serialize())).toEqual('"771"') + } +}) diff --git a/tests/nodeBitwiseNotInt.spec.js b/tests/nodeBitwiseNotInt.spec.js new file mode 100755 index 0000000..9dcec7f --- /dev/null +++ b/tests/nodeBitwiseNotInt.spec.js @@ -0,0 +1,30 @@ +import SVGIcon from "../js/SVGIcon.js" +import { expect, testNode } from "./fixtures/test.js" + +testNode({ + name: "Bitwise NOT int", + 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("")) + } + } +}) diff --git a/tests/nodeBitwiseNotInt64.spec.js b/tests/nodeBitwiseNotInt64.spec.js new file mode 100755 index 0000000..af75265 --- /dev/null +++ b/tests/nodeBitwiseNotInt64.spec.js @@ -0,0 +1,30 @@ +import SVGIcon from "../js/SVGIcon.js" +import { expect, testNode } from "./fixtures/test.js" + +testNode({ + name: "Bitwise NOT int64", + 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("")) + } + } +}) diff --git a/tests/nodeBitwiseOrInt.spec.js b/tests/nodeBitwiseOrInt.spec.js new file mode 100755 index 0000000..ace96b9 --- /dev/null +++ b/tests/nodeBitwiseOrInt.spec.js @@ -0,0 +1,35 @@ +import SVGIcon from "../js/SVGIcon.js" +import { expect, testNode } from "./fixtures/test.js" + +testNode({ + name: "Bitwise OR int", + 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 + NodePosY=16 + 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("")) + } + } +}) diff --git a/tests/nodeBitwiseOrInt64.spec.js b/tests/nodeBitwiseOrInt64.spec.js new file mode 100755 index 0000000..c745c70 --- /dev/null +++ b/tests/nodeBitwiseOrInt64.spec.js @@ -0,0 +1,33 @@ +import SVGIcon from "../js/SVGIcon.js" +import { expect, testNode } from "./fixtures/test.js" + +testNode({ + name: "Bitwise OR int64", + 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 + NodePosY=64 + 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("")) + } + } +}) diff --git a/tests/nodeBitwiseXorInt.spec.js b/tests/nodeBitwiseXorInt.spec.js new file mode 100755 index 0000000..de9cb79 --- /dev/null +++ b/tests/nodeBitwiseXorInt.spec.js @@ -0,0 +1,32 @@ +import SVGIcon from "../js/SVGIcon.js" +import { expect, testNode } from "./fixtures/test.js" + +testNode({ + name: "Bitwise XOR int", + 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 + NodePosY=32 + 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("")) + } + } +}) diff --git a/tests/nodeBitwiseXorInt64.spec.js b/tests/nodeBitwiseXorInt64.spec.js new file mode 100755 index 0000000..e4def86 --- /dev/null +++ b/tests/nodeBitwiseXorInt64.spec.js @@ -0,0 +1,31 @@ +import SVGIcon from "../js/SVGIcon.js" +import { expect, testNode } from "./fixtures/test.js" + +testNode({ + name: "Bitwise XOR int64", + 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 + NodePosY=256 + 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("")) + } + } +}) diff --git a/tests/nodeBranch.spec.js b/tests/nodeBranch.spec.js new file mode 100755 index 0000000..106d40c --- /dev/null +++ b/tests/nodeBranch.spec.js @@ -0,0 +1,25 @@ +import Configuration from "../js/Configuration.js" +import SVGIcon from "../js/SVGIcon.js" +import { testNode } from "./fixtures/test.js" + +testNode({ + 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, +}) diff --git a/tests/nodeCalculateAVolumeTexturesDistanceFieldGradient.spec.js b/tests/nodeCalculateAVolumeTexturesDistanceFieldGradient.spec.js new file mode 100755 index 0000000..b2d75e0 --- /dev/null +++ b/tests/nodeCalculateAVolumeTexturesDistanceFieldGradient.spec.js @@ -0,0 +1,63 @@ +import { css } from "lit" +import Configuration from "../js/Configuration.js" +import { expect, testNode } from "./fixtures/test.js" + +testNode({ + name: "Calculate A Volume Textures Distance Field Gradient", + value: String.raw` + Begin Object Class=/Script/NiagaraEditor.NiagaraNodeFunctionCall Name="NiagaraNodeFunctionCall_118" ExportPath="/Script/NiagaraEditor.NiagaraNodeFunctionCall'/Engine/Transient.NewNiagaraScript:NiagaraScriptSource_0.NiagaraGraph_0.NiagaraNodeFunctionCall_118'" + FunctionScript="/Script/Niagara.NiagaraScript'/Niagara/Functions/Textures/CalculateA_VolumeTexturesDistanceFieldGradient.CalculateA_VolumeTexturesDistanceFieldGradient'" + SelectedScriptVersion=FE54E5B243F724F59CBE18B14F541840 + CachedChangeId=DC7328824039207713ADFF82DEAF3A32 + FunctionDisplayName="CalculateA_VolumeTexturesDistanceFieldGradient" + ChangeId=5A8AF63A07AB47CCBF806D83FFB9020F + NodePosX=-512 + NodePosY=-512 + NodeGuid=3803C1B7F13C4D818D7AF71764B9957B + CustomProperties Pin (PinId=1C49656E46D540D0AC5961597B947D85,PinName="Sample Position",PinType.PinCategory="Type",PinType.PinSubCategory="",PinType.PinSubCategoryObject="/Script/CoreUObject.ScriptStruct'/Script/Niagara.NiagaraPosition'",PinType.PinSubCategoryMemberReference=(),PinType.PinValueType=(),PinType.ContainerType=None,PinType.bIsReference=False,PinType.bIsConst=False,PinType.bIsWeakPointer=False,PinType.bIsUObjectWrapper=False,PinType.bSerializeAsSinglePrecisionFloat=False,DefaultValue="0.000,0.000,0.000",AutogeneratedDefaultValue="0.000,0.000,0.000",PersistentGuid=00000000000000000000000000000000,bHidden=False,bNotConnectable=False,bDefaultValueIsReadOnly=False,bDefaultValueIsIgnored=False,bAdvancedView=False,bOrphanedPin=False,) + CustomProperties Pin (PinId=1FF0DD84BE324BEE94AC35A5D83896E1,PinName="Scale Factor",PinType.PinCategory="Type",PinType.PinSubCategory="",PinType.PinSubCategoryObject="/Script/CoreUObject.ScriptStruct'/Script/Niagara.NiagaraFloat'",PinType.PinSubCategoryMemberReference=(),PinType.PinValueType=(),PinType.ContainerType=None,PinType.bIsReference=False,PinType.bIsConst=False,PinType.bIsWeakPointer=False,PinType.bIsUObjectWrapper=False,PinType.bSerializeAsSinglePrecisionFloat=False,DefaultValue="1.000000",AutogeneratedDefaultValue="1.000000",PersistentGuid=00000000000000000000000000000000,bHidden=False,bNotConnectable=False,bDefaultValueIsReadOnly=False,bDefaultValueIsIgnored=False,bAdvancedView=False,bOrphanedPin=False,) + CustomProperties Pin (PinId=A2030D2728C34982A599AC7EAE2FDDE0,PinName="Volume Texture",PinType.PinCategory="Class",PinType.PinSubCategory="",PinType.PinSubCategoryObject="/Script/CoreUObject.Class'/Script/Niagara.NiagaraDataInterfaceVolumeTexture'",PinType.PinSubCategoryMemberReference=(),PinType.PinValueType=(),PinType.ContainerType=None,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=FCCC0AC1CCD54A099E450D4A4FA6A23C,PinName="Volume Center Location",PinType.PinCategory="Type",PinType.PinSubCategory="",PinType.PinSubCategoryObject="/Script/CoreUObject.ScriptStruct'/Script/Niagara.NiagaraPosition'",PinType.PinSubCategoryMemberReference=(),PinType.PinValueType=(),PinType.ContainerType=None,PinType.bIsReference=False,PinType.bIsConst=False,PinType.bIsWeakPointer=False,PinType.bIsUObjectWrapper=False,PinType.bSerializeAsSinglePrecisionFloat=False,DefaultValue="0.000,0.000,0.000",AutogeneratedDefaultValue="0.000,0.000,0.000",PersistentGuid=00000000000000000000000000000000,bHidden=False,bNotConnectable=False,bDefaultValueIsReadOnly=False,bDefaultValueIsIgnored=False,bAdvancedView=False,bOrphanedPin=False,) + CustomProperties Pin (PinId=F1BA4EFE91554666A80389736EB5005B,PinName="Volume Extents",PinType.PinCategory="Type",PinType.PinSubCategory="",PinType.PinSubCategoryObject="/Script/CoreUObject.ScriptStruct'/Script/CoreUObject.Vector3f'",PinType.PinSubCategoryMemberReference=(),PinType.PinValueType=(),PinType.ContainerType=None,PinType.bIsReference=False,PinType.bIsConst=False,PinType.bIsWeakPointer=False,PinType.bIsUObjectWrapper=False,PinType.bSerializeAsSinglePrecisionFloat=False,DefaultValue="0.000,0.000,0.000",AutogeneratedDefaultValue="0.000,0.000,0.000",PersistentGuid=00000000000000000000000000000000,bHidden=False,bNotConnectable=False,bDefaultValueIsReadOnly=False,bDefaultValueIsIgnored=False,bAdvancedView=False,bOrphanedPin=False,) + CustomProperties Pin (PinId=40512C3E4F5C4B85BAC287179458EDEF,PinName="Distance Field Texture Channel",PinType.PinCategory="Enum",PinType.PinSubCategory="",PinType.PinSubCategoryObject="/Script/Engine.UserDefinedEnum'/Niagara/Enums/ENiagara_Float4Channel.ENiagara_Float4Channel'",PinType.PinSubCategoryMemberReference=(),PinType.PinValueType=(),PinType.ContainerType=None,PinType.bIsReference=False,PinType.bIsConst=False,PinType.bIsWeakPointer=False,PinType.bIsUObjectWrapper=False,PinType.bSerializeAsSinglePrecisionFloat=False,DefaultValue="NewEnumerator0",AutogeneratedDefaultValue="NewEnumerator0",PersistentGuid=CC547F87ED03FB8EEA661F18ABDF8C16,bHidden=False,bNotConnectable=True,bDefaultValueIsReadOnly=False,bDefaultValueIsIgnored=False,bAdvancedView=False,bOrphanedPin=False,) + CustomProperties Pin (PinId=A5FEC96B447C42EB9CA7BE93AB04F93E,PinName="Vector To Surface",Direction="EGPD_Output",PinType.PinCategory="Type",PinType.PinSubCategory="",PinType.PinSubCategoryObject="/Script/CoreUObject.ScriptStruct'/Script/CoreUObject.Vector3f'",PinType.PinSubCategoryMemberReference=(),PinType.PinValueType=(),PinType.ContainerType=None,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=6D55F00292734872B750828E15779CD5,PinName="Distance To Surface",Direction="EGPD_Output",PinType.PinCategory="Type",PinType.PinSubCategory="",PinType.PinSubCategoryObject="/Script/CoreUObject.ScriptStruct'/Script/Niagara.NiagaraFloat'",PinType.PinSubCategoryMemberReference=(),PinType.PinValueType=(),PinType.ContainerType=None,PinType.bIsReference=False,PinType.bIsConst=False,PinType.bIsWeakPointer=False,PinType.bIsUObjectWrapper=False,PinType.bSerializeAsSinglePrecisionFloat=False,PersistentGuid=00000000000000000000000000000000,bHidden=False,bNotConnectable=False,bDefaultValueIsReadOnly=False,bDefaultValueIsIgnored=True,bAdvancedView=False,bOrphanedPin=False,) + CustomProperties Pin (PinId=CC5826BFCC784BECA71B5B09C145DCF7,PinName="Sampled Color",Direction="EGPD_Output",PinType.PinCategory="Type",PinType.PinSubCategory="",PinType.PinSubCategoryObject="/Script/CoreUObject.ScriptStruct'/Script/CoreUObject.Vector4f'",PinType.PinSubCategoryMemberReference=(),PinType.PinValueType=(),PinType.ContainerType=None,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=A22662833F8446309AF4E72E09B2A6C5,PinName="Field Gradient",Direction="EGPD_Output",PinType.PinCategory="Type",PinType.PinSubCategory="",PinType.PinSubCategoryObject="/Script/CoreUObject.ScriptStruct'/Script/CoreUObject.Vector3f'",PinType.PinSubCategoryMemberReference=(),PinType.PinValueType=(),PinType.ContainerType=None,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=59A2DB801C7D4E9180793F5F1F597B4F,PinName="IsoSurface Position",Direction="EGPD_Output",PinType.PinCategory="Type",PinType.PinSubCategory="",PinType.PinSubCategoryObject="/Script/CoreUObject.ScriptStruct'/Script/Niagara.NiagaraPosition'",PinType.PinSubCategoryMemberReference=(),PinType.PinValueType=(),PinType.ContainerType=None,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,) + End Object + `, + size: [25, 18], + icon: null, + color: Configuration.nodeColors.darkerBlue, + pins: 11, + pinNames: [ + "Sample Position", + "Scale Factor", + "Volume Texture", + "Volume Center Location", + "Volume Extents", + "Distance Field Texture Channel", + "Vector To Surface", + "Distance To Surface", + "Sampled Color", + "Field Gradient", + "Iso Surface Position", + ], + delegate: false, + development: false, + additionalTest: async (node, pins) => { + expect(await node.evaluate(node => node.classList.contains("ueb-node-style-glass"))).toBeFalsy() + expect(await node.evaluate(node => node.classList.contains("ueb-node-style-default"))).toBeTruthy() + expect(await pins[0].evaluate(p => p.entity.pinColor().cssText)).toBe(css`251, 146, 251`.cssText) + expect(await pins[1].evaluate(p => p.entity.pinColor().cssText)).toBe(css`160, 250, 68`.cssText) + expect(await pins[2].evaluate(p => p.entity.pinColor().cssText)).toBe(css`0, 168, 242`.cssText) + expect(await pins[3].evaluate(p => p.entity.pinColor().cssText)).toBe(css`251, 146, 251`.cssText) + expect(await pins[4].evaluate(p => p.entity.pinColor().cssText)).toBe(css`250, 200, 36`.cssText) + expect(await pins[6].evaluate(p => p.entity.pinColor().cssText)).toBe(css`250, 200, 36`.cssText) + expect(await pins[7].evaluate(p => p.entity.pinColor().cssText)).toBe(css`160, 250, 68`.cssText) + expect(await pins[8].evaluate(p => p.entity.pinColor().cssText)).toBe(css`0, 88, 200`.cssText) + expect(await pins[9].evaluate(p => p.entity.pinColor().cssText)).toBe(css`250, 200, 36`.cssText) + expect(await pins[10].evaluate(p => p.entity.pinColor().cssText)).toBe(css`251, 146, 251`.cssText) + }, +}) diff --git a/tests/nodeCallWeirdName.spec.js b/tests/nodeCallWeirdName.spec.js new file mode 100755 index 0000000..2bdf73e --- /dev/null +++ b/tests/nodeCallWeirdName.spec.js @@ -0,0 +1,25 @@ +import Configuration from "../js/Configuration.js" +import SVGIcon from "../js/SVGIcon.js" +import { testNode } from "./fixtures/test.js" + +testNode({ + name: "Call AS!%sasdAdsadDD", + 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.5, 6], + color: Configuration.nodeColors.blue, + icon: SVGIcon.node, + pins: 3, + pinNames: ["Target"], + delegate: false, + development: false, +}) diff --git a/tests/nodeCanJump.spec.js b/tests/nodeCanJump.spec.js new file mode 100755 index 0000000..3d0ae94 --- /dev/null +++ b/tests/nodeCanJump.spec.js @@ -0,0 +1,26 @@ +import Configuration from "../js/Configuration.js" +import SVGIcon from "../js/SVGIcon.js" +import { testNode } from "./fixtures/test.js" + +testNode({ + 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, +}) diff --git a/tests/nodeComment.spec.js b/tests/nodeComment.spec.js new file mode 100755 index 0000000..4326822 --- /dev/null +++ b/tests/nodeComment.spec.js @@ -0,0 +1,31 @@ +import { testNode } from "./fixtures/test.js" + +testNode({ + 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, +}) diff --git a/tests/nodeConstant.spec.js b/tests/nodeConstant.spec.js new file mode 100755 index 0000000..9a2de0d --- /dev/null +++ b/tests/nodeConstant.spec.js @@ -0,0 +1,42 @@ +import Configuration from "../js/Configuration.js" +import PinElement from "../js/element/PinElement.js" +import NumberEntity from "../js/entity/NumberEntity.js" +import { expect, testNode } from "./fixtures/test.js" + +testNode({ + 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().valueOf())).toBeCloseTo(value) + await expect(node.locator("ueb-input")).toHaveText([NumberEntity.printNumber(value)]) + } +}) diff --git a/tests/nodeConstant2Vector.spec.js b/tests/nodeConstant2Vector.spec.js new file mode 100755 index 0000000..7671ea4 --- /dev/null +++ b/tests/nodeConstant2Vector.spec.js @@ -0,0 +1,49 @@ +import Configuration from "../js/Configuration.js" +import PinElement from "../js/element/PinElement.js" +import NumberEntity from "../js/entity/NumberEntity.js" +import { expect, testNode } from "./fixtures/test.js" + +testNode({ + name: "Constant2Vector", + 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().valueOf())).toBeCloseTo(x) + expect(await yPin.evaluate(pin => pin.getDefaultValue().valueOf())).toBeCloseTo(y) + await expect(node.locator("ueb-input")).toHaveText([NumberEntity.printNumber(x), NumberEntity.printNumber(y)]) + } +}) diff --git a/tests/nodeConstant3Vector.spec.js b/tests/nodeConstant3Vector.spec.js new file mode 100755 index 0000000..10d3394 --- /dev/null +++ b/tests/nodeConstant3Vector.spec.js @@ -0,0 +1,45 @@ +import Configuration from "../js/Configuration.js" +import PinElement from "../js/element/PinElement.js" +import NumberEntity from "../js/entity/NumberEntity.js" +import { expect, testNode } from "./fixtures/test.js" + +testNode({ + 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 => NumberEntity.printNumber(v))) + } +}) diff --git a/tests/nodeConstant4Vector.spec.js b/tests/nodeConstant4Vector.spec.js new file mode 100755 index 0000000..6daa89e --- /dev/null +++ b/tests/nodeConstant4Vector.spec.js @@ -0,0 +1,50 @@ +import Configuration from "../js/Configuration.js" +import PinElement from "../js/element/PinElement.js" +import { expect, testNode } from "./fixtures/test.js" + +testNode({ + 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) + } +}) diff --git a/tests/nodeConstructionScript.spec.js b/tests/nodeConstructionScript.spec.js new file mode 100755 index 0000000..8af136d --- /dev/null +++ b/tests/nodeConstructionScript.spec.js @@ -0,0 +1,22 @@ +import Configuration from "../js/Configuration.js" +import SVGIcon from "../js/SVGIcon.js" +import { expect, testNode } from "./fixtures/test.js" + +testNode({ + 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, +}) diff --git a/tests/nodeCopyPayload.spec.js b/tests/nodeCopyPayload.spec.js new file mode 100755 index 0000000..398e1f5 --- /dev/null +++ b/tests/nodeCopyPayload.spec.js @@ -0,0 +1,28 @@ +import Configuration from "../js/Configuration.js" +import SVGIcon from "../js/SVGIcon.js" +import { testNode } from "./fixtures/test.js" + +testNode({ + name: "Copy Payload", + value: String.raw` + Begin Object Class=/Script/BlueprintGraph.K2Node_CallFunction Name="K2Node_CallFunction_0" ExportPath="/Script/BlueprintGraph.K2Node_CallFunction'/Engine/Maps/Templates/NewEditorUtilityBlueprint.NewEditorUtilityBlueprint:NewFunction.K2Node_CallFunction_0'" + FunctionReference=(MemberParent="/Script/CoreUObject.Class'/Script/Engine.AnimationDataModelNotifiesExtensions'",MemberName="CopyPayload") + NodePosX=-624 + NodePosY=224 + NodeGuid=A3F89A4516E64DF89CFD2A53F14A8BF7 + CustomProperties Pin (PinId=3EBC7147C5E74160A63ED4B20541B11C,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=E611C1C002DA4E88833EF4E18018DE29,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=7EAB5C36979142AE9CC0C1EC06988D82,PinName="self",PinFriendlyName=NSLOCTEXT("K2Node", "Target", "Target"),PinToolTip="Target\nAnimation Data Model Notifies Extensions Object Reference",PinType.PinCategory="object",PinType.PinSubCategory="",PinType.PinSubCategoryObject="/Script/CoreUObject.Class'/Script/Engine.AnimationDataModelNotifiesExtensions'",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__AnimationDataModelNotifiesExtensions",PersistentGuid=00000000000000000000000000000000,bHidden=True,bNotConnectable=False,bDefaultValueIsReadOnly=False,bDefaultValueIsIgnored=False,bAdvancedView=False,bOrphanedPin=False,) + CustomProperties Pin (PinId=C195EDB3B4904220A87E2E211E876787,PinName="Payload",PinToolTip="Payload\nAnim Data Model Notif Payload Structure (by ref)",PinType.PinCategory="struct",PinType.PinSubCategory="",PinType.PinSubCategoryObject="/Script/CoreUObject.ScriptStruct'/Script/Engine.AnimDataModelNotifPayload'",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=True,bAdvancedView=False,bOrphanedPin=False,) + CustomProperties Pin (PinId=BBD426289F74416D98B160B163A715B2,PinName="ExpectedStruct",PinToolTip="Expected Struct\nScript Struct Object Reference",PinType.PinCategory="object",PinType.PinSubCategory="",PinType.PinSubCategoryObject="/Script/CoreUObject.Class'/Script/CoreUObject.ScriptStruct'",PinType.PinSubCategoryMemberReference=(),PinType.PinValueType=(),PinType.ContainerType=None,PinType.bIsReference=False,PinType.bIsConst=False,PinType.bIsWeakPointer=False,PinType.bIsUObjectWrapper=False,PinType.bSerializeAsSinglePrecisionFloat=False,PersistentGuid=00000000000000000000000000000000,bHidden=False,bNotConnectable=False,bDefaultValueIsReadOnly=False,bDefaultValueIsIgnored=False,bAdvancedView=False,bOrphanedPin=False,) + CustomProperties Pin (PinId=377DFCDE9F154E10BE14955375E29365,PinName="OutPayload",PinToolTip="Out Payload\nEmpty Payload Structure (by ref)",PinType.PinCategory="struct",PinType.PinSubCategory="",PinType.PinSubCategoryObject="/Script/CoreUObject.ScriptStruct'/Script/Engine.EmptyPayload'",PinType.PinSubCategoryMemberReference=(),PinType.PinValueType=(),PinType.ContainerType=None,PinType.bIsReference=True,PinType.bIsConst=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, 11], + color: Configuration.nodeColors.blue, + icon: SVGIcon.functionSymbol, + pins: 5, + pinNames: ["Payload", "Expected Struct", "Out Payload"], + delegate: false, + development: false, +}) diff --git a/tests/nodeCreateEvent.spec.js b/tests/nodeCreateEvent.spec.js new file mode 100755 index 0000000..1460b24 --- /dev/null +++ b/tests/nodeCreateEvent.spec.js @@ -0,0 +1,22 @@ +import Configuration from "../js/Configuration.js" +import SVGIcon from "../js/SVGIcon.js" +import { testNode } from "./fixtures/test.js" + +testNode({ + 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, +}) diff --git a/tests/nodeDebugKey0.spec.js b/tests/nodeDebugKey0.spec.js new file mode 100755 index 0000000..519d574 --- /dev/null +++ b/tests/nodeDebugKey0.spec.js @@ -0,0 +1,26 @@ +import Configuration from "../js/Configuration.js" +import SVGIcon from "../js/SVGIcon.js" +import { testNode } from "./fixtures/test.js" + +testNode({ + 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, +}) diff --git a/tests/nodeDebugKey4.spec.js b/tests/nodeDebugKey4.spec.js new file mode 100755 index 0000000..3ff0c54 --- /dev/null +++ b/tests/nodeDebugKey4.spec.js @@ -0,0 +1,26 @@ +import Configuration from "../js/Configuration.js" +import SVGIcon from "../js/SVGIcon.js" +import { testNode } from "./fixtures/test.js" + +testNode({ + name: "Debug Key 4", + value: String.raw` + Begin Object Class=/Script/InputBlueprintNodes.K2Node_InputDebugKey Name="K2Node_InputDebugKey_2" + InputKey=Four + NodePosX=32 + 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, +}) diff --git a/tests/nodeDebugKeyNum5.spec.js b/tests/nodeDebugKeyNum5.spec.js new file mode 100755 index 0000000..cf1f6b4 --- /dev/null +++ b/tests/nodeDebugKeyNum5.spec.js @@ -0,0 +1,26 @@ +import Configuration from "../js/Configuration.js" +import SVGIcon from "../js/SVGIcon.js" +import { testNode } from "./fixtures/test.js" + +testNode({ + 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, +}) diff --git a/tests/nodeDebugKeyNumMul.spec.js b/tests/nodeDebugKeyNumMul.spec.js new file mode 100755 index 0000000..3b17994 --- /dev/null +++ b/tests/nodeDebugKeyNumMul.spec.js @@ -0,0 +1,26 @@ +import Configuration from "../js/Configuration.js" +import SVGIcon from "../js/SVGIcon.js" +import { testNode } from "./fixtures/test.js" + +testNode({ + 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/nodeDebugKeyThumbMouseButton.spec.js b/tests/nodeDebugKeyThumbMouseButton.spec.js new file mode 100755 index 0000000..e6213cb --- /dev/null +++ b/tests/nodeDebugKeyThumbMouseButton.spec.js @@ -0,0 +1,26 @@ +import Configuration from "../js/Configuration.js" +import SVGIcon from "../js/SVGIcon.js" +import { testNode } from "./fixtures/test.js" + +testNode({ + 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, +}) diff --git a/tests/nodeDebugKeyTouch10.spec.js b/tests/nodeDebugKeyTouch10.spec.js new file mode 100755 index 0000000..5e93aa9 --- /dev/null +++ b/tests/nodeDebugKeyTouch10.spec.js @@ -0,0 +1,26 @@ +import Configuration from "../js/Configuration.js" +import SVGIcon from "../js/SVGIcon.js" +import { testNode } from "./fixtures/test.js" + +testNode({ + name: "Debug Key Touch 10", + value: String.raw` + Begin Object Class=/Script/InputBlueprintNodes.K2Node_InputDebugKey Name="K2Node_InputDebugKey_10" + InputKey=Touch10 + NodePosX=192 + NodePosY=-304 + 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, +}) diff --git a/tests/nodeDelay.spec.js b/tests/nodeDelay.spec.js new file mode 100755 index 0000000..85bf7f3 --- /dev/null +++ b/tests/nodeDelay.spec.js @@ -0,0 +1,27 @@ +import Configuration from "../js/Configuration.js" +import SVGIcon from "../js/SVGIcon.js" +import { testNode } from "./fixtures/test.js" + +testNode({ + 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, +}) diff --git a/tests/nodeDistance.spec.js b/tests/nodeDistance.spec.js new file mode 100755 index 0000000..3ac6b59 --- /dev/null +++ b/tests/nodeDistance.spec.js @@ -0,0 +1,26 @@ +import { expect, testNode } from "./fixtures/test.js" + +testNode({ + name: "Distance", + value: String.raw` + Begin Object Class=/Script/NiagaraEditor.NiagaraNodeOp Name="NiagaraNodeOp_59" ExportPath="/Script/NiagaraEditor.NiagaraNodeOp'/Engine/Transient.NewNiagaraScript:NiagaraScriptSource_0.NiagaraGraph_0.NiagaraNodeOp_59'" + OpName="Numeric::DistancePos" + ChangeId=4EE3F52A93A84F89AA06ED1D00DBB194 + NodePosX=-128 + NodePosY=384 + NodeGuid=C1DF3F04B05344D4A8BA11F5D9B7022C + CustomProperties Pin (PinId=EBEA639B227A45AEAF9D988854C0B00F,PinName="A",PinToolTip="A",PinType.PinCategory="Type",PinType.PinSubCategory="",PinType.PinSubCategoryObject="/Script/CoreUObject.ScriptStruct'/Script/Niagara.NiagaraPosition'",PinType.PinSubCategoryMemberReference=(),PinType.PinValueType=(),PinType.ContainerType=None,PinType.bIsReference=False,PinType.bIsConst=False,PinType.bIsWeakPointer=False,PinType.bIsUObjectWrapper=False,PinType.bSerializeAsSinglePrecisionFloat=False,DefaultValue="1.0",AutogeneratedDefaultValue="1.0",PersistentGuid=00000000000000000000000000000000,bHidden=False,bNotConnectable=False,bDefaultValueIsReadOnly=False,bDefaultValueIsIgnored=False,bAdvancedView=False,bOrphanedPin=False,) + CustomProperties Pin (PinId=D33EAF7D8B0042438A9985EF503D663D,PinName="B",PinToolTip="B",PinType.PinCategory="Type",PinType.PinSubCategory="",PinType.PinSubCategoryObject="/Script/CoreUObject.ScriptStruct'/Script/Niagara.NiagaraPosition'",PinType.PinSubCategoryMemberReference=(),PinType.PinValueType=(),PinType.ContainerType=None,PinType.bIsReference=False,PinType.bIsConst=False,PinType.bIsWeakPointer=False,PinType.bIsUObjectWrapper=False,PinType.bSerializeAsSinglePrecisionFloat=False,DefaultValue="1.0",AutogeneratedDefaultValue="1.0",PersistentGuid=00000000000000000000000000000000,bHidden=False,bNotConnectable=False,bDefaultValueIsReadOnly=False,bDefaultValueIsIgnored=False,bAdvancedView=False,bOrphanedPin=False,) + CustomProperties Pin (PinId=4BAEA4BD06C445908F7F5750358768D5,PinName="Result",PinToolTip="Result",Direction="EGPD_Output",PinType.PinCategory="Type",PinType.PinSubCategory="",PinType.PinSubCategoryObject="/Script/CoreUObject.ScriptStruct'/Script/Niagara.NiagaraFloat'",PinType.PinSubCategoryMemberReference=(),PinType.PinValueType=(),PinType.ContainerType=None,PinType.bIsReference=False,PinType.bIsConst=False,PinType.bIsWeakPointer=False,PinType.bIsUObjectWrapper=False,PinType.bSerializeAsSinglePrecisionFloat=False,PersistentGuid=00000000000000000000000000000000,bHidden=False,bNotConnectable=False,bDefaultValueIsReadOnly=False,bDefaultValueIsIgnored=False,bAdvancedView=False,bOrphanedPin=False,) + End Object + `, + size: [17.5, 7], + pins: 3, + pinNames: ["A", "B", "Result"], + delegate: false, + development: false, + additionalTest: async node => { + expect(await node.evaluate(node => node.classList.contains("ueb-node-style-glass"))).toBeFalsy() + expect(await node.evaluate(node => node.classList.contains("ueb-node-style-default"))).toBeTruthy() + }, +}) diff --git a/tests/nodeDoOnce.spec.js b/tests/nodeDoOnce.spec.js new file mode 100755 index 0000000..b4ec353 --- /dev/null +++ b/tests/nodeDoOnce.spec.js @@ -0,0 +1,26 @@ +import Configuration from "../js/Configuration.js" +import SVGIcon from "../js/SVGIcon.js" +import { testNode } from "./fixtures/test.js" + +testNode({ + 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, +}) diff --git a/tests/nodeEGrave.spec.js b/tests/nodeEGrave.spec.js new file mode 100755 index 0000000..bae9c02 --- /dev/null +++ b/tests/nodeEGrave.spec.js @@ -0,0 +1,25 @@ +import Configuration from "../js/Configuration.js" +import SVGIcon from "../js/SVGIcon.js" +import { testNode } from "./fixtures/test.js" + +testNode({ + 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, +}) diff --git a/tests/nodeEmitter.Determinism.spec.js b/tests/nodeEmitter.Determinism.spec.js new file mode 100755 index 0000000..d2248b5 --- /dev/null +++ b/tests/nodeEmitter.Determinism.spec.js @@ -0,0 +1,17 @@ +import Configuration from "../js/Configuration.js" +import { testNode } from "./fixtures/test.js" + +testNode({ + name: "Emitter.Determinism", + value: String.raw` + Begin Object Class=/Script/NiagaraEditor.NiagaraClipboardContent Name="NiagaraClipboardContent_10" ExportPath="/Script/NiagaraEditor.NiagaraClipboardContent'/Engine/Transient.NiagaraClipboardContent_10'" + ExportedNodes="QmVnaW4gT2JqZWN0IENsYXNzPS9TY3JpcHQvTmlhZ2FyYUVkaXRvci5OaWFnYXJhTm9kZUlucHV0IE5hbWU9Ik5pYWdhcmFOb2RlSW5wdXRfNDYiIEV4cG9ydFBhdGg9Ii9TY3JpcHQvTmlhZ2FyYUVkaXRvci5OaWFnYXJhTm9kZUlucHV0Jy9FbmdpbmUvVHJhbnNpZW50Lk5ld05pYWdhcmFTY3JpcHQ6TmlhZ2FyYVNjcmlwdFNvdXJjZV8wLk5pYWdhcmFHcmFwaF8wLk5pYWdhcmFOb2RlSW5wdXRfNDYnIgogICBJbnB1dD0oTmFtZT0iRW1pdHRlci5EZXRlcm1pbmlzbSIsVHlwZURlZkhhbmRsZT0oUmVnaXN0ZXJlZFR5cGVJbmRleD04MikpDQogICBVc2FnZT1TeXN0ZW1Db25zdGFudA0KICAgQ2hhbmdlSWQ9MjY3NDNBNzU3MDVENDdGMDlENENBMzlCOEM3N0Y2NDUNCiAgIE5vZGVQb3NYPTIwOA0KICAgTm9kZVBvc1k9LTQzMg0KICAgTm9kZUd1aWQ9M0YzMkJDMjEyMUNCNDZERDk4NEJGNzIzRUI1Qzk0QzYNCiAgIEN1c3RvbVByb3BlcnRpZXMgUGluIChQaW5JZD1CRENFMTBCNTBGREQ0NDlCQjQ1NUU0NDk1MDM0MjM4NSxQaW5OYW1lPSJJbnB1dCIsRGlyZWN0aW9uPSJFR1BEX091dHB1dCIsUGluVHlwZS5QaW5DYXRlZ29yeT0iVHlwZSIsUGluVHlwZS5QaW5TdWJDYXRlZ29yeT0iIixQaW5UeXBlLlBpblN1YkNhdGVnb3J5T2JqZWN0PSIvU2NyaXB0L0NvcmVVT2JqZWN0LlNjcmlwdFN0cnVjdCcvU2NyaXB0L05pYWdhcmEuTmlhZ2FyYUJvb2wnIixQaW5UeXBlLlBpblN1YkNhdGVnb3J5TWVtYmVyUmVmZXJlbmNlPSgpLFBpblR5cGUuUGluVmFsdWVUeXBlPSgpLFBpblR5cGUuQ29udGFpbmVyVHlwZT1Ob25lLFBpblR5cGUuYklzUmVmZXJlbmNlPUZhbHNlLFBpblR5cGUuYklzQ29uc3Q9RmFsc2UsUGluVHlwZS5iSXNXZWFrUG9pbnRlcj1GYWxzZSxQaW5UeXBlLmJJc1VPYmplY3RXcmFwcGVyPUZhbHNlLFBpblR5cGUuYlNlcmlhbGl6ZUFzU2luZ2xlUHJlY2lzaW9uRmxvYXQ9RmFsc2UsUGVyc2lzdGVudEd1aWQ9MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAsYkhpZGRlbj1GYWxzZSxiTm90Q29ubmVjdGFibGU9RmFsc2UsYkRlZmF1bHRWYWx1ZUlzUmVhZE9ubHk9RmFsc2UsYkRlZmF1bHRWYWx1ZUlzSWdub3JlZD1GYWxzZSxiQWR2YW5jZWRWaWV3PUZhbHNlLGJPcnBoYW5lZFBpbj1GYWxzZSwpDQpFbmQgT2JqZWN0DQo=" + End Object + `, + color: Configuration.nodeColors.gray, + icon: null, + pins: 1, + pinNames: ["Input"], + delegate: false, + development: false, +}) diff --git a/tests/nodeEqualByte.spec.js b/tests/nodeEqualByte.spec.js new file mode 100755 index 0000000..0e963d4 --- /dev/null +++ b/tests/nodeEqualByte.spec.js @@ -0,0 +1,31 @@ +import SVGIcon from "../js/SVGIcon.js" +import { expect, testNode } from "./fixtures/test.js" + +testNode({ + name: "Equal byte", + 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/nodeEqualSlateBrush.spec.js b/tests/nodeEqualSlateBrush.spec.js new file mode 100755 index 0000000..e82e9dc --- /dev/null +++ b/tests/nodeEqualSlateBrush.spec.js @@ -0,0 +1,29 @@ +import SVGIcon from "../js/SVGIcon.js" +import { expect, testNode } from "./fixtures/test.js" + +testNode({ + name: "Equal slate brush", + 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("")) + } + } +}) diff --git a/tests/nodeExecuteBlueprint.spec.js b/tests/nodeExecuteBlueprint.spec.js new file mode 100755 index 0000000..f6c80fc --- /dev/null +++ b/tests/nodeExecuteBlueprint.spec.js @@ -0,0 +1,89 @@ +import SVGIcon from "../js/SVGIcon.js" +import { expect, testNode } from "./fixtures/test.js" + +testNode({ + 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/tests/nodeF1.spec.js b/tests/nodeF1.spec.js new file mode 100755 index 0000000..4be7a38 --- /dev/null +++ b/tests/nodeF1.spec.js @@ -0,0 +1,25 @@ +import Configuration from "../js/Configuration.js" +import SVGIcon from "../js/SVGIcon.js" +import { testNode } from "./fixtures/test.js" + +testNode({ + 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, +}) diff --git a/tests/nodeFlipFlop.spec.js b/tests/nodeFlipFlop.spec.js new file mode 100755 index 0000000..4ed0c23 --- /dev/null +++ b/tests/nodeFlipFlop.spec.js @@ -0,0 +1,26 @@ +import Configuration from "../js/Configuration.js" +import SVGIcon from "../js/SVGIcon.js" +import { testNode } from "./fixtures/test.js" + +testNode({ + 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, +}) diff --git a/tests/nodeFlipFlopLegacy.spec.js b/tests/nodeFlipFlopLegacy.spec.js new file mode 100755 index 0000000..95a1b59 --- /dev/null +++ b/tests/nodeFlipFlopLegacy.spec.js @@ -0,0 +1,57 @@ +import Configuration from "../js/Configuration.js" +import SVGIcon from "../js/SVGIcon.js" +import { testNode } from "./fixtures/test.js" + +testNode({ + 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, +}) diff --git a/tests/nodeForEachEAudioComponentPlayState.spec.js b/tests/nodeForEachEAudioComponentPlayState.spec.js new file mode 100755 index 0000000..723855f --- /dev/null +++ b/tests/nodeForEachEAudioComponentPlayState.spec.js @@ -0,0 +1,28 @@ +import Configuration from "../js/Configuration.js" +import SVGIcon from "../js/SVGIcon.js" +import { testNode } from "./fixtures/test.js" + +testNode({ + 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, +}) diff --git a/tests/nodeForEachLoop.spec.js b/tests/nodeForEachLoop.spec.js new file mode 100755 index 0000000..bf3af08 --- /dev/null +++ b/tests/nodeForEachLoop.spec.js @@ -0,0 +1,28 @@ +import Configuration from "../js/Configuration.js" +import SVGIcon from "../js/SVGIcon.js" +import { testNode } from "./fixtures/test.js" + +testNode({ + 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, +}) diff --git a/tests/nodeForEachLoopwithBreak.spec.js b/tests/nodeForEachLoopwithBreak.spec.js new file mode 100755 index 0000000..7d41ad4 --- /dev/null +++ b/tests/nodeForEachLoopwithBreak.spec.js @@ -0,0 +1,29 @@ +import Configuration from "../js/Configuration.js" +import SVGIcon from "../js/SVGIcon.js" +import { testNode } from "./fixtures/test.js" + +testNode({ + 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, +}) diff --git a/tests/nodeGetMouseWheelAxis.spec.js b/tests/nodeGetMouseWheelAxis.spec.js new file mode 100755 index 0000000..ab9add2 --- /dev/null +++ b/tests/nodeGetMouseWheelAxis.spec.js @@ -0,0 +1,28 @@ +import Configuration from "../js/Configuration.js" +import SVGIcon from "../js/SVGIcon.js" +import { testNode } from "./fixtures/test.js" + +testNode({ + 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, +}) diff --git a/tests/nodeGetMouseY.spec.js b/tests/nodeGetMouseY.spec.js new file mode 100755 index 0000000..6b7e1ed --- /dev/null +++ b/tests/nodeGetMouseY.spec.js @@ -0,0 +1,28 @@ +import Configuration from "../js/Configuration.js" +import SVGIcon from "../js/SVGIcon.js" +import { testNode } from "./fixtures/test.js" + +testNode({ + 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, +}) diff --git a/tests/nodeGetTouchpadButtonXAxis.spec.js b/tests/nodeGetTouchpadButtonXAxis.spec.js new file mode 100755 index 0000000..4007518 --- /dev/null +++ b/tests/nodeGetTouchpadButtonXAxis.spec.js @@ -0,0 +1,28 @@ +import Configuration from "../js/Configuration.js" +import SVGIcon from "../js/SVGIcon.js" +import { testNode } from "./fixtures/test.js" + +testNode({ + 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, +}) diff --git a/tests/nodeGreaterEqualByteByte.spec.js b/tests/nodeGreaterEqualByteByte.spec.js new file mode 100755 index 0000000..6931644 --- /dev/null +++ b/tests/nodeGreaterEqualByteByte.spec.js @@ -0,0 +1,30 @@ +import SVGIcon from "../js/SVGIcon.js" +import { expect, testNode } from "./fixtures/test.js" + +testNode({ + name: "Greater equal byte byte", + 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("")) + } + } +}) diff --git a/tests/nodeGreaterTimespanTimespan.spec.js b/tests/nodeGreaterTimespanTimespan.spec.js new file mode 100755 index 0000000..193d4d2 --- /dev/null +++ b/tests/nodeGreaterTimespanTimespan.spec.js @@ -0,0 +1,29 @@ +import SVGIcon from "../js/SVGIcon.js" +import { expect, testNode } from "./fixtures/test.js" + +testNode({ + name: "Greater timespan timespan", + 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 + "NodePosY"=256 + "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("")) + } + } +}) diff --git a/tests/nodeHasMatchingGameplayTag.spec.js b/tests/nodeHasMatchingGameplayTag.spec.js new file mode 100755 index 0000000..5b9461c --- /dev/null +++ b/tests/nodeHasMatchingGameplayTag.spec.js @@ -0,0 +1,30 @@ +import Configuration from "../js/Configuration.js" +import SVGIcon from "../js/SVGIcon.js" +import { testNode } from "./fixtures/test.js" + +testNode({ + 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, +}) diff --git a/tests/nodeInputIn(Vector3).spec.js b/tests/nodeInputIn(Vector3).spec.js new file mode 100755 index 0000000..0ccb490 --- /dev/null +++ b/tests/nodeInputIn(Vector3).spec.js @@ -0,0 +1,31 @@ +import Configuration from "../js/Configuration.js" +import { expect, testNode } from "./fixtures/test.js" + +testNode({ + name: "Input In (Vector3)", + value: String.raw` + Begin Object Class=/Script/UnrealEd.MaterialGraphNode Name="MaterialGraphNode_17" ExportPath="/Script/UnrealEd.MaterialGraphNode'/Engine/Transient.Material_1:MaterialGraph_0.MaterialGraphNode_17'" + Begin Object Class=/Script/Engine.MaterialExpressionFunctionInput Name="MaterialExpressionFunctionInput_7" ExportPath="/Script/Engine.MaterialExpressionFunctionInput'/Engine/Transient.Material_1:MaterialGraph_0.MaterialGraphNode_17.MaterialExpressionFunctionInput_7'" + End Object + Begin Object Name="MaterialExpressionFunctionInput_7" ExportPath="/Script/Engine.MaterialExpressionFunctionInput'/Engine/Transient.Material_1:MaterialGraph_0.MaterialGraphNode_17.MaterialExpressionFunctionInput_7'" + Id=2590318028564D9BAF90BEA43FBD3F1F + MaterialExpressionEditorX=512 + MaterialExpressionEditorY=224 + MaterialExpressionGuid=B0F1358EACAF46E5A277253263F0ECFC + Material="/Script/Engine.Material'/Engine/Transient.Material_1'" + End Object + MaterialExpression="/Script/Engine.MaterialExpressionFunctionInput'MaterialExpressionFunctionInput_7'" + NodePosX=512 + NodePosY=224 + NodeGuid=7F222623B44A4774BCA3C2F32DD16E98 + CustomProperties Pin (PinId=DD534EE002554330B23E7F4B984A52F5,PinName="Preview",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=22FB979A3F314CBA9B2ABE11214E9827,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.red, + icon: null, + pins: 2, + pinNames: ["Preview"], + delegate: false, + development: false, +}) diff --git a/tests/nodeInputX_1(Scalar).spec.js b/tests/nodeInputX_1(Scalar).spec.js new file mode 100755 index 0000000..fb8c6b1 --- /dev/null +++ b/tests/nodeInputX_1(Scalar).spec.js @@ -0,0 +1,36 @@ +import Configuration from "../js/Configuration.js" +import { testNode } from "./fixtures/test.js" + +testNode({ + name: "Input X_1 (Scalar)", + value: String.raw` + Begin Object Class=/Script/UnrealEd.MaterialGraphNode Name="MaterialGraphNode_14" ExportPath="/Script/UnrealEd.MaterialGraphNode'/Engine/Transient.Material_1:MaterialGraph_0.MaterialGraphNode_14'" + Begin Object Class=/Script/Engine.MaterialExpressionFunctionInput Name="MaterialExpressionFunctionInput_4" ExportPath="/Script/Engine.MaterialExpressionFunctionInput'/Engine/Transient.Material_1:MaterialGraph_0.MaterialGraphNode_14.MaterialExpressionFunctionInput_4'" + End Object + Begin Object Name="MaterialExpressionFunctionInput_4" ExportPath="/Script/Engine.MaterialExpressionFunctionInput'/Engine/Transient.Material_1:MaterialGraph_0.MaterialGraphNode_14.MaterialExpressionFunctionInput_4'" + InputName="X_1" + Id=220B12C48A1B4FD2A2F1964A3670D092 + InputType=FunctionInput_Scalar + bUsePreviewValueAsDefault=True + SortPriority=2 + MaterialExpressionEditorX=-64 + MaterialExpressionEditorY=208 + MaterialExpressionGuid=5B9F03CCBBD54567A9B6EAD08AAA08F0 + Material="/Script/Engine.Material'/Engine/Transient.Material_1'" + Function="/Script/Engine.MaterialFunction'/Engine/Transient.AppendMany'" + End Object + MaterialExpression="/Script/Engine.MaterialExpressionFunctionInput'MaterialExpressionFunctionInput_4'" + NodePosX=-64 + NodePosY=208 + NodeGuid=9379668BD62A45458DC56BE5B3F80A73 + CustomProperties Pin (PinId=1021DF0F4ABC4FE3BF1CF97F6FD78496,PinName="Preview",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=C875FB5EEFDC4CE6BD98B872403F7C29,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.red, + icon: null, + pins: 2, + pinNames: ["Preview"], + delegate: false, + development: false, +}) diff --git a/tests/nodeInterpolateOverTimeQuaternion.spec.js b/tests/nodeInterpolateOverTimeQuaternion.spec.js new file mode 100755 index 0000000..81de08a --- /dev/null +++ b/tests/nodeInterpolateOverTimeQuaternion.spec.js @@ -0,0 +1,53 @@ +import { css } from "lit" +import Configuration from "../js/Configuration.js" +import { expect, testNode } from "./fixtures/test.js" + +testNode({ + name: "Interpolate Over Time Quaternion", + value: String.raw` + Begin Object Class=/Script/NiagaraEditor.NiagaraNodeFunctionCall Name="NiagaraNodeFunctionCall_160" ExportPath="/Script/NiagaraEditor.NiagaraNodeFunctionCall'/Engine/Transient.NewNiagaraScript:NiagaraScriptSource_0.NiagaraGraph_0.NiagaraNodeFunctionCall_160'" + FunctionScript="/Script/Niagara.NiagaraScript'/Niagara/Functions/Math/InterpolateOverTime_Quaternion.InterpolateOverTime_Quaternion'" + SelectedScriptVersion=5A6359E649629A32B6B4CA9D6A4CF08B + CachedChangeId=BD6C65FF48EE55BD0354208C6E7CFC5E + FunctionDisplayName="InterpolateOverTime_Quaternion" + ChangeId=AFBFC05C8AFD4E3D9256AB1181E12D82 + NodePosX=544 + NodePosY=-384 + NodeGuid=12612978C2CC4F0BB84C22D4B4EEC3E1 + CustomProperties Pin (PinId=A123640517EC4387958B42AE6AAAF9FA,PinName="Map",PinType.PinCategory="Type",PinType.PinSubCategory="",PinType.PinSubCategoryObject="/Script/CoreUObject.ScriptStruct'/Script/Niagara.NiagaraParameterMap'",PinType.PinSubCategoryMemberReference=(),PinType.PinValueType=(),PinType.ContainerType=None,PinType.bIsReference=False,PinType.bIsConst=False,PinType.bIsWeakPointer=False,PinType.bIsUObjectWrapper=False,PinType.bSerializeAsSinglePrecisionFloat=False,PersistentGuid=00000000000000000000000000000000,bHidden=False,bNotConnectable=False,bDefaultValueIsReadOnly=False,bDefaultValueIsIgnored=False,bAdvancedView=False,bOrphanedPin=False,) + CustomProperties Pin (PinId=167B2B0C6E354603A988999007C19BA1,PinName="Rate Of Change",PinType.PinCategory="Type",PinType.PinSubCategory="",PinType.PinSubCategoryObject="/Script/CoreUObject.ScriptStruct'/Script/Niagara.NiagaraFloat'",PinType.PinSubCategoryMemberReference=(),PinType.PinValueType=(),PinType.ContainerType=None,PinType.bIsReference=False,PinType.bIsConst=False,PinType.bIsWeakPointer=False,PinType.bIsUObjectWrapper=False,PinType.bSerializeAsSinglePrecisionFloat=False,PersistentGuid=00000000000000000000000000000000,bHidden=False,bNotConnectable=False,bDefaultValueIsReadOnly=False,bDefaultValueIsIgnored=True,bAdvancedView=False,bOrphanedPin=False,) + CustomProperties Pin (PinId=E6184BA334B24985A45FC5F9E73F81D2,PinName="FirstFrame",PinType.PinCategory="Type",PinType.PinSubCategory="",PinType.PinSubCategoryObject="/Script/CoreUObject.ScriptStruct'/Script/Niagara.NiagaraBool'",PinType.PinSubCategoryMemberReference=(),PinType.PinValueType=(),PinType.ContainerType=None,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=1BDC577CF32A4990A7EEEB9AC3BBDAA2,PinName="Delta Time",PinType.PinCategory="Type",PinType.PinSubCategory="",PinType.PinSubCategoryObject="/Script/CoreUObject.ScriptStruct'/Script/Niagara.NiagaraFloat'",PinType.PinSubCategoryMemberReference=(),PinType.PinValueType=(),PinType.ContainerType=None,PinType.bIsReference=False,PinType.bIsConst=False,PinType.bIsWeakPointer=False,PinType.bIsUObjectWrapper=False,PinType.bSerializeAsSinglePrecisionFloat=False,PersistentGuid=00000000000000000000000000000000,bHidden=False,bNotConnectable=False,bDefaultValueIsReadOnly=False,bDefaultValueIsIgnored=True,bAdvancedView=False,bOrphanedPin=False,) + CustomProperties Pin (PinId=7C1356D8BDD74EBBA569EB9E1905EA0D,PinName="Target Value",PinType.PinCategory="Type",PinType.PinSubCategory="",PinType.PinSubCategoryObject="/Script/CoreUObject.ScriptStruct'/Script/CoreUObject.Quat4f'",PinType.PinSubCategoryMemberReference=(),PinType.PinValueType=(),PinType.ContainerType=None,PinType.bIsReference=False,PinType.bIsConst=False,PinType.bIsWeakPointer=False,PinType.bIsUObjectWrapper=False,PinType.bSerializeAsSinglePrecisionFloat=False,DefaultValue="0.000,0.000,0.000,1.000",AutogeneratedDefaultValue="0.000,0.000,0.000,1.000",PersistentGuid=00000000000000000000000000000000,bHidden=False,bNotConnectable=False,bDefaultValueIsReadOnly=False,bDefaultValueIsIgnored=False,bAdvancedView=False,bOrphanedPin=False,) + CustomProperties Pin (PinId=A57085A8B43144C1BCD7D67A81E09054,PinName="Initial Value",PinType.PinCategory="Type",PinType.PinSubCategory="",PinType.PinSubCategoryObject="/Script/CoreUObject.ScriptStruct'/Script/CoreUObject.Quat4f'",PinType.PinSubCategoryMemberReference=(),PinType.PinValueType=(),PinType.ContainerType=None,PinType.bIsReference=False,PinType.bIsConst=False,PinType.bIsWeakPointer=False,PinType.bIsUObjectWrapper=False,PinType.bSerializeAsSinglePrecisionFloat=False,DefaultValue="0.000,0.000,0.000,1.000",AutogeneratedDefaultValue="0.000,0.000,0.000,1.000",PersistentGuid=00000000000000000000000000000000,bHidden=False,bNotConnectable=False,bDefaultValueIsReadOnly=False,bDefaultValueIsIgnored=False,bAdvancedView=False,bOrphanedPin=False,) + CustomProperties Pin (PinId=0A10BAB1865F442EA0BFE5F320469DE3,PinName="Map",Direction="EGPD_Output",PinType.PinCategory="Type",PinType.PinSubCategory="",PinType.PinSubCategoryObject="/Script/CoreUObject.ScriptStruct'/Script/Niagara.NiagaraParameterMap'",PinType.PinSubCategoryMemberReference=(),PinType.PinValueType=(),PinType.ContainerType=None,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=3CF7483A34D64238BE6A3E9C20CE5111,PinName="Moving Average",Direction="EGPD_Output",PinType.PinCategory="Type",PinType.PinSubCategory="",PinType.PinSubCategoryObject="/Script/CoreUObject.ScriptStruct'/Script/CoreUObject.Quat4f'",PinType.PinSubCategoryMemberReference=(),PinType.PinValueType=(),PinType.ContainerType=None,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,) + End Object + `, + size: [17, 13], + icon: null, + color: Configuration.nodeColors.darkerBlue, + pins: 8, + pinNames: [ + "Map", + "Rate Of Change", + "First Frame", + "Delta Time", + "Target Value", + "Initial Value", + "Map", + "Moving Average", + ], + delegate: false, + development: false, + additionalTest: async (node, pins) => { + expect(await node.evaluate(node => node.classList.contains("ueb-node-style-glass"))).toBeFalsy() + expect(await node.evaluate(node => node.classList.contains("ueb-node-style-default"))).toBeTruthy() + expect(await pins[1].evaluate(p => p.entity.pinColor().cssText)).toBe(css`160, 250, 68`.cssText) + expect(await pins[2].evaluate(p => p.entity.pinColor().cssText)).toBe(css`146, 0, 0`.cssText) + expect(await pins[3].evaluate(p => p.entity.pinColor().cssText)).toBe(css`160, 250, 68`.cssText) + expect(await pins[4].evaluate(p => p.entity.pinColor().cssText)).toBe(css`0, 88, 200`.cssText) + expect(await pins[5].evaluate(p => p.entity.pinColor().cssText)).toBe(css`0, 88, 200`.cssText) + expect(await pins[7].evaluate(p => p.entity.pinColor().cssText)).toBe(css`0, 88, 200`.cssText) + }, +}) diff --git a/tests/nodeIsValid.spec.js b/tests/nodeIsValid.spec.js new file mode 100755 index 0000000..49fa66d --- /dev/null +++ b/tests/nodeIsValid.spec.js @@ -0,0 +1,26 @@ +import Configuration from "../js/Configuration.js" +import SVGIcon from "../js/SVGIcon.js" +import { testNode } from "./fixtures/test.js" + +testNode({ + 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, +}) diff --git a/tests/nodeLeftMouseButton.spec.js b/tests/nodeLeftMouseButton.spec.js new file mode 100755 index 0000000..8447f06 --- /dev/null +++ b/tests/nodeLeftMouseButton.spec.js @@ -0,0 +1,25 @@ +import Configuration from "../js/Configuration.js" +import SVGIcon from "../js/SVGIcon.js" +import { testNode } from "./fixtures/test.js" + +testNode({ + 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, +}) diff --git a/tests/nodeLessEqualDoubleDouble.spec.js b/tests/nodeLessEqualDoubleDouble.spec.js new file mode 100755 index 0000000..820fb00 --- /dev/null +++ b/tests/nodeLessEqualDoubleDouble.spec.js @@ -0,0 +1,30 @@ +import SVGIcon from "../js/SVGIcon.js" +import { expect, testNode } from "./fixtures/test.js" + +testNode({ + name: "Less equal double double", + 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("")) + } + } +}) diff --git a/tests/nodeLessTimespanTimespan.spec.js b/tests/nodeLessTimespanTimespan.spec.js new file mode 100755 index 0000000..bcd10c5 --- /dev/null +++ b/tests/nodeLessTimespanTimespan.spec.js @@ -0,0 +1,29 @@ +import SVGIcon from "../js/SVGIcon.js" +import { expect, testNode } from "./fixtures/test.js" + +testNode({ + name: "Less timespan timespan", + 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 + NodePosY=256 + 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("")) + } + } +}) diff --git a/tests/nodeLineTraceByChannel.spec.js b/tests/nodeLineTraceByChannel.spec.js new file mode 100755 index 0000000..55b06cd --- /dev/null +++ b/tests/nodeLineTraceByChannel.spec.js @@ -0,0 +1,38 @@ +import Configuration from "../js/Configuration.js" +import SVGIcon from "../js/SVGIcon.js" +import { testNode } from "./fixtures/test.js" + +testNode({ + 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, +}) diff --git a/tests/nodeLineTraceByProfile.spec.js b/tests/nodeLineTraceByProfile.spec.js new file mode 100755 index 0000000..607c483 --- /dev/null +++ b/tests/nodeLineTraceByProfile.spec.js @@ -0,0 +1,38 @@ +import Configuration from "../js/Configuration.js" +import SVGIcon from "../js/SVGIcon.js" +import { testNode } from "./fixtures/test.js" + +testNode({ + 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, +}) diff --git a/tests/nodeLineTraceComponent.spec.js b/tests/nodeLineTraceComponent.spec.js new file mode 100755 index 0000000..9c32211 --- /dev/null +++ b/tests/nodeLineTraceComponent.spec.js @@ -0,0 +1,35 @@ +import Configuration from "../js/Configuration.js" +import SVGIcon from "../js/SVGIcon.js" +import { testNode } from "./fixtures/test.js" + +testNode({ + 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, +}) diff --git a/tests/nodeLineTraceForObjects.spec.js b/tests/nodeLineTraceForObjects.spec.js new file mode 100755 index 0000000..1abebc2 --- /dev/null +++ b/tests/nodeLineTraceForObjects.spec.js @@ -0,0 +1,87 @@ +import Configuration from "../js/Configuration.js" +import SVGIcon from "../js/SVGIcon.js" +import { testNode } from "./fixtures/test.js" + +testNode({ + 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, +}) diff --git a/tests/nodeLiteralEnumEARLineTraceChannels.spec.js b/tests/nodeLiteralEnumEARLineTraceChannels.spec.js new file mode 100755 index 0000000..a4427b5 --- /dev/null +++ b/tests/nodeLiteralEnumEARLineTraceChannels.spec.js @@ -0,0 +1,23 @@ +import Configuration from "../js/Configuration.js" +import SVGIcon from "../js/SVGIcon.js" +import { testNode } from "./fixtures/test.js" + +testNode({ + 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, +}) diff --git a/tests/nodeLn.spec.js b/tests/nodeLn.spec.js new file mode 100755 index 0000000..87e9c7f --- /dev/null +++ b/tests/nodeLn.spec.js @@ -0,0 +1,30 @@ +import Configuration from "../js/Configuration.js" +import { testNode } from "./fixtures/test.js" + +testNode({ + 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, +}) diff --git a/tests/nodeLog10.spec.js b/tests/nodeLog10.spec.js new file mode 100755 index 0000000..0ef072a --- /dev/null +++ b/tests/nodeLog10.spec.js @@ -0,0 +1,30 @@ +import Configuration from "../js/Configuration.js" +import { testNode } from "./fixtures/test.js" + +testNode({ + 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, +}) diff --git a/tests/nodeLog2.spec.js b/tests/nodeLog2.spec.js new file mode 100755 index 0000000..94c8fce --- /dev/null +++ b/tests/nodeLog2.spec.js @@ -0,0 +1,30 @@ +import Configuration from "../js/Configuration.js" +import { testNode } from "./fixtures/test.js" + +testNode({ + 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, +}) diff --git a/tests/nodeLogicEq.spec.js b/tests/nodeLogicEq.spec.js new file mode 100755 index 0000000..3c1c108 --- /dev/null +++ b/tests/nodeLogicEq.spec.js @@ -0,0 +1,30 @@ +import { css } from "lit" +import { expect, testNode } from "./fixtures/test.js" + +testNode({ + name: "LogicEq", + title: "==", + value: String.raw` + Begin Object Class=/Script/NiagaraEditor.NiagaraNodeOp Name="NiagaraNodeOp_84" ExportPath="/Script/NiagaraEditor.NiagaraNodeOp'/Engine/Transient.NewNiagaraScript:NiagaraScriptSource_0.NiagaraGraph_0.NiagaraNodeOp_84'" + OpName="Boolean::LogicEq" + ChangeId=E8F9B2BA0D564EB9B931C93DD152FB69 + NodePosX=208 + NodePosY=144 + NodeGuid=E810B307E310413697CB9914DBC2A4B4 + CustomProperties Pin (PinId=BFC2067F95B7478B938D12EC5808D554,PinName="A",PinToolTip="A",PinType.PinCategory="Type",PinType.PinSubCategory="",PinType.PinSubCategoryObject="/Script/CoreUObject.ScriptStruct'/Script/Niagara.NiagaraBool'",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=653D4C4C85D349DEA2B79066FB615AD6,PinName="B",PinToolTip="B",PinType.PinCategory="Type",PinType.PinSubCategory="",PinType.PinSubCategoryObject="/Script/CoreUObject.ScriptStruct'/Script/Niagara.NiagaraBool'",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=4E45D3F396CE40C69D3F3949D18F1832,PinName="Result",PinToolTip="Result",Direction="EGPD_Output",PinType.PinCategory="Type",PinType.PinSubCategory="",PinType.PinSubCategoryObject="/Script/CoreUObject.ScriptStruct'/Script/Niagara.NiagaraBool'",PinType.PinSubCategoryMemberReference=(),PinType.PinValueType=(),PinType.ContainerType=None,PinType.bIsReference=False,PinType.bIsConst=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, 5], + pins: 3, + delegate: false, + development: false, + additionalTest: async (node, pins) => { + expect(await node.evaluate(node => node.classList.contains("ueb-node-style-glass"))).toBeTruthy() + for (const pin of pins) { + expect(await pin.evaluate(element => element.entity.pinColor().cssText)) + .toBe(css`146, 0, 0`.cssText) + } + }, +}) diff --git a/tests/nodeLogicNEq.spec.js b/tests/nodeLogicNEq.spec.js new file mode 100755 index 0000000..5d75c78 --- /dev/null +++ b/tests/nodeLogicNEq.spec.js @@ -0,0 +1,30 @@ +import { css } from "lit" +import { expect, testNode } from "./fixtures/test.js" + +testNode({ + name: "LogicNEq", + title: "!=", + value: String.raw` + Begin Object Class=/Script/NiagaraEditor.NiagaraNodeOp Name="NiagaraNodeOp_85" ExportPath="/Script/NiagaraEditor.NiagaraNodeOp'/Engine/Transient.NewNiagaraScript:NiagaraScriptSource_0.NiagaraGraph_0.NiagaraNodeOp_85'" + OpName="Boolean::LogicNEq" + ChangeId=3526C49A19484FCAA258F5F1399E5199 + NodePosX=-80 + NodePosY=128 + NodeGuid=591862B832B847AE8F2194837B5C9A68 + CustomProperties Pin (PinId=0E889E7597AD478C9D4E65D8593F9192,PinName="A",PinToolTip="A",PinType.PinCategory="Type",PinType.PinSubCategory="",PinType.PinSubCategoryObject="/Script/CoreUObject.ScriptStruct'/Script/Niagara.NiagaraBool'",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=A6BF9D71327E4000BD8D29B52CE0C168,PinName="B",PinToolTip="B",PinType.PinCategory="Type",PinType.PinSubCategory="",PinType.PinSubCategoryObject="/Script/CoreUObject.ScriptStruct'/Script/Niagara.NiagaraBool'",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=36E21F9BAA3D45BEB74DD7D06C763524,PinName="Result",PinToolTip="Result",Direction="EGPD_Output",PinType.PinCategory="Type",PinType.PinSubCategory="",PinType.PinSubCategoryObject="/Script/CoreUObject.ScriptStruct'/Script/Niagara.NiagaraBool'",PinType.PinSubCategoryMemberReference=(),PinType.PinValueType=(),PinType.ContainerType=None,PinType.bIsReference=False,PinType.bIsConst=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], + pins: 3, + delegate: false, + development: false, + additionalTest: async (node, pins) => { + expect(await node.evaluate(node => node.classList.contains("ueb-node-style-glass"))).toBeTruthy() + for (const pin of pins) { + expect(await pin.evaluate(element => element.entity.pinColor().cssText)) + .toBe(css`146, 0, 0`.cssText) + } + }, +}) diff --git a/tests/nodeMakeWeirdNameStruct.spec.js b/tests/nodeMakeWeirdNameStruct.spec.js new file mode 100755 index 0000000..8270f3b --- /dev/null +++ b/tests/nodeMakeWeirdNameStruct.spec.js @@ -0,0 +1,28 @@ +import Configuration from "../js/Configuration.js" +import SVGIcon from "../js/SVGIcon.js" +import { testNode } from "./fixtures/test.js" + +testNode({ + 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/nodeMatrixTransformPosition.spec.js b/tests/nodeMatrixTransformPosition.spec.js new file mode 100755 index 0000000..3e6fa09 --- /dev/null +++ b/tests/nodeMatrixTransformPosition.spec.js @@ -0,0 +1,26 @@ +import { expect, testNode } from "./fixtures/test.js" + +testNode({ + name: "Matrix Transform Position", + value: String.raw` + Begin Object Class=/Script/NiagaraEditor.NiagaraNodeOp Name="NiagaraNodeOp_93" ExportPath="/Script/NiagaraEditor.NiagaraNodeOp'/Engine/Transient.NewNiagaraScript:NiagaraScriptSource_0.NiagaraGraph_0.NiagaraNodeOp_93'" + OpName="Matrix::TransformPosition" + ChangeId=B50CCE545D064D12991CD1407DF14437 + NodePosX=800 + NodePosY=352 + NodeGuid=C8731F92EF32437D949081E06D044FC5 + CustomProperties Pin (PinId=B92730CFC09540B7A8B7C89EBC2A9526,PinName="M",PinToolTip="M",PinType.PinCategory="Type",PinType.PinSubCategory="",PinType.PinSubCategoryObject="/Script/CoreUObject.ScriptStruct'/Script/Niagara.NiagaraMatrix'",PinType.PinSubCategoryMemberReference=(),PinType.PinValueType=(),PinType.ContainerType=None,PinType.bIsReference=False,PinType.bIsConst=False,PinType.bIsWeakPointer=False,PinType.bIsUObjectWrapper=False,PinType.bSerializeAsSinglePrecisionFloat=False,DefaultValue="1.0,0.0,0.0,0.0,\\t\\t0.0,1.0,0.0,0.0,\\t\\t0.0,0.0,1.0,0.0,\\t\\t0.0,0.0,0.0,1.0",AutogeneratedDefaultValue="1.0,0.0,0.0,0.0,\\t\\t0.0,1.0,0.0,0.0,\\t\\t0.0,0.0,1.0,0.0,\\t\\t0.0,0.0,0.0,1.0",PersistentGuid=00000000000000000000000000000000,bHidden=False,bNotConnectable=False,bDefaultValueIsReadOnly=False,bDefaultValueIsIgnored=False,bAdvancedView=False,bOrphanedPin=False,) + CustomProperties Pin (PinId=D970C7D4FA4949918AD657EF0D55462B,PinName="V",PinToolTip="V",PinType.PinCategory="Type",PinType.PinSubCategory="",PinType.PinSubCategoryObject="/Script/CoreUObject.ScriptStruct'/Script/Niagara.NiagaraPosition'",PinType.PinSubCategoryMemberReference=(),PinType.PinValueType=(),PinType.ContainerType=None,PinType.bIsReference=False,PinType.bIsConst=False,PinType.bIsWeakPointer=False,PinType.bIsUObjectWrapper=False,PinType.bSerializeAsSinglePrecisionFloat=False,DefaultValue="1.0,1.0,1.0",AutogeneratedDefaultValue="1.0,1.0,1.0",PersistentGuid=00000000000000000000000000000000,bHidden=False,bNotConnectable=False,bDefaultValueIsReadOnly=False,bDefaultValueIsIgnored=False,bAdvancedView=False,bOrphanedPin=False,) + CustomProperties Pin (PinId=356EC3AE7343453EB6554019FC162416,PinName="Result",PinToolTip="Result",Direction="EGPD_Output",PinType.PinCategory="Type",PinType.PinSubCategory="",PinType.PinSubCategoryObject="/Script/CoreUObject.ScriptStruct'/Script/Niagara.NiagaraPosition'",PinType.PinSubCategoryMemberReference=(),PinType.PinValueType=(),PinType.ContainerType=None,PinType.bIsReference=False,PinType.bIsConst=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, 6], + pins: 3, + pinNames: ["M", "V", "Result"], + delegate: false, + development: false, + additionalTest: async node => { + expect(await node.evaluate(node => node.classList.contains("ueb-node-style-glass"))).toBeFalsy() + expect(await node.evaluate(node => node.classList.contains("ueb-node-style-default"))).toBeTruthy() + }, +}) diff --git a/tests/nodeMiddleMouseButton.spec.js b/tests/nodeMiddleMouseButton.spec.js new file mode 100755 index 0000000..2a895e7 --- /dev/null +++ b/tests/nodeMiddleMouseButton.spec.js @@ -0,0 +1,25 @@ +import Configuration from "../js/Configuration.js" +import SVGIcon from "../js/SVGIcon.js" +import { testNode } from "./fixtures/test.js" + +testNode({ + 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, +}) diff --git a/tests/nodeMouseWheelAxis.spec.js b/tests/nodeMouseWheelAxis.spec.js new file mode 100755 index 0000000..dce2b47 --- /dev/null +++ b/tests/nodeMouseWheelAxis.spec.js @@ -0,0 +1,27 @@ +import Configuration from "../js/Configuration.js" +import SVGIcon from "../js/SVGIcon.js" +import { testNode } from "./fixtures/test.js" + +testNode({ + 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 + NodePosY=-192 + 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, +}) diff --git a/tests/nodeMouseX.spec.js b/tests/nodeMouseX.spec.js new file mode 100755 index 0000000..955387a --- /dev/null +++ b/tests/nodeMouseX.spec.js @@ -0,0 +1,27 @@ +import Configuration from "../js/Configuration.js" +import SVGIcon from "../js/SVGIcon.js" +import { testNode } from "./fixtures/test.js" + +testNode({ + 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, +}) diff --git a/tests/nodeMouseXY2D-Axis.spec.js b/tests/nodeMouseXY2D-Axis.spec.js new file mode 100755 index 0000000..5542052 --- /dev/null +++ b/tests/nodeMouseXY2D-Axis.spec.js @@ -0,0 +1,27 @@ +import Configuration from "../js/Configuration.js" +import SVGIcon from "../js/SVGIcon.js" +import { testNode } from "./fixtures/test.js" + +testNode({ + 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, +}) diff --git a/tests/nodeMouseY.spec.js b/tests/nodeMouseY.spec.js new file mode 100755 index 0000000..24c90d6 --- /dev/null +++ b/tests/nodeMouseY.spec.js @@ -0,0 +1,27 @@ +import Configuration from "../js/Configuration.js" +import SVGIcon from "../js/SVGIcon.js" +import { testNode } from "./fixtures/test.js" + +testNode({ + 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, +}) diff --git a/tests/nodeMoveCharacterRandomLocation.spec.js b/tests/nodeMoveCharacterRandomLocation.spec.js new file mode 100755 index 0000000..6d5d78e --- /dev/null +++ b/tests/nodeMoveCharacterRandomLocation.spec.js @@ -0,0 +1,24 @@ +import Configuration from "../js/Configuration.js" +import SVGIcon from "../js/SVGIcon.js" +import { testNode } from "./fixtures/test.js" + +testNode({ + 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, +}) diff --git a/tests/nodeMultiGate.spec.js b/tests/nodeMultiGate.spec.js new file mode 100755 index 0000000..d647a78 --- /dev/null +++ b/tests/nodeMultiGate.spec.js @@ -0,0 +1,29 @@ +import Configuration from "../js/Configuration.js" +import SVGIcon from "../js/SVGIcon.js" +import { testNode } from "./fixtures/test.js" + +testNode({ + 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, +}) diff --git a/tests/nodeMultiply(MatrixMulVector4).spec.js b/tests/nodeMultiply(MatrixMulVector4).spec.js new file mode 100755 index 0000000..3ac221f --- /dev/null +++ b/tests/nodeMultiply(MatrixMulVector4).spec.js @@ -0,0 +1,61 @@ +import PinElement from "../js/element/PinElement.js" +import Utility from "../js/Utility.js" +import { expect, testNode } from "./fixtures/test.js" + +testNode({ + name: "Multiply (Matrix * Vector4)", + value: String.raw` + Begin Object Class=/Script/NiagaraEditor.NiagaraNodeOp Name="NiagaraNodeOp_92" ExportPath="/Script/NiagaraEditor.NiagaraNodeOp'/Engine/Transient.NewNiagaraScript:NiagaraScriptSource_0.NiagaraGraph_0.NiagaraNodeOp_92'" + OpName="Matrix::MatrixVectorMultiply" + ChangeId=27BF0290BEB64ADA8B924165BC1B4638 + NodePosX=512 + NodePosY=480 + NodeGuid=597CA99BCD6540339C6EDD3F779DD5E2 + CustomProperties Pin (PinId=B18A8E214AA24427AD350D7548E67682,PinName="M",PinToolTip="M",PinType.PinCategory="Type",PinType.PinSubCategory="",PinType.PinSubCategoryObject="/Script/CoreUObject.ScriptStruct'/Script/Niagara.NiagaraMatrix'",PinType.PinSubCategoryMemberReference=(),PinType.PinValueType=(),PinType.ContainerType=None,PinType.bIsReference=False,PinType.bIsConst=False,PinType.bIsWeakPointer=False,PinType.bIsUObjectWrapper=False,PinType.bSerializeAsSinglePrecisionFloat=False,DefaultValue="1.0,0.0,0.0,0.0,\t\t0.0,1.0,0.0,0.0,\t\t0.0,0.0,1.0,0.0,\t\t0.0,0.0,0.0,1.0",AutogeneratedDefaultValue="1.0,0.0,0.0,0.0,\t\t0.0,1.0,0.0,0.0,\t\t0.0,0.0,1.0,0.0,\t\t0.0,0.0,0.0,1.0",LinkedTo=(NiagaraNodeParameterMapGet_2 77AD8CE312C44F3996A0AF04607A4DD6,),PersistentGuid=00000000000000000000000000000000,bHidden=False,bNotConnectable=False,bDefaultValueIsReadOnly=False,bDefaultValueIsIgnored=False,bAdvancedView=False,bOrphanedPin=False,) + CustomProperties Pin (PinId=28E62E1F14204AD1857565EF6C7A63F3,PinName="V",PinToolTip="V",PinType.PinCategory="Type",PinType.PinSubCategory="",PinType.PinSubCategoryObject="/Script/CoreUObject.ScriptStruct'/Script/CoreUObject.Vector4f'",PinType.PinSubCategoryMemberReference=(),PinType.PinValueType=(),PinType.ContainerType=None,PinType.bIsReference=False,PinType.bIsConst=False,PinType.bIsWeakPointer=False,PinType.bIsUObjectWrapper=False,PinType.bSerializeAsSinglePrecisionFloat=False,DefaultValue="22.000000,33.000000,44.000000,55.000000",AutogeneratedDefaultValue="1.0,1.0,1.0",PersistentGuid=00000000000000000000000000000000,bHidden=False,bNotConnectable=False,bDefaultValueIsReadOnly=False,bDefaultValueIsIgnored=False,bAdvancedView=False,bOrphanedPin=False,) + CustomProperties Pin (PinId=9A2423D0FFC945DA85DA823BD71D6BA0,PinName="Result",PinToolTip="Result",Direction="EGPD_Output",PinType.PinCategory="Type",PinType.PinSubCategory="",PinType.PinSubCategoryObject="/Script/CoreUObject.ScriptStruct'/Script/CoreUObject.Vector4f'",PinType.PinSubCategoryMemberReference=(),PinType.PinValueType=(),PinType.ContainerType=None,PinType.bIsReference=False,PinType.bIsConst=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: [22.5, 7], + pins: 3, + pinNames: ["M", "V", "Result"], + delegate: false, + development: false, + additionalTest: async (node, pins, blueprintPage) => { + expect(await node.evaluate(node => node.classList.contains("ueb-node-style-glass"))).toBeFalsy() + expect(await node.evaluate(node => node.classList.contains("ueb-node-style-default"))).toBeTruthy() + expect(await pins[1].evaluate(/** @param {PinElement} pin */pin => pin.entity.DefaultValue.toArray())) + .toStrictEqual([22, 33, 44, 55]) + let inputs = await pins[1].locator("ueb-input").all() + await inputs[0].fill("-1") + await inputs[1].fill("-2") + await inputs[2].fill("-3") + await inputs[3].fill("-4") + await blueprintPage.blur() + await expect(inputs[0]).toContainText("-1.0") + await expect(inputs[1]).toContainText("-2.0") + await expect(inputs[2]).toContainText("-3.0") + await expect(inputs[3]).toContainText("-4.0") + const resultSerialization = await blueprintPage.blueprintLocator.evaluate(blueprint => { + blueprint.selectAll() + return blueprint.getSerializedText() + }) + const expectedSerialization = String.raw` + Begin Object Class=/Script/NiagaraEditor.NiagaraNodeOp Name="NiagaraNodeOp_92" ExportPath="/Script/NiagaraEditor.NiagaraNodeOp'/Engine/Transient.NewNiagaraScript:NiagaraScriptSource_0.NiagaraGraph_0.NiagaraNodeOp_92'" + OpName="Matrix::MatrixVectorMultiply" + ChangeId=27BF0290BEB64ADA8B924165BC1B4638 + NodePosX=512 + NodePosY=480 + NodeGuid=597CA99BCD6540339C6EDD3F779DD5E2 + CustomProperties Pin (PinId=B18A8E214AA24427AD350D7548E67682,PinName="M",PinToolTip="M",PinType.PinCategory="Type",PinType.PinSubCategory="",PinType.PinSubCategoryObject="/Script/CoreUObject.ScriptStruct'/Script/Niagara.NiagaraMatrix'",PinType.PinSubCategoryMemberReference=(),PinType.PinValueType=(),PinType.ContainerType=None,PinType.bIsReference=False,PinType.bIsConst=False,PinType.bIsWeakPointer=False,PinType.bIsUObjectWrapper=False,PinType.bSerializeAsSinglePrecisionFloat=False,DefaultValue="1.0,0.0,0.0,0.0,\t\t0.0,1.0,0.0,0.0,\t\t0.0,0.0,1.0,0.0,\t\t0.0,0.0,0.0,1.0",AutogeneratedDefaultValue="1.0,0.0,0.0,0.0,\t\t0.0,1.0,0.0,0.0,\t\t0.0,0.0,1.0,0.0,\t\t0.0,0.0,0.0,1.0",LinkedTo=(NiagaraNodeParameterMapGet_2 77AD8CE312C44F3996A0AF04607A4DD6,),PersistentGuid=00000000000000000000000000000000,bHidden=False,bNotConnectable=False,bDefaultValueIsReadOnly=False,bDefaultValueIsIgnored=False,bAdvancedView=False,bOrphanedPin=False,) + CustomProperties Pin (PinId=28E62E1F14204AD1857565EF6C7A63F3,PinName="V",PinToolTip="V",PinType.PinCategory="Type",PinType.PinSubCategory="",PinType.PinSubCategoryObject="/Script/CoreUObject.ScriptStruct'/Script/CoreUObject.Vector4f'",PinType.PinSubCategoryMemberReference=(),PinType.PinValueType=(),PinType.ContainerType=None,PinType.bIsReference=False,PinType.bIsConst=False,PinType.bIsWeakPointer=False,PinType.bIsUObjectWrapper=False,PinType.bSerializeAsSinglePrecisionFloat=False,DefaultValue="-1.000000,-2.000000,-3.000000,-4.000000",AutogeneratedDefaultValue="1.0,1.0,1.0",PersistentGuid=00000000000000000000000000000000,bHidden=False,bNotConnectable=False,bDefaultValueIsReadOnly=False,bDefaultValueIsIgnored=False,bAdvancedView=False,bOrphanedPin=False,) + CustomProperties Pin (PinId=9A2423D0FFC945DA85DA823BD71D6BA0,PinName="Result",PinToolTip="Result",Direction="EGPD_Output",PinType.PinCategory="Type",PinType.PinSubCategory="",PinType.PinSubCategoryObject="/Script/CoreUObject.ScriptStruct'/Script/CoreUObject.Vector4f'",PinType.PinSubCategoryMemberReference=(),PinType.PinValueType=(),PinType.ContainerType=None,PinType.bIsReference=False,PinType.bIsConst=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 + ` + const words = expectedSerialization + .split("\n") + .map(row => row.match(/\s*("?\w+(\s+\w+)*).+/)?.[1]) + .filter(v => v?.length > 0) + expect(resultSerialization).toMatch(Utility.getFirstWordOrder(words)) + }, +}) diff --git a/tests/nodeNand.spec.js b/tests/nodeNand.spec.js new file mode 100755 index 0000000..b9e540b --- /dev/null +++ b/tests/nodeNand.spec.js @@ -0,0 +1,30 @@ +import SVGIcon from "../js/SVGIcon.js" +import { expect, testNode } from "./fixtures/test.js" + +testNode({ + 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("")) + } + } +}) diff --git a/tests/nodeNewInput.spec.js b/tests/nodeNewInput.spec.js new file mode 100755 index 0000000..c748c18 --- /dev/null +++ b/tests/nodeNewInput.spec.js @@ -0,0 +1,33 @@ +import { css } from "lit" +import Configuration from "../js/Configuration.js" +import { expect, testNode } from "./fixtures/test.js" + +testNode({ + name: "NewInput", + value: String.raw` + Begin Object Class=/Script/NiagaraEditor.NiagaraNodeInput Name="NiagaraNodeInput_0" ExportPath="/Script/NiagaraEditor.NiagaraNodeInput'/Engine/Transient.NewNiagaraScript:NiagaraScriptSource_0.NiagaraGraph_0.NiagaraNodeInput_0'" + Begin Object Class=/Script/Niagara.NiagaraDataInterfaceCurlNoise Name="NiagaraDataInterfaceCurlNoise_0" ExportPath="/Script/Niagara.NiagaraDataInterfaceCurlNoise'/Engine/Transient.NewNiagaraScript:NiagaraScriptSource_0.NiagaraGraph_0.NiagaraNodeInput_0.NiagaraDataInterfaceCurlNoise_0'" + End Object + Begin Object Name="NiagaraDataInterfaceCurlNoise_0" ExportPath="/Script/Niagara.NiagaraDataInterfaceCurlNoise'/Engine/Transient.NewNiagaraScript:NiagaraScriptSource_0.NiagaraGraph_0.NiagaraNodeInput_0.NiagaraDataInterfaceCurlNoise_0'" + MergeId=B27AD273F4414A418771FD27B9271A58 + End Object + Input=(Name="NewInput",TypeDefHandle=(RegisteredTypeIndex=43)) + ExposureOptions=(bRequired=False) + DataInterface="/Script/Niagara.NiagaraDataInterfaceCurlNoise'NiagaraDataInterfaceCurlNoise_0'" + ChangeId=B9C3FCA46F974BF5B38DBB1BE9DCA56C + NodePosX=144 + NodePosY=-1632 + NodeGuid=78107E5ED9AF405A8DF06545ABCB7628 + CustomProperties Pin (PinId=7A1E4994E9794F56AA000841A575C413,PinName="Input",Direction="EGPD_Output",PinType.PinCategory="Class",PinType.PinSubCategory="",PinType.PinSubCategoryObject="/Script/CoreUObject.Class'/Script/Niagara.NiagaraDataInterfaceCurlNoise'",PinType.PinSubCategoryMemberReference=(),PinType.PinValueType=(),PinType.ContainerType=None,PinType.bIsReference=False,PinType.bIsConst=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.red, + icon: null, + pins: 1, + delegate: false, + development: false, + variadic: false, + additionalTest: async (node, pins) => { + expect(await pins[0].evaluate(p => p.entity.pinColor().toString())).toEqual(css`0, 168, 242`.toString()) + } +}) diff --git a/tests/nodeNiagaraAbs.spec.js b/tests/nodeNiagaraAbs.spec.js new file mode 100755 index 0000000..1b8d42e --- /dev/null +++ b/tests/nodeNiagaraAbs.spec.js @@ -0,0 +1,29 @@ +import { css } from "lit" +import { expect, testNode } from "./fixtures/test.js" + +testNode({ + name: "Niagara Abs", + title: "Abs", + value: String.raw` + Begin Object Class=/Script/NiagaraEditor.NiagaraNodeOp Name="NiagaraNodeOp_12" ExportPath="/Script/NiagaraEditor.NiagaraNodeOp'/Engine/Transient.NewNiagaraScript:NiagaraScriptSource_0.NiagaraGraph_0.NiagaraNodeOp_12'" + OpName="Numeric::Abs" + ChangeId=29B8C1201A5A453DAF589029C8FF3C71 + NodePosX=224 + NodePosY=336 + NodeGuid=F18211DAA458447E912DC2409D2257FA + CustomProperties Pin (PinId=946C3D0E755A4B75A23E5B462C1A7B82,PinName="A",PinToolTip="A",PinType.PinCategory="Type",PinType.PinSubCategory="",PinType.PinSubCategoryObject="/Script/CoreUObject.ScriptStruct'/Script/Niagara.NiagaraNumeric'",PinType.PinSubCategoryMemberReference=(),PinType.PinValueType=(),PinType.ContainerType=None,PinType.bIsReference=False,PinType.bIsConst=False,PinType.bIsWeakPointer=False,PinType.bIsUObjectWrapper=False,PinType.bSerializeAsSinglePrecisionFloat=False,DefaultValue="1.0",AutogeneratedDefaultValue="1.0",PersistentGuid=00000000000000000000000000000000,bHidden=False,bNotConnectable=False,bDefaultValueIsReadOnly=False,bDefaultValueIsIgnored=False,bAdvancedView=False,bOrphanedPin=False,) + CustomProperties Pin (PinId=9CD6DB4E94234A179733ED462921D416,PinName="Result",PinToolTip="Result",Direction="EGPD_Output",PinType.PinCategory="Type",PinType.PinSubCategory="",PinType.PinSubCategoryObject="/Script/CoreUObject.ScriptStruct'/Script/Niagara.NiagaraNumeric'",PinType.PinSubCategoryMemberReference=(),PinType.PinValueType=(),PinType.ContainerType=None,PinType.bIsReference=False,PinType.bIsConst=False,PinType.bIsWeakPointer=False,PinType.bIsUObjectWrapper=False,PinType.bSerializeAsSinglePrecisionFloat=False,PersistentGuid=00000000000000000000000000000000,bHidden=False,bNotConnectable=False,bDefaultValueIsReadOnly=False,bDefaultValueIsIgnored=False,bAdvancedView=False,bOrphanedPin=False,) + End Object + `, + size: [10, 2.5], + icon: null, + pins: 2, + delegate: false, + development: false, + additionalTest: async (node, pins) => { + expect(await node.evaluate(node => node.classList.contains("ueb-node-style-glass"))).toBeTruthy() + expect(await node.evaluate(node => node.classList.contains("ueb-node-style-default"))).toBeFalsy() + expect(await pins[0].evaluate(p => p.entity.pinColor().cssText)).toBe(css`0, 88, 200`.cssText) + expect(await pins[1].evaluate(p => p.entity.pinColor().cssText)).toBe(css`0, 88, 200`.cssText) + }, +}) diff --git a/tests/nodeNiagaraAdd.spec.js b/tests/nodeNiagaraAdd.spec.js new file mode 100755 index 0000000..b7199c6 --- /dev/null +++ b/tests/nodeNiagaraAdd.spec.js @@ -0,0 +1,36 @@ +import { css } from "lit" +import { expect, testNode } from "./fixtures/test.js" + +testNode({ + name: "Niagara Add", + title: "+", + value: String.raw` + Begin Object Class=/Script/NiagaraEditor.NiagaraNodeOp Name="NiagaraNodeOp_4" ExportPath="/Script/NiagaraEditor.NiagaraNodeOp'/Engine/Transient.NewNiagaraScript:NiagaraScriptSource_0.NiagaraGraph_0.NiagaraNodeOp_4'" + OpName="Numeric::Add" + AddedPins(0)=(PinType=(PinCategory="Type",PinSubCategoryObject="/Script/CoreUObject.ScriptStruct'/Script/Niagara.NiagaraNumeric'"),PinName="C") + AddedPins(1)=(PinType=(PinCategory="Type",PinSubCategoryObject="/Script/CoreUObject.ScriptStruct'/Script/Niagara.NiagaraNumeric'"),PinName="D") + ChangeId=109C57C3D01D410C906A7E97B05CB7A1 + NodePosX=-192 + NodePosY=240 + NodeGuid=B30CD9FCDD494FE78513D0790EB01F7F + CustomProperties Pin (PinId=993EB0FF225E4E4B8A1F478687460560,PinName="A",PinFriendlyName=NSLOCTEXT("NiagaraOpInfo", "First Function Param", "A"),PinToolTip="A",PinType.PinCategory="Type",PinType.PinSubCategory="",PinType.PinSubCategoryObject="/Script/CoreUObject.ScriptStruct'/Script/Niagara.NiagaraNumeric'",PinType.PinSubCategoryMemberReference=(),PinType.PinValueType=(),PinType.ContainerType=None,PinType.bIsReference=False,PinType.bIsConst=False,PinType.bIsWeakPointer=False,PinType.bIsUObjectWrapper=False,PinType.bSerializeAsSinglePrecisionFloat=False,DefaultValue="0.0",AutogeneratedDefaultValue="0.0",PersistentGuid=00000000000000000000000000000000,bHidden=False,bNotConnectable=False,bDefaultValueIsReadOnly=False,bDefaultValueIsIgnored=False,bAdvancedView=False,bOrphanedPin=False,) + CustomProperties Pin (PinId=61C666A15B2A4F01A5AB41544BC2E809,PinName="B",PinFriendlyName=NSLOCTEXT("NiagaraOpInfo", "Second Function Param", "B"),PinToolTip="B",PinType.PinCategory="Type",PinType.PinSubCategory="",PinType.PinSubCategoryObject="/Script/CoreUObject.ScriptStruct'/Script/Niagara.NiagaraNumeric'",PinType.PinSubCategoryMemberReference=(),PinType.PinValueType=(),PinType.ContainerType=None,PinType.bIsReference=False,PinType.bIsConst=False,PinType.bIsWeakPointer=False,PinType.bIsUObjectWrapper=False,PinType.bSerializeAsSinglePrecisionFloat=False,DefaultValue="0.0",AutogeneratedDefaultValue="0.0",PersistentGuid=00000000000000000000000000000000,bHidden=False,bNotConnectable=False,bDefaultValueIsReadOnly=False,bDefaultValueIsIgnored=False,bAdvancedView=False,bOrphanedPin=False,) + CustomProperties Pin (PinId=BA0C345A92B34C11B9F7123296B25BFE,PinName="Result",PinToolTip="Result",Direction="EGPD_Output",PinType.PinCategory="Type",PinType.PinSubCategory="",PinType.PinSubCategoryObject="/Script/CoreUObject.ScriptStruct'/Script/Niagara.NiagaraNumeric'",PinType.PinSubCategoryMemberReference=(),PinType.PinValueType=(),PinType.ContainerType=None,PinType.bIsReference=False,PinType.bIsConst=False,PinType.bIsWeakPointer=False,PinType.bIsUObjectWrapper=False,PinType.bSerializeAsSinglePrecisionFloat=False,PersistentGuid=00000000000000000000000000000000,bHidden=False,bNotConnectable=False,bDefaultValueIsReadOnly=False,bDefaultValueIsIgnored=False,bAdvancedView=False,bOrphanedPin=False,) + CustomProperties Pin (PinId=8575BFA806564A0896BEA12731E082F6,PinName="C",PinType.PinCategory="Type",PinType.PinSubCategory="",PinType.PinSubCategoryObject="/Script/CoreUObject.ScriptStruct'/Script/Niagara.NiagaraNumeric'",PinType.PinSubCategoryMemberReference=(),PinType.PinValueType=(),PinType.ContainerType=None,PinType.bIsReference=False,PinType.bIsConst=False,PinType.bIsWeakPointer=False,PinType.bIsUObjectWrapper=False,PinType.bSerializeAsSinglePrecisionFloat=False,PersistentGuid=00000000000000000000000000000000,bHidden=False,bNotConnectable=False,bDefaultValueIsReadOnly=False,bDefaultValueIsIgnored=False,bAdvancedView=False,bOrphanedPin=False,) + CustomProperties Pin (PinId=2DB5F7C4828143A099F45818E8B92915,PinName="D",PinType.PinCategory="Type",PinType.PinSubCategory="",PinType.PinSubCategoryObject="/Script/CoreUObject.ScriptStruct'/Script/Niagara.NiagaraNumeric'",PinType.PinSubCategoryMemberReference=(),PinType.PinValueType=(),PinType.ContainerType=None,PinType.bIsReference=False,PinType.bIsConst=False,PinType.bIsWeakPointer=False,PinType.bIsUObjectWrapper=False,PinType.bSerializeAsSinglePrecisionFloat=False,PersistentGuid=00000000000000000000000000000000,bHidden=False,bNotConnectable=False,bDefaultValueIsReadOnly=False,bDefaultValueIsIgnored=False,bAdvancedView=False,bOrphanedPin=False,) + CustomProperties Pin (PinId=AA4E894467914D928AA625F429086B1F,PinName="Add",PinType.PinCategory="Misc",PinType.PinSubCategory="DynamicAddPin",PinType.PinSubCategoryObject=None,PinType.PinSubCategoryMemberReference=(),PinType.PinValueType=(),PinType.ContainerType=None,PinType.bIsReference=False,PinType.bIsConst=False,PinType.bIsWeakPointer=False,PinType.bIsUObjectWrapper=False,PinType.bSerializeAsSinglePrecisionFloat=False,PersistentGuid=00000000000000000000000000000000,bHidden=False,bNotConnectable=False,bDefaultValueIsReadOnly=False,bDefaultValueIsIgnored=False,bAdvancedView=False,bOrphanedPin=False,) + End Object + `, + size: [9.5, 10], + icon: null, + pins: 6, + delegate: false, + development: false, + additionalTest: async (node, pins) => { + expect(await node.evaluate(node => node.classList.contains("ueb-node-style-glass"))).toBeTruthy() + expect(await node.evaluate(node => node.classList.contains("ueb-node-style-default"))).toBeFalsy() + expect(await pins[0].evaluate(p => p.entity.pinColor().cssText)).toBe(css`0, 88, 200`.cssText) + expect(await pins[1].evaluate(p => p.entity.pinColor().cssText)).toBe(css`0, 88, 200`.cssText) + expect(await pins[3].evaluate(p => p.entity.pinColor().cssText)).toBe(css`0, 88, 200`.cssText) + }, +}) diff --git a/tests/nodeNiagaraArcCos(D).spec.js b/tests/nodeNiagaraArcCos(D).spec.js new file mode 100755 index 0000000..c34f91c --- /dev/null +++ b/tests/nodeNiagaraArcCos(D).spec.js @@ -0,0 +1,26 @@ +import { expect, testNode } from "./fixtures/test.js" + +testNode({ + name: "Niagara ArcCos(D)", + title: "ArcCos(D)", + value: String.raw` + Begin Object Class=/Script/NiagaraEditor.NiagaraNodeOp Name="NiagaraNodeOp_0" ExportPath="/Script/NiagaraEditor.NiagaraNodeOp'/Engine/Transient.NewNiagaraScript:NiagaraScriptSource_0.NiagaraGraph_0.NiagaraNodeOp_0'" + OpName="Numeric::ArcCosine(Degrees)" + ChangeId=0C4903A20D0840D5AFA6E8EA05BA7E92 + NodePosX=176 + NodePosY=304 + NodeGuid=B602FBF53547439C961401D1222D7086 + CustomProperties Pin (PinId=FDA289829A9C4C7A99071EBDA8BDADBF,PinName="A",PinFriendlyName=NSLOCTEXT("NiagaraOpInfo", "First Function Param", "A"),PinToolTip="A",PinType.PinCategory="Type",PinType.PinSubCategory="",PinType.PinSubCategoryObject="/Script/CoreUObject.ScriptStruct'/Script/Niagara.NiagaraNumeric'",PinType.PinSubCategoryMemberReference=(),PinType.PinValueType=(),PinType.ContainerType=None,PinType.bIsReference=False,PinType.bIsConst=False,PinType.bIsWeakPointer=False,PinType.bIsUObjectWrapper=False,PinType.bSerializeAsSinglePrecisionFloat=False,DefaultValue="1.0",AutogeneratedDefaultValue="1.0",PersistentGuid=00000000000000000000000000000000,bHidden=False,bNotConnectable=False,bDefaultValueIsReadOnly=False,bDefaultValueIsIgnored=False,bAdvancedView=False,bOrphanedPin=False,) + CustomProperties Pin (PinId=5BF79FDFF3214BB19F93AA9B8B9B5E40,PinName="Result",PinToolTip="Result",Direction="EGPD_Output",PinType.PinCategory="Type",PinType.PinSubCategory="",PinType.PinSubCategoryObject="/Script/CoreUObject.ScriptStruct'/Script/Niagara.NiagaraNumeric'",PinType.PinSubCategoryMemberReference=(),PinType.PinValueType=(),PinType.ContainerType=None,PinType.bIsReference=False,PinType.bIsConst=False,PinType.bIsWeakPointer=False,PinType.bIsUObjectWrapper=False,PinType.bSerializeAsSinglePrecisionFloat=False,PersistentGuid=00000000000000000000000000000000,bHidden=False,bNotConnectable=False,bDefaultValueIsReadOnly=False,bDefaultValueIsIgnored=False,bAdvancedView=False,bOrphanedPin=False,) + End Object + `, + size: [14, 2.5], + icon: null, + pins: 2, + delegate: false, + development: false, + additionalTest: async (node, pins, blueprintPage) => { + expect(await node.evaluate(node => node.classList.contains("ueb-node-style-glass"))).toBeTruthy() + expect(await node.evaluate(node => node.classList.contains("ueb-node-style-default"))).toBeFalsy() + }, +}) diff --git a/tests/nodeNiagaraArcCos(R).spec.js b/tests/nodeNiagaraArcCos(R).spec.js new file mode 100755 index 0000000..383c8ad --- /dev/null +++ b/tests/nodeNiagaraArcCos(R).spec.js @@ -0,0 +1,26 @@ +import { expect, testNode } from "./fixtures/test.js" + +testNode({ + name: "Niagara ArcCos(R)", + title: "ArcCos(R)", + value: String.raw` + Begin Object Class=/Script/NiagaraEditor.NiagaraNodeOp Name="NiagaraNodeOp_7" ExportPath="/Script/NiagaraEditor.NiagaraNodeOp'/Engine/Transient.NewNiagaraScript:NiagaraScriptSource_0.NiagaraGraph_0.NiagaraNodeOp_7'" + OpName="Numeric::ArcCosine(Radians)" + ChangeId=59704C7FABF44EDA84E2B675B5EA3763 + NodePosX=-128 + NodePosY=400 + NodeGuid=ACFFA06F43AC4EB4B43361CBABE603FC + CustomProperties Pin (PinId=65AB75E707C74676B8E532483CF4CF35,PinName="A",PinFriendlyName=NSLOCTEXT("NiagaraOpInfo", "First Function Param", "A"),PinToolTip="A",PinType.PinCategory="Type",PinType.PinSubCategory="",PinType.PinSubCategoryObject="/Script/CoreUObject.ScriptStruct'/Script/Niagara.NiagaraNumeric'",PinType.PinSubCategoryMemberReference=(),PinType.PinValueType=(),PinType.ContainerType=None,PinType.bIsReference=False,PinType.bIsConst=False,PinType.bIsWeakPointer=False,PinType.bIsUObjectWrapper=False,PinType.bSerializeAsSinglePrecisionFloat=False,DefaultValue="1.0",AutogeneratedDefaultValue="1.0",PersistentGuid=00000000000000000000000000000000,bHidden=False,bNotConnectable=False,bDefaultValueIsReadOnly=False,bDefaultValueIsIgnored=False,bAdvancedView=False,bOrphanedPin=False,) + CustomProperties Pin (PinId=7F2F577280224DF0B328776290FFA6A1,PinName="Result",PinToolTip="Result",Direction="EGPD_Output",PinType.PinCategory="Type",PinType.PinSubCategory="",PinType.PinSubCategoryObject="/Script/CoreUObject.ScriptStruct'/Script/Niagara.NiagaraNumeric'",PinType.PinSubCategoryMemberReference=(),PinType.PinValueType=(),PinType.ContainerType=None,PinType.bIsReference=False,PinType.bIsConst=False,PinType.bIsWeakPointer=False,PinType.bIsUObjectWrapper=False,PinType.bSerializeAsSinglePrecisionFloat=False,PersistentGuid=00000000000000000000000000000000,bHidden=False,bNotConnectable=False,bDefaultValueIsReadOnly=False,bDefaultValueIsIgnored=False,bAdvancedView=False,bOrphanedPin=False,) + End Object + `, + size: [14, 2.5], + icon: null, + pins: 2, + delegate: false, + development: false, + additionalTest: async (node, pins, blueprintPage) => { + expect(await node.evaluate(node => node.classList.contains("ueb-node-style-glass"))).toBeTruthy() + expect(await node.evaluate(node => node.classList.contains("ueb-node-style-default"))).toBeFalsy() + }, +}) diff --git a/tests/nodeNiagaraArcCosine.spec.js b/tests/nodeNiagaraArcCosine.spec.js new file mode 100755 index 0000000..2ee20f4 --- /dev/null +++ b/tests/nodeNiagaraArcCosine.spec.js @@ -0,0 +1,33 @@ +import { css } from "lit" +import { expect, testNode } from "./fixtures/test.js" + +testNode({ + name: "Niagara ArcCosine", + title: "ArcCosine", + value: String.raw` + Begin Object Class=/Script/NiagaraEditor.NiagaraNodeOp Name="NiagaraNodeOp_0" ExportPath="/Script/NiagaraEditor.NiagaraNodeOp'/Engine/Transient.NewNiagaraScript:NiagaraScriptSource_0.NiagaraGraph_0.NiagaraNodeOp_0'" + OpName="Numeric::ArcCosine" + ChangeId=9FDAB11E05194F05975DBA0752A4E397 + NodePosX=-512 + NodePosY=208 + NodeGuid=94DC004A5F26482498EF5089FC398E6A + CustomProperties Pin (PinId=D5013974C3A3451689FF7914177841D1,PinName="A",PinFriendlyName=NSLOCTEXT("NiagaraOpInfo", "First Function Param", "A"),PinToolTip="A",PinType.PinCategory="Type",PinType.PinSubCategory="",PinType.PinSubCategoryObject="/Script/CoreUObject.ScriptStruct'/Script/Niagara.NiagaraNumeric'",PinType.PinSubCategoryMemberReference=(),PinType.PinValueType=(),PinType.ContainerType=None,PinType.bIsReference=False,PinType.bIsConst=False,PinType.bIsWeakPointer=False,PinType.bIsUObjectWrapper=False,PinType.bSerializeAsSinglePrecisionFloat=False,DefaultValue="1.0",AutogeneratedDefaultValue="1.0",PersistentGuid=00000000000000000000000000000000,bHidden=False,bNotConnectable=False,bDefaultValueIsReadOnly=False,bDefaultValueIsIgnored=False,bAdvancedView=False,bOrphanedPin=False,) + CustomProperties Pin (PinId=7D223B636DFF42DCBE2F9F1E93176BF5,PinName="Period",PinFriendlyName=NSLOCTEXT("NiagaraOpInfo", "Period Name", "Period"),PinToolTip="Value in which a complete rotation has occurred.",PinType.PinCategory="Type",PinType.PinSubCategory="",PinType.PinSubCategoryObject="/Script/CoreUObject.ScriptStruct'/Script/Niagara.NiagaraFloat'",PinType.PinSubCategoryMemberReference=(),PinType.PinValueType=(),PinType.ContainerType=None,PinType.bIsReference=False,PinType.bIsConst=False,PinType.bIsWeakPointer=False,PinType.bIsUObjectWrapper=False,PinType.bSerializeAsSinglePrecisionFloat=False,DefaultValue="5.000000",AutogeneratedDefaultValue="1.0",PersistentGuid=00000000000000000000000000000000,bHidden=False,bNotConnectable=False,bDefaultValueIsReadOnly=False,bDefaultValueIsIgnored=False,bAdvancedView=False,bOrphanedPin=False,) + CustomProperties Pin (PinId=180D0157D43F407B90DD3580C988779C,PinName="Result",PinToolTip="Result",Direction="EGPD_Output",PinType.PinCategory="Type",PinType.PinSubCategory="",PinType.PinSubCategoryObject="/Script/CoreUObject.ScriptStruct'/Script/Niagara.NiagaraNumeric'",PinType.PinSubCategoryMemberReference=(),PinType.PinValueType=(),PinType.ContainerType=None,PinType.bIsReference=False,PinType.bIsConst=False,PinType.bIsWeakPointer=False,PinType.bIsUObjectWrapper=False,PinType.bSerializeAsSinglePrecisionFloat=False,PersistentGuid=00000000000000000000000000000000,bHidden=False,bNotConnectable=False,bDefaultValueIsReadOnly=False,bDefaultValueIsIgnored=False,bAdvancedView=False,bOrphanedPin=False,) + End Object + `, + size: [12, 6], + icon: null, + pins: 3, + delegate: false, + development: false, + additionalTest: async (node, pins, blueprintPage) => { + expect(await node.evaluate(node => node.classList.contains("ueb-node-style-glass"))).toBeFalsy() + expect(await node.evaluate(node => node.classList.contains("ueb-node-style-default"))).toBeTruthy() + await expect(pins[1].locator("ueb-input")).toHaveText("5.0") + await pins[1].locator("ueb-input").fill("8") + await blueprintPage.blur() + await expect(pins[1].locator("ueb-input")).toHaveText("8.0") + expect(await pins[1].evaluate(p => p.entity.pinColor().cssText)).toBe(css`160, 250, 68`.cssText) + }, +}) diff --git a/tests/nodeNiagaraArcSine.spec.js b/tests/nodeNiagaraArcSine.spec.js new file mode 100755 index 0000000..4529a6b --- /dev/null +++ b/tests/nodeNiagaraArcSine.spec.js @@ -0,0 +1,33 @@ +import { css } from "lit" +import { expect, testNode } from "./fixtures/test.js" + +testNode({ + name: "Niagara ArcSine", + title: "ArcSine", + value: String.raw` + Begin Object Class=/Script/NiagaraEditor.NiagaraNodeOp Name="NiagaraNodeOp_18" ExportPath="/Script/NiagaraEditor.NiagaraNodeOp'/Engine/Transient.NewNiagaraScript:NiagaraScriptSource_0.NiagaraGraph_0.NiagaraNodeOp_18'" + OpName="Numeric::ArcSine" + ChangeId=CDB4DEA461F34B68942427280486A634 + NodePosX=-160 + NodePosY=304 + NodeGuid=D042EE951EDD4932BC5C4B26D49F6EE7 + CustomProperties Pin (PinId=91EDD66DBC354E3291B73CA3C445382A,PinName="A",PinFriendlyName=NSLOCTEXT("NiagaraOpInfo", "First Function Param", "A"),PinToolTip="A",PinType.PinCategory="Type",PinType.PinSubCategory="",PinType.PinSubCategoryObject="/Script/CoreUObject.ScriptStruct'/Script/Niagara.NiagaraNumeric'",PinType.PinSubCategoryMemberReference=(),PinType.PinValueType=(),PinType.ContainerType=None,PinType.bIsReference=False,PinType.bIsConst=False,PinType.bIsWeakPointer=False,PinType.bIsUObjectWrapper=False,PinType.bSerializeAsSinglePrecisionFloat=False,DefaultValue="1.0",AutogeneratedDefaultValue="1.0",PersistentGuid=00000000000000000000000000000000,bHidden=False,bNotConnectable=False,bDefaultValueIsReadOnly=False,bDefaultValueIsIgnored=False,bAdvancedView=False,bOrphanedPin=False,) + CustomProperties Pin (PinId=B27D869B65AB472FB61EE1CFED16413B,PinName="Period",PinFriendlyName=NSLOCTEXT("NiagaraOpInfo", "Period Name", "Period"),PinToolTip="Value in which a complete rotation has occurred.",PinType.PinCategory="Type",PinType.PinSubCategory="",PinType.PinSubCategoryObject="/Script/CoreUObject.ScriptStruct'/Script/Niagara.NiagaraFloat'",PinType.PinSubCategoryMemberReference=(),PinType.PinValueType=(),PinType.ContainerType=None,PinType.bIsReference=False,PinType.bIsConst=False,PinType.bIsWeakPointer=False,PinType.bIsUObjectWrapper=False,PinType.bSerializeAsSinglePrecisionFloat=False,DefaultValue="1.0",AutogeneratedDefaultValue="1.0",PersistentGuid=00000000000000000000000000000000,bHidden=False,bNotConnectable=False,bDefaultValueIsReadOnly=False,bDefaultValueIsIgnored=False,bAdvancedView=False,bOrphanedPin=False,) + CustomProperties Pin (PinId=D4741D50F35E42A98565E89099D679D4,PinName="Result",PinToolTip="Result",Direction="EGPD_Output",PinType.PinCategory="Type",PinType.PinSubCategory="",PinType.PinSubCategoryObject="/Script/CoreUObject.ScriptStruct'/Script/Niagara.NiagaraNumeric'",PinType.PinSubCategoryMemberReference=(),PinType.PinValueType=(),PinType.ContainerType=None,PinType.bIsReference=False,PinType.bIsConst=False,PinType.bIsWeakPointer=False,PinType.bIsUObjectWrapper=False,PinType.bSerializeAsSinglePrecisionFloat=False,PersistentGuid=00000000000000000000000000000000,bHidden=False,bNotConnectable=False,bDefaultValueIsReadOnly=False,bDefaultValueIsIgnored=False,bAdvancedView=False,bOrphanedPin=False,) + End Object + `, + size: [12, 6], + icon: null, + pins: 3, + delegate: false, + development: false, + additionalTest: async (node, pins, blueprintPage) => { + expect(await node.evaluate(node => node.classList.contains("ueb-node-style-glass"))).toBeFalsy() + expect(await node.evaluate(node => node.classList.contains("ueb-node-style-default"))).toBeTruthy() + await expect(pins[1].locator("ueb-input")).toHaveText("1.0") + await pins[1].locator("ueb-input").fill("3") + await blueprintPage.blur() + await expect(pins[1].locator("ueb-input")).toHaveText("3.0") + expect(await pins[1].evaluate(p => p.entity.pinColor().cssText)).toBe(css`160, 250, 68`.cssText) + }, +}) diff --git a/tests/nodeNiagaraLogicAND.spec.js b/tests/nodeNiagaraLogicAND.spec.js new file mode 100755 index 0000000..f90f7c5 --- /dev/null +++ b/tests/nodeNiagaraLogicAND.spec.js @@ -0,0 +1,35 @@ +import { css } from "lit" +import { expect, testNode } from "./fixtures/test.js" + +testNode({ + name: "Niagara Logic AND", + title: "Logic AND", + value: String.raw` + Begin Object Class=/Script/NiagaraEditor.NiagaraNodeOp Name="NiagaraNodeOp_81" ExportPath="/Script/NiagaraEditor.NiagaraNodeOp'/Engine/Transient.NewNiagaraScript:NiagaraScriptSource_0.NiagaraGraph_0.NiagaraNodeOp_81'" + OpName="Boolean::LogicAnd" + ChangeId=43E42097BB3043EA8402318509E52B6C + NodePosX=-256 + NodePosY=128 + NodeGuid=A78CF37F79A2480DB705D21E5EF84B07 + CustomProperties Pin (PinId=62F6392991E14BB1A7F0E26AB98DB6DA,PinName="A",PinToolTip="A",PinType.PinCategory="Type",PinType.PinSubCategory="",PinType.PinSubCategoryObject="/Script/CoreUObject.ScriptStruct'/Script/Niagara.NiagaraBool'",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=F4F10FA3AC084A1AB2A6ABC3323B83EA,PinName="B",PinToolTip="B",PinType.PinCategory="Type",PinType.PinSubCategory="",PinType.PinSubCategoryObject="/Script/CoreUObject.ScriptStruct'/Script/Niagara.NiagaraBool'",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=022AFAE2280C4C8AB3D57EB3F1FECCE9,PinName="Result",PinToolTip="Result",Direction="EGPD_Output",PinType.PinCategory="Type",PinType.PinSubCategory="",PinType.PinSubCategoryObject="/Script/CoreUObject.ScriptStruct'/Script/Niagara.NiagaraBool'",PinType.PinSubCategoryMemberReference=(),PinType.PinValueType=(),PinType.ContainerType=None,PinType.bIsReference=False,PinType.bIsConst=False,PinType.bIsWeakPointer=False,PinType.bIsUObjectWrapper=False,PinType.bSerializeAsSinglePrecisionFloat=False,PersistentGuid=00000000000000000000000000000000,bHidden=False,bNotConnectable=False,bDefaultValueIsReadOnly=False,bDefaultValueIsIgnored=False,bAdvancedView=False,bOrphanedPin=False,) + CustomProperties Pin (PinId=A2A828255F8D460C8044F32D6A5E9FCA,PinName="Add",PinType.PinCategory="Misc",PinType.PinSubCategory="DynamicAddPin",PinType.PinSubCategoryObject=None,PinType.PinSubCategoryMemberReference=(),PinType.PinValueType=(),PinType.ContainerType=None,PinType.bIsReference=False,PinType.bIsConst=False,PinType.bIsWeakPointer=False,PinType.bIsUObjectWrapper=False,PinType.bSerializeAsSinglePrecisionFloat=False,PersistentGuid=00000000000000000000000000000000,bHidden=False,bNotConnectable=False,bDefaultValueIsReadOnly=False,bDefaultValueIsIgnored=False,bAdvancedView=False,bOrphanedPin=False,) + End Object + `, + size: [10, 8], + pins: 4, + pinNames: ["A", "B", "Add", "Result"], + delegate: false, + development: false, + additionalTest: async (node, pins) => { + expect(await node.evaluate(node => node.classList.contains("ueb-node-style-glass"))).toBeFalsy() + expect(await node.evaluate(node => node.classList.contains("ueb-node-style-default"))).toBeTruthy() + expect(await pins[0].evaluate(element => element.entity.pinColor().cssText)) + .toBe(css`146, 0, 0`.cssText) + expect(await pins[1].evaluate(element => element.entity.pinColor().cssText)) + .toBe(css`146, 0, 0`.cssText) + expect(await pins[3].evaluate(element => element.entity.pinColor().cssText)) + .toBe(css`146, 0, 0`.cssText) + }, +}) diff --git a/tests/nodeNiagaraLogicNOT.spec.js b/tests/nodeNiagaraLogicNOT.spec.js new file mode 100755 index 0000000..bbf3d65 --- /dev/null +++ b/tests/nodeNiagaraLogicNOT.spec.js @@ -0,0 +1,31 @@ +import { css } from "lit" +import { expect, testNode } from "./fixtures/test.js" + +testNode({ + name: "Niagara Logic NOT", + title: "Logic NOT", + value: String.raw` + Begin Object Class=/Script/NiagaraEditor.NiagaraNodeOp Name="NiagaraNodeOp_83" ExportPath="/Script/NiagaraEditor.NiagaraNodeOp'/Engine/Transient.NewNiagaraScript:NiagaraScriptSource_0.NiagaraGraph_0.NiagaraNodeOp_83'" + OpName="Boolean::LogicNot" + ChangeId=850211C079724647B479BFA82D533C76 + NodePosX=128 + NodePosY=128 + NodeGuid=1F3DA06DD27E488A9B6766E8CD203F81 + CustomProperties Pin (PinId=1396C29ABE9F4330B91B88E4788956D0,PinName="A",PinToolTip="A",PinType.PinCategory="Type",PinType.PinSubCategory="",PinType.PinSubCategoryObject="/Script/CoreUObject.ScriptStruct'/Script/Niagara.NiagaraBool'",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=F4FABE23D34A4B0C915D6B7117C11B57,PinName="Result",PinToolTip="Result",Direction="EGPD_Output",PinType.PinCategory="Type",PinType.PinSubCategory="",PinType.PinSubCategoryObject="/Script/CoreUObject.ScriptStruct'/Script/Niagara.NiagaraBool'",PinType.PinSubCategoryMemberReference=(),PinType.PinValueType=(),PinType.ContainerType=None,PinType.bIsReference=False,PinType.bIsConst=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, 4], + pins: 2, + pinNames: ["A", "Result"], + delegate: false, + development: false, + additionalTest: async (node, pins) => { + expect(await node.evaluate(node => node.classList.contains("ueb-node-style-glass"))).toBeFalsy() + expect(await node.evaluate(node => node.classList.contains("ueb-node-style-default"))).toBeTruthy() + for (const pin of pins) { + expect(await pin.evaluate(element => element.entity.pinColor().cssText)) + .toBe(css`146, 0, 0`.cssText) + } + }, +}) diff --git a/tests/nodeNiagaraLogicOR.spec.js b/tests/nodeNiagaraLogicOR.spec.js new file mode 100755 index 0000000..7af13bc --- /dev/null +++ b/tests/nodeNiagaraLogicOR.spec.js @@ -0,0 +1,35 @@ +import { css } from "lit" +import { expect, testNode } from "./fixtures/test.js" + +testNode({ + name: "Niagara Logic OR", + title: "Logic OR", + value: String.raw` + Begin Object Class=/Script/NiagaraEditor.NiagaraNodeOp Name="NiagaraNodeOp_82" ExportPath="/Script/NiagaraEditor.NiagaraNodeOp'/Engine/Transient.NewNiagaraScript:NiagaraScriptSource_0.NiagaraGraph_0.NiagaraNodeOp_82'" + OpName="Boolean::LogicOr" + ChangeId=EB6169ADF12F4DB4AFB4F6E735519E61 + NodePosX=384 + NodePosY=128 + NodeGuid=5E46FFF127D24923A96DB2280941D891 + CustomProperties Pin (PinId=1A8E536F5DB04FCEB0DD5C28120B55F4,PinName="A",PinToolTip="A",PinType.PinCategory="Type",PinType.PinSubCategory="",PinType.PinSubCategoryObject="/Script/CoreUObject.ScriptStruct'/Script/Niagara.NiagaraBool'",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=1ABD86FA4F894D4C850E10C0BDFFE9BB,PinName="B",PinToolTip="B",PinType.PinCategory="Type",PinType.PinSubCategory="",PinType.PinSubCategoryObject="/Script/CoreUObject.ScriptStruct'/Script/Niagara.NiagaraBool'",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=A46C02BB383F42D796497153C25F81CE,PinName="Result",PinToolTip="Result",Direction="EGPD_Output",PinType.PinCategory="Type",PinType.PinSubCategory="",PinType.PinSubCategoryObject="/Script/CoreUObject.ScriptStruct'/Script/Niagara.NiagaraBool'",PinType.PinSubCategoryMemberReference=(),PinType.PinValueType=(),PinType.ContainerType=None,PinType.bIsReference=False,PinType.bIsConst=False,PinType.bIsWeakPointer=False,PinType.bIsUObjectWrapper=False,PinType.bSerializeAsSinglePrecisionFloat=False,PersistentGuid=00000000000000000000000000000000,bHidden=False,bNotConnectable=False,bDefaultValueIsReadOnly=False,bDefaultValueIsIgnored=False,bAdvancedView=False,bOrphanedPin=False,) + CustomProperties Pin (PinId=22A699B9331C4E21911CF5D79481C74E,PinName="Add",PinType.PinCategory="Misc",PinType.PinSubCategory="DynamicAddPin",PinType.PinSubCategoryObject=None,PinType.PinSubCategoryMemberReference=(),PinType.PinValueType=(),PinType.ContainerType=None,PinType.bIsReference=False,PinType.bIsConst=False,PinType.bIsWeakPointer=False,PinType.bIsUObjectWrapper=False,PinType.bSerializeAsSinglePrecisionFloat=False,PersistentGuid=00000000000000000000000000000000,bHidden=False,bNotConnectable=False,bDefaultValueIsReadOnly=False,bDefaultValueIsIgnored=False,bAdvancedView=False,bOrphanedPin=False,) + End Object + `, + size: [10.5, 8], + pins: 4, + pinNames: ["A", "B", "Add", "Result"], + delegate: false, + development: false, + additionalTest: async (node, pins) => { + expect(await node.evaluate(node => node.classList.contains("ueb-node-style-glass"))).toBeFalsy() + expect(await node.evaluate(node => node.classList.contains("ueb-node-style-default"))).toBeTruthy() + expect(await pins[0].evaluate(element => element.entity.pinColor().cssText)) + .toBe(css`146, 0, 0`.cssText) + expect(await pins[1].evaluate(element => element.entity.pinColor().cssText)) + .toBe(css`146, 0, 0`.cssText) + expect(await pins[3].evaluate(element => element.entity.pinColor().cssText)) + .toBe(css`146, 0, 0`.cssText) + }, +}) diff --git a/tests/nodeNiagaraMapForWithContinue.spec.js b/tests/nodeNiagaraMapForWithContinue.spec.js new file mode 100755 index 0000000..e36b00e --- /dev/null +++ b/tests/nodeNiagaraMapForWithContinue.spec.js @@ -0,0 +1,40 @@ +import SVGIcon from "../js/SVGIcon.js" +import { expect, testNode } from "./fixtures/test.js" + +testNode({ + name: "Map For With Continue", + value: String.raw` + Begin Object Class=/Script/NiagaraEditor.NiagaraNodeParameterMapForWithContinue Name="NiagaraNodeParameterMapForWithContinue_0" ExportPath="/Script/NiagaraEditor.NiagaraNodeParameterMapForWithContinue'/Engine/Transient.NewNiagaraScript:NiagaraScriptSource_0.NiagaraGraph_0.NiagaraNodeParameterMapForWithContinue_0'" + ChangeId=D516665BE460464D97C2890CBF7622C5 + NodePosX=896 + NodePosY=-1152 + NodeGuid=9D7BA8EE31AA415385E8E7E58E8D4432 + CustomProperties Pin (PinId=5C53D96B4D134961A40B7AE653122BEC,PinName="Source",PinType.PinCategory="Type",PinType.PinSubCategory="",PinType.PinSubCategoryObject="/Script/CoreUObject.ScriptStruct'/Script/Niagara.NiagaraParameterMap'",PinType.PinSubCategoryMemberReference=(),PinType.PinValueType=(),PinType.ContainerType=None,PinType.bIsReference=False,PinType.bIsConst=False,PinType.bIsWeakPointer=False,PinType.bIsUObjectWrapper=False,PinType.bSerializeAsSinglePrecisionFloat=False,PersistentGuid=00000000000000000000000000000000,bHidden=False,bNotConnectable=False,bDefaultValueIsReadOnly=False,bDefaultValueIsIgnored=False,bAdvancedView=False,bOrphanedPin=False,) + CustomProperties Pin (PinId=F03D66AD0F4B49669611BC73BD246B72,PinName="Iteration Count",PinType.PinCategory="Type",PinType.PinSubCategory="",PinType.PinSubCategoryObject="/Script/CoreUObject.ScriptStruct'/Script/Niagara.NiagaraInt32'",PinType.PinSubCategoryMemberReference=(),PinType.PinValueType=(),PinType.ContainerType=None,PinType.bIsReference=False,PinType.bIsConst=False,PinType.bIsWeakPointer=False,PinType.bIsUObjectWrapper=False,PinType.bSerializeAsSinglePrecisionFloat=False,PersistentGuid=00000000000000000000000000000000,bHidden=False,bNotConnectable=False,bDefaultValueIsReadOnly=False,bDefaultValueIsIgnored=False,bAdvancedView=False,bOrphanedPin=False,) + CustomProperties Pin (PinId=8311B369A7E24928B855AD7429F0433C,PinName="Iteration Enabled",PinType.PinCategory="Type",PinType.PinSubCategory="",PinType.PinSubCategoryObject="/Script/CoreUObject.ScriptStruct'/Script/Niagara.NiagaraBool'",PinType.PinSubCategoryMemberReference=(),PinType.PinValueType=(),PinType.ContainerType=None,PinType.bIsReference=False,PinType.bIsConst=False,PinType.bIsWeakPointer=False,PinType.bIsUObjectWrapper=False,PinType.bSerializeAsSinglePrecisionFloat=False,PersistentGuid=00000000000000000000000000000000,bHidden=False,bNotConnectable=False,bDefaultValueIsReadOnly=False,bDefaultValueIsIgnored=False,bAdvancedView=False,bOrphanedPin=False,) + CustomProperties Pin (PinId=56EDD62A7A634BF79A765FA4FF78BB7A,PinName="Dest",Direction="EGPD_Output",PinType.PinCategory="Type",PinType.PinSubCategory="",PinType.PinSubCategoryObject="/Script/CoreUObject.ScriptStruct'/Script/Niagara.NiagaraParameterMap'",PinType.PinSubCategoryMemberReference=(),PinType.PinValueType=(),PinType.ContainerType=None,PinType.bIsReference=False,PinType.bIsConst=False,PinType.bIsWeakPointer=False,PinType.bIsUObjectWrapper=False,PinType.bSerializeAsSinglePrecisionFloat=False,PersistentGuid=00000000000000000000000000000000,bHidden=False,bNotConnectable=False,bDefaultValueIsReadOnly=False,bDefaultValueIsIgnored=False,bAdvancedView=False,bOrphanedPin=False,) + CustomProperties Pin (PinId=6F8E4679877E439D8F2445553A6323BD,PinName="Particles.MeshOrientation",PinFriendlyName=INVTEXT("Particles.MeshOrientation"),PinType.PinCategory="Type",PinType.PinSubCategory="ParameterPin",PinType.PinSubCategoryObject="/Script/CoreUObject.ScriptStruct'/Script/CoreUObject.Quat4f'",PinType.PinSubCategoryMemberReference=(),PinType.PinValueType=(),PinType.ContainerType=None,PinType.bIsReference=False,PinType.bIsConst=False,PinType.bIsWeakPointer=False,PinType.bIsUObjectWrapper=False,PinType.bSerializeAsSinglePrecisionFloat=False,PersistentGuid=BA6564A4AFCF4552929F4B1F689454A6,bHidden=False,bNotConnectable=False,bDefaultValueIsReadOnly=False,bDefaultValueIsIgnored=False,bAdvancedView=False,bOrphanedPin=False,) + CustomProperties Pin (PinId=0C135DE347274399B5E076173B25F944,PinName="Emitter.OverrideGlobalSpawnCountScale",PinFriendlyName=INVTEXT("Emitter.OverrideGlobalSpawnCountScale"),PinType.PinCategory="Type",PinType.PinSubCategory="ParameterPin",PinType.PinSubCategoryObject="/Script/CoreUObject.ScriptStruct'/Script/Niagara.NiagaraBool'",PinType.PinSubCategoryMemberReference=(),PinType.PinValueType=(),PinType.ContainerType=None,PinType.bIsReference=False,PinType.bIsConst=False,PinType.bIsWeakPointer=False,PinType.bIsUObjectWrapper=False,PinType.bSerializeAsSinglePrecisionFloat=False,PersistentGuid=D5E987A3786E4DFE83C78D721EB28238,bHidden=False,bNotConnectable=False,bDefaultValueIsReadOnly=False,bDefaultValueIsIgnored=False,bAdvancedView=False,bOrphanedPin=False,) + CustomProperties Pin (PinId=95CD3BDD3F2144FAAC58BBF7928FB3F9,PinName="DataInstance.Alive",PinFriendlyName=INVTEXT("DataInstance.Alive"),PinType.PinCategory="Type",PinType.PinSubCategory="ParameterPin",PinType.PinSubCategoryObject="/Script/CoreUObject.ScriptStruct'/Script/Niagara.NiagaraBool'",PinType.PinSubCategoryMemberReference=(),PinType.PinValueType=(),PinType.ContainerType=None,PinType.bIsReference=False,PinType.bIsConst=False,PinType.bIsWeakPointer=False,PinType.bIsUObjectWrapper=False,PinType.bSerializeAsSinglePrecisionFloat=False,PersistentGuid=FF78A03CC74349009E21FA0C580A5D5D,bHidden=False,bNotConnectable=False,bDefaultValueIsReadOnly=False,bDefaultValueIsIgnored=False,bAdvancedView=False,bOrphanedPin=False,) + CustomProperties Pin (PinId=424BB6ED7C4842E5A2C6418D57FA4932,PinName="Engine.System.NumTimeSteps",PinFriendlyName=INVTEXT("Engine.System.NumTimeSteps"),PinType.PinCategory="Type",PinType.PinSubCategory="ParameterPin",PinType.PinSubCategoryObject="/Script/CoreUObject.ScriptStruct'/Script/Niagara.NiagaraInt32'",PinType.PinSubCategoryMemberReference=(),PinType.PinValueType=(),PinType.ContainerType=None,PinType.bIsReference=False,PinType.bIsConst=False,PinType.bIsWeakPointer=False,PinType.bIsUObjectWrapper=False,PinType.bSerializeAsSinglePrecisionFloat=False,PersistentGuid=4F1387D07F664AD6A320F979E46166FC,bHidden=False,bNotConnectable=False,bDefaultValueIsReadOnly=False,bDefaultValueIsIgnored=False,bAdvancedView=False,bOrphanedPin=False,) + CustomProperties Pin (PinId=DD864D32981147828323F10E017607F1,PinName="Add",PinType.PinCategory="Misc",PinType.PinSubCategory="DynamicAddPin",PinType.PinSubCategoryObject=None,PinType.PinSubCategoryMemberReference=(),PinType.PinValueType=(),PinType.ContainerType=None,PinType.bIsReference=False,PinType.bIsConst=False,PinType.bIsWeakPointer=False,PinType.bIsUObjectWrapper=False,PinType.bSerializeAsSinglePrecisionFloat=False,PersistentGuid=00000000000000000000000000000000,bHidden=False,bNotConnectable=False,bDefaultValueIsReadOnly=False,bDefaultValueIsIgnored=False,bAdvancedView=False,bOrphanedPin=False,) + End Object + `, + pins: 9, + delegate: false, + development: false, + additionalTest: async (node, pins) => { + expect(await node.evaluate(node => node.classList.contains("ueb-node-style-default"))).toBeTruthy() + expect(await pins[0].evaluate(p => p.entity.isExecution())).toBeTruthy() + expect(await pins[0].evaluate(p => p.template.renderIcon().strings.join(""))) + .toEqual(SVGIcon.execPin.strings.join("")) + expect(await pins[1].evaluate(p => p.entity.isExecution())).toBeFalsy() + expect(await pins[1].evaluate(p => p.template.renderIcon().strings.join(""))) + .toEqual(SVGIcon.genericPin.strings.join("")) + expect(await pins[2].evaluate(p => p.entity.isExecution())).toBeFalsy() + expect(await pins[7].evaluate(p => p.entity.isExecution())).toBeFalsy() + expect(await pins[8].evaluate(p => p.entity.isExecution())).toBeTruthy() + expect(await pins[8].evaluate(p => p.template.renderIcon().strings.join(""))) + .toEqual(SVGIcon.execPin.strings.join("")) + }, +}) diff --git a/tests/nodeNiagaraMul.spec.js b/tests/nodeNiagaraMul.spec.js new file mode 100755 index 0000000..5fae50b --- /dev/null +++ b/tests/nodeNiagaraMul.spec.js @@ -0,0 +1,26 @@ +import { expect, testNode } from "./fixtures/test.js" + +testNode({ + name: "Niagara Mul", + title: String.fromCharCode(0x2a2f), + value: String.raw` + Begin Object Class=/Script/NiagaraEditor.NiagaraNodeOp Name="NiagaraNodeOp_2" ExportPath="/Script/NiagaraEditor.NiagaraNodeOp'/Engine/Transient.NewNiagaraScript:NiagaraScriptSource_0.NiagaraGraph_0.NiagaraNodeOp_2'" + OpName="Numeric::Mul" + ChangeId=D255C58006D942A3B9EA40A7D0A9A26C + NodePosX=-432 + NodePosY=432 + NodeGuid=6C57BD28235446B286204A350C20824E + CustomProperties Pin (PinId=2CA19EFC7B8943C59D997AE9E20EDD9D,PinName="A",PinToolTip="A",PinType.PinCategory="Type",PinType.PinSubCategory="",PinType.PinSubCategoryObject="/Script/CoreUObject.ScriptStruct'/Script/Niagara.NiagaraNumeric'",PinType.PinSubCategoryMemberReference=(),PinType.PinValueType=(),PinType.ContainerType=None,PinType.bIsReference=False,PinType.bIsConst=False,PinType.bIsWeakPointer=False,PinType.bIsUObjectWrapper=False,PinType.bSerializeAsSinglePrecisionFloat=False,DefaultValue="1.0",AutogeneratedDefaultValue="1.0",PersistentGuid=00000000000000000000000000000000,bHidden=False,bNotConnectable=False,bDefaultValueIsReadOnly=False,bDefaultValueIsIgnored=False,bAdvancedView=False,bOrphanedPin=False,) + CustomProperties Pin (PinId=A6992BD09EBC4303B4B30A86BCF295A9,PinName="B",PinToolTip="B",PinType.PinCategory="Type",PinType.PinSubCategory="",PinType.PinSubCategoryObject="/Script/CoreUObject.ScriptStruct'/Script/Niagara.NiagaraNumeric'",PinType.PinSubCategoryMemberReference=(),PinType.PinValueType=(),PinType.ContainerType=None,PinType.bIsReference=False,PinType.bIsConst=False,PinType.bIsWeakPointer=False,PinType.bIsUObjectWrapper=False,PinType.bSerializeAsSinglePrecisionFloat=False,DefaultValue="1.0",AutogeneratedDefaultValue="1.0",PersistentGuid=00000000000000000000000000000000,bHidden=False,bNotConnectable=False,bDefaultValueIsReadOnly=False,bDefaultValueIsIgnored=False,bAdvancedView=False,bOrphanedPin=False,) + CustomProperties Pin (PinId=8539D0F6BC1F4A85A708B488C37C6FD9,PinName="Result",PinToolTip="Result",Direction="EGPD_Output",PinType.PinCategory="Type",PinType.PinSubCategory="",PinType.PinSubCategoryObject="/Script/CoreUObject.ScriptStruct'/Script/Niagara.NiagaraNumeric'",PinType.PinSubCategoryMemberReference=(),PinType.PinValueType=(),PinType.ContainerType=None,PinType.bIsReference=False,PinType.bIsConst=False,PinType.bIsWeakPointer=False,PinType.bIsUObjectWrapper=False,PinType.bSerializeAsSinglePrecisionFloat=False,PersistentGuid=00000000000000000000000000000000,bHidden=False,bNotConnectable=False,bDefaultValueIsReadOnly=False,bDefaultValueIsIgnored=False,bAdvancedView=False,bOrphanedPin=False,) + CustomProperties Pin (PinId=C484E4BEEE6E41779EFFB696880FCAF0,PinName="Add",PinType.PinCategory="Misc",PinType.PinSubCategory="DynamicAddPin",PinType.PinSubCategoryObject=None,PinType.PinSubCategoryMemberReference=(),PinType.PinValueType=(),PinType.ContainerType=None,PinType.bIsReference=False,PinType.bIsConst=False,PinType.bIsWeakPointer=False,PinType.bIsUObjectWrapper=False,PinType.bSerializeAsSinglePrecisionFloat=False,PersistentGuid=00000000000000000000000000000000,bHidden=False,bNotConnectable=False,bDefaultValueIsReadOnly=False,bDefaultValueIsIgnored=False,bAdvancedView=False,bOrphanedPin=False,) + End Object + `, + size: [9.5, 6], + pins: 4, + delegate: false, + development: false, + additionalTest: async node => { + expect(await node.evaluate(node => node.classList.contains("ueb-node-style-glass"))).toBeTruthy() + }, +}) diff --git a/tests/nodeNiagaraOutputCompilerTag.spec.js b/tests/nodeNiagaraOutputCompilerTag.spec.js new file mode 100755 index 0000000..4c02c90 --- /dev/null +++ b/tests/nodeNiagaraOutputCompilerTag.spec.js @@ -0,0 +1,69 @@ +import { css } from "lit" +import Configuration from "../js/Configuration.js" +import SVGIcon from "../js/SVGIcon.js" +import { expect, testNode } from "./fixtures/test.js" + +testNode({ + name: "Output Tag", + value: String.raw` + Begin Object Class=/Script/NiagaraEditor.NiagaraNodeOutputTag Name="NiagaraNodeOutputTag_2" ExportPath="/Script/NiagaraEditor.NiagaraNodeOutputTag'/Engine/Transient.NewNiagaraScript:NiagaraScriptSource_0.NiagaraGraph_0.NiagaraNodeOutputTag_2'" + ChangeId=C60F49423AE7443291275F8D8DA0B1F1 + NodePosX=-528 + NodePosY=-896 + NodeGuid=358151BBF91F4FF29BEFB946F4996215 + CustomProperties Pin (PinId=D485C4C657714655851E5FC1C6B35D8F,PinType.PinCategory="Type",PinType.PinSubCategory="",PinType.PinSubCategoryObject="/Script/CoreUObject.ScriptStruct'/Script/Niagara.NiagaraParameterMap'",PinType.PinSubCategoryMemberReference=(),PinType.PinValueType=(),PinType.ContainerType=None,PinType.bIsReference=False,PinType.bIsConst=False,PinType.bIsWeakPointer=False,PinType.bIsUObjectWrapper=False,PinType.bSerializeAsSinglePrecisionFloat=False,PersistentGuid=00000000000000000000000000000000,bHidden=False,bNotConnectable=False,bDefaultValueIsReadOnly=False,bDefaultValueIsIgnored=False,bAdvancedView=False,bOrphanedPin=False,) + CustomProperties Pin (PinId=349ACCF6AFDA4FC8B8651BAFA3AFB47D,Direction="EGPD_Output",PinType.PinCategory="Type",PinType.PinSubCategory="",PinType.PinSubCategoryObject="/Script/CoreUObject.ScriptStruct'/Script/Niagara.NiagaraParameterMap'",PinType.PinSubCategoryMemberReference=(),PinType.PinValueType=(),PinType.ContainerType=None,PinType.bIsReference=False,PinType.bIsConst=False,PinType.bIsWeakPointer=False,PinType.bIsUObjectWrapper=False,PinType.bSerializeAsSinglePrecisionFloat=False,PersistentGuid=00000000000000000000000000000000,bHidden=False,bNotConnectable=False,bDefaultValueIsReadOnly=False,bDefaultValueIsIgnored=False,bAdvancedView=False,bOrphanedPin=False,) + CustomProperties Pin (PinId=81BD244B45F04FAFB5E540ADB2D9DA9A,PinName="NiagaraBool",PinType.PinCategory="Type",PinType.PinSubCategory="",PinType.PinSubCategoryObject="/Script/CoreUObject.ScriptStruct'/Script/Niagara.NiagaraBool'",PinType.PinSubCategoryMemberReference=(),PinType.PinValueType=(),PinType.ContainerType=None,PinType.bIsReference=False,PinType.bIsConst=False,PinType.bIsWeakPointer=False,PinType.bIsUObjectWrapper=False,PinType.bSerializeAsSinglePrecisionFloat=False,PersistentGuid=00000000000000000000000000000000,bHidden=False,bNotConnectable=False,bDefaultValueIsReadOnly=False,bDefaultValueIsIgnored=False,bAdvancedView=False,bOrphanedPin=False,) + CustomProperties Pin (PinId=F0964340075B470D95C9E5B0B346C887,PinName="NiagaraBool",PinType.PinCategory="StaticType",PinType.PinSubCategory="",PinType.PinSubCategoryObject="/Script/CoreUObject.ScriptStruct'/Script/Niagara.NiagaraBool'",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=90033B9994C244338474A592DEEEE45C,PinName="NiagaraFloat",PinType.PinCategory="Type",PinType.PinSubCategory="",PinType.PinSubCategoryObject="/Script/CoreUObject.ScriptStruct'/Script/Niagara.NiagaraFloat'",PinType.PinSubCategoryMemberReference=(),PinType.PinValueType=(),PinType.ContainerType=None,PinType.bIsReference=False,PinType.bIsConst=False,PinType.bIsWeakPointer=False,PinType.bIsUObjectWrapper=False,PinType.bSerializeAsSinglePrecisionFloat=False,PersistentGuid=00000000000000000000000000000000,bHidden=False,bNotConnectable=False,bDefaultValueIsReadOnly=False,bDefaultValueIsIgnored=False,bAdvancedView=False,bOrphanedPin=False,) + CustomProperties Pin (PinId=A6BF8BF6327949288B42C1085C211E59,PinName="NiagaraSpawnInfo",PinType.PinCategory="Type",PinType.PinSubCategory="",PinType.PinSubCategoryObject="/Script/CoreUObject.ScriptStruct'/Script/Niagara.NiagaraSpawnInfo'",PinType.PinSubCategoryMemberReference=(),PinType.PinValueType=(),PinType.ContainerType=None,PinType.bIsReference=False,PinType.bIsConst=False,PinType.bIsWeakPointer=False,PinType.bIsUObjectWrapper=False,PinType.bSerializeAsSinglePrecisionFloat=False,PersistentGuid=00000000000000000000000000000000,bHidden=False,bNotConnectable=False,bDefaultValueIsReadOnly=False,bDefaultValueIsIgnored=False,bAdvancedView=False,bOrphanedPin=False,) + CustomProperties Pin (PinId=FCDC6AB7F0E34E249BA31FD9A9819AAD,PinName="NiagaraInt32",PinType.PinCategory="Type",PinType.PinSubCategory="",PinType.PinSubCategoryObject="/Script/CoreUObject.ScriptStruct'/Script/Niagara.NiagaraInt32'",PinType.PinSubCategoryMemberReference=(),PinType.PinValueType=(),PinType.ContainerType=None,PinType.bIsReference=False,PinType.bIsConst=False,PinType.bIsWeakPointer=False,PinType.bIsUObjectWrapper=False,PinType.bSerializeAsSinglePrecisionFloat=False,PersistentGuid=00000000000000000000000000000000,bHidden=False,bNotConnectable=False,bDefaultValueIsReadOnly=False,bDefaultValueIsIgnored=False,bAdvancedView=False,bOrphanedPin=False,) + CustomProperties Pin (PinId=2F3A21B42BC14A25AE4817D3B2509803,PinName="NiagaraInt32",PinType.PinCategory="StaticType",PinType.PinSubCategory="",PinType.PinSubCategoryObject="/Script/CoreUObject.ScriptStruct'/Script/Niagara.NiagaraInt32'",PinType.PinSubCategoryMemberReference=(),PinType.PinValueType=(),PinType.ContainerType=None,PinType.bIsReference=False,PinType.bIsConst=False,PinType.bIsWeakPointer=False,PinType.bIsUObjectWrapper=False,PinType.bSerializeAsSinglePrecisionFloat=False,PersistentGuid=00000000000000000000000000000000,bHidden=False,bNotConnectable=False,bDefaultValueIsReadOnly=False,bDefaultValueIsIgnored=False,bAdvancedView=False,bOrphanedPin=False,) + CustomProperties Pin (PinId=BC88E6E19CE6492FA51A353CD02E4E24,PinName="LinearColor",PinType.PinCategory="Type",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.078022,G=1.000000,B=0.109892,A=1.000000)",PersistentGuid=00000000000000000000000000000000,bHidden=False,bNotConnectable=False,bDefaultValueIsReadOnly=False,bDefaultValueIsIgnored=False,bAdvancedView=False,bOrphanedPin=False,) + CustomProperties Pin (PinId=5AF5F3EAFD2348D5A978511043618C1D,PinName="NiagaraMatrix",PinType.PinCategory="Type",PinType.PinSubCategory="",PinType.PinSubCategoryObject="/Script/CoreUObject.ScriptStruct'/Script/Niagara.NiagaraMatrix'",PinType.PinSubCategoryMemberReference=(),PinType.PinValueType=(),PinType.ContainerType=None,PinType.bIsReference=False,PinType.bIsConst=False,PinType.bIsWeakPointer=False,PinType.bIsUObjectWrapper=False,PinType.bSerializeAsSinglePrecisionFloat=False,PersistentGuid=00000000000000000000000000000000,bHidden=False,bNotConnectable=False,bDefaultValueIsReadOnly=False,bDefaultValueIsIgnored=False,bAdvancedView=False,bOrphanedPin=False,) + CustomProperties Pin (PinId=23C36BAED28944259D67DE25A1C8F963,PinName="MeshTriCoordinate",PinType.PinCategory="Type",PinType.PinSubCategory="",PinType.PinSubCategoryObject="/Script/CoreUObject.ScriptStruct'/Script/Niagara.MeshTriCoordinate'",PinType.PinSubCategoryMemberReference=(),PinType.PinValueType=(),PinType.ContainerType=None,PinType.bIsReference=False,PinType.bIsConst=False,PinType.bIsWeakPointer=False,PinType.bIsUObjectWrapper=False,PinType.bSerializeAsSinglePrecisionFloat=False,PersistentGuid=00000000000000000000000000000000,bHidden=False,bNotConnectable=False,bDefaultValueIsReadOnly=False,bDefaultValueIsIgnored=False,bAdvancedView=False,bOrphanedPin=False,) + CustomProperties Pin (PinId=DEB1F3BDCF794F0D8295D83D8E8868B4,PinName="NiagaraID",PinType.PinCategory="Type",PinType.PinSubCategory="",PinType.PinSubCategoryObject="/Script/CoreUObject.ScriptStruct'/Script/Niagara.NiagaraID'",PinType.PinSubCategoryMemberReference=(),PinType.PinValueType=(),PinType.ContainerType=None,PinType.bIsReference=False,PinType.bIsConst=False,PinType.bIsWeakPointer=False,PinType.bIsUObjectWrapper=False,PinType.bSerializeAsSinglePrecisionFloat=False,PersistentGuid=00000000000000000000000000000000,bHidden=False,bNotConnectable=False,bDefaultValueIsReadOnly=False,bDefaultValueIsIgnored=False,bAdvancedView=False,bOrphanedPin=False,) + CustomProperties Pin (PinId=0EDA9F1EA89D483FA48111BD6E00B00F,PinName="NiagaraParameterMap",PinType.PinCategory="Type",PinType.PinSubCategory="",PinType.PinSubCategoryObject="/Script/CoreUObject.ScriptStruct'/Script/Niagara.NiagaraParameterMap'",PinType.PinSubCategoryMemberReference=(),PinType.PinValueType=(),PinType.ContainerType=None,PinType.bIsReference=False,PinType.bIsConst=False,PinType.bIsWeakPointer=False,PinType.bIsUObjectWrapper=False,PinType.bSerializeAsSinglePrecisionFloat=False,PersistentGuid=00000000000000000000000000000000,bHidden=False,bNotConnectable=False,bDefaultValueIsReadOnly=False,bDefaultValueIsIgnored=False,bAdvancedView=False,bOrphanedPin=False,) + CustomProperties Pin (PinId=1B64CE013930433FB121EF6B62710241,PinName="NiagaraRandInfo",PinType.PinCategory="Type",PinType.PinSubCategory="",PinType.PinSubCategoryObject="/Script/CoreUObject.ScriptStruct'/Script/Niagara.NiagaraRandInfo'",PinType.PinSubCategoryMemberReference=(),PinType.PinValueType=(),PinType.ContainerType=None,PinType.bIsReference=False,PinType.bIsConst=False,PinType.bIsWeakPointer=False,PinType.bIsUObjectWrapper=False,PinType.bSerializeAsSinglePrecisionFloat=False,PersistentGuid=00000000000000000000000000000000,bHidden=False,bNotConnectable=False,bDefaultValueIsReadOnly=False,bDefaultValueIsIgnored=False,bAdvancedView=False,bOrphanedPin=False,) + CustomProperties Pin (PinId=73B87FBF432E45F9AE457550650448AC,PinName="NiagaraPosition",PinType.PinCategory="Type",PinType.PinSubCategory="",PinType.PinSubCategoryObject="/Script/CoreUObject.ScriptStruct'/Script/Niagara.NiagaraPosition'",PinType.PinSubCategoryMemberReference=(),PinType.PinValueType=(),PinType.ContainerType=None,PinType.bIsReference=False,PinType.bIsConst=False,PinType.bIsWeakPointer=False,PinType.bIsUObjectWrapper=False,PinType.bSerializeAsSinglePrecisionFloat=False,PersistentGuid=00000000000000000000000000000000,bHidden=False,bNotConnectable=False,bDefaultValueIsReadOnly=False,bDefaultValueIsIgnored=False,bAdvancedView=False,bOrphanedPin=False,) + CustomProperties Pin (PinId=913F2887139B4AE2AE72AC278D307C76,PinName="Quat4f",PinType.PinCategory="Type",PinType.PinSubCategory="",PinType.PinSubCategoryObject="/Script/CoreUObject.ScriptStruct'/Script/CoreUObject.Quat4f'",PinType.PinSubCategoryMemberReference=(),PinType.PinValueType=(),PinType.ContainerType=None,PinType.bIsReference=False,PinType.bIsConst=False,PinType.bIsWeakPointer=False,PinType.bIsUObjectWrapper=False,PinType.bSerializeAsSinglePrecisionFloat=False,PersistentGuid=00000000000000000000000000000000,bHidden=False,bNotConnectable=False,bDefaultValueIsReadOnly=False,bDefaultValueIsIgnored=False,bAdvancedView=False,bOrphanedPin=False,) + CustomProperties Pin (PinId=45B6C33D920B4600B0BBB68BC2F221C9,PinName="Vector3f",PinType.PinCategory="Type",PinType.PinSubCategory="",PinType.PinSubCategoryObject="/Script/CoreUObject.ScriptStruct'/Script/CoreUObject.Vector3f'",PinType.PinSubCategoryMemberReference=(),PinType.PinValueType=(),PinType.ContainerType=None,PinType.bIsReference=False,PinType.bIsConst=False,PinType.bIsWeakPointer=False,PinType.bIsUObjectWrapper=False,PinType.bSerializeAsSinglePrecisionFloat=False,PersistentGuid=00000000000000000000000000000000,bHidden=False,bNotConnectable=False,bDefaultValueIsReadOnly=False,bDefaultValueIsIgnored=False,bAdvancedView=False,bOrphanedPin=False,) + CustomProperties Pin (PinId=DF5F35712EA345C6B683C9D43B996384,PinName="Vector2f",PinType.PinCategory="Type",PinType.PinSubCategory="",PinType.PinSubCategoryObject="/Script/CoreUObject.ScriptStruct'/Script/CoreUObject.Vector2f'",PinType.PinSubCategoryMemberReference=(),PinType.PinValueType=(),PinType.ContainerType=None,PinType.bIsReference=False,PinType.bIsConst=False,PinType.bIsWeakPointer=False,PinType.bIsUObjectWrapper=False,PinType.bSerializeAsSinglePrecisionFloat=False,PersistentGuid=00000000000000000000000000000000,bHidden=False,bNotConnectable=False,bDefaultValueIsReadOnly=False,bDefaultValueIsIgnored=False,bAdvancedView=False,bOrphanedPin=False,) + CustomProperties Pin (PinId=BD230BE2311D4B888EA0D031BA32CD8D,PinName="Vector4f",PinType.PinCategory="Type",PinType.PinSubCategory="",PinType.PinSubCategoryObject="/Script/CoreUObject.ScriptStruct'/Script/CoreUObject.Vector4f'",PinType.PinSubCategoryMemberReference=(),PinType.PinValueType=(),PinType.ContainerType=None,PinType.bIsReference=False,PinType.bIsConst=False,PinType.bIsWeakPointer=False,PinType.bIsUObjectWrapper=False,PinType.bSerializeAsSinglePrecisionFloat=False,PersistentGuid=00000000000000000000000000000000,bHidden=False,bNotConnectable=False,bDefaultValueIsReadOnly=False,bDefaultValueIsIgnored=False,bAdvancedView=False,bOrphanedPin=False,) + CustomProperties Pin (PinId=5DF025BA1BE64414AB80521798D1D53B,PinName="ECollisionChannel",PinType.PinCategory="Enum",PinType.PinSubCategory="",PinType.PinSubCategoryObject="/Script/CoreUObject.Enum'/Script/Engine.ECollisionChannel'",PinType.PinSubCategoryMemberReference=(),PinType.PinValueType=(),PinType.ContainerType=None,PinType.bIsReference=False,PinType.bIsConst=False,PinType.bIsWeakPointer=False,PinType.bIsUObjectWrapper=False,PinType.bSerializeAsSinglePrecisionFloat=False,DefaultValue="ECC_Pawn",PersistentGuid=00000000000000000000000000000000,bHidden=False,bNotConnectable=False,bDefaultValueIsReadOnly=False,bDefaultValueIsIgnored=False,bAdvancedView=False,bOrphanedPin=False,) + CustomProperties Pin (PinId=4E0A45E6A65E48BBBA3531A41E503B52,PinName="Add",PinType.PinCategory="Misc",PinType.PinSubCategory="DynamicAddPin",PinType.PinSubCategoryObject=None,PinType.PinSubCategoryMemberReference=(),PinType.PinValueType=(),PinType.ContainerType=None,PinType.bIsReference=False,PinType.bIsConst=False,PinType.bIsWeakPointer=False,PinType.bIsUObjectWrapper=False,PinType.bSerializeAsSinglePrecisionFloat=False,PersistentGuid=00000000000000000000000000000000,bHidden=False,bNotConnectable=False,bDefaultValueIsReadOnly=False,bDefaultValueIsIgnored=False,bAdvancedView=False,bOrphanedPin=False,) + End Object + `, + size: [18, 48], + color: Configuration.nodeColors.blue, + icon: null, + pins: 21, + delegate: false, + development: false, + variadic: false, + additionalTest: async (node, pins) => { + expect(await pins[1].evaluate(p => p.entity.pinColor().cssText)).toBe(css`146, 0, 0`.cssText) + expect(await pins[2].evaluate(p => p.entity.pinColor().cssText)).toBe(css`146, 0, 0`.cssText) + expect(await pins[2].evaluate(pin => pin.template.renderIcon().strings.join(""))) + .toEqual(SVGIcon.staticPin.strings.join("")) + expect(await pins[3].evaluate(p => p.entity.pinColor().cssText)).toBe(css`160, 250, 68`.cssText) + expect(await pins[4].evaluate(p => p.entity.pinColor().cssText)).toBe(css`0, 88, 200`.cssText) + expect(await pins[5].evaluate(p => p.entity.pinColor().cssText)).toBe(css`30, 224, 172`.cssText) + expect(await pins[6].evaluate(p => p.entity.pinColor().cssText)).toBe(css`30, 224, 172`.cssText) + expect(await pins[6].evaluate(pin => pin.template.renderIcon().strings.join(""))) + .toEqual(SVGIcon.staticPin.strings.join("")) + expect(await pins[7].evaluate(p => p.entity.pinColor().cssText)).toBe(css`0, 88, 200`.cssText) + expect(await pins[8].evaluate(p => p.entity.pinColor().cssText)).toBe(css`0, 88, 200`.cssText) + expect(await pins[9].evaluate(p => p.entity.pinColor().cssText)).toBe(css`0, 88, 200`.cssText) + expect(await pins[10].evaluate(p => p.entity.pinColor().cssText)).toBe(css`0, 88, 200`.cssText) + expect(await pins[11].evaluate(pin => pin.template.renderIcon().strings.join(""))) + .toEqual(SVGIcon.execPin.strings.join("")) + expect(await pins[12].evaluate(p => p.entity.pinColor().cssText)).toBe(css`0, 88, 200`.cssText) + expect(await pins[13].evaluate(p => p.entity.pinColor().cssText)).toBe(css`251, 146, 251`.cssText) + expect(await pins[14].evaluate(p => p.entity.pinColor().cssText)).toBe(css`0, 88, 200`.cssText) + expect(await pins[15].evaluate(p => p.entity.pinColor().cssText)).toBe(css`250, 200, 36`.cssText) + expect(await pins[16].evaluate(p => p.entity.pinColor().cssText)).toBe(css`0, 88, 200`.cssText) + expect(await pins[17].evaluate(p => p.entity.pinColor().cssText)).toBe(css`0, 88, 200`.cssText) + expect(await pins[18].evaluate(p => p.entity.pinColor().cssText)).toBe(css`0, 109, 99`.cssText) + } +}) diff --git a/tests/nodeNotEqualGameplayTag.spec.js b/tests/nodeNotEqualGameplayTag.spec.js new file mode 100755 index 0000000..b535691 --- /dev/null +++ b/tests/nodeNotEqualGameplayTag.spec.js @@ -0,0 +1,30 @@ +import SVGIcon from "../js/SVGIcon.js" +import { expect, testNode } from "./fixtures/test.js" + +testNode({ + name: "Not equal gameplay tag", + 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 + "NodePosY"=128 + "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("")) + } + } +}) diff --git a/tests/nodeNum1.spec.js b/tests/nodeNum1.spec.js new file mode 100755 index 0000000..e32ece7 --- /dev/null +++ b/tests/nodeNum1.spec.js @@ -0,0 +1,25 @@ +import Configuration from "../js/Configuration.js" +import SVGIcon from "../js/SVGIcon.js" +import { testNode } from "./fixtures/test.js" + +testNode({ + name: "Num 1", + value: String.raw` + Begin Object Class=/Script/BlueprintGraph.K2Node_InputKey Name="K2Node_InputKey_9" + InputKey=NumPadOne + NodePosX=-240 + NodePosY=64 + 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, +}) diff --git a/tests/nodeNum6.spec.js b/tests/nodeNum6.spec.js new file mode 100755 index 0000000..aabf982 --- /dev/null +++ b/tests/nodeNum6.spec.js @@ -0,0 +1,25 @@ +import Configuration from "../js/Configuration.js" +import SVGIcon from "../js/SVGIcon.js" +import { testNode } from "./fixtures/test.js" + +testNode({ + 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, +}) diff --git a/tests/nodeNumDiv.spec.js b/tests/nodeNumDiv.spec.js new file mode 100755 index 0000000..4f9db78 --- /dev/null +++ b/tests/nodeNumDiv.spec.js @@ -0,0 +1,25 @@ +import Configuration from "../js/Configuration.js" +import SVGIcon from "../js/SVGIcon.js" +import { testNode } from "./fixtures/test.js" + +testNode({ + 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, +}) diff --git a/tests/nodeNumDot.spec.js b/tests/nodeNumDot.spec.js new file mode 100755 index 0000000..cc9c801 --- /dev/null +++ b/tests/nodeNumDot.spec.js @@ -0,0 +1,25 @@ +import Configuration from "../js/Configuration.js" +import SVGIcon from "../js/SVGIcon.js" +import { testNode } from "./fixtures/test.js" + +testNode({ + 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, +}) diff --git a/tests/nodeNumMinus.spec.js b/tests/nodeNumMinus.spec.js new file mode 100755 index 0000000..4e600e8 --- /dev/null +++ b/tests/nodeNumMinus.spec.js @@ -0,0 +1,25 @@ +import Configuration from "../js/Configuration.js" +import SVGIcon from "../js/SVGIcon.js" +import { testNode } from "./fixtures/test.js" + +testNode({ + 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, +}) diff --git a/tests/nodeNumMul.spec.js b/tests/nodeNumMul.spec.js new file mode 100755 index 0000000..76b27e7 --- /dev/null +++ b/tests/nodeNumMul.spec.js @@ -0,0 +1,25 @@ +import Configuration from "../js/Configuration.js" +import SVGIcon from "../js/SVGIcon.js" +import { testNode } from "./fixtures/test.js" + +testNode({ + 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, +}) diff --git a/tests/nodeNumPlus.spec.js b/tests/nodeNumPlus.spec.js new file mode 100755 index 0000000..9b83ceb --- /dev/null +++ b/tests/nodeNumPlus.spec.js @@ -0,0 +1,25 @@ +import Configuration from "../js/Configuration.js" +import SVGIcon from "../js/SVGIcon.js" +import { testNode } from "./fixtures/test.js" + +testNode({ + 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, +}) diff --git a/tests/nodeOnComponentBeginOverlap_Event.spec.js b/tests/nodeOnComponentBeginOverlap_Event.spec.js new file mode 100755 index 0000000..5f2e666 --- /dev/null +++ b/tests/nodeOnComponentBeginOverlap_Event.spec.js @@ -0,0 +1,44 @@ +import Configuration from "../js/Configuration.js" +import SVGIcon from "../js/SVGIcon.js" +import { testNode } from "./fixtures/test.js" + +testNode({ + 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, +}) diff --git a/tests/nodePCGBranch.spec.js b/tests/nodePCGBranch.spec.js new file mode 100755 index 0000000..b1de9e9 --- /dev/null +++ b/tests/nodePCGBranch.spec.js @@ -0,0 +1,92 @@ +import Configuration from "../js/Configuration.js" +import SVGIcon from "../js/SVGIcon.js" +import { expect, testNode } from "./fixtures/test.js" + +testNode({ + name: "PCG Branch", + title: "Branch", + value: String.raw` + Begin Object Class=/Script/PCGEditor.PCGEditorGraphNode Name="PCGEditorGraphNode_2" ExportPath="/Script/PCGEditor.PCGEditorGraphNode'/Game/NewPCGGraph.NewPCGGraph:PCGEditorGraph_0.PCGEditorGraphNode_2'" + Begin Object Class=/Script/PCG.PCGNode Name="Branch_2" ExportPath="/Script/PCG.PCGNode'/Game/NewPCGGraph.NewPCGGraph:PCGEditorGraph_0.PCGEditorGraphNode_2.Branch_2'" + Begin Object Class=/Script/PCG.PCGPin Name="PCGPin_4" ExportPath="/Script/PCG.PCGPin'/Game/NewPCGGraph.NewPCGGraph:PCGEditorGraph_0.PCGEditorGraphNode_2.Branch_2.PCGPin_4'" + End Object + Begin Object Class=/Script/PCG.PCGPin Name="PCGPin_3" ExportPath="/Script/PCG.PCGPin'/Game/NewPCGGraph.NewPCGGraph:PCGEditorGraph_0.PCGEditorGraphNode_2.Branch_2.PCGPin_3'" + End Object + Begin Object Class=/Script/PCG.PCGPin Name="PCGPin_2" ExportPath="/Script/PCG.PCGPin'/Game/NewPCGGraph.NewPCGGraph:PCGEditorGraph_0.PCGEditorGraphNode_2.Branch_2.PCGPin_2'" + End Object + Begin Object Class=/Script/PCG.PCGPin Name="PCGPin_1" ExportPath="/Script/PCG.PCGPin'/Game/NewPCGGraph.NewPCGGraph:PCGEditorGraph_0.PCGEditorGraphNode_2.Branch_2.PCGPin_1'" + End Object + Begin Object Class=/Script/PCG.PCGPin Name="PCGPin_0" ExportPath="/Script/PCG.PCGPin'/Game/NewPCGGraph.NewPCGGraph:PCGEditorGraph_0.PCGEditorGraphNode_2.Branch_2.PCGPin_0'" + End Object + Begin Object Class=/Script/PCG.PCGBranchSettings Name="PCGBranchSettings_0" ExportPath="/Script/PCG.PCGBranchSettings'/Game/NewPCGGraph.NewPCGGraph:PCGEditorGraph_0.PCGEditorGraphNode_2.Branch_2.PCGBranchSettings_0'" + End Object + End Object + Begin Object Name="Branch_2" ExportPath="/Script/PCG.PCGNode'/Game/NewPCGGraph.NewPCGGraph:PCGEditorGraph_0.PCGEditorGraphNode_2.Branch_2'" + Begin Object Name="PCGPin_4" ExportPath="/Script/PCG.PCGPin'/Game/NewPCGGraph.NewPCGGraph:PCGEditorGraph_0.PCGEditorGraphNode_2.Branch_2.PCGPin_4'" + Node="/Script/PCG.PCGNode'PCGEditorGraphNode_2.Branch_2'" + Properties=(Label="Output B",Tooltip=NSLOCTEXT("FPCGBranchElement", "OutputPinTooltipB", "Will only route input if \'Output To B\' (overridable) is true")) + End Object + Begin Object Name="PCGPin_3" ExportPath="/Script/PCG.PCGPin'/Game/NewPCGGraph.NewPCGGraph:PCGEditorGraph_0.PCGEditorGraphNode_2.Branch_2.PCGPin_3'" + Node="/Script/PCG.PCGNode'PCGEditorGraphNode_2.Branch_2'" + Properties=(Label="Output A",Tooltip=NSLOCTEXT("FPCGBranchElement", "OutputPinTooltipA", "Will only route input if \'Output To B\' (overridable) is false")) + End Object + Begin Object Name="PCGPin_2" ExportPath="/Script/PCG.PCGPin'/Game/NewPCGGraph.NewPCGGraph:PCGEditorGraph_0.PCGEditorGraphNode_2.Branch_2.PCGPin_2'" + Node="/Script/PCG.PCGNode'PCGEditorGraphNode_2.Branch_2'" + Properties=(Label="Output to B",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}\""), "", "bool", "bOutputToB")) + End Object + Begin Object Name="PCGPin_1" ExportPath="/Script/PCG.PCGPin'/Game/NewPCGGraph.NewPCGGraph:PCGEditorGraph_0.PCGEditorGraphNode_2.Branch_2.PCGPin_1'" + Node="/Script/PCG.PCGNode'PCGEditorGraphNode_2.Branch_2'" + 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_0" ExportPath="/Script/PCG.PCGPin'/Game/NewPCGGraph.NewPCGGraph:PCGEditorGraph_0.PCGEditorGraphNode_2.Branch_2.PCGPin_0'" + Node="/Script/PCG.PCGNode'PCGEditorGraphNode_2.Branch_2'" + Properties=(Label="In") + End Object + Begin Object Name="PCGBranchSettings_0" ExportPath="/Script/PCG.PCGBranchSettings'/Game/NewPCGGraph.NewPCGGraph:PCGEditorGraph_0.PCGEditorGraphNode_2.Branch_2.PCGBranchSettings_0'" + Seed=-420875123 + CachedOverridableParams(0)=(Label="Output to B",PropertiesNames=("bOutputToB"),PropertyClass="/Script/CoreUObject.Class'/Script/PCG.PCGBranchSettings'") + End Object + PositionX=384 + PositionY=128 + SettingsInterface="/Script/PCG.PCGBranchSettings'PCGBranchSettings_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'" + OutputPins(1)="/Script/PCG.PCGPin'PCGPin_4'" + End Object + PCGNode="/Script/PCG.PCGNode'Branch_2'" + NodePosX=384 + NodePosY=128 + AdvancedPinDisplay=Shown + bUserSetEnabledState=True + NodeGuid=BCEBB6C85A8844F2B06322DF95805CB5 + CustomProperties Pin (PinId=4CBC2755317F47F7BA23B7E928C7A436,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=390B992FE20D4AAAB63EC14DE8732AD2,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=15D942E8E7C640719B71544BBEA5365D,PinName="Output to B",PinFriendlyName="Output To B",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=9397BA7C5D694D9FB070B353BB26BA57,PinName="Output A",PinFriendlyName="Output A",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,) + CustomProperties Pin (PinId=32167D5DBA9A4498B162B90B0F16A191,PinName="Output B",PinFriendlyName="Output B",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 + `, + size: [13, 9], + color: Configuration.nodeColors.intenseGreen, + pins: 5, + pinNames: ["In", "Overrides", "Output To B", "Output A", "Output B"], + delegate: false, + development: false, + additionalTest: async (node, pins) => { + expect(await pins[0].evaluate(pin => pin.template.renderIcon().strings.join(""))) + .toEqual(SVGIcon.pcgStackPin.strings.join("")) + expect(await pins[0].evaluate(pin => pin.entity.pinColor().cssText)).toEqual("132, 132, 132") + expect(await pins[1].evaluate(pin => pin.template.renderIcon().strings.join(""))) + .toEqual(SVGIcon.pcgParamPin.strings.join("")) + expect(await pins[2].evaluate(pin => pin.template.renderIcon().strings.join(""))) + .toEqual(SVGIcon.pcgParamPin.strings.join("")) + expect(await pins[3].evaluate(pin => pin.template.renderIcon().strings.join(""))) + .toEqual(SVGIcon.pcgPin.strings.join("")) + expect(await pins[3].evaluate(pin => pin.entity.pinColor().cssText)).toEqual("132, 132, 132") + expect(await pins[4].evaluate(pin => pin.template.renderIcon().strings.join(""))) + .toEqual(SVGIcon.pcgPin.strings.join("")) + expect(await pins[4].evaluate(pin => pin.entity.pinColor().cssText)).toEqual("132, 132, 132") + } +}) diff --git a/tests/nodePCGSelect.spec.js b/tests/nodePCGSelect.spec.js new file mode 100755 index 0000000..458c7ea --- /dev/null +++ b/tests/nodePCGSelect.spec.js @@ -0,0 +1,87 @@ +import { css } from "lit" +import Configuration from "../js/Configuration.js" +import { expect, testNode } from "./fixtures/test.js" + +testNode({ + name: "PCG Select", + title: "Select", + value: String.raw` + Begin Object Class=/Script/PCGEditor.PCGEditorGraphNode Name="PCGEditorGraphNode_0" ExportPath="/Script/PCGEditor.PCGEditorGraphNode'/Game/NewPCGGraph.NewPCGGraph:PCGEditorGraph_0.PCGEditorGraphNode_0'" + Begin Object Class=/Script/PCG.PCGNode Name="Select_1" ExportPath="/Script/PCG.PCGNode'/Game/NewPCGGraph.NewPCGGraph:PCGEditorGraph_0.PCGEditorGraphNode_0.Select_1'" + Begin Object Class=/Script/PCG.PCGBooleanSelectSettings Name="PCGBooleanSelectSettings_0" ExportPath="/Script/PCG.PCGBooleanSelectSettings'/Game/NewPCGGraph.NewPCGGraph:PCGEditorGraph_0.PCGEditorGraphNode_0.Select_1.PCGBooleanSelectSettings_0'" + End Object + Begin Object Class=/Script/PCG.PCGPin Name="PCGPin_0" ExportPath="/Script/PCG.PCGPin'/Game/NewPCGGraph.NewPCGGraph:PCGEditorGraph_0.PCGEditorGraphNode_0.Select_1.PCGPin_0'" + End Object + Begin Object Class=/Script/PCG.PCGPin Name="PCGPin_1" ExportPath="/Script/PCG.PCGPin'/Game/NewPCGGraph.NewPCGGraph:PCGEditorGraph_0.PCGEditorGraphNode_0.Select_1.PCGPin_1'" + End Object + Begin Object Class=/Script/PCG.PCGPin Name="PCGPin_2" ExportPath="/Script/PCG.PCGPin'/Game/NewPCGGraph.NewPCGGraph:PCGEditorGraph_0.PCGEditorGraphNode_0.Select_1.PCGPin_2'" + End Object + Begin Object Class=/Script/PCG.PCGPin Name="PCGPin_3" ExportPath="/Script/PCG.PCGPin'/Game/NewPCGGraph.NewPCGGraph:PCGEditorGraph_0.PCGEditorGraphNode_0.Select_1.PCGPin_3'" + End Object + Begin Object Class=/Script/PCG.PCGPin Name="PCGPin_4" ExportPath="/Script/PCG.PCGPin'/Game/NewPCGGraph.NewPCGGraph:PCGEditorGraph_0.PCGEditorGraphNode_0.Select_1.PCGPin_4'" + End Object + End Object + Begin Object Name="Select_1" ExportPath="/Script/PCG.PCGNode'/Game/NewPCGGraph.NewPCGGraph:PCGEditorGraph_0.PCGEditorGraphNode_0.Select_1'" + Begin Object Name="PCGBooleanSelectSettings_0" ExportPath="/Script/PCG.PCGBooleanSelectSettings'/Game/NewPCGGraph.NewPCGGraph:PCGEditorGraph_0.PCGEditorGraphNode_0.Select_1.PCGBooleanSelectSettings_0'" + Seed=-764420405 + CachedOverridableParams(0)=(Label="Use Input B",PropertiesNames=("bUseInputB"),PropertyClass="/Script/CoreUObject.Class'/Script/PCG.PCGBooleanSelectSettings'") + End Object + Begin Object Name="PCGPin_0" ExportPath="/Script/PCG.PCGPin'/Game/NewPCGGraph.NewPCGGraph:PCGEditorGraph_0.PCGEditorGraphNode_0.Select_1.PCGPin_0'" + Node="/Script/PCG.PCGNode'PCGEditorGraphNode_0.Select_1'" + Properties=(Label="Input A",Tooltip=NSLOCTEXT("FPCGBooleanSelectElement", "FirstInputPinTooltip", "Will only be used if \'Use Input B\' (overridable) is false")) + End Object + Begin Object Name="PCGPin_1" ExportPath="/Script/PCG.PCGPin'/Game/NewPCGGraph.NewPCGGraph:PCGEditorGraph_0.PCGEditorGraphNode_0.Select_1.PCGPin_1'" + Node="/Script/PCG.PCGNode'PCGEditorGraphNode_0.Select_1'" + Properties=(Label="Input B",Tooltip=NSLOCTEXT("FPCGBooleanSelectElement", "SecondInputPinTooltip", "Will only be used if \'Use Input B\' (overridable) is true")) + End Object + Begin Object Name="PCGPin_2" ExportPath="/Script/PCG.PCGPin'/Game/NewPCGGraph.NewPCGGraph:PCGEditorGraph_0.PCGEditorGraphNode_0.Select_1.PCGPin_2'" + Node="/Script/PCG.PCGNode'PCGEditorGraphNode_0.Select_1'" + 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_3" ExportPath="/Script/PCG.PCGPin'/Game/NewPCGGraph.NewPCGGraph:PCGEditorGraph_0.PCGEditorGraphNode_0.Select_1.PCGPin_3'" + Node="/Script/PCG.PCGNode'PCGEditorGraphNode_0.Select_1'" + Properties=(Label="Use Input B",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}\""), "", NSLOCTEXT("", "16C4E377C2E74CE5BA25165971FD45EF", "bool"), NSLOCTEXT("", "C2769CCD78C64949B3473D033EAF34BC", "bUseInputB"))) + End Object + Begin Object Name="PCGPin_4" ExportPath="/Script/PCG.PCGPin'/Game/NewPCGGraph.NewPCGGraph:PCGEditorGraph_0.PCGEditorGraphNode_0.Select_1.PCGPin_4'" + Node="/Script/PCG.PCGNode'PCGEditorGraphNode_0.Select_1'" + Properties=(Label="Out",Tooltip=NSLOCTEXT("FPCGBooleanSelectElement", "OutputPinTooltip", "All input will gathered into a single data collection")) + End Object + PositionX=896 + PositionY=256 + SettingsInterface="/Script/PCG.PCGBooleanSelectSettings'PCGBooleanSelectSettings_0'" + InputPins(0)="/Script/PCG.PCGPin'PCGPin_0'" + InputPins(1)="/Script/PCG.PCGPin'PCGPin_1'" + InputPins(2)="/Script/PCG.PCGPin'PCGPin_2'" + InputPins(3)="/Script/PCG.PCGPin'PCGPin_3'" + OutputPins(0)="/Script/PCG.PCGPin'PCGPin_4'" + End Object + PCGNode="/Script/PCG.PCGNode'Select_1'" + NodePosX=896 + NodePosY=256 + AdvancedPinDisplay=Shown + bUserSetEnabledState=True + NodeGuid=DC0AF7AFAE5643AEAA102848F6C250A1 + CustomProperties Pin (PinId=44103E0035144DDA9CBDF09DABD6FFBB,PinName="Input A",PinFriendlyName="Input A",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=DDAD3EAD7E13487AB8307520FEC50BFE,PinName="Input B",PinFriendlyName="Input B",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=3368F1F000994A78A1AE7445BE7A84F5,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=0EFB81FA173B41D294EB0795B08D8881,PinName="Use Input B",PinFriendlyName="Use Input B",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=49C207211518412D826C77C76B639411,PinName="Out",PinFriendlyName="Out",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 + `, + size: [11, 11], + color: Configuration.nodeColors.intenseGreen, + icon: null, + pins: 5, + pinNames: ["Input A", "Input B", "Overrides", "Use Input B", "Out"], + delegate: false, + development: false, + additionalTest: async (node, pins) => { + expect(await node.evaluate(node => node.classList.contains("ueb-node-style-glass"))).toBeFalsy() + expect(await node.evaluate(node => node.classList.contains("ueb-node-style-default"))).toBeTruthy() + expect(await pins[0].evaluate(p => p.entity.pinColor().cssText)).toBe(css`132, 132, 132`.cssText) + expect(await pins[1].evaluate(p => p.entity.pinColor().cssText)).toBe(css`132, 132, 132`.cssText) + expect(await pins[2].evaluate(p => p.entity.pinColor().cssText)).toBe(css`255, 166, 40`.cssText) + expect(await pins[3].evaluate(p => p.entity.pinColor().cssText)).toBe(css`255, 166, 40`.cssText) + expect(await pins[4].evaluate(p => p.entity.pinColor().cssText)).toBe(css`132, 132, 132`.cssText) + }, +}) diff --git a/tests/nodeReverseForEachLoop.spec.js b/tests/nodeReverseForEachLoop.spec.js new file mode 100755 index 0000000..ddffbc5 --- /dev/null +++ b/tests/nodeReverseForEachLoop.spec.js @@ -0,0 +1,29 @@ +import Configuration from "../js/Configuration.js" +import SVGIcon from "../js/SVGIcon.js" +import { testNode } from "./fixtures/test.js" + +testNode({ + 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, +}) diff --git a/tests/nodeSection.spec.js b/tests/nodeSection.spec.js new file mode 100755 index 0000000..8fa2922 --- /dev/null +++ b/tests/nodeSection.spec.js @@ -0,0 +1,26 @@ +import Configuration from "../js/Configuration.js" +import SVGIcon from "../js/SVGIcon.js" +import { testNode } from "./fixtures/test.js" + +testNode({ + 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, +}) diff --git a/tests/nodeSelf.spec.js b/tests/nodeSelf.spec.js new file mode 100755 index 0000000..87ba535 --- /dev/null +++ b/tests/nodeSelf.spec.js @@ -0,0 +1,20 @@ +import { expect, testNode } from "./fixtures/test.js" + +testNode({ + name: "Self", + value: String.raw` + Begin Object Class=/Script/BlueprintGraph.K2Node_Self Name="K2Node_Self_0" ExportPath="/Script/BlueprintGraph.K2Node_Self'/Temp/Untitled_1.Untitled_1:PersistentLevel.Untitled.EventGraph.K2Node_Self_0'" + NodePosX=224 + NodePosY=848 + NodeGuid=70A71735B5F247699242DBC67A166772 + CustomProperties Pin (PinId=3B41006840BA3918576575AC4419E030,PinName="self",Direction="EGPD_Output",PinType.PinCategory="object",PinType.PinSubCategory="self",PinType.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_1 C3A04D2142AC39C30B0A62876AF7ECC8,),PersistentGuid=00000000000000000000000000000000,bHidden=False,bNotConnectable=False,bDefaultValueIsReadOnly=False,bDefaultValueIsIgnored=False,bAdvancedView=False,bOrphanedPin=False,) + End Object + `, + size: [8, 2.5], + pins: 1, + delegate: false, + development: false, + additionalTest: async node => { + expect(await (node.evaluate(n => n.classList.contains("ueb-node-style-getter")))).toBeTruthy() + } +}) diff --git a/tests/nodeSequence.spec.js b/tests/nodeSequence.spec.js new file mode 100755 index 0000000..30574a4 --- /dev/null +++ b/tests/nodeSequence.spec.js @@ -0,0 +1,30 @@ +import Configuration from "../js/Configuration.js" +import SVGIcon from "../js/SVGIcon.js" +import { testNode } from "./fixtures/test.js" + +testNode({ + name: "Sequence", + value: String.raw` + Begin Object Class=/Script/BlueprintGraph.K2Node_ExecutionSequence Name="K2Node_ExecutionSequence_4" ExportPath="/Script/BlueprintGraph.K2Node_ExecutionSequence'/Engine/Maps/Templates/NewWorld.NewWorld:PersistentLevel.NewWorld.EventGraph.K2Node_ExecutionSequence_4'" + NodePosX=496 + NodePosY=192 + NodeGuid=7E38FFEB6B474D4E80CDA4B4720C9E24 + CustomProperties Pin (PinId=2612016B4EAAC152FA9ABB9E23572EE1,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_CallFunction_26 2658362A4F2BA6A3BE7398A8604FAC6D,),PersistentGuid=00000000000000000000000000000000,bHidden=False,bNotConnectable=False,bDefaultValueIsReadOnly=False,bDefaultValueIsIgnored=False,bAdvancedView=False,bOrphanedPin=False,) + CustomProperties Pin (PinId=D665418E47B39BB80A8F02B3951BF0DB,PinName="then_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,LinkedTo=(K2Node_Timeline_1 ABA55A2B4F3689076D856F921255888F,),PersistentGuid=00000000000000000000000000000000,bHidden=False,bNotConnectable=False,bDefaultValueIsReadOnly=False,bDefaultValueIsIgnored=False,bAdvancedView=False,bOrphanedPin=False,) + CustomProperties Pin (PinId=A3D98FA145671788536EA1AD2CF5DA61,PinName="then_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,LinkedTo=(K2Node_Timeline_1 4069CE0043C4948BDE9D17A2FEE8DE0A,),PersistentGuid=00000000000000000000000000000000,bHidden=False,bNotConnectable=False,bDefaultValueIsReadOnly=False,bDefaultValueIsIgnored=False,bAdvancedView=False,bOrphanedPin=False,) + CustomProperties Pin (PinId=47D0C212ACF74C57873C7C16B66E0EC6,PinName="then_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: [8.5, 10], + color: Configuration.nodeColors.gray, + icon: SVGIcon.sequence, + pins: 4, + pinNames: [ + "Then 0", + "Then 1", + "Then 2", + ], + delegate: false, + development: false, + variadic: true, +}) diff --git a/tests/nodeSetFinishOnMessage.spec.js b/tests/nodeSetFinishOnMessage.spec.js new file mode 100755 index 0000000..518950b --- /dev/null +++ b/tests/nodeSetFinishOnMessage.spec.js @@ -0,0 +1,26 @@ +import Configuration from "../js/Configuration.js" +import SVGIcon from "../js/SVGIcon.js" +import { testNode } from "./fixtures/test.js" + +testNode({ + 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, +}) diff --git a/tests/nodeSetPointColor.spec.js b/tests/nodeSetPointColor.spec.js new file mode 100755 index 0000000..9f1c2b5 --- /dev/null +++ b/tests/nodeSetPointColor.spec.js @@ -0,0 +1,129 @@ +import SVGIcon from "../js/SVGIcon.js" +import { expect, testNode } from "./fixtures/test.js" + +testNode({ + name: "Set Point Color", + value: String.raw` + Begin Object Class=/Script/PCGEditor.PCGEditorGraphNode Name="PCGEditorGraphNode_1" ExportPath="/Script/PCGEditor.PCGEditorGraphNode'/Game/NewPCGGraph.NewPCGGraph:PCGEditorGraph_0.PCGEditorGraphNode_1'" + Begin Object Class=/Script/PCG.PCGNode Name="ExecuteBlueprint_1" ExportPath="/Script/PCG.PCGNode'/Game/NewPCGGraph.NewPCGGraph:PCGEditorGraph_0.PCGEditorGraphNode_1.ExecuteBlueprint_1'" + Begin Object Class=/Script/PCG.PCGBlueprintSettings Name="PCGBlueprintSettings_1" ExportPath="/Script/PCG.PCGBlueprintSettings'/Game/NewPCGGraph.NewPCGGraph:PCGEditorGraph_0.PCGEditorGraphNode_1.ExecuteBlueprint_1.PCGBlueprintSettings_1'" + Begin Object Class=/PCG/BP_Elements/SetPointColor.SetPointColor_C Name="SetPointColor_C_0" ExportPath="/PCG/BP_Elements/SetPointColor.SetPointColor_C'/Game/NewPCGGraph.NewPCGGraph:PCGEditorGraph_0.PCGEditorGraphNode_1.ExecuteBlueprint_1.PCGBlueprintSettings_1.SetPointColor_C_0'" + End Object + End Object + Begin Object Class=/Script/PCG.PCGPin Name="PCGPin_0" ExportPath="/Script/PCG.PCGPin'/Game/NewPCGGraph.NewPCGGraph:PCGEditorGraph_0.PCGEditorGraphNode_1.ExecuteBlueprint_1.PCGPin_0'" + End Object + Begin Object Class=/Script/PCG.PCGPin Name="PCGPin_1" ExportPath="/Script/PCG.PCGPin'/Game/NewPCGGraph.NewPCGGraph:PCGEditorGraph_0.PCGEditorGraphNode_1.ExecuteBlueprint_1.PCGPin_1'" + End Object + Begin Object Class=/Script/PCG.PCGPin Name="PCGPin_2" ExportPath="/Script/PCG.PCGPin'/Game/NewPCGGraph.NewPCGGraph:PCGEditorGraph_0.PCGEditorGraphNode_1.ExecuteBlueprint_1.PCGPin_2'" + End Object + Begin Object Class=/Script/PCG.PCGPin Name="PCGPin_3" ExportPath="/Script/PCG.PCGPin'/Game/NewPCGGraph.NewPCGGraph:PCGEditorGraph_0.PCGEditorGraphNode_1.ExecuteBlueprint_1.PCGPin_3'" + End Object + Begin Object Class=/Script/PCG.PCGPin Name="PCGPin_4" ExportPath="/Script/PCG.PCGPin'/Game/NewPCGGraph.NewPCGGraph:PCGEditorGraph_0.PCGEditorGraphNode_1.ExecuteBlueprint_1.PCGPin_4'" + End Object + Begin Object Class=/Script/PCG.PCGPin Name="PCGPin_5" ExportPath="/Script/PCG.PCGPin'/Game/NewPCGGraph.NewPCGGraph:PCGEditorGraph_0.PCGEditorGraphNode_1.ExecuteBlueprint_1.PCGPin_5'" + End Object + Begin Object Class=/Script/PCG.PCGPin Name="PCGPin_6" ExportPath="/Script/PCG.PCGPin'/Game/NewPCGGraph.NewPCGGraph:PCGEditorGraph_0.PCGEditorGraphNode_1.ExecuteBlueprint_1.PCGPin_6'" + End Object + Begin Object Class=/Script/PCG.PCGPin Name="PCGPin_7" ExportPath="/Script/PCG.PCGPin'/Game/NewPCGGraph.NewPCGGraph:PCGEditorGraph_0.PCGEditorGraphNode_1.ExecuteBlueprint_1.PCGPin_7'" + End Object + End Object + Begin Object Name="ExecuteBlueprint_1" ExportPath="/Script/PCG.PCGNode'/Game/NewPCGGraph.NewPCGGraph:PCGEditorGraph_0.PCGEditorGraphNode_1.ExecuteBlueprint_1'" + Begin Object Name="PCGBlueprintSettings_1" ExportPath="/Script/PCG.PCGBlueprintSettings'/Game/NewPCGGraph.NewPCGGraph:PCGEditorGraph_0.PCGEditorGraphNode_1.ExecuteBlueprint_1.PCGBlueprintSettings_1'" + Begin Object Name="SetPointColor_C_0" ExportPath="/PCG/BP_Elements/SetPointColor.SetPointColor_C'/Game/NewPCGGraph.NewPCGGraph:PCGEditorGraph_0.PCGEditorGraphNode_1.ExecuteBlueprint_1.PCGBlueprintSettings_1.SetPointColor_C_0'" + End Object + BlueprintElementType="/Script/Engine.BlueprintGeneratedClass'/PCG/BP_Elements/SetPointColor.SetPointColor_C'" + BlueprintElementInstance="/PCG/BP_Elements/SetPointColor.SetPointColor_C'SetPointColor_C_0'" + Seed=-1868785340 + bExposeToLibrary=False + CachedOverridableParams(0)=(Label="Seed",PropertiesNames=("Seed"),PropertyClass="/Script/CoreUObject.Class'/Script/PCG.PCGBlueprintSettings'") + CachedOverridableParams(1)=(Label="R",PropertiesNames=("Linear Color","R"),PropertyClass="/Script/Engine.BlueprintGeneratedClass'/PCG/BP_Elements/SetPointColor.SetPointColor_C'") + CachedOverridableParams(2)=(Label="G",PropertiesNames=("Linear Color","G"),PropertyClass="/Script/Engine.BlueprintGeneratedClass'/PCG/BP_Elements/SetPointColor.SetPointColor_C'") + CachedOverridableParams(3)=(Label="B",PropertiesNames=("Linear Color","B"),PropertyClass="/Script/Engine.BlueprintGeneratedClass'/PCG/BP_Elements/SetPointColor.SetPointColor_C'") + CachedOverridableParams(4)=(Label="A",PropertiesNames=("Linear Color","A"),PropertyClass="/Script/Engine.BlueprintGeneratedClass'/PCG/BP_Elements/SetPointColor.SetPointColor_C'") + End Object + Begin Object Name="PCGPin_0" ExportPath="/Script/PCG.PCGPin'/Game/NewPCGGraph.NewPCGGraph:PCGEditorGraph_0.PCGEditorGraphNode_1.ExecuteBlueprint_1.PCGPin_0'" + Node="/Script/PCG.PCGNode'PCGEditorGraphNode_1.ExecuteBlueprint_1'" + Properties=(Label="In",AllowedTypes=Point) + End Object + Begin Object Name="PCGPin_1" ExportPath="/Script/PCG.PCGPin'/Game/NewPCGGraph.NewPCGGraph:PCGEditorGraph_0.PCGEditorGraphNode_1.ExecuteBlueprint_1.PCGPin_1'" + Node="/Script/PCG.PCGNode'PCGEditorGraphNode_1.ExecuteBlueprint_1'" + 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_0.PCGEditorGraphNode_1.ExecuteBlueprint_1.PCGPin_2'" + Node="/Script/PCG.PCGNode'PCGEditorGraphNode_1.ExecuteBlueprint_1'" + 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_0.PCGEditorGraphNode_1.ExecuteBlueprint_1.PCGPin_3'" + Node="/Script/PCG.PCGNode'PCGEditorGraphNode_1.ExecuteBlueprint_1'" + Properties=(Label="Out",AllowedTypes=Point) + End Object + Begin Object Name="PCGPin_4" ExportPath="/Script/PCG.PCGPin'/Game/NewPCGGraph.NewPCGGraph:PCGEditorGraph_0.PCGEditorGraphNode_1.ExecuteBlueprint_1.PCGPin_4'" + Node="/Script/PCG.PCGNode'PCGEditorGraphNode_1.ExecuteBlueprint_1'" + Properties=(Label="R",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}\""), "", "float", "Linear Color/R")) + End Object + Begin Object Name="PCGPin_5" ExportPath="/Script/PCG.PCGPin'/Game/NewPCGGraph.NewPCGGraph:PCGEditorGraph_0.PCGEditorGraphNode_1.ExecuteBlueprint_1.PCGPin_5'" + Node="/Script/PCG.PCGNode'PCGEditorGraphNode_1.ExecuteBlueprint_1'" + Properties=(Label="G",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}\""), "", "float", "Linear Color/G")) + End Object + Begin Object Name="PCGPin_6" ExportPath="/Script/PCG.PCGPin'/Game/NewPCGGraph.NewPCGGraph:PCGEditorGraph_0.PCGEditorGraphNode_1.ExecuteBlueprint_1.PCGPin_6'" + Node="/Script/PCG.PCGNode'PCGEditorGraphNode_1.ExecuteBlueprint_1'" + Properties=(Label="B",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}\""), "", "float", "Linear Color/B")) + End Object + Begin Object Name="PCGPin_7" ExportPath="/Script/PCG.PCGPin'/Game/NewPCGGraph.NewPCGGraph:PCGEditorGraph_0.PCGEditorGraphNode_1.ExecuteBlueprint_1.PCGPin_7'" + Node="/Script/PCG.PCGNode'PCGEditorGraphNode_1.ExecuteBlueprint_1'" + Properties=(Label="A",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}\""), "", "float", "Linear Color/A")) + End Object + PositionX=512 + PositionY=256 + SettingsInterface="/Script/PCG.PCGBlueprintSettings'PCGBlueprintSettings_1'" + InputPins(0)="/Script/PCG.PCGPin'PCGPin_0'" + InputPins(1)="/Script/PCG.PCGPin'PCGPin_1'" + InputPins(2)="/Script/PCG.PCGPin'PCGPin_2'" + InputPins(3)="/Script/PCG.PCGPin'PCGPin_4'" + InputPins(4)="/Script/PCG.PCGPin'PCGPin_5'" + InputPins(5)="/Script/PCG.PCGPin'PCGPin_6'" + InputPins(6)="/Script/PCG.PCGPin'PCGPin_7'" + OutputPins(0)="/Script/PCG.PCGPin'PCGPin_3'" + End Object + PCGNode="/Script/PCG.PCGNode'ExecuteBlueprint_1'" + NodePosX=512 + NodePosY=256 + AdvancedPinDisplay=Shown + bUserSetEnabledState=True + NodeGuid=74E6A6E9EF084BF4A24B56E43712EC85 + CustomProperties Pin (PinId=53B558601FD94E0A81D59879F7C84EE4,PinName="In",PinFriendlyName="In",PinType.PinCategory="Concrete Data",PinType.PinSubCategory="Point Data",PinType.PinSubCategoryObject=None,PinType.PinSubCategoryMemberReference=(),PinType.PinValueType=(),PinType.ContainerType=None,PinType.bIsReference=False,PinType.bIsConst=False,PinType.bIsWeakPointer=False,PinType.bIsUObjectWrapper=False,PinType.bSerializeAsSinglePrecisionFloat=False,PersistentGuid=00000000000000000000000000000000,bHidden=False,bNotConnectable=False,bDefaultValueIsReadOnly=False,bDefaultValueIsIgnored=False,bAdvancedView=False,bOrphanedPin=False,) + CustomProperties Pin (PinId=D2D1A26AF9524E569FCA2DD6B15C7667,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=3506C39048EA435D8E16028C6E481FFE,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=7FBFCE159BE5483F9C0AF8E8053BF3B9,PinName="R",PinFriendlyName="R",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=996EFC1D746C46D39BB50E0AF3A156D4,PinName="G",PinFriendlyName="G",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=4693B14DC236425097A5FA8B3DDD46A3,PinName="B",PinFriendlyName="B",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=831312342DB14283A98ECB2D331C1B3D,PinName="A",PinFriendlyName="A",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=6F13FFA544CF43BD94FA007B9D6FC25A,PinName="Out",PinFriendlyName="Out",Direction="EGPD_Output",PinType.PinCategory="Concrete Data",PinType.PinSubCategory="Point Data",PinType.PinSubCategoryObject=None,PinType.PinSubCategoryMemberReference=(),PinType.PinValueType=(),PinType.ContainerType=None,PinType.bIsReference=False,PinType.bIsConst=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, 16], + pins: 8, + pinNames: ["In", "Overrides", "Seed", "R", "G", "B", "A", "Out"], + delegate: false, + development: false, + additionalTest: async (node, pins) => { + expect(await pins[0].evaluate(pin => pin.template.renderIcon().strings.join(""))) + .toEqual(SVGIcon.pcgStackPin.strings.join("")) + expect(await pins[0].evaluate(pin => pin.entity.pinColor().cssText)).toEqual("64, 137, 255") + expect(await pins[1].evaluate(pin => pin.template.renderIcon().strings.join(""))) + .toEqual(SVGIcon.pcgParamPin.strings.join("")) + expect(await pins[2].evaluate(pin => pin.template.renderIcon().strings.join(""))) + .toEqual(SVGIcon.pcgParamPin.strings.join("")) + expect(await pins[3].evaluate(pin => pin.template.renderIcon().strings.join(""))) + .toEqual(SVGIcon.pcgParamPin.strings.join("")) + expect(await pins[4].evaluate(pin => pin.template.renderIcon().strings.join(""))) + .toEqual(SVGIcon.pcgParamPin.strings.join("")) + expect(await pins[5].evaluate(pin => pin.template.renderIcon().strings.join(""))) + .toEqual(SVGIcon.pcgParamPin.strings.join("")) + expect(await pins[6].evaluate(pin => pin.template.renderIcon().strings.join(""))) + .toEqual(SVGIcon.pcgParamPin.strings.join("")) + expect(await pins[7].evaluate(pin => pin.template.renderIcon().strings.join(""))) + .toEqual(SVGIcon.pcgPin.strings.join("")) + expect(await pins[7].evaluate(pin => pin.entity.pinColor().cssText)).toEqual("64, 137, 255") + } +}) diff --git a/tests/nodeSetRelativeRotation.spec.js b/tests/nodeSetRelativeRotation.spec.js new file mode 100755 index 0000000..b401d38 --- /dev/null +++ b/tests/nodeSetRelativeRotation.spec.js @@ -0,0 +1,42 @@ +import Configuration from "../js/Configuration.js" +import SVGIcon from "../js/SVGIcon.js" +import { testNode } from "./fixtures/test.js" + +testNode({ + 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, +}) diff --git a/tests/nodeSin.spec.js b/tests/nodeSin.spec.js new file mode 100755 index 0000000..7196d2e --- /dev/null +++ b/tests/nodeSin.spec.js @@ -0,0 +1,29 @@ +import SVGIcon from "../js/SVGIcon.js" +import { expect, testNode } from "./fixtures/test.js" + +testNode({ + 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("")) + } + } +}) diff --git a/tests/nodeSpawnActorNONE.spec.js b/tests/nodeSpawnActorNONE.spec.js new file mode 100755 index 0000000..9429fb9 --- /dev/null +++ b/tests/nodeSpawnActorNONE.spec.js @@ -0,0 +1,29 @@ +import Configuration from "../js/Configuration.js" +import SVGIcon from "../js/SVGIcon.js" +import { testNode } from "./fixtures/test.js" + +testNode({ + 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, +}) diff --git a/tests/nodeSpawnActorPointLight.spec.js b/tests/nodeSpawnActorPointLight.spec.js new file mode 100755 index 0000000..ac38340 --- /dev/null +++ b/tests/nodeSpawnActorPointLight.spec.js @@ -0,0 +1,38 @@ +import Configuration from "../js/Configuration.js" +import SVGIcon from "../js/SVGIcon.js" +import { testNode } from "./fixtures/test.js" + +testNode({ + 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, +}) diff --git a/tests/nodeSqrt.spec.js b/tests/nodeSqrt.spec.js new file mode 100755 index 0000000..1d19815 --- /dev/null +++ b/tests/nodeSqrt.spec.js @@ -0,0 +1,31 @@ +import Configuration from "../js/Configuration.js" +import { testNode } from "./fixtures/test.js" + +testNode({ + 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, +}) diff --git a/tests/nodeSteamTouch1.spec.js b/tests/nodeSteamTouch1.spec.js new file mode 100755 index 0000000..2129ac0 --- /dev/null +++ b/tests/nodeSteamTouch1.spec.js @@ -0,0 +1,25 @@ +import Configuration from "../js/Configuration.js" +import SVGIcon from "../js/SVGIcon.js" +import { testNode } from "./fixtures/test.js" + +testNode({ + 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, +}) diff --git a/tests/nodeSwitchonEConstantQFFTSizeEnum.spec.js b/tests/nodeSwitchonEConstantQFFTSizeEnum.spec.js new file mode 100755 index 0000000..82b6478 --- /dev/null +++ b/tests/nodeSwitchonEConstantQFFTSizeEnum.spec.js @@ -0,0 +1,44 @@ +import Configuration from "../js/Configuration.js" +import SVGIcon from "../js/SVGIcon.js" +import { testNode } from "./fixtures/test.js" + +testNode({ + 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, +}) diff --git a/tests/nodeSwitchonENiagaraOrientationAxis.spec.js b/tests/nodeSwitchonENiagaraOrientationAxis.spec.js new file mode 100755 index 0000000..a656ec3 --- /dev/null +++ b/tests/nodeSwitchonENiagaraOrientationAxis.spec.js @@ -0,0 +1,31 @@ +import Configuration from "../js/Configuration.js" +import SVGIcon from "../js/SVGIcon.js" +import { testNode } from "./fixtures/test.js" + +testNode({ + 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, +}) diff --git a/tests/nodeSwitchonFTransformChannelEnum.spec.js b/tests/nodeSwitchonFTransformChannelEnum.spec.js new file mode 100755 index 0000000..96b9239 --- /dev/null +++ b/tests/nodeSwitchonFTransformChannelEnum.spec.js @@ -0,0 +1,55 @@ +import Configuration from "../js/Configuration.js" +import SVGIcon from "../js/SVGIcon.js" +import { testNode } from "./fixtures/test.js" + +testNode({ + 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/nodeSwitchonGameplayTag.spec.js b/tests/nodeSwitchonGameplayTag.spec.js new file mode 100755 index 0000000..25ed1c8 --- /dev/null +++ b/tests/nodeSwitchonGameplayTag.spec.js @@ -0,0 +1,74 @@ +import Configuration from "../js/Configuration.js" +import SVGIcon from "../js/SVGIcon.js" +import { testNode } from "./fixtures/test.js" + +testNode({ + 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 + NodePosY=-384 + 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, +}) diff --git a/tests/nodeSwitchonInt.spec.js b/tests/nodeSwitchonInt.spec.js new file mode 100755 index 0000000..b0e80d8 --- /dev/null +++ b/tests/nodeSwitchonInt.spec.js @@ -0,0 +1,65 @@ +import Configuration from "../js/Configuration.js" +import SVGIcon from "../js/SVGIcon.js" +import { testNode } from "./fixtures/test.js" + +testNode({ + 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, +}) diff --git a/tests/nodeSwitchonName.spec.js b/tests/nodeSwitchonName.spec.js new file mode 100755 index 0000000..270b4bb --- /dev/null +++ b/tests/nodeSwitchonName.spec.js @@ -0,0 +1,28 @@ +import Configuration from "../js/Configuration.js" +import SVGIcon from "../js/SVGIcon.js" +import { testNode } from "./fixtures/test.js" + +testNode({ + 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, +}) diff --git a/tests/nodeSwitchonString.spec.js b/tests/nodeSwitchonString.spec.js new file mode 100755 index 0000000..2724067 --- /dev/null +++ b/tests/nodeSwitchonString.spec.js @@ -0,0 +1,32 @@ +import Configuration from "../js/Configuration.js" +import SVGIcon from "../js/SVGIcon.js" +import { testNode } from "./fixtures/test.js" + +testNode({ + 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, +}) diff --git a/tests/nodeTemporalSobol.spec.js b/tests/nodeTemporalSobol.spec.js new file mode 100755 index 0000000..b0a07df --- /dev/null +++ b/tests/nodeTemporalSobol.spec.js @@ -0,0 +1,46 @@ +import Configuration from "../js/Configuration.js" +import PinElement from "../js/element/PinElement.js" +import { expect, testNode } from "./fixtures/test.js" + +testNode({ + 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/nodeTextureSample.spec.js b/tests/nodeTextureSample.spec.js new file mode 100755 index 0000000..62f2dd0 --- /dev/null +++ b/tests/nodeTextureSample.spec.js @@ -0,0 +1,56 @@ +import Configuration from "../js/Configuration.js" +import { testNode } from "./fixtures/test.js" + +testNode({ + 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, +}) diff --git a/tests/nodeThumbMouseButton2.spec.js b/tests/nodeThumbMouseButton2.spec.js new file mode 100755 index 0000000..9d1ce43 --- /dev/null +++ b/tests/nodeThumbMouseButton2.spec.js @@ -0,0 +1,25 @@ +import Configuration from "../js/Configuration.js" +import SVGIcon from "../js/SVGIcon.js" +import { testNode } from "./fixtures/test.js" + +testNode({ + 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, +}) diff --git a/tests/nodeTilde.spec.js b/tests/nodeTilde.spec.js new file mode 100755 index 0000000..61ac57c --- /dev/null +++ b/tests/nodeTilde.spec.js @@ -0,0 +1,25 @@ +import Configuration from "../js/Configuration.js" +import SVGIcon from "../js/SVGIcon.js" +import { testNode } from "./fixtures/test.js" + +testNode({ + 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, +}) diff --git a/tests/nodeTimeline.spec.js b/tests/nodeTimeline.spec.js new file mode 100755 index 0000000..6e93e80 --- /dev/null +++ b/tests/nodeTimeline.spec.js @@ -0,0 +1,44 @@ +import Configuration from "../js/Configuration.js" +import SVGIcon from "../js/SVGIcon.js" +import { testNode } from "./fixtures/test.js" + +testNode({ + 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, +}) diff --git a/tests/nodeTouch1.spec.js b/tests/nodeTouch1.spec.js new file mode 100755 index 0000000..c31fdce --- /dev/null +++ b/tests/nodeTouch1.spec.js @@ -0,0 +1,25 @@ +import Configuration from "../js/Configuration.js" +import SVGIcon from "../js/SVGIcon.js" +import { testNode } from "./fixtures/test.js" + +testNode({ + 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, +}) diff --git a/tests/nodeTranslator.CallID.spec.js b/tests/nodeTranslator.CallID.spec.js new file mode 100755 index 0000000..b1c1ed8 --- /dev/null +++ b/tests/nodeTranslator.CallID.spec.js @@ -0,0 +1,17 @@ +import Configuration from "../js/Configuration.js" +import { testNode } from "./fixtures/test.js" + +testNode({ + name: "Translator.CallID", + value: String.raw` + Begin Object Class=/Script/NiagaraEditor.NiagaraClipboardContent Name="NiagaraClipboardContent_2" ExportPath="/Script/NiagaraEditor.NiagaraClipboardContent'/Engine/Transient.NiagaraClipboardContent_2'" + ExportedNodes="QmVnaW4gT2JqZWN0IENsYXNzPS9TY3JpcHQvTmlhZ2FyYUVkaXRvci5OaWFnYXJhTm9kZUlucHV0IE5hbWU9Ik5pYWdhcmFOb2RlSW5wdXRfNTIiIEV4cG9ydFBhdGg9Ii9TY3JpcHQvTmlhZ2FyYUVkaXRvci5OaWFnYXJhTm9kZUlucHV0Jy9FbmdpbmUvVHJhbnNpZW50Lk5ld05pYWdhcmFTY3JpcHQ6TmlhZ2FyYVNjcmlwdFNvdXJjZV8wLk5pYWdhcmFHcmFwaF8wLk5pYWdhcmFOb2RlSW5wdXRfNTInIgogICBJbnB1dD0oTmFtZT0iVHJhbnNsYXRvci5DYWxsSUQiLFR5cGVEZWZIYW5kbGU9KFJlZ2lzdGVyZWRUeXBlSW5kZXg9ODEpKQ0KICAgVXNhZ2U9VHJhbnNsYXRvckNvbnN0YW50DQogICBFeHBvc3VyZU9wdGlvbnM9KGJFeHBvc2VkPUZhbHNlLGJSZXF1aXJlZD1GYWxzZSxiQ2FuQXV0b0JpbmQ9VHJ1ZSxiSGlkZGVuPVRydWUpDQogICBDaGFuZ2VJZD02QUFFMjM1RkVGRDU0OTJFQjFGMUFCRUNDM0NBOTUwQw0KICAgTm9kZVBvc1g9LTUxMg0KICAgTm9kZUd1aWQ9RkRCRjcxMzIyNDM5NDFBMTk2RUVFQ0NEMzc5NDg1NTQNCiAgIEN1c3RvbVByb3BlcnRpZXMgUGluIChQaW5JZD1BNjlFODNGRTNBQkM0MkYyQkNEOTk1OEU3RkFDMzczQSxQaW5OYW1lPSJJbnB1dCIsRGlyZWN0aW9uPSJFR1BEX091dHB1dCIsUGluVHlwZS5QaW5DYXRlZ29yeT0iVHlwZSIsUGluVHlwZS5QaW5TdWJDYXRlZ29yeT0iIixQaW5UeXBlLlBpblN1YkNhdGVnb3J5T2JqZWN0PSIvU2NyaXB0L0NvcmVVT2JqZWN0LlNjcmlwdFN0cnVjdCcvU2NyaXB0L05pYWdhcmEuTmlhZ2FyYUludDMyJyIsUGluVHlwZS5QaW5TdWJDYXRlZ29yeU1lbWJlclJlZmVyZW5jZT0oKSxQaW5UeXBlLlBpblZhbHVlVHlwZT0oKSxQaW5UeXBlLkNvbnRhaW5lclR5cGU9Tm9uZSxQaW5UeXBlLmJJc1JlZmVyZW5jZT1GYWxzZSxQaW5UeXBlLmJJc0NvbnN0PUZhbHNlLFBpblR5cGUuYklzV2Vha1BvaW50ZXI9RmFsc2UsUGluVHlwZS5iSXNVT2JqZWN0V3JhcHBlcj1GYWxzZSxQaW5UeXBlLmJTZXJpYWxpemVBc1NpbmdsZVByZWNpc2lvbkZsb2F0PUZhbHNlLFBlcnNpc3RlbnRHdWlkPTAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLGJIaWRkZW49RmFsc2UsYk5vdENvbm5lY3RhYmxlPUZhbHNlLGJEZWZhdWx0VmFsdWVJc1JlYWRPbmx5PUZhbHNlLGJEZWZhdWx0VmFsdWVJc0lnbm9yZWQ9RmFsc2UsYkFkdmFuY2VkVmlldz1GYWxzZSxiT3JwaGFuZWRQaW49RmFsc2UsKQ0KRW5kIE9iamVjdA0K" + End Object + `, + color: Configuration.nodeColors.gray, + icon: null, + pins: 1, + pinNames: ["Input"], + delegate: false, + development: false, +}) diff --git a/tests/nodeUnbindEventfromOnPreInitialize.spec.js b/tests/nodeUnbindEventfromOnPreInitialize.spec.js new file mode 100755 index 0000000..a3163bf --- /dev/null +++ b/tests/nodeUnbindEventfromOnPreInitialize.spec.js @@ -0,0 +1,26 @@ +import Configuration from "../js/Configuration.js" +import SVGIcon from "../js/SVGIcon.js" +import { testNode } from "./fixtures/test.js" + +testNode({ + name: "Unbind Event from On Pre Initialize", + value: String.raw` + Begin Object Class=/Script/BlueprintGraph.K2Node_RemoveDelegate Name="K2Node_RemoveDelegate_0" ExportPath="/Script/BlueprintGraph.K2Node_RemoveDelegate'/Engine/Maps/Templates/NewWorld.NewWorld:PersistentLevel.NewWorld.EventGraph.K2Node_RemoveDelegate_0'" + DelegateReference=(MemberParent="/Script/CoreUObject.Class'/Script/ControlRig.ControlRigComponent'",MemberName="OnPreInitializeDelegate") + NodePosX=2688 + NodePosY=-512 + NodeGuid=68504A8520394A2F9B8AACFD2F457D9E + CustomProperties Pin (PinId=1D7D2FBFEB344721B4EE9D149F615BBD,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=2AB22AF068E943BEB99DAAE276EA0C9A,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=42FC9475607C479097689D14713CCC43,PinName="self",PinFriendlyName=NSLOCTEXT("K2Node", "BaseMCDelegateSelfPinName", "Target"),PinType.PinCategory="object",PinType.PinSubCategory="",PinType.PinSubCategoryObject="/Script/CoreUObject.Class'/Script/ControlRig.ControlRigComponent'",PinType.PinSubCategoryMemberReference=(),PinType.PinValueType=(),PinType.ContainerType=None,PinType.bIsReference=False,PinType.bIsConst=False,PinType.bIsWeakPointer=False,PinType.bIsUObjectWrapper=False,PinType.bSerializeAsSinglePrecisionFloat=False,PersistentGuid=00000000000000000000000000000000,bHidden=False,bNotConnectable=False,bDefaultValueIsReadOnly=False,bDefaultValueIsIgnored=False,bAdvancedView=False,bOrphanedPin=False,) + CustomProperties Pin (PinId=7729342B171248D8A6EF908ED8E1D8B7,PinName="Delegate",PinFriendlyName=NSLOCTEXT("K2Node", "PinFriendlyDelegatetName", "Event"),PinType.PinCategory="delegate",PinType.PinSubCategory="",PinType.PinSubCategoryObject=None,PinType.PinSubCategoryMemberReference=(MemberParent="/Script/CoreUObject.Package'/Script/ControlRig'",MemberName="ControlRigComponentDelegate__DelegateSignature"),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,) + End Object + `, + size: [16.5, 8], + color: Configuration.nodeColors.blue, + icon: SVGIcon.node, + pins: 4, + pinNames: ["Target", "Event"], + delegate: false, + development: false, +}) diff --git a/tests/nodeUnbindallEventsfromOnScrollBarVisibilityChanged.spec.js b/tests/nodeUnbindallEventsfromOnScrollBarVisibilityChanged.spec.js new file mode 100755 index 0000000..6477e64 --- /dev/null +++ b/tests/nodeUnbindallEventsfromOnScrollBarVisibilityChanged.spec.js @@ -0,0 +1,25 @@ +import Configuration from "../js/Configuration.js" +import SVGIcon from "../js/SVGIcon.js" +import { testNode } from "./fixtures/test.js" + +testNode({ + name: "Unbind all Events from On Scroll Bar Visibility Changed", + value: String.raw` + Begin Object Class=/Script/BlueprintGraph.K2Node_ClearDelegate Name="K2Node_ClearDelegate_1" ExportPath="/Script/BlueprintGraph.K2Node_ClearDelegate'/Engine/Maps/Templates/NewWorld.NewWorld:PersistentLevel.NewWorld.EventGraph.K2Node_ClearDelegate_1'" + DelegateReference=(MemberParent="/Script/CoreUObject.Class'/Script/UMG.ScrollBox'",MemberName="OnScrollBarVisibilityChanged") + NodePosX=2688 + NodePosY=-640 + NodeGuid=48B5357C4A6344B685D58484C8CA6100 + CustomProperties Pin (PinId=0186059A7F58440D9CDE09CF2E4211BE,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=CB57C7A59EC4491EAC932C4AF3B43254,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=C088A6049D2C4A238885632C5D33C490,PinName="self",PinFriendlyName=NSLOCTEXT("K2Node", "BaseMCDelegateSelfPinName", "Target"),PinType.PinCategory="object",PinType.PinSubCategory="",PinType.PinSubCategoryObject="/Script/CoreUObject.Class'/Script/UMG.ScrollBox'",PinType.PinSubCategoryMemberReference=(),PinType.PinValueType=(),PinType.ContainerType=None,PinType.bIsReference=False,PinType.bIsConst=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: [24, 6], + color: Configuration.nodeColors.blue, + icon: SVGIcon.node, + pins: 3, + pinNames: ["Target"], + delegate: false, + development: false, +}) diff --git a/tests/nodeUseDepthBiasedAlpha.spec.js b/tests/nodeUseDepthBiasedAlpha.spec.js new file mode 100755 index 0000000..c1b47d6 --- /dev/null +++ b/tests/nodeUseDepthBiasedAlpha.spec.js @@ -0,0 +1,43 @@ +import SVGIcon from "../js/SVGIcon.js" +import { expect, testNode } from "./fixtures/test.js" + +testNode({ + name: "UseDepthBiasedAlpha", + value: String.raw` + Begin Object Class=/Script/UnrealEd.MaterialGraphNode Name="MaterialGraphNode_1" ExportPath="/Script/UnrealEd.MaterialGraphNode'/Engine/Transient.M_EV_FalloffSphere_Master_01:MaterialGraph_0.MaterialGraphNode_1'" + Begin Object Class=/Script/Engine.MaterialExpressionStaticSwitchParameter Name="MaterialExpressionStaticSwitchParameter_0" ExportPath="/Script/Engine.MaterialExpressionStaticSwitchParameter'/Engine/Transient.M_EV_FalloffSphere_Master_01:MaterialGraph_0.MaterialGraphNode_1.MaterialExpressionStaticSwitchParameter_0'" + End Object + Begin Object Name="MaterialExpressionStaticSwitchParameter_0" ExportPath="/Script/Engine.MaterialExpressionStaticSwitchParameter'/Engine/Transient.M_EV_FalloffSphere_Master_01:MaterialGraph_0.MaterialGraphNode_1.MaterialExpressionStaticSwitchParameter_0'" + A=(Expression="/Script/Engine.MaterialExpressionDepthFade'MaterialExpressionDepthFade_14'") + B=(Expression="/Script/Engine.MaterialExpressionClamp'MaterialExpressionClamp_4'") + ParameterName="UseDepthBiasedAlpha" + ExpressionGUID=A98669E9462B7E6612CF93B055A7A463 + MaterialExpressionEditorX=-192 + MaterialExpressionEditorY=80 + MaterialExpressionGuid=9D794A6744E0E3E14AE3D591EDA26066 + Material="/Script/UnrealEd.PreviewMaterial'/Engine/Transient.M_EV_FalloffSphere_Master_01'" + End Object + MaterialExpression="/Script/Engine.MaterialExpressionStaticSwitchParameter'MaterialExpressionStaticSwitchParameter_0'" + NodePosX=-192 + NodePosY=80 + bCanRenameNode=True + NodeGuid=89C3972A02314DC8A228AB85296ECA16 + CustomProperties Pin (PinId=23E012B58ADF4CF68CA0999863D5163F,PinName="True",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,LinkedTo=(MaterialGraphNode_22 D118252F518B41C6A3C0547D4373C8D2,),PersistentGuid=00000000000000000000000000000000,bHidden=False,bNotConnectable=False,bDefaultValueIsReadOnly=False,bDefaultValueIsIgnored=False,bAdvancedView=False,bOrphanedPin=False,) + CustomProperties Pin (PinId=284ACC75E7314F9CBD42D10EF5FBD72E,PinName="False",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,LinkedTo=(MaterialGraphNode_3 25011B470F774D60A90AAF331D1D007D,),PersistentGuid=00000000000000000000000000000000,bHidden=False,bNotConnectable=False,bDefaultValueIsReadOnly=False,bDefaultValueIsIgnored=False,bAdvancedView=False,bOrphanedPin=False,) + CustomProperties Pin (PinId=DA812709AA7249B5B20C36C2B9416C05,PinName="Default Value",PinType.PinCategory="optional",PinType.PinSubCategory="bool",PinType.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",PersistentGuid=00000000000000000000000000000000,bHidden=False,bNotConnectable=True,bDefaultValueIsReadOnly=False,bDefaultValueIsIgnored=False,bAdvancedView=False,bOrphanedPin=False,) + CustomProperties Pin (PinId=DF5352C192C74D44A5C0ABEEA4676022,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,LinkedTo=(MaterialGraphNode_Root_0 5174BC871BCF4E68A56F055BCFD12053,),PersistentGuid=00000000000000000000000000000000,bHidden=False,bNotConnectable=False,bDefaultValueIsReadOnly=False,bDefaultValueIsIgnored=False,bAdvancedView=False,bOrphanedPin=False,) + End Object + `, + size: [11, 9], + icon: null, + pins: 4, + 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.genericPin.strings.join("")) + } + } +}) diff --git a/tests/nodeWhileLoop.spec.js b/tests/nodeWhileLoop.spec.js new file mode 100755 index 0000000..aabf947 --- /dev/null +++ b/tests/nodeWhileLoop.spec.js @@ -0,0 +1,26 @@ +import Configuration from "../js/Configuration.js" +import SVGIcon from "../js/SVGIcon.js" +import { testNode } from "./fixtures/test.js" + +testNode({ + 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, +}) diff --git a/tests/nodes.spec.js b/tests/nodes.spec.js deleted file mode 100644 index 1f02567..0000000 --- a/tests/nodes.spec.js +++ /dev/null @@ -1,192 +0,0 @@ -import Utility from "../js/Utility.js" -import Configuration from "./../js/Configuration.js" -import { expect, test } from "./fixtures/test.js" -import EventNodes from "./resources/EventNodes.js" -import FlowControlNodes from "./resources/FlowControlNodes.js" -import InputNodes from "./resources/InputNodes.js" -import IssuesNodes1 from "./resources/IssuesNodes1.js" -import LegacyNodes from "./resources/LegacyNodes.js" -import MaterialNodes from "./resources/MaterialNodes.js" -import NiagaraNodes from "./resources/NiagaraNodes.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(), - ...IssuesNodes1.get(), - ...LegacyNodes.get(), - ...MaterialNodes.get(), - ...NiagaraNodes.get(), - ...OperationsNodes.get(), - ...OtherNodes.get(), - ...PCGNodes.get(), -] - -const batchSize = 16 - -let i = 0 -while (i < nodeTests.length) { - - test.describe("Batch " + Math.floor(i / batchSize), () => { - test.describe.configure({ mode: "parallel" }) - do { - const nodeTest = nodeTests[i] - test.describe(nodeTest.name, () => { - - test.describe.configure({ mode: "serial" }) - test.beforeAll(async ({ blueprintPage }) => { - await blueprintPage.removeNodes() - await blueprintPage.paste(nodeTest.value) - }) - - nodeTest.title ??= nodeTest.name - - 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() - } - } - ) - - test( - `${nodeTest.name}: Has title ${nodeTest.title}`, - async ({ blueprintPage }) => expect( - await blueprintPage.node.evaluate(node => node.nodeDisplayName) - ).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])).toBeLessThanOrEqual(1.5) - expect(Math.abs(nodeTest.size[1] - expectedSize[1])).toBeLessThanOrEqual(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 actualSerialization = await blueprintPage.getSerializedNodes() - const expectedWords = nodeTest.value - .split("\n") - .map(row => row.match(/\s*("?\w+(\s+\w+)*).+/)?.[1]) - .filter(v => v?.length > 0) - expect(actualSerialization).toMatch(Utility.getFirstWordOrder(expectedWords)) - } - ) - - 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.hover() - await variadic.click() - expect(await blueprintPage.node.locator("ueb-pin").all()).toHaveLength(nodeTest.pins + 1) - await variadic.blur() - } - ) - } - - if (nodeTest.additionalTest) { - test( - `${nodeTest.name}: Additional tests`, - async ({ blueprintPage }) => - nodeTest.additionalTest( - blueprintPage.node, - await blueprintPage.node.locator("ueb-pin").all(), - blueprintPage, - ) - ) - } - }) - ++i - } while (i < nodeTests.length && i % batchSize !== 0) - }) -} diff --git a/tests/resources/Entity1.js b/tests/resources/Entity1.js old mode 100644 new mode 100755 diff --git a/tests/resources/Entity2.js b/tests/resources/Entity2.js old mode 100644 new mode 100755 diff --git a/tests/resources/Entity3.js b/tests/resources/Entity3.js old mode 100644 new mode 100755 diff --git a/tests/resources/Entity4.js b/tests/resources/Entity4.js old mode 100644 new mode 100755 diff --git a/tests/resources/EventNodes.js b/tests/resources/EventNodes.js deleted file mode 100644 index 867c252..0000000 --- a/tests/resources/EventNodes.js +++ /dev/null @@ -1,199 +0,0 @@ -import Configuration from "../../js/Configuration.js" -import SVGIcon from "../../js/SVGIcon.js" -import NodeTests from "./NodeTests.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!%sasdAdsadDD", - 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, - }, - { - name: "Bind Event to On Actor Hit", - value: String.raw` - Begin Object Class=/Script/BlueprintGraph.K2Node_AddDelegate Name="K2Node_AddDelegate_0" ExportPath="/Script/BlueprintGraph.K2Node_AddDelegate'/Game/Examples/MazeSolver/Blueprints/MazeSolverTrainer.MazeSolverTrainer:EventGraph.K2Node_AddDelegate_0'" - DelegateReference=(MemberParent="/Script/CoreUObject.Class'/Script/Engine.Actor'",MemberName="OnActorHit") - NodePosX=256 - NodePosY=-48 - NodeGuid=A94C879148610E75EBAC94807E94F5DD - CustomProperties Pin (PinId=252C72EA45F1370E8B00FFB6D5C87B3A,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_Event_0 F135CD17D40347269BBBD101437B6AF0,),PersistentGuid=00000000000000000000000000000000,bHidden=False,bNotConnectable=False,bDefaultValueIsReadOnly=False,bDefaultValueIsIgnored=False,bAdvancedView=False,bOrphanedPin=False,) - CustomProperties Pin (PinId=66AE85F346F350F62B127B97DFC49563,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=D7358C004BE0EF6651DE69A7346E77D4,PinName="self",PinFriendlyName=NSLOCTEXT("K2Node", "BaseMCDelegateSelfPinName", "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,LinkedTo=(K2Node_CallFunction_0 EDE2516A4F187C93CBF2D7AE88066240,),PersistentGuid=00000000000000000000000000000000,bHidden=False,bNotConnectable=False,bDefaultValueIsReadOnly=False,bDefaultValueIsIgnored=False,bAdvancedView=False,bOrphanedPin=False,) - CustomProperties Pin (PinId=180DE95D4FD5AF2404F1CB80F0FBD29E,PinName="Delegate",PinFriendlyName=NSLOCTEXT("K2Node", "PinFriendlyDelegatetName", "Event"),PinType.PinCategory="Delegate",PinType.PinSubCategory="",PinType.PinSubCategoryObject=None,PinType.PinSubCategoryMemberReference=(MemberParent="/Script/CoreUObject.Package'/Script/Engine'",MemberName="ActorHitSignature__DelegateSignature"),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,) - End Object - `, - size: [13.5, 8], - color: Configuration.nodeColors.blue, - icon: SVGIcon.node, - pins: 4, - pinNames: ["Target", "Event"], - delegate: false, - development: false, - }, - { - name: "Bind Event to Modified Event Dynamic", - value: String.raw` - Begin Object Class=/Script/BlueprintGraph.K2Node_AddDelegate Name="K2Node_AddDelegate_1" ExportPath="/Script/BlueprintGraph.K2Node_AddDelegate'/Engine/Maps/Templates/NewWorld.NewWorld:PersistentLevel.NewWorld.EventGraph.K2Node_AddDelegate_1'" - DelegateReference=(MemberParent="/Script/CoreUObject.Class'/Script/Engine.AnimDataModel'",MemberName="ModifiedEventDynamic") - NodePosX=1920 - NodePosY=-384 - NodeGuid=9F798056B9CB474A9EE2FE88063D4D20 - CustomProperties Pin (PinId=4D2AF198B99A445C925AA2A8380C533E,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=46363EE0231F4EA186E029977F586416,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=D3AD4B9A6EA745BD8EC70EE4B33FDB44,PinName="self",PinFriendlyName=NSLOCTEXT("K2Node", "BaseMCDelegateSelfPinName", "Target"),PinType.PinCategory="object",PinType.PinSubCategory="",PinType.PinSubCategoryObject="/Script/CoreUObject.Class'/Script/Engine.AnimDataModel'",PinType.PinSubCategoryMemberReference=(),PinType.PinValueType=(),PinType.ContainerType=None,PinType.bIsReference=False,PinType.bIsConst=False,PinType.bIsWeakPointer=False,PinType.bIsUObjectWrapper=False,PinType.bSerializeAsSinglePrecisionFloat=False,PersistentGuid=00000000000000000000000000000000,bHidden=False,bNotConnectable=False,bDefaultValueIsReadOnly=False,bDefaultValueIsIgnored=False,bAdvancedView=False,bOrphanedPin=False,) - CustomProperties Pin (PinId=48F1FF2C45A147C7B390B9D1A35FC3A2,PinName="Delegate",PinFriendlyName=NSLOCTEXT("K2Node", "PinFriendlyDelegatetName", "Event"),PinType.PinCategory="delegate",PinType.PinSubCategory="",PinType.PinSubCategoryObject=None,PinType.PinSubCategoryMemberReference=(MemberParent="/Script/CoreUObject.Package'/Script/Engine'",MemberName="AnimDataModelModifiedDynamicEvent__DelegateSignature"),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,) - End Object - `, - size: [18, 8], - color: Configuration.nodeColors.blue, - icon: SVGIcon.node, - pins: 4, - pinNames: ["Target", "Event"], - delegate: false, - development: false, - }, - { - name: "Unbind all Events from On Scroll Bar Visibility Changed", - value: String.raw` - Begin Object Class=/Script/BlueprintGraph.K2Node_ClearDelegate Name="K2Node_ClearDelegate_1" ExportPath="/Script/BlueprintGraph.K2Node_ClearDelegate'/Engine/Maps/Templates/NewWorld.NewWorld:PersistentLevel.NewWorld.EventGraph.K2Node_ClearDelegate_1'" - DelegateReference=(MemberParent="/Script/CoreUObject.Class'/Script/UMG.ScrollBox'",MemberName="OnScrollBarVisibilityChanged") - NodePosX=2688 - NodePosY=-640 - NodeGuid=48B5357C4A6344B685D58484C8CA6100 - CustomProperties Pin (PinId=0186059A7F58440D9CDE09CF2E4211BE,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=CB57C7A59EC4491EAC932C4AF3B43254,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=C088A6049D2C4A238885632C5D33C490,PinName="self",PinFriendlyName=NSLOCTEXT("K2Node", "BaseMCDelegateSelfPinName", "Target"),PinType.PinCategory="object",PinType.PinSubCategory="",PinType.PinSubCategoryObject="/Script/CoreUObject.Class'/Script/UMG.ScrollBox'",PinType.PinSubCategoryMemberReference=(),PinType.PinValueType=(),PinType.ContainerType=None,PinType.bIsReference=False,PinType.bIsConst=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: [24, 6], - color: Configuration.nodeColors.blue, - icon: SVGIcon.node, - pins: 3, - pinNames: ["Target"], - delegate: false, - development: false, - }, - { - name: "Unbind Event from On Pre Initialize", - value: String.raw` - Begin Object Class=/Script/BlueprintGraph.K2Node_RemoveDelegate Name="K2Node_RemoveDelegate_0" ExportPath="/Script/BlueprintGraph.K2Node_RemoveDelegate'/Engine/Maps/Templates/NewWorld.NewWorld:PersistentLevel.NewWorld.EventGraph.K2Node_RemoveDelegate_0'" - DelegateReference=(MemberParent="/Script/CoreUObject.Class'/Script/ControlRig.ControlRigComponent'",MemberName="OnPreInitializeDelegate") - NodePosX=2688 - NodePosY=-512 - NodeGuid=68504A8520394A2F9B8AACFD2F457D9E - CustomProperties Pin (PinId=1D7D2FBFEB344721B4EE9D149F615BBD,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=2AB22AF068E943BEB99DAAE276EA0C9A,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=42FC9475607C479097689D14713CCC43,PinName="self",PinFriendlyName=NSLOCTEXT("K2Node", "BaseMCDelegateSelfPinName", "Target"),PinType.PinCategory="object",PinType.PinSubCategory="",PinType.PinSubCategoryObject="/Script/CoreUObject.Class'/Script/ControlRig.ControlRigComponent'",PinType.PinSubCategoryMemberReference=(),PinType.PinValueType=(),PinType.ContainerType=None,PinType.bIsReference=False,PinType.bIsConst=False,PinType.bIsWeakPointer=False,PinType.bIsUObjectWrapper=False,PinType.bSerializeAsSinglePrecisionFloat=False,PersistentGuid=00000000000000000000000000000000,bHidden=False,bNotConnectable=False,bDefaultValueIsReadOnly=False,bDefaultValueIsIgnored=False,bAdvancedView=False,bOrphanedPin=False,) - CustomProperties Pin (PinId=7729342B171248D8A6EF908ED8E1D8B7,PinName="Delegate",PinFriendlyName=NSLOCTEXT("K2Node", "PinFriendlyDelegatetName", "Event"),PinType.PinCategory="delegate",PinType.PinSubCategory="",PinType.PinSubCategoryObject=None,PinType.PinSubCategoryMemberReference=(MemberParent="/Script/CoreUObject.Package'/Script/ControlRig'",MemberName="ControlRigComponentDelegate__DelegateSignature"),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,) - End Object - `, - size: [16.5, 8], - color: Configuration.nodeColors.blue, - icon: SVGIcon.node, - pins: 4, - pinNames: ["Target", "Event"], - delegate: false, - development: false, - }, - { - name: "Bind Event to On Pre Initialize", - value: String.raw` - Begin Object Class=/Script/BlueprintGraph.K2Node_AddDelegate Name="K2Node_AddDelegate_4" ExportPath="/Script/BlueprintGraph.K2Node_AddDelegate'/Engine/Maps/Templates/NewWorld.NewWorld:PersistentLevel.NewWorld.EventGraph.K2Node_AddDelegate_4'" - DelegateReference=(MemberParent="/Script/CoreUObject.Class'/Script/ControlRig.ControlRigComponent'",MemberName="OnPreInitializeDelegate") - NodePosX=1760 - NodePosY=-688 - NodeGuid=12A5D8F5736842F7B70C88C26D36B422 - CustomProperties Pin (PinId=CF6740C1F0A4487E91E6C33CA32F78B7,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=AD533F241A0B44A68FCDFDFE2F698A95,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=6E432C9EE60143F4890F0BDC6BCF4637,PinName="self",PinFriendlyName=NSLOCTEXT("K2Node", "BaseMCDelegateSelfPinName", "Target"),PinType.PinCategory="object",PinType.PinSubCategory="",PinType.PinSubCategoryObject="/Script/CoreUObject.Class'/Script/ControlRig.ControlRigComponent'",PinType.PinSubCategoryMemberReference=(),PinType.PinValueType=(),PinType.ContainerType=None,PinType.bIsReference=False,PinType.bIsConst=False,PinType.bIsWeakPointer=False,PinType.bIsUObjectWrapper=False,PinType.bSerializeAsSinglePrecisionFloat=False,PersistentGuid=00000000000000000000000000000000,bHidden=False,bNotConnectable=False,bDefaultValueIsReadOnly=False,bDefaultValueIsIgnored=False,bAdvancedView=False,bOrphanedPin=False,) - CustomProperties Pin (PinId=8C762AAFD03F4B89A4150D17A3C20598,PinName="Delegate",PinFriendlyName=NSLOCTEXT("K2Node", "PinFriendlyDelegatetName", "Event"),PinType.PinCategory="delegate",PinType.PinSubCategory="",PinType.PinSubCategoryObject=None,PinType.PinSubCategoryMemberReference=(MemberParent="/Script/CoreUObject.Package'/Script/ControlRig'",MemberName="ControlRigComponentDelegate__DelegateSignature"),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,) - End Object - `, - size: [15, 8], - color: Configuration.nodeColors.blue, - icon: SVGIcon.node, - pins: 4, - pinNames: ["Target", "Event"], - delegate: false, - development: false, - }, - ]) - } -} diff --git a/tests/resources/FlowControlNodes.js b/tests/resources/FlowControlNodes.js deleted file mode 100644 index 8880559..0000000 --- a/tests/resources/FlowControlNodes.js +++ /dev/null @@ -1,569 +0,0 @@ -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 - NodePosY=-384 - 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, - }, - { - name: "Sequence", - value: String.raw` - Begin Object Class=/Script/BlueprintGraph.K2Node_ExecutionSequence Name="K2Node_ExecutionSequence_4" ExportPath="/Script/BlueprintGraph.K2Node_ExecutionSequence'/Engine/Maps/Templates/NewWorld.NewWorld:PersistentLevel.NewWorld.EventGraph.K2Node_ExecutionSequence_4'" - NodePosX=496 - NodePosY=192 - NodeGuid=7E38FFEB6B474D4E80CDA4B4720C9E24 - CustomProperties Pin (PinId=2612016B4EAAC152FA9ABB9E23572EE1,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_CallFunction_26 2658362A4F2BA6A3BE7398A8604FAC6D,),PersistentGuid=00000000000000000000000000000000,bHidden=False,bNotConnectable=False,bDefaultValueIsReadOnly=False,bDefaultValueIsIgnored=False,bAdvancedView=False,bOrphanedPin=False,) - CustomProperties Pin (PinId=D665418E47B39BB80A8F02B3951BF0DB,PinName="then_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,LinkedTo=(K2Node_Timeline_1 ABA55A2B4F3689076D856F921255888F,),PersistentGuid=00000000000000000000000000000000,bHidden=False,bNotConnectable=False,bDefaultValueIsReadOnly=False,bDefaultValueIsIgnored=False,bAdvancedView=False,bOrphanedPin=False,) - CustomProperties Pin (PinId=A3D98FA145671788536EA1AD2CF5DA61,PinName="then_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,LinkedTo=(K2Node_Timeline_1 4069CE0043C4948BDE9D17A2FEE8DE0A,),PersistentGuid=00000000000000000000000000000000,bHidden=False,bNotConnectable=False,bDefaultValueIsReadOnly=False,bDefaultValueIsIgnored=False,bAdvancedView=False,bOrphanedPin=False,) - CustomProperties Pin (PinId=47D0C212ACF74C57873C7C16B66E0EC6,PinName="then_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: [8.5, 10], - color: Configuration.nodeColors.gray, - icon: SVGIcon.sequence, - pins: 4, - pinNames: [ - "Then 0", - "Then 1", - "Then 2", - ], - delegate: false, - development: false, - variadic: true, - }, - ]) - } -} diff --git a/tests/resources/InputNodes.js b/tests/resources/InputNodes.js deleted file mode 100644 index 6f8a362..0000000 --- a/tests/resources/InputNodes.js +++ /dev/null @@ -1,895 +0,0 @@ -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 - NodePosY=-304 - 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 - NodePosY=-192 - 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 - NodePosY=240 - 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 - NodePosY=16 - 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 - NodePosX=32 - 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 - NodePosY=64 - 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/IssuesNodes1.js b/tests/resources/IssuesNodes1.js deleted file mode 100644 index 89d812b..0000000 --- a/tests/resources/IssuesNodes1.js +++ /dev/null @@ -1,143 +0,0 @@ -import Configuration from "../../js/Configuration.js" -import Utility from "../../js/Utility.js" -import { expect } from "../fixtures/test.js" -import NodeTests from "./NodeTests.js" - -export default class IssuesNodes1 extends NodeTests { - static { - this.set([ - { - name: "Issue 18", - title: "Mask ( R )", - value: String.raw` - Begin Object Class=/Script/UnrealEd.MaterialGraphNode Name="MaterialGraphNode_37" ExportPath="/Script/UnrealEd.MaterialGraphNode'/Engine/Transient.NewMaterial:MaterialGraph_0.MaterialGraphNode_37'" - Begin Object Class=/Script/Engine.MaterialExpressionComponentMask Name="MaterialExpressionComponentMask_0" ExportPath="/Script/Engine.MaterialExpressionComponentMask'/Engine/Transient.NewMaterial:MaterialGraph_0.MaterialGraphNode_37.MaterialExpressionComponentMask_0'" - End Object - Begin Object Name="MaterialExpressionComponentMask_0" ExportPath="/Script/Engine.MaterialExpressionComponentMask'/Engine/Transient.NewMaterial:MaterialGraph_0.MaterialGraphNode_37.MaterialExpressionComponentMask_0'" - R=True - MaterialExpressionEditorX=-544 - MaterialExpressionEditorY=32 - MaterialExpressionGuid=8EFA535CAE3A4DAF9DAE27B200E06EDC - Material="/Script/UnrealEd.PreviewMaterial'/Engine/Transient.NewMaterial'" - End Object - MaterialExpression="/Script/Engine.MaterialExpressionComponentMask'MaterialExpressionComponentMask_0'" - NodePosX=-544 - NodePosY=32 - AdvancedPinDisplay=Shown - NodeGuid=54A40610EEC646A0954F310727D1B888 - CustomProperties Pin (PinId=DC3859AB4C8C12645EEA1AA4E500A637,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=D5C8F4DF4AFE5EEB605ED382CD5744DE,PinName="R",PinType.PinCategory="optional",PinType.PinSubCategory="bool",PinType.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=True,bDefaultValueIsReadOnly=False,bDefaultValueIsIgnored=False,bAdvancedView=True,bOrphanedPin=False,) - CustomProperties Pin (PinId=7E43455B4D2232C4E99BB098631CAFCE,PinName="G",PinType.PinCategory="optional",PinType.PinSubCategory="bool",PinType.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",PersistentGuid=00000000000000000000000000000000,bHidden=False,bNotConnectable=True,bDefaultValueIsReadOnly=False,bDefaultValueIsIgnored=False,bAdvancedView=True,bOrphanedPin=False,) - CustomProperties Pin (PinId=46CEC6754365CB39F9FC39944B40D5C6,PinName="B",PinType.PinCategory="optional",PinType.PinSubCategory="bool",PinType.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",PersistentGuid=00000000000000000000000000000000,bHidden=False,bNotConnectable=True,bDefaultValueIsReadOnly=False,bDefaultValueIsIgnored=False,bAdvancedView=True,bOrphanedPin=False,) - CustomProperties Pin (PinId=F658E76C400B0AF242DFE292C92702C8,PinName="A",PinType.PinCategory="optional",PinType.PinSubCategory="bool",PinType.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",PersistentGuid=00000000000000000000000000000000,bHidden=False,bNotConnectable=True,bDefaultValueIsReadOnly=False,bDefaultValueIsIgnored=False,bAdvancedView=True,bOrphanedPin=False,) - CustomProperties Pin (PinId=2EC8C8234D570AB2A03DB59A1FF65987,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 - `, - size: [7, 14.5], - color: Configuration.nodeColors.green, - icon: null, - pins: 6, - pinNames: Configuration.rgba, - delegate: false, - development: false, - additionalTest: async (node, pins, blueprintPage) => { - const relevantPins = [] - for (const pin of pins) { - const innerText = await pin.innerText() - if (Configuration.rgba.includes(innerText)) { - relevantPins.push(pin) - } - } - for (const pin of relevantPins) { - const pinName = await pin.innerText() - // Only pin R is checked - await expect(pin.locator('input[type="checkbox"]')).toBeChecked({ checked: pinName === "R" }) - } - await relevantPins[0].locator('input[type="checkbox"]').uncheck() // Uncheck "R" - await relevantPins[2].locator('input[type="checkbox"]').check() // Check "B" - await relevantPins[3].locator('input[type="checkbox"]').check() // Check "A" - await relevantPins[2].locator('input[type="checkbox"]').uncheck() // Uncheck "B" - await relevantPins[2].locator('input[type="checkbox"]').check() // Check "B" - await expect(node.locator(".ueb-node-name")).toHaveText("Mask ( B A )") - const resultSerialization = await blueprintPage.blueprintLocator.evaluate(blueprint => { - blueprint.selectAll() - return blueprint.template.getCopyInputObject().getSerializedText() - }) - const expectedSerialization = String.raw` - Begin Object Class=/Script/UnrealEd.MaterialGraphNode Name="MaterialGraphNode_37" ExportPath="/Script/UnrealEd.MaterialGraphNode'/Engine/Transient.NewMaterial:MaterialGraph_0.MaterialGraphNode_37'" - Begin Object Class=/Script/Engine.MaterialExpressionComponentMask Name="MaterialExpressionComponentMask_0" ExportPath="/Script/Engine.MaterialExpressionComponentMask'/Engine/Transient.NewMaterial:MaterialGraph_0.MaterialGraphNode_37.MaterialExpressionComponentMask_0'" - End Object - Begin Object Name="MaterialExpressionComponentMask_0" ExportPath="/Script/Engine.MaterialExpressionComponentMask'/Engine/Transient.NewMaterial:MaterialGraph_0.MaterialGraphNode_37.MaterialExpressionComponentMask_0'" - B=True - A=True - MaterialExpressionEditorX=-544 - MaterialExpressionEditorY=32 - MaterialExpressionGuid=8EFA535CAE3A4DAF9DAE27B200E06EDC - Material="/Script/UnrealEd.PreviewMaterial'/Engine/Transient.NewMaterial'" - End Object - MaterialExpression="/Script/Engine.MaterialExpressionComponentMask'MaterialExpressionComponentMask_0'" - NodePosX=-544 - NodePosY=32 - AdvancedPinDisplay=Shown - NodeGuid=54A40610EEC646A0954F310727D1B888 - CustomProperties Pin (PinId=DC3859AB4C8C12645EEA1AA4E500A637,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=D5C8F4DF4AFE5EEB605ED382CD5744DE,PinName="R",PinType.PinCategory="optional",PinType.PinSubCategory="bool",PinType.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",PersistentGuid=00000000000000000000000000000000,bHidden=False,bNotConnectable=True,bDefaultValueIsReadOnly=False,bDefaultValueIsIgnored=False,bAdvancedView=True,bOrphanedPin=False,) - CustomProperties Pin (PinId=7E43455B4D2232C4E99BB098631CAFCE,PinName="G",PinType.PinCategory="optional",PinType.PinSubCategory="bool",PinType.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",PersistentGuid=00000000000000000000000000000000,bHidden=False,bNotConnectable=True,bDefaultValueIsReadOnly=False,bDefaultValueIsIgnored=False,bAdvancedView=True,bOrphanedPin=False,) - CustomProperties Pin (PinId=46CEC6754365CB39F9FC39944B40D5C6,PinName="B",PinType.PinCategory="optional",PinType.PinSubCategory="bool",PinType.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=True,bDefaultValueIsReadOnly=False,bDefaultValueIsIgnored=False,bAdvancedView=True,bOrphanedPin=False,) - CustomProperties Pin (PinId=F658E76C400B0AF242DFE292C92702C8,PinName="A",PinType.PinCategory="optional",PinType.PinSubCategory="bool",PinType.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=True,bDefaultValueIsReadOnly=False,bDefaultValueIsIgnored=False,bAdvancedView=True,bOrphanedPin=False,) - CustomProperties Pin (PinId=2EC8C8234D570AB2A03DB59A1FF65987,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 - ` - const words = expectedSerialization - .split("\n") - .map(row => row.match(/\s*("?\w+(\s+\w+)*).+/)?.[1]) - .filter(v => v?.length > 0) - expect(resultSerialization).toMatch(Utility.getFirstWordOrder(words)) - } - }, - { - name: "Issue 21", - title: "Subtract(1,1)", - value: String.raw` - Begin Object Class=/Script/UnrealEd.MaterialGraphNode Name="MaterialGraphNode_202" ExportPath=/Script/UnrealEd.MaterialGraphNode'/Engine/Transient.卡通:MaterialGraph_0.MaterialGraphNode_202' - Begin Object Class=/Script/Engine.MaterialExpressionSubtract Name="MaterialExpressionSubtract_10" ExportPath=/Script/Engine.MaterialExpressionSubtract'/Engine/Transient.卡通:MaterialGraph_0.MaterialGraphNode_202.MaterialExpressionSubtract_10' - End Object - Begin Object Name="MaterialExpressionSubtract_10" ExportPath=/Script/Engine.MaterialExpressionSubtract'/Engine/Transient.卡通:MaterialGraph_0.MaterialGraphNode_202.MaterialExpressionSubtract_10' - A=(Expression="/Script/Engine.MaterialExpressionSaturate'MaterialGraphNode_237.MaterialExpressionSaturate_3'") - B=(Expression="/Script/Engine.MaterialExpressionSaturate'MaterialGraphNode_201.MaterialExpressionSaturate_7'") - MaterialExpressionEditorX=0 - MaterialExpressionEditorY=0 - MaterialExpressionGuid=7202C13642DA1225C118CF867599387C - Material="/Script/UnrealEd.PreviewMaterial'/Engine/Transient.卡通'" - End Object - MaterialExpression=/Script/Engine.MaterialExpressionSubtract'MaterialExpressionSubtract_10' - NodePosX=0 - NodePosY=0 - NodeGuid=7008F5AC49E8F5BFD4C707819A58C021 - CustomProperties Pin (PinId=86D4DE5E48C71A576ED0519B982907B3,PinName="A",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="1",LinkedTo=(),PersistentGuid=00000000000000000000000000000000,bHidden=False,bNotConnectable=False,bDefaultValueIsReadOnly=False,bDefaultValueIsIgnored=False,bAdvancedView=False,bOrphanedPin=False,) - CustomProperties Pin (PinId=5C75E1374E1E7436C72B9FA072875C04,PinName="B",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="1",LinkedTo=(),PersistentGuid=00000000000000000000000000000000,bHidden=False,bNotConnectable=False,bDefaultValueIsReadOnly=False,bDefaultValueIsIgnored=False,bAdvancedView=False,bOrphanedPin=False,) - CustomProperties Pin (PinId=528D346A49976B0854764CA755AF2F93,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,LinkedTo=(),PersistentGuid=00000000000000000000000000000000,bHidden=False,bNotConnectable=False,bDefaultValueIsReadOnly=False,bDefaultValueIsIgnored=False,bAdvancedView=False,bOrphanedPin=False,) - End Object - `, - size: [8, 6], - color: Configuration.nodeColors.green, - icon: null, - pins: 3, - pinNames: ["A", "B"], - delegate: false, - development: false, - additionalTest: async (node, pins, blueprintPage) => { - await expect(pins[0].locator("ueb-input")).toHaveText("1.0") - await expect(pins[1].locator("ueb-input")).toHaveText("1.0") - let inputs = await node.locator("ueb-input").all() - await inputs[0].fill("-8") - await blueprintPage.blur() - expect(await node.evaluate(n => n.nodeDisplayName)).toEqual("Subtract(-8,1)") - await inputs[1].fill("9.2") - await blueprintPage.blur() - expect(await node.evaluate(n => n.nodeDisplayName)).toEqual("Subtract(-8,9.2)") - } - }, - ]) - } -} diff --git a/tests/resources/LegacyNodes.js b/tests/resources/LegacyNodes.js deleted file mode 100644 index 38b436a..0000000 --- a/tests/resources/LegacyNodes.js +++ /dev/null @@ -1,63 +0,0 @@ -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, - }, - ]) - } -} diff --git a/tests/resources/MaterialNodes.js b/tests/resources/MaterialNodes.js deleted file mode 100644 index 1cfa834..0000000 --- a/tests/resources/MaterialNodes.js +++ /dev/null @@ -1,527 +0,0 @@ -import Configuration from "../../js/Configuration.js" -import PinElement from "../../js/element/PinElement.js" -import IntegerEntity from "../../js/entity/IntegerEntity.js" -import NumberEntity from "../../js/entity/NumberEntity.js" -import RBSerializationVector2DEntity from "../../js/entity/RBSerializationVector2DEntity.js" -import VectorEntity from "../../js/entity/VectorEntity.js" -import { expect } from "../fixtures/test.js" -import NodeTests from "./NodeTests.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().valueOf())).toBeCloseTo(value) - await expect(node.locator("ueb-input")).toHaveText([NumberEntity.printNumber(value)]) - } - }, - { - name: "Constant2Vector", - 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().valueOf())).toBeCloseTo(x) - expect(await yPin.evaluate(pin => pin.getDefaultValue().valueOf())).toBeCloseTo(y) - await expect(node.locator("ueb-input")).toHaveText([NumberEntity.printNumber(x), NumberEntity.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 => NumberEntity.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]) - } - }, - { - name: "AppendMany", - value: String.raw` - Begin Object Class=/Script/UnrealEd.MaterialGraphNode Name="MaterialGraphNode_3" ExportPath="/Script/UnrealEd.MaterialGraphNode'/Engine/Transient.Material_0:MaterialGraph_0.MaterialGraphNode_3'" - Begin Object Class=/Script/Engine.MaterialExpressionMaterialFunctionCall Name="MaterialExpressionMaterialFunctionCall_0" ExportPath="/Script/Engine.MaterialExpressionMaterialFunctionCall'/Engine/Transient.Material_0:MaterialGraph_0.MaterialGraphNode_3.MaterialExpressionMaterialFunctionCall_0'" - End Object - Begin Object Name="MaterialExpressionMaterialFunctionCall_0" ExportPath="/Script/Engine.MaterialExpressionMaterialFunctionCall'/Engine/Transient.Material_0:MaterialGraph_0.MaterialGraphNode_3.MaterialExpressionMaterialFunctionCall_0'" - MaterialFunction="/Script/Engine.MaterialFunction'/Engine/Functions/Engine_MaterialFunctions02/Utility/AppendMany.AppendMany'" - FunctionInputs(0)=(ExpressionInputId=885D0D3941709A0021D522BB0D350E84,Input=(OutputIndex=-1,InputName="R")) - FunctionInputs(1)=(ExpressionInputId=66655BEF4DEEE4FBB682D1B2533B646B,Input=(OutputIndex=-1,InputName="G")) - FunctionInputs(2)=(ExpressionInputId=7971790B4C1CF3D12A6BD5849BF51222,Input=(OutputIndex=-1,InputName="B")) - FunctionInputs(3)=(ExpressionInputId=E0358D7C4B4022F69AB64786F99318D6,Input=(OutputIndex=-1,InputName="A")) - FunctionOutputs(0)=(ExpressionOutputId=FA6B13694608C010AF452E92B3981900,Output=(OutputName="RG")) - FunctionOutputs(1)=(ExpressionOutputId=C48A5AA9468A429E4D9984AD43B50CE5,Output=(OutputName="RGB")) - FunctionOutputs(2)=(ExpressionOutputId=B55BAD0C44C4D883F0D33CB57D00AB3C,Output=(OutputName="RGBA")) - MaterialExpressionEditorX=384 - MaterialExpressionEditorY=768 - MaterialExpressionGuid=971FA65449F74582B4418B816DDCBCCF - Material="/Script/Engine.Material'/Engine/Transient.Material_0'" - Outputs(0)=(OutputName="RG") - Outputs(1)=(OutputName="RGB") - Outputs(2)=(OutputName="RGBA") - End Object - MaterialExpression="/Script/Engine.MaterialExpressionMaterialFunctionCall'MaterialExpressionMaterialFunctionCall_0'" - NodePosX=384 - NodePosY=768 - NodeGuid=7CBF0C7DDBF848FE8D7E9A85D56C3772 - CustomProperties Pin (PinId=36EB45FD36FA4918947D2811918524EF,PinName="R (S)",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=3D2F2B761F6646E298BC96093285F44E,PinName="G (S)",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=4194B7FE10FC4AEEB2B9B620437618C3,PinName="B (S)",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=A29788A42F2E43E9B5F8959DF5478E8F,PinName="A (S)",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=7C55A39ECC2E4A78B0A2918AF200EED4,PinName="RG",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,) - CustomProperties Pin (PinId=A21DE80A4A454574AF9B1E0F8CD7E9F1,PinName="RGB",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,) - CustomProperties Pin (PinId=E5937F981A604CF1AF885868325FC83E,PinName="RGBA",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.blue, - icon: null, - pins: 7, - pinNames: [ - "R (S)", - "G (S)", - "B (S)", - "A (S)", - "RG", - "RGB", - "RGBA", - ], - delegate: false, - development: false, - }, - { - name: "Input X_1 (Scalar)", - value: String.raw` - Begin Object Class=/Script/UnrealEd.MaterialGraphNode Name="MaterialGraphNode_14" ExportPath="/Script/UnrealEd.MaterialGraphNode'/Engine/Transient.Material_1:MaterialGraph_0.MaterialGraphNode_14'" - Begin Object Class=/Script/Engine.MaterialExpressionFunctionInput Name="MaterialExpressionFunctionInput_4" ExportPath="/Script/Engine.MaterialExpressionFunctionInput'/Engine/Transient.Material_1:MaterialGraph_0.MaterialGraphNode_14.MaterialExpressionFunctionInput_4'" - End Object - Begin Object Name="MaterialExpressionFunctionInput_4" ExportPath="/Script/Engine.MaterialExpressionFunctionInput'/Engine/Transient.Material_1:MaterialGraph_0.MaterialGraphNode_14.MaterialExpressionFunctionInput_4'" - InputName="X_1" - Id=220B12C48A1B4FD2A2F1964A3670D092 - InputType=FunctionInput_Scalar - bUsePreviewValueAsDefault=True - SortPriority=2 - MaterialExpressionEditorX=-64 - MaterialExpressionEditorY=208 - MaterialExpressionGuid=5B9F03CCBBD54567A9B6EAD08AAA08F0 - Material="/Script/Engine.Material'/Engine/Transient.Material_1'" - Function="/Script/Engine.MaterialFunction'/Engine/Transient.AppendMany'" - End Object - MaterialExpression="/Script/Engine.MaterialExpressionFunctionInput'MaterialExpressionFunctionInput_4'" - NodePosX=-64 - NodePosY=208 - NodeGuid=9379668BD62A45458DC56BE5B3F80A73 - CustomProperties Pin (PinId=1021DF0F4ABC4FE3BF1CF97F6FD78496,PinName="Preview",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=C875FB5EEFDC4CE6BD98B872403F7C29,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.red, - icon: null, - pins: 2, - pinNames: ["Preview"], - delegate: false, - development: false, - }, - { - name: "Input In (Vector3)", - value: String.raw` - Begin Object Class=/Script/UnrealEd.MaterialGraphNode Name="MaterialGraphNode_17" ExportPath="/Script/UnrealEd.MaterialGraphNode'/Engine/Transient.Material_1:MaterialGraph_0.MaterialGraphNode_17'" - Begin Object Class=/Script/Engine.MaterialExpressionFunctionInput Name="MaterialExpressionFunctionInput_7" ExportPath="/Script/Engine.MaterialExpressionFunctionInput'/Engine/Transient.Material_1:MaterialGraph_0.MaterialGraphNode_17.MaterialExpressionFunctionInput_7'" - End Object - Begin Object Name="MaterialExpressionFunctionInput_7" ExportPath="/Script/Engine.MaterialExpressionFunctionInput'/Engine/Transient.Material_1:MaterialGraph_0.MaterialGraphNode_17.MaterialExpressionFunctionInput_7'" - Id=2590318028564D9BAF90BEA43FBD3F1F - MaterialExpressionEditorX=512 - MaterialExpressionEditorY=224 - MaterialExpressionGuid=B0F1358EACAF46E5A277253263F0ECFC - Material="/Script/Engine.Material'/Engine/Transient.Material_1'" - End Object - MaterialExpression="/Script/Engine.MaterialExpressionFunctionInput'MaterialExpressionFunctionInput_7'" - NodePosX=512 - NodePosY=224 - NodeGuid=7F222623B44A4774BCA3C2F32DD16E98 - CustomProperties Pin (PinId=DD534EE002554330B23E7F4B984A52F5,PinName="Preview",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=22FB979A3F314CBA9B2ABE11214E9827,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.red, - icon: null, - pins: 2, - pinNames: ["Preview"], - delegate: false, - development: false, - }, - ]) - } -} diff --git a/tests/resources/NiagaraNodes.js b/tests/resources/NiagaraNodes.js deleted file mode 100644 index 6bbf722..0000000 --- a/tests/resources/NiagaraNodes.js +++ /dev/null @@ -1,482 +0,0 @@ -import { css } from "lit" -import Configuration from "../../js/Configuration.js" -import Utility from "../../js/Utility.js" -import PinElement from "../../js/element/PinElement.js" -import Vector4DEntity from "../../js/entity/Vector4DEntity.js" -import { expect } from "../fixtures/test.js" -import NodeTests from "./NodeTests.js" - -export default class NiagaraNodes extends NodeTests { - static { - this.set([ - { - name: "LogicEq", - title: "==", - value: String.raw` - Begin Object Class=/Script/NiagaraEditor.NiagaraNodeOp Name="NiagaraNodeOp_84" ExportPath="/Script/NiagaraEditor.NiagaraNodeOp'/Engine/Transient.NewNiagaraScript:NiagaraScriptSource_0.NiagaraGraph_0.NiagaraNodeOp_84'" - OpName="Boolean::LogicEq" - ChangeId=E8F9B2BA0D564EB9B931C93DD152FB69 - NodePosX=208 - NodePosY=144 - NodeGuid=E810B307E310413697CB9914DBC2A4B4 - CustomProperties Pin (PinId=BFC2067F95B7478B938D12EC5808D554,PinName="A",PinToolTip="A",PinType.PinCategory="Type",PinType.PinSubCategory="",PinType.PinSubCategoryObject="/Script/CoreUObject.ScriptStruct'/Script/Niagara.NiagaraBool'",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=653D4C4C85D349DEA2B79066FB615AD6,PinName="B",PinToolTip="B",PinType.PinCategory="Type",PinType.PinSubCategory="",PinType.PinSubCategoryObject="/Script/CoreUObject.ScriptStruct'/Script/Niagara.NiagaraBool'",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=4E45D3F396CE40C69D3F3949D18F1832,PinName="Result",PinToolTip="Result",Direction="EGPD_Output",PinType.PinCategory="Type",PinType.PinSubCategory="",PinType.PinSubCategoryObject="/Script/CoreUObject.ScriptStruct'/Script/Niagara.NiagaraBool'",PinType.PinSubCategoryMemberReference=(),PinType.PinValueType=(),PinType.ContainerType=None,PinType.bIsReference=False,PinType.bIsConst=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, 5], - pins: 3, - delegate: false, - development: false, - additionalTest: async (node, pins) => { - expect(await node.evaluate(node => node.classList.contains("ueb-node-style-glass"))).toBeTruthy() - for (const pin of pins) { - expect(await pin.evaluate(element => element.entity.pinColor().cssText)) - .toBe(css`146, 0, 0`.cssText) - } - }, - }, - { - name: "LogicNEq", - title: "!=", - value: String.raw` - Begin Object Class=/Script/NiagaraEditor.NiagaraNodeOp Name="NiagaraNodeOp_85" ExportPath="/Script/NiagaraEditor.NiagaraNodeOp'/Engine/Transient.NewNiagaraScript:NiagaraScriptSource_0.NiagaraGraph_0.NiagaraNodeOp_85'" - OpName="Boolean::LogicNEq" - ChangeId=3526C49A19484FCAA258F5F1399E5199 - NodePosX=-80 - NodePosY=128 - NodeGuid=591862B832B847AE8F2194837B5C9A68 - CustomProperties Pin (PinId=0E889E7597AD478C9D4E65D8593F9192,PinName="A",PinToolTip="A",PinType.PinCategory="Type",PinType.PinSubCategory="",PinType.PinSubCategoryObject="/Script/CoreUObject.ScriptStruct'/Script/Niagara.NiagaraBool'",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=A6BF9D71327E4000BD8D29B52CE0C168,PinName="B",PinToolTip="B",PinType.PinCategory="Type",PinType.PinSubCategory="",PinType.PinSubCategoryObject="/Script/CoreUObject.ScriptStruct'/Script/Niagara.NiagaraBool'",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=36E21F9BAA3D45BEB74DD7D06C763524,PinName="Result",PinToolTip="Result",Direction="EGPD_Output",PinType.PinCategory="Type",PinType.PinSubCategory="",PinType.PinSubCategoryObject="/Script/CoreUObject.ScriptStruct'/Script/Niagara.NiagaraBool'",PinType.PinSubCategoryMemberReference=(),PinType.PinValueType=(),PinType.ContainerType=None,PinType.bIsReference=False,PinType.bIsConst=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], - pins: 3, - delegate: false, - development: false, - additionalTest: async (node, pins) => { - expect(await node.evaluate(node => node.classList.contains("ueb-node-style-glass"))).toBeTruthy() - for (const pin of pins) { - expect(await pin.evaluate(element => element.entity.pinColor().cssText)) - .toBe(css`146, 0, 0`.cssText) - } - }, - }, - { - name: "Niagara Logic AND", - title: "Logic AND", - value: String.raw` - Begin Object Class=/Script/NiagaraEditor.NiagaraNodeOp Name="NiagaraNodeOp_81" ExportPath="/Script/NiagaraEditor.NiagaraNodeOp'/Engine/Transient.NewNiagaraScript:NiagaraScriptSource_0.NiagaraGraph_0.NiagaraNodeOp_81'" - OpName="Boolean::LogicAnd" - ChangeId=43E42097BB3043EA8402318509E52B6C - NodePosX=-256 - NodePosY=128 - NodeGuid=A78CF37F79A2480DB705D21E5EF84B07 - CustomProperties Pin (PinId=62F6392991E14BB1A7F0E26AB98DB6DA,PinName="A",PinToolTip="A",PinType.PinCategory="Type",PinType.PinSubCategory="",PinType.PinSubCategoryObject="/Script/CoreUObject.ScriptStruct'/Script/Niagara.NiagaraBool'",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=F4F10FA3AC084A1AB2A6ABC3323B83EA,PinName="B",PinToolTip="B",PinType.PinCategory="Type",PinType.PinSubCategory="",PinType.PinSubCategoryObject="/Script/CoreUObject.ScriptStruct'/Script/Niagara.NiagaraBool'",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=022AFAE2280C4C8AB3D57EB3F1FECCE9,PinName="Result",PinToolTip="Result",Direction="EGPD_Output",PinType.PinCategory="Type",PinType.PinSubCategory="",PinType.PinSubCategoryObject="/Script/CoreUObject.ScriptStruct'/Script/Niagara.NiagaraBool'",PinType.PinSubCategoryMemberReference=(),PinType.PinValueType=(),PinType.ContainerType=None,PinType.bIsReference=False,PinType.bIsConst=False,PinType.bIsWeakPointer=False,PinType.bIsUObjectWrapper=False,PinType.bSerializeAsSinglePrecisionFloat=False,PersistentGuid=00000000000000000000000000000000,bHidden=False,bNotConnectable=False,bDefaultValueIsReadOnly=False,bDefaultValueIsIgnored=False,bAdvancedView=False,bOrphanedPin=False,) - CustomProperties Pin (PinId=A2A828255F8D460C8044F32D6A5E9FCA,PinName="Add",PinType.PinCategory="Misc",PinType.PinSubCategory="DynamicAddPin",PinType.PinSubCategoryObject=None,PinType.PinSubCategoryMemberReference=(),PinType.PinValueType=(),PinType.ContainerType=None,PinType.bIsReference=False,PinType.bIsConst=False,PinType.bIsWeakPointer=False,PinType.bIsUObjectWrapper=False,PinType.bSerializeAsSinglePrecisionFloat=False,PersistentGuid=00000000000000000000000000000000,bHidden=False,bNotConnectable=False,bDefaultValueIsReadOnly=False,bDefaultValueIsIgnored=False,bAdvancedView=False,bOrphanedPin=False,) - End Object - `, - size: [10, 8], - pins: 4, - pinNames: ["A", "B", "Add", "Result"], - delegate: false, - development: false, - additionalTest: async (node, pins) => { - expect(await node.evaluate(node => node.classList.contains("ueb-node-style-glass"))).toBeFalsy() - expect(await node.evaluate(node => node.classList.contains("ueb-node-style-default"))).toBeTruthy() - expect(await pins[0].evaluate(element => element.entity.pinColor().cssText)) - .toBe(css`146, 0, 0`.cssText) - expect(await pins[1].evaluate(element => element.entity.pinColor().cssText)) - .toBe(css`146, 0, 0`.cssText) - expect(await pins[3].evaluate(element => element.entity.pinColor().cssText)) - .toBe(css`146, 0, 0`.cssText) - }, - }, - { - name: "Niagara Logic OR", - title: "Logic OR", - value: String.raw` - Begin Object Class=/Script/NiagaraEditor.NiagaraNodeOp Name="NiagaraNodeOp_82" ExportPath="/Script/NiagaraEditor.NiagaraNodeOp'/Engine/Transient.NewNiagaraScript:NiagaraScriptSource_0.NiagaraGraph_0.NiagaraNodeOp_82'" - OpName="Boolean::LogicOr" - ChangeId=EB6169ADF12F4DB4AFB4F6E735519E61 - NodePosX=384 - NodePosY=128 - NodeGuid=5E46FFF127D24923A96DB2280941D891 - CustomProperties Pin (PinId=1A8E536F5DB04FCEB0DD5C28120B55F4,PinName="A",PinToolTip="A",PinType.PinCategory="Type",PinType.PinSubCategory="",PinType.PinSubCategoryObject="/Script/CoreUObject.ScriptStruct'/Script/Niagara.NiagaraBool'",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=1ABD86FA4F894D4C850E10C0BDFFE9BB,PinName="B",PinToolTip="B",PinType.PinCategory="Type",PinType.PinSubCategory="",PinType.PinSubCategoryObject="/Script/CoreUObject.ScriptStruct'/Script/Niagara.NiagaraBool'",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=A46C02BB383F42D796497153C25F81CE,PinName="Result",PinToolTip="Result",Direction="EGPD_Output",PinType.PinCategory="Type",PinType.PinSubCategory="",PinType.PinSubCategoryObject="/Script/CoreUObject.ScriptStruct'/Script/Niagara.NiagaraBool'",PinType.PinSubCategoryMemberReference=(),PinType.PinValueType=(),PinType.ContainerType=None,PinType.bIsReference=False,PinType.bIsConst=False,PinType.bIsWeakPointer=False,PinType.bIsUObjectWrapper=False,PinType.bSerializeAsSinglePrecisionFloat=False,PersistentGuid=00000000000000000000000000000000,bHidden=False,bNotConnectable=False,bDefaultValueIsReadOnly=False,bDefaultValueIsIgnored=False,bAdvancedView=False,bOrphanedPin=False,) - CustomProperties Pin (PinId=22A699B9331C4E21911CF5D79481C74E,PinName="Add",PinType.PinCategory="Misc",PinType.PinSubCategory="DynamicAddPin",PinType.PinSubCategoryObject=None,PinType.PinSubCategoryMemberReference=(),PinType.PinValueType=(),PinType.ContainerType=None,PinType.bIsReference=False,PinType.bIsConst=False,PinType.bIsWeakPointer=False,PinType.bIsUObjectWrapper=False,PinType.bSerializeAsSinglePrecisionFloat=False,PersistentGuid=00000000000000000000000000000000,bHidden=False,bNotConnectable=False,bDefaultValueIsReadOnly=False,bDefaultValueIsIgnored=False,bAdvancedView=False,bOrphanedPin=False,) - End Object - `, - size: [10.5, 8], - pins: 4, - pinNames: ["A", "B", "Add", "Result"], - delegate: false, - development: false, - additionalTest: async (node, pins) => { - expect(await node.evaluate(node => node.classList.contains("ueb-node-style-glass"))).toBeFalsy() - expect(await node.evaluate(node => node.classList.contains("ueb-node-style-default"))).toBeTruthy() - expect(await pins[0].evaluate(element => element.entity.pinColor().cssText)) - .toBe(css`146, 0, 0`.cssText) - expect(await pins[1].evaluate(element => element.entity.pinColor().cssText)) - .toBe(css`146, 0, 0`.cssText) - expect(await pins[3].evaluate(element => element.entity.pinColor().cssText)) - .toBe(css`146, 0, 0`.cssText) - }, - }, - { - name: "Niagara Logic NOT", - title: "Logic NOT", - value: String.raw` - Begin Object Class=/Script/NiagaraEditor.NiagaraNodeOp Name="NiagaraNodeOp_83" ExportPath="/Script/NiagaraEditor.NiagaraNodeOp'/Engine/Transient.NewNiagaraScript:NiagaraScriptSource_0.NiagaraGraph_0.NiagaraNodeOp_83'" - OpName="Boolean::LogicNot" - ChangeId=850211C079724647B479BFA82D533C76 - NodePosX=128 - NodePosY=128 - NodeGuid=1F3DA06DD27E488A9B6766E8CD203F81 - CustomProperties Pin (PinId=1396C29ABE9F4330B91B88E4788956D0,PinName="A",PinToolTip="A",PinType.PinCategory="Type",PinType.PinSubCategory="",PinType.PinSubCategoryObject="/Script/CoreUObject.ScriptStruct'/Script/Niagara.NiagaraBool'",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=F4FABE23D34A4B0C915D6B7117C11B57,PinName="Result",PinToolTip="Result",Direction="EGPD_Output",PinType.PinCategory="Type",PinType.PinSubCategory="",PinType.PinSubCategoryObject="/Script/CoreUObject.ScriptStruct'/Script/Niagara.NiagaraBool'",PinType.PinSubCategoryMemberReference=(),PinType.PinValueType=(),PinType.ContainerType=None,PinType.bIsReference=False,PinType.bIsConst=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, 4], - pins: 2, - pinNames: ["A", "Result"], - delegate: false, - development: false, - additionalTest: async (node, pins) => { - expect(await node.evaluate(node => node.classList.contains("ueb-node-style-glass"))).toBeFalsy() - expect(await node.evaluate(node => node.classList.contains("ueb-node-style-default"))).toBeTruthy() - for (const pin of pins) { - expect(await pin.evaluate(element => element.entity.pinColor().cssText)) - .toBe(css`146, 0, 0`.cssText) - } - }, - }, - { - name: "Niagara Mul", - title: String.fromCharCode(0x2a2f), - value: String.raw` - Begin Object Class=/Script/NiagaraEditor.NiagaraNodeOp Name="NiagaraNodeOp_2" ExportPath="/Script/NiagaraEditor.NiagaraNodeOp'/Engine/Transient.NewNiagaraScript:NiagaraScriptSource_0.NiagaraGraph_0.NiagaraNodeOp_2'" - OpName="Numeric::Mul" - ChangeId=D255C58006D942A3B9EA40A7D0A9A26C - NodePosX=-432 - NodePosY=432 - NodeGuid=6C57BD28235446B286204A350C20824E - CustomProperties Pin (PinId=2CA19EFC7B8943C59D997AE9E20EDD9D,PinName="A",PinToolTip="A",PinType.PinCategory="Type",PinType.PinSubCategory="",PinType.PinSubCategoryObject="/Script/CoreUObject.ScriptStruct'/Script/Niagara.NiagaraNumeric'",PinType.PinSubCategoryMemberReference=(),PinType.PinValueType=(),PinType.ContainerType=None,PinType.bIsReference=False,PinType.bIsConst=False,PinType.bIsWeakPointer=False,PinType.bIsUObjectWrapper=False,PinType.bSerializeAsSinglePrecisionFloat=False,DefaultValue="1.0",AutogeneratedDefaultValue="1.0",PersistentGuid=00000000000000000000000000000000,bHidden=False,bNotConnectable=False,bDefaultValueIsReadOnly=False,bDefaultValueIsIgnored=False,bAdvancedView=False,bOrphanedPin=False,) - CustomProperties Pin (PinId=A6992BD09EBC4303B4B30A86BCF295A9,PinName="B",PinToolTip="B",PinType.PinCategory="Type",PinType.PinSubCategory="",PinType.PinSubCategoryObject="/Script/CoreUObject.ScriptStruct'/Script/Niagara.NiagaraNumeric'",PinType.PinSubCategoryMemberReference=(),PinType.PinValueType=(),PinType.ContainerType=None,PinType.bIsReference=False,PinType.bIsConst=False,PinType.bIsWeakPointer=False,PinType.bIsUObjectWrapper=False,PinType.bSerializeAsSinglePrecisionFloat=False,DefaultValue="1.0",AutogeneratedDefaultValue="1.0",PersistentGuid=00000000000000000000000000000000,bHidden=False,bNotConnectable=False,bDefaultValueIsReadOnly=False,bDefaultValueIsIgnored=False,bAdvancedView=False,bOrphanedPin=False,) - CustomProperties Pin (PinId=8539D0F6BC1F4A85A708B488C37C6FD9,PinName="Result",PinToolTip="Result",Direction="EGPD_Output",PinType.PinCategory="Type",PinType.PinSubCategory="",PinType.PinSubCategoryObject="/Script/CoreUObject.ScriptStruct'/Script/Niagara.NiagaraNumeric'",PinType.PinSubCategoryMemberReference=(),PinType.PinValueType=(),PinType.ContainerType=None,PinType.bIsReference=False,PinType.bIsConst=False,PinType.bIsWeakPointer=False,PinType.bIsUObjectWrapper=False,PinType.bSerializeAsSinglePrecisionFloat=False,PersistentGuid=00000000000000000000000000000000,bHidden=False,bNotConnectable=False,bDefaultValueIsReadOnly=False,bDefaultValueIsIgnored=False,bAdvancedView=False,bOrphanedPin=False,) - CustomProperties Pin (PinId=C484E4BEEE6E41779EFFB696880FCAF0,PinName="Add",PinType.PinCategory="Misc",PinType.PinSubCategory="DynamicAddPin",PinType.PinSubCategoryObject=None,PinType.PinSubCategoryMemberReference=(),PinType.PinValueType=(),PinType.ContainerType=None,PinType.bIsReference=False,PinType.bIsConst=False,PinType.bIsWeakPointer=False,PinType.bIsUObjectWrapper=False,PinType.bSerializeAsSinglePrecisionFloat=False,PersistentGuid=00000000000000000000000000000000,bHidden=False,bNotConnectable=False,bDefaultValueIsReadOnly=False,bDefaultValueIsIgnored=False,bAdvancedView=False,bOrphanedPin=False,) - End Object - `, - size: [9.5, 6], - pins: 4, - delegate: false, - development: false, - additionalTest: async node => { - expect(await node.evaluate(node => node.classList.contains("ueb-node-style-glass"))).toBeTruthy() - }, - }, - { - name: "Matrix Transform Position", - value: String.raw` - Begin Object Class=/Script/NiagaraEditor.NiagaraNodeOp Name="NiagaraNodeOp_93" ExportPath="/Script/NiagaraEditor.NiagaraNodeOp'/Engine/Transient.NewNiagaraScript:NiagaraScriptSource_0.NiagaraGraph_0.NiagaraNodeOp_93'" - OpName="Matrix::TransformPosition" - ChangeId=B50CCE545D064D12991CD1407DF14437 - NodePosX=800 - NodePosY=352 - NodeGuid=C8731F92EF32437D949081E06D044FC5 - CustomProperties Pin (PinId=B92730CFC09540B7A8B7C89EBC2A9526,PinName="M",PinToolTip="M",PinType.PinCategory="Type",PinType.PinSubCategory="",PinType.PinSubCategoryObject="/Script/CoreUObject.ScriptStruct'/Script/Niagara.NiagaraMatrix'",PinType.PinSubCategoryMemberReference=(),PinType.PinValueType=(),PinType.ContainerType=None,PinType.bIsReference=False,PinType.bIsConst=False,PinType.bIsWeakPointer=False,PinType.bIsUObjectWrapper=False,PinType.bSerializeAsSinglePrecisionFloat=False,DefaultValue="1.0,0.0,0.0,0.0,\\t\\t0.0,1.0,0.0,0.0,\\t\\t0.0,0.0,1.0,0.0,\\t\\t0.0,0.0,0.0,1.0",AutogeneratedDefaultValue="1.0,0.0,0.0,0.0,\\t\\t0.0,1.0,0.0,0.0,\\t\\t0.0,0.0,1.0,0.0,\\t\\t0.0,0.0,0.0,1.0",PersistentGuid=00000000000000000000000000000000,bHidden=False,bNotConnectable=False,bDefaultValueIsReadOnly=False,bDefaultValueIsIgnored=False,bAdvancedView=False,bOrphanedPin=False,) - CustomProperties Pin (PinId=D970C7D4FA4949918AD657EF0D55462B,PinName="V",PinToolTip="V",PinType.PinCategory="Type",PinType.PinSubCategory="",PinType.PinSubCategoryObject="/Script/CoreUObject.ScriptStruct'/Script/Niagara.NiagaraPosition'",PinType.PinSubCategoryMemberReference=(),PinType.PinValueType=(),PinType.ContainerType=None,PinType.bIsReference=False,PinType.bIsConst=False,PinType.bIsWeakPointer=False,PinType.bIsUObjectWrapper=False,PinType.bSerializeAsSinglePrecisionFloat=False,DefaultValue="1.0,1.0,1.0",AutogeneratedDefaultValue="1.0,1.0,1.0",PersistentGuid=00000000000000000000000000000000,bHidden=False,bNotConnectable=False,bDefaultValueIsReadOnly=False,bDefaultValueIsIgnored=False,bAdvancedView=False,bOrphanedPin=False,) - CustomProperties Pin (PinId=356EC3AE7343453EB6554019FC162416,PinName="Result",PinToolTip="Result",Direction="EGPD_Output",PinType.PinCategory="Type",PinType.PinSubCategory="",PinType.PinSubCategoryObject="/Script/CoreUObject.ScriptStruct'/Script/Niagara.NiagaraPosition'",PinType.PinSubCategoryMemberReference=(),PinType.PinValueType=(),PinType.ContainerType=None,PinType.bIsReference=False,PinType.bIsConst=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, 6], - pins: 3, - pinNames: ["M", "V", "Result"], - delegate: false, - development: false, - additionalTest: async node => { - expect(await node.evaluate(node => node.classList.contains("ueb-node-style-glass"))).toBeFalsy() - expect(await node.evaluate(node => node.classList.contains("ueb-node-style-default"))).toBeTruthy() - }, - }, - { - name: "Distance", - value: String.raw` - Begin Object Class=/Script/NiagaraEditor.NiagaraNodeOp Name="NiagaraNodeOp_59" ExportPath="/Script/NiagaraEditor.NiagaraNodeOp'/Engine/Transient.NewNiagaraScript:NiagaraScriptSource_0.NiagaraGraph_0.NiagaraNodeOp_59'" - OpName="Numeric::DistancePos" - ChangeId=4EE3F52A93A84F89AA06ED1D00DBB194 - NodePosX=-128 - NodePosY=384 - NodeGuid=C1DF3F04B05344D4A8BA11F5D9B7022C - CustomProperties Pin (PinId=EBEA639B227A45AEAF9D988854C0B00F,PinName="A",PinToolTip="A",PinType.PinCategory="Type",PinType.PinSubCategory="",PinType.PinSubCategoryObject="/Script/CoreUObject.ScriptStruct'/Script/Niagara.NiagaraPosition'",PinType.PinSubCategoryMemberReference=(),PinType.PinValueType=(),PinType.ContainerType=None,PinType.bIsReference=False,PinType.bIsConst=False,PinType.bIsWeakPointer=False,PinType.bIsUObjectWrapper=False,PinType.bSerializeAsSinglePrecisionFloat=False,DefaultValue="1.0",AutogeneratedDefaultValue="1.0",PersistentGuid=00000000000000000000000000000000,bHidden=False,bNotConnectable=False,bDefaultValueIsReadOnly=False,bDefaultValueIsIgnored=False,bAdvancedView=False,bOrphanedPin=False,) - CustomProperties Pin (PinId=D33EAF7D8B0042438A9985EF503D663D,PinName="B",PinToolTip="B",PinType.PinCategory="Type",PinType.PinSubCategory="",PinType.PinSubCategoryObject="/Script/CoreUObject.ScriptStruct'/Script/Niagara.NiagaraPosition'",PinType.PinSubCategoryMemberReference=(),PinType.PinValueType=(),PinType.ContainerType=None,PinType.bIsReference=False,PinType.bIsConst=False,PinType.bIsWeakPointer=False,PinType.bIsUObjectWrapper=False,PinType.bSerializeAsSinglePrecisionFloat=False,DefaultValue="1.0",AutogeneratedDefaultValue="1.0",PersistentGuid=00000000000000000000000000000000,bHidden=False,bNotConnectable=False,bDefaultValueIsReadOnly=False,bDefaultValueIsIgnored=False,bAdvancedView=False,bOrphanedPin=False,) - CustomProperties Pin (PinId=4BAEA4BD06C445908F7F5750358768D5,PinName="Result",PinToolTip="Result",Direction="EGPD_Output",PinType.PinCategory="Type",PinType.PinSubCategory="",PinType.PinSubCategoryObject="/Script/CoreUObject.ScriptStruct'/Script/Niagara.NiagaraFloat'",PinType.PinSubCategoryMemberReference=(),PinType.PinValueType=(),PinType.ContainerType=None,PinType.bIsReference=False,PinType.bIsConst=False,PinType.bIsWeakPointer=False,PinType.bIsUObjectWrapper=False,PinType.bSerializeAsSinglePrecisionFloat=False,PersistentGuid=00000000000000000000000000000000,bHidden=False,bNotConnectable=False,bDefaultValueIsReadOnly=False,bDefaultValueIsIgnored=False,bAdvancedView=False,bOrphanedPin=False,) - End Object - `, - size: [17.5, 7], - pins: 3, - pinNames: ["A", "B", "Result"], - delegate: false, - development: false, - additionalTest: async node => { - expect(await node.evaluate(node => node.classList.contains("ueb-node-style-glass"))).toBeFalsy() - expect(await node.evaluate(node => node.classList.contains("ueb-node-style-default"))).toBeTruthy() - }, - }, - { - name: "Multiply (Matrix * Vector4)", - value: String.raw` - Begin Object Class=/Script/NiagaraEditor.NiagaraNodeOp Name="NiagaraNodeOp_92" ExportPath="/Script/NiagaraEditor.NiagaraNodeOp'/Engine/Transient.NewNiagaraScript:NiagaraScriptSource_0.NiagaraGraph_0.NiagaraNodeOp_92'" - OpName="Matrix::MatrixVectorMultiply" - ChangeId=27BF0290BEB64ADA8B924165BC1B4638 - NodePosX=512 - NodePosY=480 - NodeGuid=597CA99BCD6540339C6EDD3F779DD5E2 - CustomProperties Pin (PinId=B18A8E214AA24427AD350D7548E67682,PinName="M",PinToolTip="M",PinType.PinCategory="Type",PinType.PinSubCategory="",PinType.PinSubCategoryObject="/Script/CoreUObject.ScriptStruct'/Script/Niagara.NiagaraMatrix'",PinType.PinSubCategoryMemberReference=(),PinType.PinValueType=(),PinType.ContainerType=None,PinType.bIsReference=False,PinType.bIsConst=False,PinType.bIsWeakPointer=False,PinType.bIsUObjectWrapper=False,PinType.bSerializeAsSinglePrecisionFloat=False,DefaultValue="1.0,0.0,0.0,0.0,\t\t0.0,1.0,0.0,0.0,\t\t0.0,0.0,1.0,0.0,\t\t0.0,0.0,0.0,1.0",AutogeneratedDefaultValue="1.0,0.0,0.0,0.0,\t\t0.0,1.0,0.0,0.0,\t\t0.0,0.0,1.0,0.0,\t\t0.0,0.0,0.0,1.0",LinkedTo=(NiagaraNodeParameterMapGet_2 77AD8CE312C44F3996A0AF04607A4DD6,),PersistentGuid=00000000000000000000000000000000,bHidden=False,bNotConnectable=False,bDefaultValueIsReadOnly=False,bDefaultValueIsIgnored=False,bAdvancedView=False,bOrphanedPin=False,) - CustomProperties Pin (PinId=28E62E1F14204AD1857565EF6C7A63F3,PinName="V",PinToolTip="V",PinType.PinCategory="Type",PinType.PinSubCategory="",PinType.PinSubCategoryObject="/Script/CoreUObject.ScriptStruct'/Script/CoreUObject.Vector4f'",PinType.PinSubCategoryMemberReference=(),PinType.PinValueType=(),PinType.ContainerType=None,PinType.bIsReference=False,PinType.bIsConst=False,PinType.bIsWeakPointer=False,PinType.bIsUObjectWrapper=False,PinType.bSerializeAsSinglePrecisionFloat=False,DefaultValue="22.000000,33.000000,44.000000,55.000000",AutogeneratedDefaultValue="1.0,1.0,1.0",PersistentGuid=00000000000000000000000000000000,bHidden=False,bNotConnectable=False,bDefaultValueIsReadOnly=False,bDefaultValueIsIgnored=False,bAdvancedView=False,bOrphanedPin=False,) - CustomProperties Pin (PinId=9A2423D0FFC945DA85DA823BD71D6BA0,PinName="Result",PinToolTip="Result",Direction="EGPD_Output",PinType.PinCategory="Type",PinType.PinSubCategory="",PinType.PinSubCategoryObject="/Script/CoreUObject.ScriptStruct'/Script/CoreUObject.Vector4f'",PinType.PinSubCategoryMemberReference=(),PinType.PinValueType=(),PinType.ContainerType=None,PinType.bIsReference=False,PinType.bIsConst=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: [22.5, 7], - pins: 3, - pinNames: ["M", "V", "Result"], - delegate: false, - development: false, - additionalTest: async (node, pins, blueprintPage) => { - expect(await node.evaluate(node => node.classList.contains("ueb-node-style-glass"))).toBeFalsy() - expect(await node.evaluate(node => node.classList.contains("ueb-node-style-default"))).toBeTruthy() - expect(await pins[1].evaluate(/** @param {PinElement} pin */pin => pin.entity.DefaultValue.toArray())) - .toStrictEqual([22, 33, 44, 55]) - let inputs = await pins[1].locator("ueb-input").all() - await inputs[0].fill("-1") - await inputs[1].fill("-2") - await inputs[2].fill("-3") - await inputs[3].fill("-4") - await blueprintPage.blur() - await expect(inputs[0]).toContainText("-1.0") - await expect(inputs[1]).toContainText("-2.0") - await expect(inputs[2]).toContainText("-3.0") - await expect(inputs[3]).toContainText("-4.0") - const resultSerialization = await blueprintPage.blueprintLocator.evaluate(blueprint => { - blueprint.selectAll() - return blueprint.template.getCopyInputObject().getSerializedText() - }) - const expectedSerialization = String.raw` - Begin Object Class=/Script/NiagaraEditor.NiagaraNodeOp Name="NiagaraNodeOp_92" ExportPath="/Script/NiagaraEditor.NiagaraNodeOp'/Engine/Transient.NewNiagaraScript:NiagaraScriptSource_0.NiagaraGraph_0.NiagaraNodeOp_92'" - OpName="Matrix::MatrixVectorMultiply" - ChangeId=27BF0290BEB64ADA8B924165BC1B4638 - NodePosX=512 - NodePosY=480 - NodeGuid=597CA99BCD6540339C6EDD3F779DD5E2 - CustomProperties Pin (PinId=B18A8E214AA24427AD350D7548E67682,PinName="M",PinToolTip="M",PinType.PinCategory="Type",PinType.PinSubCategory="",PinType.PinSubCategoryObject="/Script/CoreUObject.ScriptStruct'/Script/Niagara.NiagaraMatrix'",PinType.PinSubCategoryMemberReference=(),PinType.PinValueType=(),PinType.ContainerType=None,PinType.bIsReference=False,PinType.bIsConst=False,PinType.bIsWeakPointer=False,PinType.bIsUObjectWrapper=False,PinType.bSerializeAsSinglePrecisionFloat=False,DefaultValue="1.0,0.0,0.0,0.0,\t\t0.0,1.0,0.0,0.0,\t\t0.0,0.0,1.0,0.0,\t\t0.0,0.0,0.0,1.0",AutogeneratedDefaultValue="1.0,0.0,0.0,0.0,\t\t0.0,1.0,0.0,0.0,\t\t0.0,0.0,1.0,0.0,\t\t0.0,0.0,0.0,1.0",LinkedTo=(NiagaraNodeParameterMapGet_2 77AD8CE312C44F3996A0AF04607A4DD6,),PersistentGuid=00000000000000000000000000000000,bHidden=False,bNotConnectable=False,bDefaultValueIsReadOnly=False,bDefaultValueIsIgnored=False,bAdvancedView=False,bOrphanedPin=False,) - CustomProperties Pin (PinId=28E62E1F14204AD1857565EF6C7A63F3,PinName="V",PinToolTip="V",PinType.PinCategory="Type",PinType.PinSubCategory="",PinType.PinSubCategoryObject="/Script/CoreUObject.ScriptStruct'/Script/CoreUObject.Vector4f'",PinType.PinSubCategoryMemberReference=(),PinType.PinValueType=(),PinType.ContainerType=None,PinType.bIsReference=False,PinType.bIsConst=False,PinType.bIsWeakPointer=False,PinType.bIsUObjectWrapper=False,PinType.bSerializeAsSinglePrecisionFloat=False,DefaultValue="-1.000000,-2.000000,-3.000000,-4.000000",AutogeneratedDefaultValue="1.0,1.0,1.0",PersistentGuid=00000000000000000000000000000000,bHidden=False,bNotConnectable=False,bDefaultValueIsReadOnly=False,bDefaultValueIsIgnored=False,bAdvancedView=False,bOrphanedPin=False,) - CustomProperties Pin (PinId=9A2423D0FFC945DA85DA823BD71D6BA0,PinName="Result",PinToolTip="Result",Direction="EGPD_Output",PinType.PinCategory="Type",PinType.PinSubCategory="",PinType.PinSubCategoryObject="/Script/CoreUObject.ScriptStruct'/Script/CoreUObject.Vector4f'",PinType.PinSubCategoryMemberReference=(),PinType.PinValueType=(),PinType.ContainerType=None,PinType.bIsReference=False,PinType.bIsConst=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 - ` - const words = expectedSerialization - .split("\n") - .map(row => row.match(/\s*("?\w+(\s+\w+)*).+/)?.[1]) - .filter(v => v?.length > 0) - expect(resultSerialization).toMatch(Utility.getFirstWordOrder(words)) - }, - }, - { - name: "Align Quaternions", - value: String.raw` - Begin Object Class=/Script/NiagaraEditor.NiagaraNodeFunctionCall Name="NiagaraNodeFunctionCall_125" ExportPath="/Script/NiagaraEditor.NiagaraNodeFunctionCall'/Engine/Transient.NewNiagaraScript:NiagaraScriptSource_0.NiagaraGraph_0.NiagaraNodeFunctionCall_125'" - FunctionScript="/Script/Niagara.NiagaraScript'/Niagara/Functions/Rotation/AlignQuaternions.AlignQuaternions'" - CachedChangeId=46822C6B48B121BA33580E809890283B - FunctionDisplayName="AlignQuaternions" - ChangeId=1773D73F6A644287931126B8B2F67371 - NodePosX=-512 - NodePosY=128 - NodeGuid=DF5F941A4DE7430989CE74C42E9F0E6F - CustomProperties Pin (PinId=AE6D0569136F4208B97DD62D9FB2EFF6,PinName="BaselineRotation",PinType.PinCategory="Type",PinType.PinSubCategory="",PinType.PinSubCategoryObject="/Script/CoreUObject.ScriptStruct'/Script/CoreUObject.Quat4f'",PinType.PinSubCategoryMemberReference=(),PinType.PinValueType=(),PinType.ContainerType=None,PinType.bIsReference=False,PinType.bIsConst=False,PinType.bIsWeakPointer=False,PinType.bIsUObjectWrapper=False,PinType.bSerializeAsSinglePrecisionFloat=False,DefaultValue="0.000,0.000,0.000,1.000",AutogeneratedDefaultValue="0.000,0.000,0.000,1.000",PersistentGuid=00000000000000000000000000000000,bHidden=False,bNotConnectable=False,bDefaultValueIsReadOnly=False,bDefaultValueIsIgnored=False,bAdvancedView=False,bOrphanedPin=False,) - CustomProperties Pin (PinId=32A04106CE014CF3B7A74E4CE3B7064B,PinName="NewRotation",PinType.PinCategory="Type",PinType.PinSubCategory="",PinType.PinSubCategoryObject="/Script/CoreUObject.ScriptStruct'/Script/CoreUObject.Quat4f'",PinType.PinSubCategoryMemberReference=(),PinType.PinValueType=(),PinType.ContainerType=None,PinType.bIsReference=False,PinType.bIsConst=False,PinType.bIsWeakPointer=False,PinType.bIsUObjectWrapper=False,PinType.bSerializeAsSinglePrecisionFloat=False,DefaultValue="0.000,0.000,0.000,1.000",AutogeneratedDefaultValue="0.000,0.000,0.000,1.000",PersistentGuid=00000000000000000000000000000000,bHidden=False,bNotConnectable=False,bDefaultValueIsReadOnly=False,bDefaultValueIsIgnored=False,bAdvancedView=False,bOrphanedPin=False,) - CustomProperties Pin (PinId=5F121C4330074978A1F9792824AE3B5A,PinName="NewOutput",Direction="EGPD_Output",PinType.PinCategory="Type",PinType.PinSubCategory="",PinType.PinSubCategoryObject="/Script/CoreUObject.ScriptStruct'/Script/CoreUObject.Quat4f'",PinType.PinSubCategoryMemberReference=(),PinType.PinValueType=(),PinType.ContainerType=None,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,) - End Object - `, - size: [16, 5.5], - icon: null, - color: Configuration.nodeColors.darkerBlue, - pins: 3, - delegate: false, - development: false, - additionalTest: async (node, pins) => { - expect(await node.evaluate(node => node.classList.contains("ueb-node-style-glass"))).toBeFalsy() - expect(await node.evaluate(node => node.classList.contains("ueb-node-style-default"))).toBeTruthy() - expect(await pins[0].evaluate(p => p.entity.pinColor().cssText)).toBe(css`0, 88, 200`.cssText) - expect(await pins[1].evaluate(p => p.entity.pinColor().cssText)).toBe(css`0, 88, 200`.cssText) - expect(await pins[2].evaluate(p => p.entity.pinColor().cssText)).toBe(css`0, 88, 200`.cssText) - }, - }, - { - name: "Calculate A Volume Textures Distance Field Gradient", - value: String.raw` - Begin Object Class=/Script/NiagaraEditor.NiagaraNodeFunctionCall Name="NiagaraNodeFunctionCall_118" ExportPath="/Script/NiagaraEditor.NiagaraNodeFunctionCall'/Engine/Transient.NewNiagaraScript:NiagaraScriptSource_0.NiagaraGraph_0.NiagaraNodeFunctionCall_118'" - FunctionScript="/Script/Niagara.NiagaraScript'/Niagara/Functions/Textures/CalculateA_VolumeTexturesDistanceFieldGradient.CalculateA_VolumeTexturesDistanceFieldGradient'" - SelectedScriptVersion=FE54E5B243F724F59CBE18B14F541840 - CachedChangeId=DC7328824039207713ADFF82DEAF3A32 - FunctionDisplayName="CalculateA_VolumeTexturesDistanceFieldGradient" - ChangeId=5A8AF63A07AB47CCBF806D83FFB9020F - NodePosX=-512 - NodePosY=-512 - NodeGuid=3803C1B7F13C4D818D7AF71764B9957B - CustomProperties Pin (PinId=1C49656E46D540D0AC5961597B947D85,PinName="Sample Position",PinType.PinCategory="Type",PinType.PinSubCategory="",PinType.PinSubCategoryObject="/Script/CoreUObject.ScriptStruct'/Script/Niagara.NiagaraPosition'",PinType.PinSubCategoryMemberReference=(),PinType.PinValueType=(),PinType.ContainerType=None,PinType.bIsReference=False,PinType.bIsConst=False,PinType.bIsWeakPointer=False,PinType.bIsUObjectWrapper=False,PinType.bSerializeAsSinglePrecisionFloat=False,DefaultValue="0.000,0.000,0.000",AutogeneratedDefaultValue="0.000,0.000,0.000",PersistentGuid=00000000000000000000000000000000,bHidden=False,bNotConnectable=False,bDefaultValueIsReadOnly=False,bDefaultValueIsIgnored=False,bAdvancedView=False,bOrphanedPin=False,) - CustomProperties Pin (PinId=1FF0DD84BE324BEE94AC35A5D83896E1,PinName="Scale Factor",PinType.PinCategory="Type",PinType.PinSubCategory="",PinType.PinSubCategoryObject="/Script/CoreUObject.ScriptStruct'/Script/Niagara.NiagaraFloat'",PinType.PinSubCategoryMemberReference=(),PinType.PinValueType=(),PinType.ContainerType=None,PinType.bIsReference=False,PinType.bIsConst=False,PinType.bIsWeakPointer=False,PinType.bIsUObjectWrapper=False,PinType.bSerializeAsSinglePrecisionFloat=False,DefaultValue="1.000000",AutogeneratedDefaultValue="1.000000",PersistentGuid=00000000000000000000000000000000,bHidden=False,bNotConnectable=False,bDefaultValueIsReadOnly=False,bDefaultValueIsIgnored=False,bAdvancedView=False,bOrphanedPin=False,) - CustomProperties Pin (PinId=A2030D2728C34982A599AC7EAE2FDDE0,PinName="Volume Texture",PinType.PinCategory="Class",PinType.PinSubCategory="",PinType.PinSubCategoryObject="/Script/CoreUObject.Class'/Script/Niagara.NiagaraDataInterfaceVolumeTexture'",PinType.PinSubCategoryMemberReference=(),PinType.PinValueType=(),PinType.ContainerType=None,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=FCCC0AC1CCD54A099E450D4A4FA6A23C,PinName="Volume Center Location",PinType.PinCategory="Type",PinType.PinSubCategory="",PinType.PinSubCategoryObject="/Script/CoreUObject.ScriptStruct'/Script/Niagara.NiagaraPosition'",PinType.PinSubCategoryMemberReference=(),PinType.PinValueType=(),PinType.ContainerType=None,PinType.bIsReference=False,PinType.bIsConst=False,PinType.bIsWeakPointer=False,PinType.bIsUObjectWrapper=False,PinType.bSerializeAsSinglePrecisionFloat=False,DefaultValue="0.000,0.000,0.000",AutogeneratedDefaultValue="0.000,0.000,0.000",PersistentGuid=00000000000000000000000000000000,bHidden=False,bNotConnectable=False,bDefaultValueIsReadOnly=False,bDefaultValueIsIgnored=False,bAdvancedView=False,bOrphanedPin=False,) - CustomProperties Pin (PinId=F1BA4EFE91554666A80389736EB5005B,PinName="Volume Extents",PinType.PinCategory="Type",PinType.PinSubCategory="",PinType.PinSubCategoryObject="/Script/CoreUObject.ScriptStruct'/Script/CoreUObject.Vector3f'",PinType.PinSubCategoryMemberReference=(),PinType.PinValueType=(),PinType.ContainerType=None,PinType.bIsReference=False,PinType.bIsConst=False,PinType.bIsWeakPointer=False,PinType.bIsUObjectWrapper=False,PinType.bSerializeAsSinglePrecisionFloat=False,DefaultValue="0.000,0.000,0.000",AutogeneratedDefaultValue="0.000,0.000,0.000",PersistentGuid=00000000000000000000000000000000,bHidden=False,bNotConnectable=False,bDefaultValueIsReadOnly=False,bDefaultValueIsIgnored=False,bAdvancedView=False,bOrphanedPin=False,) - CustomProperties Pin (PinId=40512C3E4F5C4B85BAC287179458EDEF,PinName="Distance Field Texture Channel",PinType.PinCategory="Enum",PinType.PinSubCategory="",PinType.PinSubCategoryObject="/Script/Engine.UserDefinedEnum'/Niagara/Enums/ENiagara_Float4Channel.ENiagara_Float4Channel'",PinType.PinSubCategoryMemberReference=(),PinType.PinValueType=(),PinType.ContainerType=None,PinType.bIsReference=False,PinType.bIsConst=False,PinType.bIsWeakPointer=False,PinType.bIsUObjectWrapper=False,PinType.bSerializeAsSinglePrecisionFloat=False,DefaultValue="NewEnumerator0",AutogeneratedDefaultValue="NewEnumerator0",PersistentGuid=CC547F87ED03FB8EEA661F18ABDF8C16,bHidden=False,bNotConnectable=True,bDefaultValueIsReadOnly=False,bDefaultValueIsIgnored=False,bAdvancedView=False,bOrphanedPin=False,) - CustomProperties Pin (PinId=A5FEC96B447C42EB9CA7BE93AB04F93E,PinName="Vector To Surface",Direction="EGPD_Output",PinType.PinCategory="Type",PinType.PinSubCategory="",PinType.PinSubCategoryObject="/Script/CoreUObject.ScriptStruct'/Script/CoreUObject.Vector3f'",PinType.PinSubCategoryMemberReference=(),PinType.PinValueType=(),PinType.ContainerType=None,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=6D55F00292734872B750828E15779CD5,PinName="Distance To Surface",Direction="EGPD_Output",PinType.PinCategory="Type",PinType.PinSubCategory="",PinType.PinSubCategoryObject="/Script/CoreUObject.ScriptStruct'/Script/Niagara.NiagaraFloat'",PinType.PinSubCategoryMemberReference=(),PinType.PinValueType=(),PinType.ContainerType=None,PinType.bIsReference=False,PinType.bIsConst=False,PinType.bIsWeakPointer=False,PinType.bIsUObjectWrapper=False,PinType.bSerializeAsSinglePrecisionFloat=False,PersistentGuid=00000000000000000000000000000000,bHidden=False,bNotConnectable=False,bDefaultValueIsReadOnly=False,bDefaultValueIsIgnored=True,bAdvancedView=False,bOrphanedPin=False,) - CustomProperties Pin (PinId=CC5826BFCC784BECA71B5B09C145DCF7,PinName="Sampled Color",Direction="EGPD_Output",PinType.PinCategory="Type",PinType.PinSubCategory="",PinType.PinSubCategoryObject="/Script/CoreUObject.ScriptStruct'/Script/CoreUObject.Vector4f'",PinType.PinSubCategoryMemberReference=(),PinType.PinValueType=(),PinType.ContainerType=None,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=A22662833F8446309AF4E72E09B2A6C5,PinName="Field Gradient",Direction="EGPD_Output",PinType.PinCategory="Type",PinType.PinSubCategory="",PinType.PinSubCategoryObject="/Script/CoreUObject.ScriptStruct'/Script/CoreUObject.Vector3f'",PinType.PinSubCategoryMemberReference=(),PinType.PinValueType=(),PinType.ContainerType=None,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=59A2DB801C7D4E9180793F5F1F597B4F,PinName="IsoSurface Position",Direction="EGPD_Output",PinType.PinCategory="Type",PinType.PinSubCategory="",PinType.PinSubCategoryObject="/Script/CoreUObject.ScriptStruct'/Script/Niagara.NiagaraPosition'",PinType.PinSubCategoryMemberReference=(),PinType.PinValueType=(),PinType.ContainerType=None,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,) - End Object - `, - size: [25, 18], - icon: null, - color: Configuration.nodeColors.darkerBlue, - pins: 11, - pinNames: [ - "Sample Position", - "Scale Factor", - "Volume Texture", - "Volume Center Location", - "Volume Extents", - "Distance Field Texture Channel", - "Vector To Surface", - "Distance To Surface", - "Sampled Color", - "Field Gradient", - "Iso Surface Position", - ], - delegate: false, - development: false, - additionalTest: async (node, pins) => { - expect(await node.evaluate(node => node.classList.contains("ueb-node-style-glass"))).toBeFalsy() - expect(await node.evaluate(node => node.classList.contains("ueb-node-style-default"))).toBeTruthy() - expect(await pins[0].evaluate(p => p.entity.pinColor().cssText)).toBe(css`251, 146, 251`.cssText) - expect(await pins[1].evaluate(p => p.entity.pinColor().cssText)).toBe(css`160, 250, 68`.cssText) - expect(await pins[2].evaluate(p => p.entity.pinColor().cssText)).toBe(css`0, 168, 242`.cssText) - expect(await pins[3].evaluate(p => p.entity.pinColor().cssText)).toBe(css`251, 146, 251`.cssText) - expect(await pins[4].evaluate(p => p.entity.pinColor().cssText)).toBe(css`250, 200, 36`.cssText) - expect(await pins[6].evaluate(p => p.entity.pinColor().cssText)).toBe(css`250, 200, 36`.cssText) - expect(await pins[7].evaluate(p => p.entity.pinColor().cssText)).toBe(css`160, 250, 68`.cssText) - expect(await pins[8].evaluate(p => p.entity.pinColor().cssText)).toBe(css`0, 88, 200`.cssText) - expect(await pins[9].evaluate(p => p.entity.pinColor().cssText)).toBe(css`250, 200, 36`.cssText) - expect(await pins[10].evaluate(p => p.entity.pinColor().cssText)).toBe(css`251, 146, 251`.cssText) - }, - }, - { - name: "Interpolate Over Time Quaternion", - value: String.raw` - Begin Object Class=/Script/NiagaraEditor.NiagaraNodeFunctionCall Name="NiagaraNodeFunctionCall_160" ExportPath="/Script/NiagaraEditor.NiagaraNodeFunctionCall'/Engine/Transient.NewNiagaraScript:NiagaraScriptSource_0.NiagaraGraph_0.NiagaraNodeFunctionCall_160'" - FunctionScript="/Script/Niagara.NiagaraScript'/Niagara/Functions/Math/InterpolateOverTime_Quaternion.InterpolateOverTime_Quaternion'" - SelectedScriptVersion=5A6359E649629A32B6B4CA9D6A4CF08B - CachedChangeId=BD6C65FF48EE55BD0354208C6E7CFC5E - FunctionDisplayName="InterpolateOverTime_Quaternion" - ChangeId=AFBFC05C8AFD4E3D9256AB1181E12D82 - NodePosX=544 - NodePosY=-384 - NodeGuid=12612978C2CC4F0BB84C22D4B4EEC3E1 - CustomProperties Pin (PinId=A123640517EC4387958B42AE6AAAF9FA,PinName="Map",PinType.PinCategory="Type",PinType.PinSubCategory="",PinType.PinSubCategoryObject="/Script/CoreUObject.ScriptStruct'/Script/Niagara.NiagaraParameterMap'",PinType.PinSubCategoryMemberReference=(),PinType.PinValueType=(),PinType.ContainerType=None,PinType.bIsReference=False,PinType.bIsConst=False,PinType.bIsWeakPointer=False,PinType.bIsUObjectWrapper=False,PinType.bSerializeAsSinglePrecisionFloat=False,PersistentGuid=00000000000000000000000000000000,bHidden=False,bNotConnectable=False,bDefaultValueIsReadOnly=False,bDefaultValueIsIgnored=False,bAdvancedView=False,bOrphanedPin=False,) - CustomProperties Pin (PinId=167B2B0C6E354603A988999007C19BA1,PinName="Rate Of Change",PinType.PinCategory="Type",PinType.PinSubCategory="",PinType.PinSubCategoryObject="/Script/CoreUObject.ScriptStruct'/Script/Niagara.NiagaraFloat'",PinType.PinSubCategoryMemberReference=(),PinType.PinValueType=(),PinType.ContainerType=None,PinType.bIsReference=False,PinType.bIsConst=False,PinType.bIsWeakPointer=False,PinType.bIsUObjectWrapper=False,PinType.bSerializeAsSinglePrecisionFloat=False,PersistentGuid=00000000000000000000000000000000,bHidden=False,bNotConnectable=False,bDefaultValueIsReadOnly=False,bDefaultValueIsIgnored=True,bAdvancedView=False,bOrphanedPin=False,) - CustomProperties Pin (PinId=E6184BA334B24985A45FC5F9E73F81D2,PinName="FirstFrame",PinType.PinCategory="Type",PinType.PinSubCategory="",PinType.PinSubCategoryObject="/Script/CoreUObject.ScriptStruct'/Script/Niagara.NiagaraBool'",PinType.PinSubCategoryMemberReference=(),PinType.PinValueType=(),PinType.ContainerType=None,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=1BDC577CF32A4990A7EEEB9AC3BBDAA2,PinName="Delta Time",PinType.PinCategory="Type",PinType.PinSubCategory="",PinType.PinSubCategoryObject="/Script/CoreUObject.ScriptStruct'/Script/Niagara.NiagaraFloat'",PinType.PinSubCategoryMemberReference=(),PinType.PinValueType=(),PinType.ContainerType=None,PinType.bIsReference=False,PinType.bIsConst=False,PinType.bIsWeakPointer=False,PinType.bIsUObjectWrapper=False,PinType.bSerializeAsSinglePrecisionFloat=False,PersistentGuid=00000000000000000000000000000000,bHidden=False,bNotConnectable=False,bDefaultValueIsReadOnly=False,bDefaultValueIsIgnored=True,bAdvancedView=False,bOrphanedPin=False,) - CustomProperties Pin (PinId=7C1356D8BDD74EBBA569EB9E1905EA0D,PinName="Target Value",PinType.PinCategory="Type",PinType.PinSubCategory="",PinType.PinSubCategoryObject="/Script/CoreUObject.ScriptStruct'/Script/CoreUObject.Quat4f'",PinType.PinSubCategoryMemberReference=(),PinType.PinValueType=(),PinType.ContainerType=None,PinType.bIsReference=False,PinType.bIsConst=False,PinType.bIsWeakPointer=False,PinType.bIsUObjectWrapper=False,PinType.bSerializeAsSinglePrecisionFloat=False,DefaultValue="0.000,0.000,0.000,1.000",AutogeneratedDefaultValue="0.000,0.000,0.000,1.000",PersistentGuid=00000000000000000000000000000000,bHidden=False,bNotConnectable=False,bDefaultValueIsReadOnly=False,bDefaultValueIsIgnored=False,bAdvancedView=False,bOrphanedPin=False,) - CustomProperties Pin (PinId=A57085A8B43144C1BCD7D67A81E09054,PinName="Initial Value",PinType.PinCategory="Type",PinType.PinSubCategory="",PinType.PinSubCategoryObject="/Script/CoreUObject.ScriptStruct'/Script/CoreUObject.Quat4f'",PinType.PinSubCategoryMemberReference=(),PinType.PinValueType=(),PinType.ContainerType=None,PinType.bIsReference=False,PinType.bIsConst=False,PinType.bIsWeakPointer=False,PinType.bIsUObjectWrapper=False,PinType.bSerializeAsSinglePrecisionFloat=False,DefaultValue="0.000,0.000,0.000,1.000",AutogeneratedDefaultValue="0.000,0.000,0.000,1.000",PersistentGuid=00000000000000000000000000000000,bHidden=False,bNotConnectable=False,bDefaultValueIsReadOnly=False,bDefaultValueIsIgnored=False,bAdvancedView=False,bOrphanedPin=False,) - CustomProperties Pin (PinId=0A10BAB1865F442EA0BFE5F320469DE3,PinName="Map",Direction="EGPD_Output",PinType.PinCategory="Type",PinType.PinSubCategory="",PinType.PinSubCategoryObject="/Script/CoreUObject.ScriptStruct'/Script/Niagara.NiagaraParameterMap'",PinType.PinSubCategoryMemberReference=(),PinType.PinValueType=(),PinType.ContainerType=None,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=3CF7483A34D64238BE6A3E9C20CE5111,PinName="Moving Average",Direction="EGPD_Output",PinType.PinCategory="Type",PinType.PinSubCategory="",PinType.PinSubCategoryObject="/Script/CoreUObject.ScriptStruct'/Script/CoreUObject.Quat4f'",PinType.PinSubCategoryMemberReference=(),PinType.PinValueType=(),PinType.ContainerType=None,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,) - End Object - `, - size: [17, 13], - icon: null, - color: Configuration.nodeColors.darkerBlue, - pins: 8, - pinNames: [ - "Map", - "Rate Of Change", - "First Frame", - "Delta Time", - "Target Value", - "Initial Value", - "Map", - "Moving Average", - ], - delegate: false, - development: false, - additionalTest: async (node, pins) => { - expect(await node.evaluate(node => node.classList.contains("ueb-node-style-glass"))).toBeFalsy() - expect(await node.evaluate(node => node.classList.contains("ueb-node-style-default"))).toBeTruthy() - expect(await pins[1].evaluate(p => p.entity.pinColor().cssText)).toBe(css`160, 250, 68`.cssText) - expect(await pins[2].evaluate(p => p.entity.pinColor().cssText)).toBe(css`146, 0, 0`.cssText) - expect(await pins[3].evaluate(p => p.entity.pinColor().cssText)).toBe(css`160, 250, 68`.cssText) - expect(await pins[4].evaluate(p => p.entity.pinColor().cssText)).toBe(css`0, 88, 200`.cssText) - expect(await pins[5].evaluate(p => p.entity.pinColor().cssText)).toBe(css`0, 88, 200`.cssText) - expect(await pins[7].evaluate(p => p.entity.pinColor().cssText)).toBe(css`0, 88, 200`.cssText) - }, - }, - { - name: "Niagara Abs", - title: "Abs", - value: String.raw` - Begin Object Class=/Script/NiagaraEditor.NiagaraNodeOp Name="NiagaraNodeOp_12" ExportPath="/Script/NiagaraEditor.NiagaraNodeOp'/Engine/Transient.NewNiagaraScript:NiagaraScriptSource_0.NiagaraGraph_0.NiagaraNodeOp_12'" - OpName="Numeric::Abs" - ChangeId=29B8C1201A5A453DAF589029C8FF3C71 - NodePosX=224 - NodePosY=336 - NodeGuid=F18211DAA458447E912DC2409D2257FA - CustomProperties Pin (PinId=946C3D0E755A4B75A23E5B462C1A7B82,PinName="A",PinToolTip="A",PinType.PinCategory="Type",PinType.PinSubCategory="",PinType.PinSubCategoryObject="/Script/CoreUObject.ScriptStruct'/Script/Niagara.NiagaraNumeric'",PinType.PinSubCategoryMemberReference=(),PinType.PinValueType=(),PinType.ContainerType=None,PinType.bIsReference=False,PinType.bIsConst=False,PinType.bIsWeakPointer=False,PinType.bIsUObjectWrapper=False,PinType.bSerializeAsSinglePrecisionFloat=False,DefaultValue="1.0",AutogeneratedDefaultValue="1.0",PersistentGuid=00000000000000000000000000000000,bHidden=False,bNotConnectable=False,bDefaultValueIsReadOnly=False,bDefaultValueIsIgnored=False,bAdvancedView=False,bOrphanedPin=False,) - CustomProperties Pin (PinId=9CD6DB4E94234A179733ED462921D416,PinName="Result",PinToolTip="Result",Direction="EGPD_Output",PinType.PinCategory="Type",PinType.PinSubCategory="",PinType.PinSubCategoryObject="/Script/CoreUObject.ScriptStruct'/Script/Niagara.NiagaraNumeric'",PinType.PinSubCategoryMemberReference=(),PinType.PinValueType=(),PinType.ContainerType=None,PinType.bIsReference=False,PinType.bIsConst=False,PinType.bIsWeakPointer=False,PinType.bIsUObjectWrapper=False,PinType.bSerializeAsSinglePrecisionFloat=False,PersistentGuid=00000000000000000000000000000000,bHidden=False,bNotConnectable=False,bDefaultValueIsReadOnly=False,bDefaultValueIsIgnored=False,bAdvancedView=False,bOrphanedPin=False,) - End Object - `, - size: [10, 2.5], - icon: null, - pins: 2, - delegate: false, - development: false, - additionalTest: async (node, pins) => { - expect(await node.evaluate(node => node.classList.contains("ueb-node-style-glass"))).toBeTruthy() - expect(await node.evaluate(node => node.classList.contains("ueb-node-style-default"))).toBeFalsy() - expect(await pins[0].evaluate(p => p.entity.pinColor().cssText)).toBe(css`0, 88, 200`.cssText) - expect(await pins[1].evaluate(p => p.entity.pinColor().cssText)).toBe(css`0, 88, 200`.cssText) - }, - }, - { - name: "Niagara Add", - title: "+", - value: String.raw` - Begin Object Class=/Script/NiagaraEditor.NiagaraNodeOp Name="NiagaraNodeOp_0" ExportPath="/Script/NiagaraEditor.NiagaraNodeOp'/Engine/Transient.NewNiagaraScript:NiagaraScriptSource_0.NiagaraGraph_0.NiagaraNodeOp_0'" - OpName="Numeric::Add" - ChangeId=264B3D2C683F4201966C715DBA00A590 - NodePosX=800 - NodePosY=272 - NodeGuid=E62FD339348E42159E41F661B803F129 - CustomProperties Pin (PinId=553D489D7489472EA81C9C009029186B,PinName="A",PinToolTip="A",PinType.PinCategory="Type",PinType.PinSubCategory="",PinType.PinSubCategoryObject="/Script/CoreUObject.ScriptStruct'/Script/Niagara.NiagaraNumeric'",PinType.PinSubCategoryMemberReference=(),PinType.PinValueType=(),PinType.ContainerType=None,PinType.bIsReference=False,PinType.bIsConst=False,PinType.bIsWeakPointer=False,PinType.bIsUObjectWrapper=False,PinType.bSerializeAsSinglePrecisionFloat=False,DefaultValue="0.0",AutogeneratedDefaultValue="0.0",PersistentGuid=00000000000000000000000000000000,bHidden=False,bNotConnectable=False,bDefaultValueIsReadOnly=False,bDefaultValueIsIgnored=False,bAdvancedView=False,bOrphanedPin=False,) - CustomProperties Pin (PinId=9905D9F666734D179C8DA03CAE65FCD2,PinName="B",PinToolTip="B",PinType.PinCategory="Type",PinType.PinSubCategory="",PinType.PinSubCategoryObject="/Script/CoreUObject.ScriptStruct'/Script/Niagara.NiagaraNumeric'",PinType.PinSubCategoryMemberReference=(),PinType.PinValueType=(),PinType.ContainerType=None,PinType.bIsReference=False,PinType.bIsConst=False,PinType.bIsWeakPointer=False,PinType.bIsUObjectWrapper=False,PinType.bSerializeAsSinglePrecisionFloat=False,DefaultValue="0.0",AutogeneratedDefaultValue="0.0",LinkedTo=(NiagaraNodeFunctionCall_179 73E46ACCCD224AE6958C0DB9D300767E,),PersistentGuid=00000000000000000000000000000000,bHidden=False,bNotConnectable=False,bDefaultValueIsReadOnly=False,bDefaultValueIsIgnored=False,bAdvancedView=False,bOrphanedPin=False,) - CustomProperties Pin (PinId=B1DDBB31FCF24C5FBD99B7205274CF48,PinName="Result",PinToolTip="Result",Direction="EGPD_Output",PinType.PinCategory="Type",PinType.PinSubCategory="",PinType.PinSubCategoryObject="/Script/CoreUObject.ScriptStruct'/Script/Niagara.NiagaraNumeric'",PinType.PinSubCategoryMemberReference=(),PinType.PinValueType=(),PinType.ContainerType=None,PinType.bIsReference=False,PinType.bIsConst=False,PinType.bIsWeakPointer=False,PinType.bIsUObjectWrapper=False,PinType.bSerializeAsSinglePrecisionFloat=False,PersistentGuid=00000000000000000000000000000000,bHidden=False,bNotConnectable=False,bDefaultValueIsReadOnly=False,bDefaultValueIsIgnored=False,bAdvancedView=False,bOrphanedPin=False,) - CustomProperties Pin (PinId=481ADC022BBF4D37BD5D5CE91D03C9C3,PinName="Add",PinType.PinCategory="Misc",PinType.PinSubCategory="DynamicAddPin",PinType.PinSubCategoryObject=None,PinType.PinSubCategoryMemberReference=(),PinType.PinValueType=(),PinType.ContainerType=None,PinType.bIsReference=False,PinType.bIsConst=False,PinType.bIsWeakPointer=False,PinType.bIsUObjectWrapper=False,PinType.bSerializeAsSinglePrecisionFloat=False,PersistentGuid=00000000000000000000000000000000,bHidden=False,bNotConnectable=False,bDefaultValueIsReadOnly=False,bDefaultValueIsIgnored=False,bAdvancedView=False,bOrphanedPin=False,) - End Object - `, - size: [9.5, 6], - icon: null, - pins: 4, - delegate: false, - development: false, - additionalTest: async (node, pins) => { - expect(await node.evaluate(node => node.classList.contains("ueb-node-style-glass"))).toBeTruthy() - expect(await node.evaluate(node => node.classList.contains("ueb-node-style-default"))).toBeFalsy() - expect(await pins[0].evaluate(p => p.entity.pinColor().cssText)).toBe(css`0, 88, 200`.cssText) - expect(await pins[1].evaluate(p => p.entity.pinColor().cssText)).toBe(css`0, 88, 200`.cssText) - expect(await pins[3].evaluate(p => p.entity.pinColor().cssText)).toBe(css`0, 88, 200`.cssText) - }, - }, - ]) - } -} diff --git a/tests/resources/NodeTests.js b/tests/resources/NodeTests.js old mode 100644 new mode 100755 diff --git a/tests/resources/OperationsNodes.js b/tests/resources/OperationsNodes.js deleted file mode 100644 index a7ebe85..0000000 --- a/tests/resources/OperationsNodes.js +++ /dev/null @@ -1,565 +0,0 @@ -import SVGIcon from "../../js/SVGIcon.js" -import { expect } from "../fixtures/test.js" -import NodeTests from "./NodeTests.js" - -export default class OperationsNodes extends NodeTests { - static { - this.set([ - { - name: "Add double double", - title: "+", - value: String.raw` - Begin Object Class=/Script/BlueprintGraph.K2Node_CommutativeAssociativeBinaryOperator Name="K2Node_CommutativeAssociativeBinaryOperator_1" ExportPath="/Script/BlueprintGraph.K2Node_CommutativeAssociativeBinaryOperator'/Game/Map.Map:PersistentLevel.Map.EventGraph.K2Node_CommutativeAssociativeBinaryOperator_1'" - NumAdditionalInputs=3 - bIsPureFunc=True - FunctionReference=(MemberParent="/Script/CoreUObject.Class'/Script/Engine.KismetMathLibrary'",MemberName="Add_DoubleDouble") - NodePosX=1920 - NodePosY=-1424 - NodeGuid=898B12095E2149EB85F3D66ABF812C8D - CustomProperties Pin (PinId=7E49A86445F1A83779096DA2653ED2F9,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=42E8757A4F34479027E6F3AC60B85161,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="123.000000",AutogeneratedDefaultValue="0.0",PersistentGuid=00000000000000000000000000000000,bHidden=False,bNotConnectable=False,bDefaultValueIsReadOnly=False,bDefaultValueIsIgnored=False,bAdvancedView=False,bOrphanedPin=False,) - CustomProperties Pin (PinId=4631AA9648980812910BB6A44F8DB926,PinName="B",PinToolTip="B\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="234.000000",AutogeneratedDefaultValue="1.000000",PersistentGuid=00000000000000000000000000000000,bHidden=False,bNotConnectable=False,bDefaultValueIsReadOnly=False,bDefaultValueIsIgnored=False,bAdvancedView=False,bOrphanedPin=False,) - CustomProperties Pin (PinId=46E01E834DC9C4ADC2A371BA3E6750FD,PinName="ReturnValue",PinToolTip="Return Value\nFloat (double-precision)\n\nAddition (A + B)",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,) - CustomProperties Pin (PinId=EA79B248A6876A3D535FD66AF32AD617,PinName="C",PinToolTip="C\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="345.000000",PersistentGuid=00000000000000000000000000000000,bHidden=False,bNotConnectable=False,bDefaultValueIsReadOnly=False,bDefaultValueIsIgnored=False,bAdvancedView=False,bOrphanedPin=False,) - CustomProperties Pin (PinId=A1A5D31E765DD0B28389412697654E59,PinName="D",PinToolTip="D\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="456.000000",PersistentGuid=00000000000000000000000000000000,bHidden=False,bNotConnectable=False,bDefaultValueIsReadOnly=False,bDefaultValueIsIgnored=False,bAdvancedView=False,bOrphanedPin=False,) - CustomProperties Pin (PinId=F622CBB2B1AD29C2A0F225F8D5275852,PinName="E",PinToolTip="E\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="567.000000",PersistentGuid=00000000000000000000000000000000,bHidden=False,bNotConnectable=False,bDefaultValueIsReadOnly=False,bDefaultValueIsIgnored=False,bAdvancedView=False,bOrphanedPin=False,) - End Object - `, - size: [10.5, 11], - pins: 6, - delegate: false, - development: false, - variadic: true, - additionalTest: async (node, pins) => { - const values = ["123.0", "234.0", "345.0", "456.0", "567.0"] - for (let i = 0; i < pins.length; ++i) { - expect(await pins[i].evaluate(pin => pin.template.renderIcon().strings.join(""))) - .toStrictEqual(SVGIcon.operationPin.strings.join("")) - if (i < values.length) { - await expect(pins[i].locator("ueb-input")).toContainText(values[i]) - } - } - } - }, - { - name: "Less timespan timespan", - 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 - NodePosY=256 - 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 double double", - 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 slate brush", - 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 timespan timespan", - 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 - "NodePosY"=256 - "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 byte byte", - 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, blueprintPage) => { - for (const pin of pins) { - expect(await pin.evaluate(pin => pin.template.renderIcon().strings.join(""))) - .toStrictEqual(SVGIcon.operationPin.strings.join("")) - } - let inputs = await node.locator(".ueb-pin-input").all() - for (const input of inputs) { - expect(await input.isChecked()).toBeFalsy() - } - await inputs[inputs.length - 1].check() - expect(await inputs[inputs.length - 1].isChecked()).toBeTruthy() - const variadic = blueprintPage.node.getByText("Add pin") - await variadic.click() - inputs = await node.locator(".ueb-pin-input").all() - await inputs[inputs.length - 2].uncheck() - for (const input of inputs) { - expect(await input.isChecked()).toBeFalsy() - } - } - }, - { - 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 int", - 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 int64", - 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, blueprintPage) => { - for (const pin of pins) { - expect(await pin.evaluate(pin => pin.template.renderIcon().strings.join(""))) - .toStrictEqual(SVGIcon.operationPin.strings.join("")) - } - expect(await pins[0].evaluate(pin => pin.entity.DefaultValue.constructor.serialized)).toBeTruthy() - expect(await pins[1].evaluate(pin => pin.entity.DefaultValue.constructor.serialized)).toBeTruthy() - await pins[0].locator("ueb-input").fill("54") - await blueprintPage.blur() - expect(await pins[0].evaluate(pin => pin.entity.DefaultValue.constructor.serialized)).toBeTruthy() - expect(await pins[0].evaluate(pin => pin.entity.DefaultValue.serialize())).toEqual('"54"') - await pins[1].locator("ueb-input").fill("771") - await blueprintPage.blur() - expect(await pins[1].evaluate(pin => pin.entity.DefaultValue.constructor.serialized)).toBeTruthy() - expect(await pins[1].evaluate(pin => pin.entity.DefaultValue.serialize())).toEqual('"771"') - } - }, - { - name: "Bitwise OR int", - 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 - NodePosY=16 - 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 int64", - 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 - NodePosY=64 - 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 int", - 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 int64", - 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 int", - 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 - NodePosY=32 - 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 int64", - 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 - NodePosY=256 - 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 gameplay tag", - 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 - "NodePosY"=128 - "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 byte", - 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 deleted file mode 100644 index f9ad751..0000000 --- a/tests/resources/OtherNodes.js +++ /dev/null @@ -1,624 +0,0 @@ -import Configuration from "../../js/Configuration.js" -import SVGIcon from "../../js/SVGIcon.js" -import { expect } from "../fixtures/test.js" -import NodeTests from "./NodeTests.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, - }, - { - name: "Add Local Navigation Grid For Box", - value: String.raw` - Begin Object Class=/Script/BlueprintGraph.K2Node_CallFunction Name="K2Node_CallFunction_0" ExportPath="/Script/BlueprintGraph.K2Node_CallFunction'/Temp/Untitled_1.Untitled_1:PersistentLevel.Untitled.EventGraph.K2Node_CallFunction_0'" - FunctionReference=(MemberParent="/Script/CoreUObject.Class'/Script/AIModule.NavLocalGridManager'",MemberName="AddLocalNavigationGridForBox") - NodePosX=304 - NodePosY=-496 - NodeGuid=C15FC9905D6D4BF5AF19CB81BAB598DE - CustomProperties Pin (PinId=4A315083206E46F38782139225D1CBDB,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=0E0D6F8DD32C430D9F727D4B16A6CA85,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=3A0F065EA4444A6BBD9DB667859A2139,PinName="self",PinFriendlyName=NSLOCTEXT("K2Node", "Target", "Target"),PinToolTip="Target\nNav Local Grid Manager Object Reference",PinType.PinCategory="object",PinType.PinSubCategory="",PinType.PinSubCategoryObject="/Script/CoreUObject.Class'/Script/AIModule.NavLocalGridManager'",PinType.PinSubCategoryMemberReference=(),PinType.PinValueType=(),PinType.ContainerType=None,PinType.bIsReference=False,PinType.bIsConst=False,PinType.bIsWeakPointer=False,PinType.bIsUObjectWrapper=False,PinType.bSerializeAsSinglePrecisionFloat=False,DefaultObject="/Script/AIModule.Default__NavLocalGridManager",PersistentGuid=00000000000000000000000000000000,bHidden=True,bNotConnectable=False,bDefaultValueIsReadOnly=False,bDefaultValueIsIgnored=False,bAdvancedView=False,bOrphanedPin=False,) - CustomProperties Pin (PinId=3FBC998EDAF84DC48EF01354ED460934,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=44559846BCBA449395FE1552F1ECE478,PinName="Location",PinToolTip="Location\nVector (by ref)",PinType.PinCategory="struct",PinType.PinSubCategory="",PinType.PinSubCategoryObject="/Script/CoreUObject.ScriptStruct'/Script/CoreUObject.Vector'",PinType.PinSubCategoryMemberReference=(),PinType.PinValueType=(),PinType.ContainerType=None,PinType.bIsReference=True,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=True,bAdvancedView=False,bOrphanedPin=False,) - CustomProperties Pin (PinId=C5C95F7DF3A74AF990B3093D85D70478,PinName="Extent",PinToolTip="Extent\nVector",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="15.000000,30.000000,45.000000",AutogeneratedDefaultValue="1.000000,1.000000,1.000000",PersistentGuid=00000000000000000000000000000000,bHidden=False,bNotConnectable=False,bDefaultValueIsReadOnly=False,bDefaultValueIsIgnored=False,bAdvancedView=False,bOrphanedPin=False,) - CustomProperties Pin (PinId=EE0E7856A7B54B5CBE67E4F589E82B4C,PinName="Rotation",PinToolTip="Rotation\nRotator",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="20.000000,30.000000,10.000000",AutogeneratedDefaultValue="0, 0, 0",PersistentGuid=00000000000000000000000000000000,bHidden=False,bNotConnectable=False,bDefaultValueIsReadOnly=False,bDefaultValueIsIgnored=False,bAdvancedView=False,bOrphanedPin=False,) - CustomProperties Pin (PinId=960A2A37701047D5B28353189B7199A5,PinName="Radius2D",PinToolTip="Radius 2D\nInteger",PinType.PinCategory="int",PinType.PinSubCategory="",PinType.PinSubCategoryObject=None,PinType.PinSubCategoryMemberReference=(),PinType.PinValueType=(),PinType.ContainerType=None,PinType.bIsReference=False,PinType.bIsConst=True,PinType.bIsWeakPointer=False,PinType.bIsUObjectWrapper=False,PinType.bSerializeAsSinglePrecisionFloat=False,DefaultValue="8",AutogeneratedDefaultValue="5",PersistentGuid=00000000000000000000000000000000,bHidden=False,bNotConnectable=False,bDefaultValueIsReadOnly=False,bDefaultValueIsIgnored=False,bAdvancedView=False,bOrphanedPin=False,) - CustomProperties Pin (PinId=DE5301DC038D43969F9DB9F41949AFD0,PinName="Height",PinToolTip="Height\nFloat (single-precision)",PinType.PinCategory="real",PinType.PinSubCategory="float",PinType.PinSubCategoryObject=None,PinType.PinSubCategoryMemberReference=(),PinType.PinValueType=(),PinType.ContainerType=None,PinType.bIsReference=False,PinType.bIsConst=True,PinType.bIsWeakPointer=False,PinType.bIsUObjectWrapper=False,PinType.bSerializeAsSinglePrecisionFloat=False,DefaultValue="200.500000",AutogeneratedDefaultValue="100.000000",PersistentGuid=00000000000000000000000000000000,bHidden=False,bNotConnectable=False,bDefaultValueIsReadOnly=False,bDefaultValueIsIgnored=False,bAdvancedView=False,bOrphanedPin=False,) - CustomProperties Pin (PinId=5E42C9BD542E413E9CEF9D5A98A4C5EB,PinName="bRebuildGrids",PinToolTip="Rebuild Grids\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="true",PersistentGuid=00000000000000000000000000000000,bHidden=False,bNotConnectable=False,bDefaultValueIsReadOnly=False,bDefaultValueIsIgnored=False,bAdvancedView=False,bOrphanedPin=False,) - CustomProperties Pin (PinId=5A398222D44740A98F9742B5BDDB3580,PinName="ReturnValue",PinToolTip="Return Value\nInteger\n\nAdd Local Navigation Grid for Box",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: [20.5, 19], - color: Configuration.nodeColors.blue, - icon: SVGIcon.functionSymbol, - pins: 9, - pinNames: [ - "Location", - "Extent", - "Rotation", - "Radius 2D", - "Height", - "Rebuild Grids", - "Return Value", - ], - delegate: false, - development: false, - additionalTest: async (node, pins, blueprintPage) => { - await expect(pins[2].locator("ueb-input")).toHaveText(["15.0", "30.0", "45.0"]) - await expect(pins[3].locator("ueb-input")).toHaveText(["10.0", "20.0", "30.0"]) - await expect(pins[4].locator("ueb-input")).toHaveText(["8"]) - await expect(pins[5].locator("ueb-input")).toHaveText(["200.5"]) - await expect(pins[6].locator("input")).toBeChecked({ checked: false }) - let inputs = await pins[2].locator("ueb-input").all() - await inputs[0].fill("-11.11") - await inputs[1].fill("-22.22") - await inputs[2].fill("-33.33") - await blueprintPage.blur() - expect(await pins[2].evaluate(pin => pin.entity.DefaultValue.constructor.className())) - .toBe("SimpleSerializationVectorEntity") - await expect(pins[2].locator("ueb-input")).toHaveText(["-11.11", "-22.22", "-33.33"]) - inputs = await pins[3].locator("ueb-input").all() - await inputs[0].fill("88") - await inputs[1].fill("77") - await inputs[2].fill("66") - await blueprintPage.blur() - expect(await pins[3].evaluate(pin => pin.entity.DefaultValue.constructor.className())) - .toBe("SimpleSerializationRotatorEntity") - await expect(pins[3].locator("ueb-input")).toHaveText(["88.0", "77.0", "66.0"]) - await pins[4].locator("ueb-input").fill("35.814") - await blueprintPage.blur() - expect(await pins[4].evaluate(pin => pin.entity.DefaultValue.constructor.className())) - .toBe("IntegerEntity") - await expect(pins[4].locator("ueb-input")).toHaveText("35") - await pins[6].locator("input").check() - await expect(pins[6].locator("input")).toBeChecked() - expect(await pins[6].evaluate(pin => pin.entity.DefaultValue.constructor.className())) - .toBe("BooleanEntity") - const serialization = await blueprintPage.getSerializedNodes() - await blueprintPage.removeNodes() - await blueprintPage.paste(serialization) - pins = await blueprintPage.blueprintLocator.locator("ueb-pin").all() - await expect(pins[2].locator("ueb-input")).toHaveText(["-11.11", "-22.22", "-33.33"]) - await expect(pins[3].locator("ueb-input")).toHaveText(["88.0", "77.0", "66.0"]) - await expect(pins[4].locator("ueb-input")).toHaveText(["35"]) - await expect(pins[5].locator("ueb-input")).toHaveText(["200.5"]) - await expect(pins[6].locator("input")).toBeChecked() - } - }, - { - name: "Self", - value: String.raw` - Begin Object Class=/Script/BlueprintGraph.K2Node_Self Name="K2Node_Self_0" ExportPath="/Script/BlueprintGraph.K2Node_Self'/Temp/Untitled_1.Untitled_1:PersistentLevel.Untitled.EventGraph.K2Node_Self_0'" - NodePosX=224 - NodePosY=848 - NodeGuid=70A71735B5F247699242DBC67A166772 - CustomProperties Pin (PinId=3B41006840BA3918576575AC4419E030,PinName="self",Direction="EGPD_Output",PinType.PinCategory="object",PinType.PinSubCategory="self",PinType.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_1 C3A04D2142AC39C30B0A62876AF7ECC8,),PersistentGuid=00000000000000000000000000000000,bHidden=False,bNotConnectable=False,bDefaultValueIsReadOnly=False,bDefaultValueIsIgnored=False,bAdvancedView=False,bOrphanedPin=False,) - End Object - `, - size: [8, 2.5], - pins: 1, - delegate: false, - development: false, - additionalTest: async node => { - expect(await (node.evaluate(n => n.classList.contains("ueb-node-style-getter")))).toBeTruthy() - } - }, - ]) - } -} diff --git a/tests/resources/PCGNodes.js b/tests/resources/PCGNodes.js deleted file mode 100644 index a89d05a..0000000 --- a/tests/resources/PCGNodes.js +++ /dev/null @@ -1,395 +0,0 @@ -import { css } from "lit" -import Configuration from "../../js/Configuration.js" -import SVGIcon from "../../js/SVGIcon.js" -import { expect } from "../fixtures/test.js" -import NodeTests from "./NodeTests.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("")) - } - }, - { - name: "Set Point Color", - value: String.raw` - Begin Object Class=/Script/PCGEditor.PCGEditorGraphNode Name="PCGEditorGraphNode_1" ExportPath="/Script/PCGEditor.PCGEditorGraphNode'/Game/NewPCGGraph.NewPCGGraph:PCGEditorGraph_0.PCGEditorGraphNode_1'" - Begin Object Class=/Script/PCG.PCGNode Name="ExecuteBlueprint_1" ExportPath="/Script/PCG.PCGNode'/Game/NewPCGGraph.NewPCGGraph:PCGEditorGraph_0.PCGEditorGraphNode_1.ExecuteBlueprint_1'" - Begin Object Class=/Script/PCG.PCGBlueprintSettings Name="PCGBlueprintSettings_1" ExportPath="/Script/PCG.PCGBlueprintSettings'/Game/NewPCGGraph.NewPCGGraph:PCGEditorGraph_0.PCGEditorGraphNode_1.ExecuteBlueprint_1.PCGBlueprintSettings_1'" - Begin Object Class=/PCG/BP_Elements/SetPointColor.SetPointColor_C Name="SetPointColor_C_0" ExportPath="/PCG/BP_Elements/SetPointColor.SetPointColor_C'/Game/NewPCGGraph.NewPCGGraph:PCGEditorGraph_0.PCGEditorGraphNode_1.ExecuteBlueprint_1.PCGBlueprintSettings_1.SetPointColor_C_0'" - End Object - End Object - Begin Object Class=/Script/PCG.PCGPin Name="PCGPin_0" ExportPath="/Script/PCG.PCGPin'/Game/NewPCGGraph.NewPCGGraph:PCGEditorGraph_0.PCGEditorGraphNode_1.ExecuteBlueprint_1.PCGPin_0'" - End Object - Begin Object Class=/Script/PCG.PCGPin Name="PCGPin_1" ExportPath="/Script/PCG.PCGPin'/Game/NewPCGGraph.NewPCGGraph:PCGEditorGraph_0.PCGEditorGraphNode_1.ExecuteBlueprint_1.PCGPin_1'" - End Object - Begin Object Class=/Script/PCG.PCGPin Name="PCGPin_2" ExportPath="/Script/PCG.PCGPin'/Game/NewPCGGraph.NewPCGGraph:PCGEditorGraph_0.PCGEditorGraphNode_1.ExecuteBlueprint_1.PCGPin_2'" - End Object - Begin Object Class=/Script/PCG.PCGPin Name="PCGPin_3" ExportPath="/Script/PCG.PCGPin'/Game/NewPCGGraph.NewPCGGraph:PCGEditorGraph_0.PCGEditorGraphNode_1.ExecuteBlueprint_1.PCGPin_3'" - End Object - Begin Object Class=/Script/PCG.PCGPin Name="PCGPin_4" ExportPath="/Script/PCG.PCGPin'/Game/NewPCGGraph.NewPCGGraph:PCGEditorGraph_0.PCGEditorGraphNode_1.ExecuteBlueprint_1.PCGPin_4'" - End Object - Begin Object Class=/Script/PCG.PCGPin Name="PCGPin_5" ExportPath="/Script/PCG.PCGPin'/Game/NewPCGGraph.NewPCGGraph:PCGEditorGraph_0.PCGEditorGraphNode_1.ExecuteBlueprint_1.PCGPin_5'" - End Object - Begin Object Class=/Script/PCG.PCGPin Name="PCGPin_6" ExportPath="/Script/PCG.PCGPin'/Game/NewPCGGraph.NewPCGGraph:PCGEditorGraph_0.PCGEditorGraphNode_1.ExecuteBlueprint_1.PCGPin_6'" - End Object - Begin Object Class=/Script/PCG.PCGPin Name="PCGPin_7" ExportPath="/Script/PCG.PCGPin'/Game/NewPCGGraph.NewPCGGraph:PCGEditorGraph_0.PCGEditorGraphNode_1.ExecuteBlueprint_1.PCGPin_7'" - End Object - End Object - Begin Object Name="ExecuteBlueprint_1" ExportPath="/Script/PCG.PCGNode'/Game/NewPCGGraph.NewPCGGraph:PCGEditorGraph_0.PCGEditorGraphNode_1.ExecuteBlueprint_1'" - Begin Object Name="PCGBlueprintSettings_1" ExportPath="/Script/PCG.PCGBlueprintSettings'/Game/NewPCGGraph.NewPCGGraph:PCGEditorGraph_0.PCGEditorGraphNode_1.ExecuteBlueprint_1.PCGBlueprintSettings_1'" - Begin Object Name="SetPointColor_C_0" ExportPath="/PCG/BP_Elements/SetPointColor.SetPointColor_C'/Game/NewPCGGraph.NewPCGGraph:PCGEditorGraph_0.PCGEditorGraphNode_1.ExecuteBlueprint_1.PCGBlueprintSettings_1.SetPointColor_C_0'" - End Object - BlueprintElementType="/Script/Engine.BlueprintGeneratedClass'/PCG/BP_Elements/SetPointColor.SetPointColor_C'" - BlueprintElementInstance="/PCG/BP_Elements/SetPointColor.SetPointColor_C'SetPointColor_C_0'" - Seed=-1868785340 - bExposeToLibrary=False - CachedOverridableParams(0)=(Label="Seed",PropertiesNames=("Seed"),PropertyClass="/Script/CoreUObject.Class'/Script/PCG.PCGBlueprintSettings'") - CachedOverridableParams(1)=(Label="R",PropertiesNames=("Linear Color","R"),PropertyClass="/Script/Engine.BlueprintGeneratedClass'/PCG/BP_Elements/SetPointColor.SetPointColor_C'") - CachedOverridableParams(2)=(Label="G",PropertiesNames=("Linear Color","G"),PropertyClass="/Script/Engine.BlueprintGeneratedClass'/PCG/BP_Elements/SetPointColor.SetPointColor_C'") - CachedOverridableParams(3)=(Label="B",PropertiesNames=("Linear Color","B"),PropertyClass="/Script/Engine.BlueprintGeneratedClass'/PCG/BP_Elements/SetPointColor.SetPointColor_C'") - CachedOverridableParams(4)=(Label="A",PropertiesNames=("Linear Color","A"),PropertyClass="/Script/Engine.BlueprintGeneratedClass'/PCG/BP_Elements/SetPointColor.SetPointColor_C'") - End Object - Begin Object Name="PCGPin_0" ExportPath="/Script/PCG.PCGPin'/Game/NewPCGGraph.NewPCGGraph:PCGEditorGraph_0.PCGEditorGraphNode_1.ExecuteBlueprint_1.PCGPin_0'" - Node="/Script/PCG.PCGNode'PCGEditorGraphNode_1.ExecuteBlueprint_1'" - Properties=(Label="In",AllowedTypes=Point) - End Object - Begin Object Name="PCGPin_1" ExportPath="/Script/PCG.PCGPin'/Game/NewPCGGraph.NewPCGGraph:PCGEditorGraph_0.PCGEditorGraphNode_1.ExecuteBlueprint_1.PCGPin_1'" - Node="/Script/PCG.PCGNode'PCGEditorGraphNode_1.ExecuteBlueprint_1'" - 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_0.PCGEditorGraphNode_1.ExecuteBlueprint_1.PCGPin_2'" - Node="/Script/PCG.PCGNode'PCGEditorGraphNode_1.ExecuteBlueprint_1'" - 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_0.PCGEditorGraphNode_1.ExecuteBlueprint_1.PCGPin_3'" - Node="/Script/PCG.PCGNode'PCGEditorGraphNode_1.ExecuteBlueprint_1'" - Properties=(Label="Out",AllowedTypes=Point) - End Object - Begin Object Name="PCGPin_4" ExportPath="/Script/PCG.PCGPin'/Game/NewPCGGraph.NewPCGGraph:PCGEditorGraph_0.PCGEditorGraphNode_1.ExecuteBlueprint_1.PCGPin_4'" - Node="/Script/PCG.PCGNode'PCGEditorGraphNode_1.ExecuteBlueprint_1'" - Properties=(Label="R",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}\""), "", "float", "Linear Color/R")) - End Object - Begin Object Name="PCGPin_5" ExportPath="/Script/PCG.PCGPin'/Game/NewPCGGraph.NewPCGGraph:PCGEditorGraph_0.PCGEditorGraphNode_1.ExecuteBlueprint_1.PCGPin_5'" - Node="/Script/PCG.PCGNode'PCGEditorGraphNode_1.ExecuteBlueprint_1'" - Properties=(Label="G",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}\""), "", "float", "Linear Color/G")) - End Object - Begin Object Name="PCGPin_6" ExportPath="/Script/PCG.PCGPin'/Game/NewPCGGraph.NewPCGGraph:PCGEditorGraph_0.PCGEditorGraphNode_1.ExecuteBlueprint_1.PCGPin_6'" - Node="/Script/PCG.PCGNode'PCGEditorGraphNode_1.ExecuteBlueprint_1'" - Properties=(Label="B",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}\""), "", "float", "Linear Color/B")) - End Object - Begin Object Name="PCGPin_7" ExportPath="/Script/PCG.PCGPin'/Game/NewPCGGraph.NewPCGGraph:PCGEditorGraph_0.PCGEditorGraphNode_1.ExecuteBlueprint_1.PCGPin_7'" - Node="/Script/PCG.PCGNode'PCGEditorGraphNode_1.ExecuteBlueprint_1'" - Properties=(Label="A",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}\""), "", "float", "Linear Color/A")) - End Object - PositionX=512 - PositionY=256 - SettingsInterface="/Script/PCG.PCGBlueprintSettings'PCGBlueprintSettings_1'" - InputPins(0)="/Script/PCG.PCGPin'PCGPin_0'" - InputPins(1)="/Script/PCG.PCGPin'PCGPin_1'" - InputPins(2)="/Script/PCG.PCGPin'PCGPin_2'" - InputPins(3)="/Script/PCG.PCGPin'PCGPin_4'" - InputPins(4)="/Script/PCG.PCGPin'PCGPin_5'" - InputPins(5)="/Script/PCG.PCGPin'PCGPin_6'" - InputPins(6)="/Script/PCG.PCGPin'PCGPin_7'" - OutputPins(0)="/Script/PCG.PCGPin'PCGPin_3'" - End Object - PCGNode="/Script/PCG.PCGNode'ExecuteBlueprint_1'" - NodePosX=512 - NodePosY=256 - AdvancedPinDisplay=Shown - bUserSetEnabledState=True - NodeGuid=74E6A6E9EF084BF4A24B56E43712EC85 - CustomProperties Pin (PinId=53B558601FD94E0A81D59879F7C84EE4,PinName="In",PinFriendlyName="In",PinType.PinCategory="Concrete Data",PinType.PinSubCategory="Point Data",PinType.PinSubCategoryObject=None,PinType.PinSubCategoryMemberReference=(),PinType.PinValueType=(),PinType.ContainerType=None,PinType.bIsReference=False,PinType.bIsConst=False,PinType.bIsWeakPointer=False,PinType.bIsUObjectWrapper=False,PinType.bSerializeAsSinglePrecisionFloat=False,PersistentGuid=00000000000000000000000000000000,bHidden=False,bNotConnectable=False,bDefaultValueIsReadOnly=False,bDefaultValueIsIgnored=False,bAdvancedView=False,bOrphanedPin=False,) - CustomProperties Pin (PinId=D2D1A26AF9524E569FCA2DD6B15C7667,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=3506C39048EA435D8E16028C6E481FFE,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=7FBFCE159BE5483F9C0AF8E8053BF3B9,PinName="R",PinFriendlyName="R",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=996EFC1D746C46D39BB50E0AF3A156D4,PinName="G",PinFriendlyName="G",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=4693B14DC236425097A5FA8B3DDD46A3,PinName="B",PinFriendlyName="B",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=831312342DB14283A98ECB2D331C1B3D,PinName="A",PinFriendlyName="A",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=6F13FFA544CF43BD94FA007B9D6FC25A,PinName="Out",PinFriendlyName="Out",Direction="EGPD_Output",PinType.PinCategory="Concrete Data",PinType.PinSubCategory="Point Data",PinType.PinSubCategoryObject=None,PinType.PinSubCategoryMemberReference=(),PinType.PinValueType=(),PinType.ContainerType=None,PinType.bIsReference=False,PinType.bIsConst=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, 16], - pins: 8, - pinNames: ["In", "Overrides", "Seed", "R", "G", "B", "A", "Out"], - delegate: false, - development: false, - additionalTest: async (node, pins) => { - expect(await pins[0].evaluate(pin => pin.template.renderIcon().strings.join(""))) - .toEqual(SVGIcon.pcgStackPin.strings.join("")) - expect(await pins[0].evaluate(pin => pin.entity.pinColor().cssText)).toEqual("63, 137, 255") - expect(await pins[1].evaluate(pin => pin.template.renderIcon().strings.join(""))) - .toEqual(SVGIcon.pcgParamPin.strings.join("")) - expect(await pins[2].evaluate(pin => pin.template.renderIcon().strings.join(""))) - .toEqual(SVGIcon.pcgParamPin.strings.join("")) - expect(await pins[3].evaluate(pin => pin.template.renderIcon().strings.join(""))) - .toEqual(SVGIcon.pcgParamPin.strings.join("")) - expect(await pins[4].evaluate(pin => pin.template.renderIcon().strings.join(""))) - .toEqual(SVGIcon.pcgParamPin.strings.join("")) - expect(await pins[5].evaluate(pin => pin.template.renderIcon().strings.join(""))) - .toEqual(SVGIcon.pcgParamPin.strings.join("")) - expect(await pins[6].evaluate(pin => pin.template.renderIcon().strings.join(""))) - .toEqual(SVGIcon.pcgParamPin.strings.join("")) - expect(await pins[7].evaluate(pin => pin.template.renderIcon().strings.join(""))) - .toEqual(SVGIcon.pcgPin.strings.join("")) - expect(await pins[7].evaluate(pin => pin.entity.pinColor().cssText)).toEqual("63, 137, 255") - } - }, - { - name: "PCG Branch", - title: "Branch", - value: String.raw` - Begin Object Class=/Script/PCGEditor.PCGEditorGraphNode Name="PCGEditorGraphNode_2" ExportPath="/Script/PCGEditor.PCGEditorGraphNode'/Game/NewPCGGraph.NewPCGGraph:PCGEditorGraph_0.PCGEditorGraphNode_2'" - Begin Object Class=/Script/PCG.PCGNode Name="Branch_2" ExportPath="/Script/PCG.PCGNode'/Game/NewPCGGraph.NewPCGGraph:PCGEditorGraph_0.PCGEditorGraphNode_2.Branch_2'" - Begin Object Class=/Script/PCG.PCGPin Name="PCGPin_4" ExportPath="/Script/PCG.PCGPin'/Game/NewPCGGraph.NewPCGGraph:PCGEditorGraph_0.PCGEditorGraphNode_2.Branch_2.PCGPin_4'" - End Object - Begin Object Class=/Script/PCG.PCGPin Name="PCGPin_3" ExportPath="/Script/PCG.PCGPin'/Game/NewPCGGraph.NewPCGGraph:PCGEditorGraph_0.PCGEditorGraphNode_2.Branch_2.PCGPin_3'" - End Object - Begin Object Class=/Script/PCG.PCGPin Name="PCGPin_2" ExportPath="/Script/PCG.PCGPin'/Game/NewPCGGraph.NewPCGGraph:PCGEditorGraph_0.PCGEditorGraphNode_2.Branch_2.PCGPin_2'" - End Object - Begin Object Class=/Script/PCG.PCGPin Name="PCGPin_1" ExportPath="/Script/PCG.PCGPin'/Game/NewPCGGraph.NewPCGGraph:PCGEditorGraph_0.PCGEditorGraphNode_2.Branch_2.PCGPin_1'" - End Object - Begin Object Class=/Script/PCG.PCGPin Name="PCGPin_0" ExportPath="/Script/PCG.PCGPin'/Game/NewPCGGraph.NewPCGGraph:PCGEditorGraph_0.PCGEditorGraphNode_2.Branch_2.PCGPin_0'" - End Object - Begin Object Class=/Script/PCG.PCGBranchSettings Name="PCGBranchSettings_0" ExportPath="/Script/PCG.PCGBranchSettings'/Game/NewPCGGraph.NewPCGGraph:PCGEditorGraph_0.PCGEditorGraphNode_2.Branch_2.PCGBranchSettings_0'" - End Object - End Object - Begin Object Name="Branch_2" ExportPath="/Script/PCG.PCGNode'/Game/NewPCGGraph.NewPCGGraph:PCGEditorGraph_0.PCGEditorGraphNode_2.Branch_2'" - Begin Object Name="PCGPin_4" ExportPath="/Script/PCG.PCGPin'/Game/NewPCGGraph.NewPCGGraph:PCGEditorGraph_0.PCGEditorGraphNode_2.Branch_2.PCGPin_4'" - Node="/Script/PCG.PCGNode'PCGEditorGraphNode_2.Branch_2'" - Properties=(Label="Output B",Tooltip=NSLOCTEXT("FPCGBranchElement", "OutputPinTooltipB", "Will only route input if \'Output To B\' (overridable) is true")) - End Object - Begin Object Name="PCGPin_3" ExportPath="/Script/PCG.PCGPin'/Game/NewPCGGraph.NewPCGGraph:PCGEditorGraph_0.PCGEditorGraphNode_2.Branch_2.PCGPin_3'" - Node="/Script/PCG.PCGNode'PCGEditorGraphNode_2.Branch_2'" - Properties=(Label="Output A",Tooltip=NSLOCTEXT("FPCGBranchElement", "OutputPinTooltipA", "Will only route input if \'Output To B\' (overridable) is false")) - End Object - Begin Object Name="PCGPin_2" ExportPath="/Script/PCG.PCGPin'/Game/NewPCGGraph.NewPCGGraph:PCGEditorGraph_0.PCGEditorGraphNode_2.Branch_2.PCGPin_2'" - Node="/Script/PCG.PCGNode'PCGEditorGraphNode_2.Branch_2'" - Properties=(Label="Output to B",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}\""), "", "bool", "bOutputToB")) - End Object - Begin Object Name="PCGPin_1" ExportPath="/Script/PCG.PCGPin'/Game/NewPCGGraph.NewPCGGraph:PCGEditorGraph_0.PCGEditorGraphNode_2.Branch_2.PCGPin_1'" - Node="/Script/PCG.PCGNode'PCGEditorGraphNode_2.Branch_2'" - 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_0" ExportPath="/Script/PCG.PCGPin'/Game/NewPCGGraph.NewPCGGraph:PCGEditorGraph_0.PCGEditorGraphNode_2.Branch_2.PCGPin_0'" - Node="/Script/PCG.PCGNode'PCGEditorGraphNode_2.Branch_2'" - Properties=(Label="In") - End Object - Begin Object Name="PCGBranchSettings_0" ExportPath="/Script/PCG.PCGBranchSettings'/Game/NewPCGGraph.NewPCGGraph:PCGEditorGraph_0.PCGEditorGraphNode_2.Branch_2.PCGBranchSettings_0'" - Seed=-420875123 - CachedOverridableParams(0)=(Label="Output to B",PropertiesNames=("bOutputToB"),PropertyClass="/Script/CoreUObject.Class'/Script/PCG.PCGBranchSettings'") - End Object - PositionX=384 - PositionY=128 - SettingsInterface="/Script/PCG.PCGBranchSettings'PCGBranchSettings_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'" - OutputPins(1)="/Script/PCG.PCGPin'PCGPin_4'" - End Object - PCGNode="/Script/PCG.PCGNode'Branch_2'" - NodePosX=384 - NodePosY=128 - AdvancedPinDisplay=Shown - bUserSetEnabledState=True - NodeGuid=BCEBB6C85A8844F2B06322DF95805CB5 - CustomProperties Pin (PinId=4CBC2755317F47F7BA23B7E928C7A436,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=390B992FE20D4AAAB63EC14DE8732AD2,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=15D942E8E7C640719B71544BBEA5365D,PinName="Output to B",PinFriendlyName="Output To B",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=9397BA7C5D694D9FB070B353BB26BA57,PinName="Output A",PinFriendlyName="Output A",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,) - CustomProperties Pin (PinId=32167D5DBA9A4498B162B90B0F16A191,PinName="Output B",PinFriendlyName="Output B",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 - `, - size: [13, 9], - color: Configuration.nodeColors.intenseGreen, - pins: 5, - pinNames: ["In", "Overrides", "Output To B", "Output A", "Output B"], - delegate: false, - development: false, - additionalTest: async (node, pins) => { - expect(await pins[0].evaluate(pin => pin.template.renderIcon().strings.join(""))) - .toEqual(SVGIcon.pcgStackPin.strings.join("")) - expect(await pins[0].evaluate(pin => pin.entity.pinColor().cssText)).toEqual("132, 132, 132") - expect(await pins[1].evaluate(pin => pin.template.renderIcon().strings.join(""))) - .toEqual(SVGIcon.pcgParamPin.strings.join("")) - expect(await pins[2].evaluate(pin => pin.template.renderIcon().strings.join(""))) - .toEqual(SVGIcon.pcgParamPin.strings.join("")) - expect(await pins[3].evaluate(pin => pin.template.renderIcon().strings.join(""))) - .toEqual(SVGIcon.pcgPin.strings.join("")) - expect(await pins[3].evaluate(pin => pin.entity.pinColor().cssText)).toEqual("132, 132, 132") - expect(await pins[4].evaluate(pin => pin.template.renderIcon().strings.join(""))) - .toEqual(SVGIcon.pcgPin.strings.join("")) - expect(await pins[4].evaluate(pin => pin.entity.pinColor().cssText)).toEqual("132, 132, 132") - } - }, - { - name: "PCG Select", - title: "Select", - value: String.raw` - Begin Object Class=/Script/PCGEditor.PCGEditorGraphNode Name="PCGEditorGraphNode_0" ExportPath="/Script/PCGEditor.PCGEditorGraphNode'/Game/NewPCGGraph.NewPCGGraph:PCGEditorGraph_0.PCGEditorGraphNode_0'" - Begin Object Class=/Script/PCG.PCGNode Name="Select_1" ExportPath="/Script/PCG.PCGNode'/Game/NewPCGGraph.NewPCGGraph:PCGEditorGraph_0.PCGEditorGraphNode_0.Select_1'" - Begin Object Class=/Script/PCG.PCGBooleanSelectSettings Name="PCGBooleanSelectSettings_0" ExportPath="/Script/PCG.PCGBooleanSelectSettings'/Game/NewPCGGraph.NewPCGGraph:PCGEditorGraph_0.PCGEditorGraphNode_0.Select_1.PCGBooleanSelectSettings_0'" - End Object - Begin Object Class=/Script/PCG.PCGPin Name="PCGPin_0" ExportPath="/Script/PCG.PCGPin'/Game/NewPCGGraph.NewPCGGraph:PCGEditorGraph_0.PCGEditorGraphNode_0.Select_1.PCGPin_0'" - End Object - Begin Object Class=/Script/PCG.PCGPin Name="PCGPin_1" ExportPath="/Script/PCG.PCGPin'/Game/NewPCGGraph.NewPCGGraph:PCGEditorGraph_0.PCGEditorGraphNode_0.Select_1.PCGPin_1'" - End Object - Begin Object Class=/Script/PCG.PCGPin Name="PCGPin_2" ExportPath="/Script/PCG.PCGPin'/Game/NewPCGGraph.NewPCGGraph:PCGEditorGraph_0.PCGEditorGraphNode_0.Select_1.PCGPin_2'" - End Object - Begin Object Class=/Script/PCG.PCGPin Name="PCGPin_3" ExportPath="/Script/PCG.PCGPin'/Game/NewPCGGraph.NewPCGGraph:PCGEditorGraph_0.PCGEditorGraphNode_0.Select_1.PCGPin_3'" - End Object - Begin Object Class=/Script/PCG.PCGPin Name="PCGPin_4" ExportPath="/Script/PCG.PCGPin'/Game/NewPCGGraph.NewPCGGraph:PCGEditorGraph_0.PCGEditorGraphNode_0.Select_1.PCGPin_4'" - End Object - End Object - Begin Object Name="Select_1" ExportPath="/Script/PCG.PCGNode'/Game/NewPCGGraph.NewPCGGraph:PCGEditorGraph_0.PCGEditorGraphNode_0.Select_1'" - Begin Object Name="PCGBooleanSelectSettings_0" ExportPath="/Script/PCG.PCGBooleanSelectSettings'/Game/NewPCGGraph.NewPCGGraph:PCGEditorGraph_0.PCGEditorGraphNode_0.Select_1.PCGBooleanSelectSettings_0'" - Seed=-764420405 - CachedOverridableParams(0)=(Label="Use Input B",PropertiesNames=("bUseInputB"),PropertyClass="/Script/CoreUObject.Class'/Script/PCG.PCGBooleanSelectSettings'") - End Object - Begin Object Name="PCGPin_0" ExportPath="/Script/PCG.PCGPin'/Game/NewPCGGraph.NewPCGGraph:PCGEditorGraph_0.PCGEditorGraphNode_0.Select_1.PCGPin_0'" - Node="/Script/PCG.PCGNode'PCGEditorGraphNode_0.Select_1'" - Properties=(Label="Input A",Tooltip=NSLOCTEXT("FPCGBooleanSelectElement", "FirstInputPinTooltip", "Will only be used if \'Use Input B\' (overridable) is false")) - End Object - Begin Object Name="PCGPin_1" ExportPath="/Script/PCG.PCGPin'/Game/NewPCGGraph.NewPCGGraph:PCGEditorGraph_0.PCGEditorGraphNode_0.Select_1.PCGPin_1'" - Node="/Script/PCG.PCGNode'PCGEditorGraphNode_0.Select_1'" - Properties=(Label="Input B",Tooltip=NSLOCTEXT("FPCGBooleanSelectElement", "SecondInputPinTooltip", "Will only be used if \'Use Input B\' (overridable) is true")) - End Object - Begin Object Name="PCGPin_2" ExportPath="/Script/PCG.PCGPin'/Game/NewPCGGraph.NewPCGGraph:PCGEditorGraph_0.PCGEditorGraphNode_0.Select_1.PCGPin_2'" - Node="/Script/PCG.PCGNode'PCGEditorGraphNode_0.Select_1'" - 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_3" ExportPath="/Script/PCG.PCGPin'/Game/NewPCGGraph.NewPCGGraph:PCGEditorGraph_0.PCGEditorGraphNode_0.Select_1.PCGPin_3'" - Node="/Script/PCG.PCGNode'PCGEditorGraphNode_0.Select_1'" - Properties=(Label="Use Input B",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}\""), "", NSLOCTEXT("", "16C4E377C2E74CE5BA25165971FD45EF", "bool"), NSLOCTEXT("", "C2769CCD78C64949B3473D033EAF34BC", "bUseInputB"))) - End Object - Begin Object Name="PCGPin_4" ExportPath="/Script/PCG.PCGPin'/Game/NewPCGGraph.NewPCGGraph:PCGEditorGraph_0.PCGEditorGraphNode_0.Select_1.PCGPin_4'" - Node="/Script/PCG.PCGNode'PCGEditorGraphNode_0.Select_1'" - Properties=(Label="Out",Tooltip=NSLOCTEXT("FPCGBooleanSelectElement", "OutputPinTooltip", "All input will gathered into a single data collection")) - End Object - PositionX=896 - PositionY=256 - SettingsInterface="/Script/PCG.PCGBooleanSelectSettings'PCGBooleanSelectSettings_0'" - InputPins(0)="/Script/PCG.PCGPin'PCGPin_0'" - InputPins(1)="/Script/PCG.PCGPin'PCGPin_1'" - InputPins(2)="/Script/PCG.PCGPin'PCGPin_2'" - InputPins(3)="/Script/PCG.PCGPin'PCGPin_3'" - OutputPins(0)="/Script/PCG.PCGPin'PCGPin_4'" - End Object - PCGNode="/Script/PCG.PCGNode'Select_1'" - NodePosX=896 - NodePosY=256 - AdvancedPinDisplay=Shown - bUserSetEnabledState=True - NodeGuid=DC0AF7AFAE5643AEAA102848F6C250A1 - CustomProperties Pin (PinId=44103E0035144DDA9CBDF09DABD6FFBB,PinName="Input A",PinFriendlyName="Input A",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=DDAD3EAD7E13487AB8307520FEC50BFE,PinName="Input B",PinFriendlyName="Input B",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=3368F1F000994A78A1AE7445BE7A84F5,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=0EFB81FA173B41D294EB0795B08D8881,PinName="Use Input B",PinFriendlyName="Use Input B",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=49C207211518412D826C77C76B639411,PinName="Out",PinFriendlyName="Out",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 - `, - size: [11, 11], - color: Configuration.nodeColors.intenseGreen, - icon: null, - pins: 5, - pinNames: ["Input A", "Input B", "Overrides", "Use Input B", "Out"], - delegate: false, - development: false, - additionalTest: async (node, pins) => { - expect(await node.evaluate(node => node.classList.contains("ueb-node-style-glass"))).toBeFalsy() - expect(await node.evaluate(node => node.classList.contains("ueb-node-style-default"))).toBeTruthy() - expect(await pins[0].evaluate(p => p.entity.pinColor().cssText)).toBe(css`132, 132, 132`.cssText) - expect(await pins[1].evaluate(p => p.entity.pinColor().cssText)).toBe(css`132, 132, 132`.cssText) - expect(await pins[2].evaluate(p => p.entity.pinColor().cssText)).toBe(css`255, 166, 39`.cssText) - expect(await pins[3].evaluate(p => p.entity.pinColor().cssText)).toBe(css`255, 166, 39`.cssText) - expect(await pins[4].evaluate(p => p.entity.pinColor().cssText)).toBe(css`132, 132, 132`.cssText) - }, - }, - ]) - } -} diff --git a/tests/resources/serializedEntity2-1.js b/tests/resources/serializedEntity2-1.js old mode 100644 new mode 100755 diff --git a/tests/resources/serializedEntity2.js b/tests/resources/serializedEntity2.js old mode 100644 new mode 100755 diff --git a/tests/resources/serializedEntity3.js b/tests/resources/serializedEntity3.js old mode 100644 new mode 100755 diff --git a/tests/resources/serializedEntity4.js b/tests/resources/serializedEntity4.js old mode 100644 new mode 100755 diff --git a/tests/utility.spec.js b/tests/utility.spec.js old mode 100644 new mode 100755 index e8ee179..bdea8f4 --- a/tests/utility.spec.js +++ b/tests/utility.spec.js @@ -112,6 +112,39 @@ test("mergeArrays method test", () => { )).toStrictEqual( [2, 4, 5, 6, 8, 1] ) + expect(Utility.mergeArrays( + [[0, ' '], [1, 'A'], [2, 'A'], [3, 'C']], + [[2, 'B'], [3, 'C'], [4, 'D'], [5, 'E']], + (l, r) => l[0] == r[0] + )).toEqual( + [[0, ' '], [1, 'A'], [2, 'A'], [3, 'C'], [4, 'D'], [5, 'E']] + ) + expect(Utility.mergeArrays( + [ + { id: 3, b: 1, a: 3 }, + { id: 7, b: 2, a: 9 }, + { id: 4, b: -6, a: 12 }, + { id: 9, b: 6, a: 20 }, + { id: 6, b: 1, a: 26 }, + ], + [ + { id: 4, b: -6, a: 12 }, + { id: 6, b: 41, a: 76 }, + { id: 3, b: 5, a: 31 }, + { id: 13, b: 1, a: 22 }, + { id: 9, b: 55, a: 39 }, + ], + (l, r) => l.id == r.id + )).toEqual( + [ + { id: 3, b: 1, a: 3 }, + { id: 7, b: 2, a: 9 }, + { id: 4, b: -6, a: 12 }, + { id: 9, b: 6, a: 20 }, + { id: 6, b: 1, a: 26 }, + { id: 13, b: 1, a: 22 }, + ] + ) }) test("capitalFirstLetter method test", () => { diff --git a/types.js b/types.js old mode 100644 new mode 100755 index 80a7e83..ee21cb6 --- a/types.js +++ b/types.js @@ -57,6 +57,7 @@ * @typedef {import("./js/element/SelectorElement.js").default} SelectorElement * @typedef {import("./js/element/WindowElement.js").default} WindowElement * @typedef {import("./js/entity/ByteEntity.js").default} ByteEntity + * @typedef {import("./js/entity/BlueprintEntity.js").default} BlueprintEntity * @typedef {import("./js/entity/ColorChannelEntity.js").default} ColorChannelEntity * @typedef {import("./js/entity/ComputedTypeEntity.js").default} ComputedTypeEntity * @typedef {import("./js/entity/EnumDisplayValueEntity.js").default} EnumDisplayValueEntity @@ -92,6 +93,7 @@ * @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/Vector4DEntity.js").default} Vector4DEntity * @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 @@ -101,7 +103,6 @@ * @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 {typeof import("./js/entity/ComputedTypeEntity.js").default} ComputedTypeEntityConstructor * @typedef {import("./js/template/IDraggableTemplate.js").default} IDraggableTemplate * @typedef {import("./js/template/IFromToPositionedTemplate.js").default} IFromToPositionedTemplate * @typedef {import("./js/template/IResizeableTemplate.js").default} IResizeableTemplate @@ -141,6 +142,7 @@ * @typedef {import("lit").CSSResult} CSSResult * @typedef {import("lit").PropertyValues} PropertyValues * @typedef {import("lit").TemplateResult} TemplateResult + * @typedef {typeof import("./js/entity/ComputedTypeEntity.js").default} ComputedTypeEntityConstructor */ /** * @template T diff --git a/vscode/package.json b/vscode/package.json old mode 100644 new mode 100755