ue-mcp 1.1.29 → 1.1.30
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +1 -1
- package/dist/tool-counts.json +5 -5
- package/dist/tools/niagara.js +1 -0
- package/dist/tools/niagara.js.map +1 -1
- package/dist/ue-mcp.default.yml +6 -0
- package/package.json +2 -2
- package/plugin/ue_mcp_bridge/Source/UE_MCP_Bridge/Private/Handlers/NiagaraHandlers.cpp +163 -0
- package/plugin/ue_mcp_bridge/Source/UE_MCP_Bridge/Private/Handlers/NiagaraHandlers.h +2 -0
package/README.md
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
# UE-MCP
|
|
2
2
|
|
|
3
|
-
**Unreal Engine Model Context Protocol Server** - gives AI assistants deep read/write access to the Unreal Editor through <!-- count:tools -->24<!-- /count --> category tools covering <!-- count:actions -->
|
|
3
|
+
**Unreal Engine Model Context Protocol Server** - gives AI assistants deep read/write access to the Unreal Editor through <!-- count:tools -->24<!-- /count --> category tools covering <!-- count:actions -->738+<!-- /count --> actions, plus a YAML flow engine for multi-step workflows.
|
|
4
4
|
|
|
5
5
|
```mermaid
|
|
6
6
|
flowchart LR
|
package/dist/tool-counts.json
CHANGED
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
{
|
|
2
2
|
"tools": 24,
|
|
3
|
-
"actions":
|
|
4
|
-
"bridgeActions":
|
|
3
|
+
"actions": 738,
|
|
4
|
+
"bridgeActions": 704,
|
|
5
5
|
"localActions": 34,
|
|
6
6
|
"perTool": {
|
|
7
7
|
"project": 32,
|
|
@@ -13,7 +13,7 @@
|
|
|
13
13
|
"landscape": 12,
|
|
14
14
|
"pcg": 19,
|
|
15
15
|
"foliage": 5,
|
|
16
|
-
"niagara":
|
|
16
|
+
"niagara": 30,
|
|
17
17
|
"audio": 36,
|
|
18
18
|
"widget": 27,
|
|
19
19
|
"editor": 70,
|
|
@@ -31,6 +31,6 @@
|
|
|
31
31
|
},
|
|
32
32
|
"nativeToolsets": 52,
|
|
33
33
|
"nativeToolActions": 830,
|
|
34
|
-
"generatedAt": "2026-07-
|
|
35
|
-
"version": "1.1.
|
|
34
|
+
"generatedAt": "2026-07-23T21:16:37.352Z",
|
|
35
|
+
"version": "1.1.30"
|
|
36
36
|
}
|
package/dist/tools/niagara.js
CHANGED
|
@@ -11,6 +11,7 @@ export const niagaraTool = categoryTool("niagara", "Niagara VFX: systems, emitte
|
|
|
11
11
|
create: bp("Create system. Params: name, packagePath?", "create_niagara_system"),
|
|
12
12
|
create_emitter: bp("Create Niagara emitter. Params: name, packagePath?, templatePath?", "create_niagara_emitter"),
|
|
13
13
|
add_emitter: bp("Add emitter to system. Params: systemPath, emitterPath", "add_emitter_to_system"),
|
|
14
|
+
remove_emitter: bp("Remove an emitter from a system (CRUD delete). Params: systemPath, emitterName? or emitterIndex?", "remove_emitter_from_system", (p) => ({ systemPath: p.systemPath, emitterName: p.emitterName, emitterIndex: p.emitterIndex })),
|
|
14
15
|
list_emitters: bp("List emitters in system. Params: systemPath", "list_emitters_in_system"),
|
|
15
16
|
set_emitter_property: bp("Set emitter property. Params: systemPath, emitterName?, propertyName, value", "set_emitter_property"),
|
|
16
17
|
list_modules: bp("List Niagara modules. Params: directory?", "list_niagara_modules"),
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"niagara.js","sourceRoot":"","sources":["../../src/tools/niagara.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;AACxB,OAAO,EAAE,YAAY,EAAE,EAAE,EAAiC,MAAM,aAAa,CAAC;AAC9E,OAAO,EAAE,IAAI,EAAE,OAAO,EAAE,MAAM,eAAe,CAAC;AAE9C,MAAM,CAAC,MAAM,WAAW,GAAY,YAAY,CAC9C,SAAS,EACT,4EAA4E,EAC5E;IACE,IAAI,EAAY,EAAE,CAAC,qDAAqD,EAAE,sBAAsB,CAAC;IACjG,QAAQ,EAAQ,EAAE,CAAC,mCAAmC,EAAE,kBAAkB,CAAC;IAC3E,KAAK,EAAW,EAAE,CAAC,6JAA6J,EAAE,2BAA2B,CAAC;IAC9M,WAAW,EAAK,EAAE,CAAC,+OAA+O,EAAE,qBAAqB,EAAE,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,EAAE,UAAU,EAAE,CAAC,CAAC,UAAU,EAAE,QAAQ,EAAE,CAAC,CAAC,QAAQ,EAAE,QAAQ,EAAE,CAAC,CAAC,QAAQ,EAAE,KAAK,EAAE,CAAC,CAAC,KAAK,EAAE,QAAQ,EAAE,CAAC,CAAC,QAAQ,EAAE,CAAC,CAAC;IACnZ,UAAU,EAAM,EAAE,CAAC,wHAAwH,EAAE,oBAAoB,EAAE,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,EAAE,UAAU,EAAE,CAAC,CAAC,UAAU,EAAE,CAAC,CAAC;IACzM,aAAa,EAAG,EAAE,CAAC,yEAAyE,EAAE,uBAAuB,CAAC;IACtH,MAAM,EAAU,EAAE,CAAC,2CAA2C,EAAE,uBAAuB,CAAC;IACxF,cAAc,EAAE,EAAE,CAAC,mEAAmE,EAAE,wBAAwB,CAAC;IACjH,WAAW,EAAK,EAAE,CAAC,wDAAwD,EAAE,uBAAuB,CAAC;IACrG,aAAa,EAAG,EAAE,CAAC,6CAA6C,EAAE,yBAAyB,CAAC;IAC5F,oBAAoB,EAAE,EAAE,CAAC,6EAA6E,EAAE,sBAAsB,CAAC;IAC/H,YAAY,EAAI,EAAE,CAAC,0CAA0C,EAAE,sBAAsB,CAAC;IACtF,gBAAgB,EAAE,EAAE,CAAC,oCAAoC,EAAE,kBAAkB,CAAC;IAC9E,cAAc,EAAI,EAAE,CAAC,+EAA+E,EAAE,wBAAwB,CAAC;IAC/H,YAAY,EAAM,EAAE,CAAC,gHAAgH,EAAE,sBAAsB,CAAC;IAC9J,eAAe,EAAG,EAAE,CAAC,0FAA0F,EAAE,yBAAyB,CAAC;IAC3I,qBAAqB,EAAE,EAAE,CAAC,+HAA+H,EAAE,uBAAuB,CAAC;IACnL,uBAAuB,EAAE,EAAE,CAAC,qDAAqD,EAAE,wBAAwB,CAAC;IAC5G,uBAAuB,EAAE,EAAE,CAAC,0FAA0F,EAAE,iCAAiC,CAAC;IAC1J,iBAAiB,EAAE,EAAE,CAAC,8FAA8F,EAAE,2BAA2B,CAAC;IAClJ,sBAAsB,EAAE,EAAE,CAAC,yDAAyD,EAAE,gCAAgC,CAAC;IACvH,kBAAkB,EAAG,EAAE,CAAC,4LAA4L,EAAE,4BAA4B,CAAC;IACnP,gBAAgB,EAAK,EAAE,CAAC,yIAAyI,EAAE,0BAA0B,CAAC;IAC9L,UAAU,EAAW,EAAE,CAAC,gWAAgW,EAAE,oBAAoB,EAAE,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,EAAE,UAAU,EAAE,CAAC,CAAC,UAAU,EAAE,YAAY,EAAE,CAAC,CAAC,YAAY,EAAE,YAAY,EAAE,CAAC,CAAC,YAAY,EAAE,WAAW,EAAE,CAAC,CAAC,WAAW,EAAE,YAAY,EAAE,CAAC,CAAC,YAAY,EAAE,WAAW,EAAE,CAAC,CAAC,WAAW,EAAE,CAAC,CAAC;IACxkB,oBAAoB,EAAE,EAAE,CAAC,mHAAmH,EAAE,8BAA8B,CAAC;IAC7K,iBAAiB,EAAI,EAAE,CAAC,yJAAyJ,EAAE,2BAA2B,CAAC;IAC/M,uBAAuB,EAAE,EAAE,CAAC,6IAA6I,EAAE,iCAAiC,CAAC;IAC7M,qBAAqB,EAAG,EAAE,CAAC,uHAAuH,EAAE,uBAAuB,CAAC;IAC5K,KAAK,EAAE;QACL,WAAW,EAAE,gOAAgO;QAC7O,OAAO,EAAE,KAAK,EAAE,GAAG,EAAE,MAAM,EAAE,EAAE;YAC7B,MAAM,UAAU,GAAG,MAAM,CAAC,GAAG,CAAC;YAC9B,IAAI,CAAC,KAAK,CAAC,OAAO,CAAC,UAAU,CAAC;gBAAE,MAAM,IAAI,KAAK,CAAC,4CAA4C,CAAC,CAAC;YAC9F,MAAM,OAAO,GAAgE,EAAE,CAAC;YAChF,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,UAAU,CAAC,MAAM,EAAE,CAAC,EAAE,EAAE,CAAC;gBAC3C,MAAM,EAAE,GAAG,UAAU,CAAC,CAAC,CAAsE,CAAC;gBAC9F,MAAM,MAAM,GAAG,EAAE,EAAE,MAAM,CAAC;gBAC1B,IAAI,CAAC,MAAM,EAAE,CAAC;oBAAC,OAAO,CAAC,IAAI,CAAC,EAAE,MAAM,EAAE,WAAW,EAAE,KAAK,EAAE,OAAO,CAAC,oBAAoB,EAAE,CAAC,CAAC;oBAAC,OAAO,EAAE,OAAO,EAAE,SAAS,EAAE,CAAC,EAAE,CAAC;gBAAC,CAAC;gBAC9H,MAAM,IAAI,GAAG,WAAW,CAAC,OAAO,CAAC,MAAM,CAAC,CAAC;gBACzC,IAAI,CAAC,IAAI,EAAE,CAAC;oBAAC,OAAO,CAAC,IAAI,CAAC,EAAE,MAAM,EAAE,KAAK,EAAE,2BAA2B,MAAM,GAAG,EAAE,CAAC,CAAC;oBAAC,OAAO,EAAE,OAAO,EAAE,SAAS,EAAE,CAAC,EAAE,CAAC;gBAAC,CAAC;gBACvH,IAAI,MAAM,KAAK,OAAO,EAAE,CAAC;oBAAC,OAAO,CAAC,IAAI,CAAC,EAAE,MAAM,EAAE,KAAK,EAAE,0BAA0B,EAAE,CAAC,CAAC;oBAAC,OAAO,EAAE,OAAO,EAAE,SAAS,EAAE,CAAC,EAAE,CAAC;gBAAC,CAAC;gBAC1H,IAAI,CAAC;oBACH,MAAM,SAAS,GAAG,EAAE,GAAG,CAAC,EAAE,CAAC,MAAM,IAAI,EAAE,CAAC,EAAE,MAAM,EAA6B,CAAC;oBAC9E,MAAM,MAAM,GAAG,MAAO,IAAmB,CAAC,OAAO,EAAE,CAAC,GAAG,EAAE,SAAS,CAAC;2BAC9D,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC,CAAC,MAAM,GAAG,CAAC,MAAM,CAAC,IAAI,CAAC,IAAI,CAAC,MAAM,EAAE,IAAI,CAAC,SAAS,CAAC,CAAC,CAAC,IAAI,CAAC,SAAS,CAAC,SAAS,CAAC,CAAC,CAAC,CAAC,CAAC,GAAG,EAAE,GAAG,MAAM,EAAE,MAAM,EAAE,CAAC,EAAE,GAAG,CAAC,EAAE,GAAG,SAAS,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC,CAAC,EAAE,EAAE,IAAI,CAAC,SAAS,CAAC,CAAC,CAAC,CAAC,SAAS,CAAC,CAAC;oBACjM,OAAO,CAAC,IAAI,CAAC,EAAE,MAAM,EAAE,MAAM,EAAE,CAAC,CAAC;gBACnC,CAAC;gBAAC,OAAO,CAAC,EAAE,CAAC;oBACX,OAAO,CAAC,IAAI,CAAC,EAAE,MAAM,EAAE,KAAK,EAAG,CAAW,CAAC,OAAO,EAAE,CAAC,CAAC;oBACtD,OAAO,EAAE,OAAO,EAAE,SAAS,EAAE,CAAC,EAAE,CAAC;gBACnC,CAAC;YACH,CAAC;YACD,OAAO,EAAE,OAAO,EAAE,SAAS,EAAE,IAAI,EAAE,CAAC;QACtC,CAAC;KACF;CACF,EACD,SAAS,EACT;IACE,SAAS,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,EAAE,EAAE,UAAU,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,EAAE;IACnE,SAAS,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,EAAE,EAAE,SAAS,EAAE,CAAC,CAAC,OAAO,EAAE,CAAC,QAAQ,EAAE;IACnE,UAAU,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,EAAE,EAAE,WAAW,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,EAAE;IACrE,QAAQ,EAAE,IAAI,CAAC,QAAQ,EAAE;IACzB,QAAQ,EAAE,CAAC,CAAC,OAAO,EAAE,CAAC,QAAQ,EAAE,CAAC,QAAQ,CAAC,iEAAiE,CAAC;IAC5G,QAAQ,EAAE,OAAO,CAAC,QAAQ,EAAE;IAC5B,KAAK,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,EAAE;IAC5B,aAAa,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,EAAE;IACpC,KAAK,EAAE,CAAC,CAAC,OAAO,EAAE,CAAC,QAAQ,EAAE;IAC7B,aAAa,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,EAAE;IACpC,IAAI,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,EAAE;IAC3B,WAAW,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,EAAE;IAClC,YAAY,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,EAAE;IACnC,WAAW,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,EAAE;IAClC,YAAY,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,EAAE;IACnC,YAAY,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,EAAE,CAAC,QAAQ,CAAC,uCAAuC,CAAC;IACrF,aAAa,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,EAAE;IACpC,YAAY,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,EAAE;IACnC,QAAQ,EAAE,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,OAAO,EAAE,CAAC,CAAC,CAAC,QAAQ,EAAE,CAAC,QAAQ,CAAC,mCAAmC,CAAC;IACjG,UAAU,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,EAAE,CAAC,QAAQ,CAAC,8BAA8B,CAAC;IAC1E,UAAU,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,EAAE,CAAC,QAAQ,CAAC,6EAA6E,CAAC;IACzH,YAAY,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,EAAE,CAAC,QAAQ,CAAC,mFAAmF,CAAC;IACjI,WAAW,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,EAAE,CAAC,QAAQ,CAAC,6DAA6D,CAAC;IAC1G,SAAS,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,EAAE,CAAC,QAAQ,CAAC,6CAA6C,CAAC;IACxF,UAAU,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,EAAE,CAAC,QAAQ,CAAC,iDAAiD,CAAC;IAC7F,YAAY,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,EAAE,CAAC,QAAQ,CAAC,2EAA2E,CAAC;IACzH,IAAI,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,EAAE,CAAC,QAAQ,CAAC,wCAAwC,CAAC;IAC9E,MAAM,EAAE,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,OAAO,EAAE,CAAC,CAAC,CAAC,QAAQ,EAAE,CAAC,QAAQ,CAAC,6CAA6C,CAAC;IACzG,OAAO,EAAE,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,OAAO,EAAE,CAAC,CAAC,CAAC,QAAQ,EAAE,CAAC,QAAQ,CAAC,6CAA6C,CAAC;IAC1G,GAAG,EAAE,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,OAAO,EAAE,CAAC,CAAC,CAAC,QAAQ,EAAE,CAAC,QAAQ,CAAC,+BAA+B,CAAC;CACzF,CACF,CAAC"}
|
|
1
|
+
{"version":3,"file":"niagara.js","sourceRoot":"","sources":["../../src/tools/niagara.ts"],"names":[],"mappings":"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"}
|
package/dist/ue-mcp.default.yml
CHANGED
|
@@ -2549,6 +2549,12 @@ tasks:
|
|
|
2549
2549
|
description: "Add emitter to system. Params: systemPath, emitterPath"
|
|
2550
2550
|
options:
|
|
2551
2551
|
method: add_emitter_to_system
|
|
2552
|
+
niagara.remove_emitter:
|
|
2553
|
+
class_path: ue-mcp.bridge
|
|
2554
|
+
group: niagara
|
|
2555
|
+
description: "Remove an emitter from a system (CRUD delete). Params: systemPath, emitterName? or emitterIndex?"
|
|
2556
|
+
options:
|
|
2557
|
+
method: remove_emitter_from_system
|
|
2552
2558
|
niagara.list_emitters:
|
|
2553
2559
|
class_path: ue-mcp.bridge
|
|
2554
2560
|
group: niagara
|
package/package.json
CHANGED
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "ue-mcp",
|
|
3
|
-
"version": "1.1.
|
|
4
|
-
"description": "Unreal Engine MCP server - 24 tools,
|
|
3
|
+
"version": "1.1.30",
|
|
4
|
+
"description": "Unreal Engine MCP server - 24 tools, 738+ actions for AI-driven editor control",
|
|
5
5
|
"type": "module",
|
|
6
6
|
"main": "dist/index.js",
|
|
7
7
|
"exports": {
|
|
@@ -27,6 +27,10 @@
|
|
|
27
27
|
#include "NiagaraNodeCustomHlsl.h"
|
|
28
28
|
#include "NiagaraNodeOutput.h"
|
|
29
29
|
#include "ViewModels/Stack/NiagaraStackGraphUtilities.h"
|
|
30
|
+
#include "NiagaraStackFunctionInputBinder.h"
|
|
31
|
+
#include "NiagaraParameterMapHistory.h"
|
|
32
|
+
#include "NiagaraTypes.h"
|
|
33
|
+
#include "EdGraphSchema_Niagara.h"
|
|
30
34
|
#include "NiagaraEmitterHandle.h"
|
|
31
35
|
#include "NiagaraEditorUtilities.h"
|
|
32
36
|
#include "NiagaraEmitterFactoryNew.h"
|
|
@@ -82,6 +86,7 @@ void FNiagaraHandlers::RegisterHandlers(FMCPHandlerRegistry& Registry)
|
|
|
82
86
|
Registry.RegisterHandler(TEXT("list_niagara_module_inputs"), &ListModuleInputs);
|
|
83
87
|
Registry.RegisterHandler(TEXT("set_niagara_module_input"), &SetModuleInput);
|
|
84
88
|
Registry.RegisterHandler(TEXT("add_niagara_module"), &AddModule);
|
|
89
|
+
Registry.RegisterHandler(TEXT("remove_emitter_from_system"), &RemoveEmitterFromSystem);
|
|
85
90
|
Registry.RegisterHandler(TEXT("list_niagara_static_switches"), &ListStaticSwitches);
|
|
86
91
|
Registry.RegisterHandler(TEXT("set_niagara_static_switch"), &SetStaticSwitch);
|
|
87
92
|
Registry.RegisterHandler(TEXT("create_niagara_module_from_hlsl"), &CreateModuleFromHlsl);
|
|
@@ -1253,6 +1258,62 @@ namespace
|
|
|
1253
1258
|
O->SetBoolField(TEXT("linked"), Pin->LinkedTo.Num() > 0);
|
|
1254
1259
|
return O;
|
|
1255
1260
|
}
|
|
1261
|
+
|
|
1262
|
+
ENiagaraScriptUsage UsageOfContext(const FString& Ctx)
|
|
1263
|
+
{
|
|
1264
|
+
if (Ctx.Equals(TEXT("ParticleUpdate"), ESearchCase::IgnoreCase)) return ENiagaraScriptUsage::ParticleUpdateScript;
|
|
1265
|
+
if (Ctx.Equals(TEXT("EmitterSpawn"), ESearchCase::IgnoreCase)) return ENiagaraScriptUsage::EmitterSpawnScript;
|
|
1266
|
+
if (Ctx.Equals(TEXT("EmitterUpdate"), ESearchCase::IgnoreCase)) return ENiagaraScriptUsage::EmitterUpdateScript;
|
|
1267
|
+
return ENiagaraScriptUsage::ParticleSpawnScript;
|
|
1268
|
+
}
|
|
1269
|
+
|
|
1270
|
+
// Parse a string into the raw byte layout of a Niagara input type. Covers the
|
|
1271
|
+
// scalar/vector/color types module inputs almost always use. Returns false
|
|
1272
|
+
// with a reason for unsupported types.
|
|
1273
|
+
bool FillNiagaraValueBytes(const FNiagaraTypeDefinition& T, const FString& Value, TArray<uint8>& Out, FString& OutErr)
|
|
1274
|
+
{
|
|
1275
|
+
auto ParseFloats = [](const FString& S, int32 N, TArray<float>& F)
|
|
1276
|
+
{
|
|
1277
|
+
TArray<FString> Parts;
|
|
1278
|
+
S.ParseIntoArray(Parts, TEXT(","), true);
|
|
1279
|
+
if (Parts.Num() == 1) S.ParseIntoArray(Parts, TEXT(" "), true);
|
|
1280
|
+
for (const FString& P : Parts) F.Add(FCString::Atof(*P.TrimStartAndEnd()));
|
|
1281
|
+
return F.Num() >= N;
|
|
1282
|
+
};
|
|
1283
|
+
|
|
1284
|
+
if (T == FNiagaraTypeDefinition::GetFloatDef())
|
|
1285
|
+
{
|
|
1286
|
+
float V = FCString::Atof(*Value);
|
|
1287
|
+
Out.SetNumUninitialized(sizeof(float)); FMemory::Memcpy(Out.GetData(), &V, sizeof(float)); return true;
|
|
1288
|
+
}
|
|
1289
|
+
if (T == FNiagaraTypeDefinition::GetIntDef())
|
|
1290
|
+
{
|
|
1291
|
+
int32 V = FCString::Atoi(*Value);
|
|
1292
|
+
Out.SetNumUninitialized(sizeof(int32)); FMemory::Memcpy(Out.GetData(), &V, sizeof(int32)); return true;
|
|
1293
|
+
}
|
|
1294
|
+
if (T == FNiagaraTypeDefinition::GetBoolDef())
|
|
1295
|
+
{
|
|
1296
|
+
FNiagaraBool B; B.SetValue(Value.ToBool() || Value == TEXT("1"));
|
|
1297
|
+
Out.SetNumUninitialized(sizeof(FNiagaraBool)); FMemory::Memcpy(Out.GetData(), &B, sizeof(FNiagaraBool)); return true;
|
|
1298
|
+
}
|
|
1299
|
+
if (T == FNiagaraTypeDefinition::GetVec2Def())
|
|
1300
|
+
{
|
|
1301
|
+
TArray<float> F; if (!ParseFloats(Value, 2, F)) { OutErr = TEXT("expected 2 comma-separated floats"); return false; }
|
|
1302
|
+
FVector2f V(F[0], F[1]); Out.SetNumUninitialized(sizeof(V)); FMemory::Memcpy(Out.GetData(), &V, sizeof(V)); return true;
|
|
1303
|
+
}
|
|
1304
|
+
if (T == FNiagaraTypeDefinition::GetVec3Def())
|
|
1305
|
+
{
|
|
1306
|
+
TArray<float> F; if (!ParseFloats(Value, 3, F)) { OutErr = TEXT("expected 3 comma-separated floats"); return false; }
|
|
1307
|
+
FVector3f V(F[0], F[1], F[2]); Out.SetNumUninitialized(sizeof(V)); FMemory::Memcpy(Out.GetData(), &V, sizeof(V)); return true;
|
|
1308
|
+
}
|
|
1309
|
+
if (T == FNiagaraTypeDefinition::GetVec4Def() || T == FNiagaraTypeDefinition::GetColorDef())
|
|
1310
|
+
{
|
|
1311
|
+
TArray<float> F; if (!ParseFloats(Value, 4, F)) { OutErr = TEXT("expected 4 comma-separated floats"); return false; }
|
|
1312
|
+
FVector4f V(F[0], F[1], F[2], F[3]); Out.SetNumUninitialized(sizeof(V)); FMemory::Memcpy(Out.GetData(), &V, sizeof(V)); return true;
|
|
1313
|
+
}
|
|
1314
|
+
OutErr = FString::Printf(TEXT("unsupported input type '%s' for override-map set"), *T.GetName());
|
|
1315
|
+
return false;
|
|
1316
|
+
}
|
|
1256
1317
|
}
|
|
1257
1318
|
|
|
1258
1319
|
TSharedPtr<FJsonValue> FNiagaraHandlers::ListModuleInputs(const TSharedPtr<FJsonObject>& Params)
|
|
@@ -1353,6 +1414,62 @@ TSharedPtr<FJsonValue> FNiagaraHandlers::SetModuleInput(const TSharedPtr<FJsonOb
|
|
|
1353
1414
|
if (!FC) continue;
|
|
1354
1415
|
SeenModules.AddUnique(FC->GetFunctionName());
|
|
1355
1416
|
if (!FC->GetFunctionName().Equals(ModuleName, ESearchCase::IgnoreCase)) continue;
|
|
1417
|
+
|
|
1418
|
+
// Primary path: the real settable module inputs (SpawnRate, Lifetime,
|
|
1419
|
+
// sprite size, colour, ...) come from the module SCRIPT, not the
|
|
1420
|
+
// function-call node's pins, and their values live in the override /
|
|
1421
|
+
// rapid-iteration map. Enumerate the module's inputs, match by name,
|
|
1422
|
+
// then set the value through the stack input binder. Falls through to
|
|
1423
|
+
// the pin-default path only when this can't bind.
|
|
1424
|
+
{
|
|
1425
|
+
FCompileConstantResolver Resolver(FVersionedNiagaraEmitter(Emitter, Version), UsageOfContext(Slot.Context));
|
|
1426
|
+
TArray<FNiagaraVariable> InputVars;
|
|
1427
|
+
FNiagaraStackGraphUtilities::GetStackFunctionInputs(
|
|
1428
|
+
*FC, InputVars, Resolver,
|
|
1429
|
+
FNiagaraStackGraphUtilities::ENiagaraGetStackFunctionInputPinsOptions::ModuleInputsOnly, false);
|
|
1430
|
+
|
|
1431
|
+
auto LeafOf = [](const FString& N)
|
|
1432
|
+
{
|
|
1433
|
+
FString Head, Leaf;
|
|
1434
|
+
return N.Split(TEXT("."), &Head, &Leaf, ESearchCase::IgnoreCase, ESearchDir::FromEnd) ? Leaf : N;
|
|
1435
|
+
};
|
|
1436
|
+
const FNiagaraVariable* Found = InputVars.FindByPredicate([&](const FNiagaraVariable& V)
|
|
1437
|
+
{
|
|
1438
|
+
const FString N = V.GetName().ToString();
|
|
1439
|
+
return N.Equals(InputName, ESearchCase::IgnoreCase) || LeafOf(N).Equals(InputName, ESearchCase::IgnoreCase);
|
|
1440
|
+
});
|
|
1441
|
+
|
|
1442
|
+
if (Found)
|
|
1443
|
+
{
|
|
1444
|
+
const FString Leaf = LeafOf(Found->GetName().ToString());
|
|
1445
|
+
FNiagaraStackFunctionInputBinder Binder;
|
|
1446
|
+
TArray<UNiagaraScript*> Dependents;
|
|
1447
|
+
for (const FScriptSlot& Dep : Scripts)
|
|
1448
|
+
{
|
|
1449
|
+
if (Dep.Script) Dependents.Add(Dep.Script);
|
|
1450
|
+
}
|
|
1451
|
+
FText BindErr;
|
|
1452
|
+
if (Binder.TryBind(Slot.Script, Dependents, Resolver, Emitter->GetUniqueEmitterName(), FC,
|
|
1453
|
+
FName(*Leaf), TOptional<FNiagaraTypeDefinition>(Found->GetType()), true, BindErr))
|
|
1454
|
+
{
|
|
1455
|
+
TArray<uint8> Bytes;
|
|
1456
|
+
FString VErr;
|
|
1457
|
+
if (FillNiagaraValueBytes(Found->GetType(), Value, Bytes, VErr))
|
|
1458
|
+
{
|
|
1459
|
+
FC->Modify();
|
|
1460
|
+
Graph->Modify();
|
|
1461
|
+
Binder.SetData(Bytes.GetData(), Bytes.Num());
|
|
1462
|
+
if (SetCount == 0) PrevValue = TEXT("(override)");
|
|
1463
|
+
MatchedContext = Slot.Context;
|
|
1464
|
+
++SetCount;
|
|
1465
|
+
FC->MarkNodeRequiresSynchronization(TEXT("MCP_SetModuleInput"), true);
|
|
1466
|
+
Graph->NotifyGraphChanged();
|
|
1467
|
+
continue;
|
|
1468
|
+
}
|
|
1469
|
+
}
|
|
1470
|
+
}
|
|
1471
|
+
}
|
|
1472
|
+
|
|
1356
1473
|
for (UEdGraphPin* Pin : FC->Pins)
|
|
1357
1474
|
{
|
|
1358
1475
|
if (!Pin || Pin->Direction != EGPD_Input) continue;
|
|
@@ -1379,6 +1496,7 @@ TSharedPtr<FJsonValue> FNiagaraHandlers::SetModuleInput(const TSharedPtr<FJsonOb
|
|
|
1379
1496
|
}
|
|
1380
1497
|
|
|
1381
1498
|
Emitter->PostEditChange();
|
|
1499
|
+
System->RequestCompile(false);
|
|
1382
1500
|
UEditorAssetLibrary::SaveLoadedAsset(System);
|
|
1383
1501
|
|
|
1384
1502
|
TSharedPtr<FJsonObject> Res = MCPSuccess();
|
|
@@ -1504,6 +1622,51 @@ TSharedPtr<FJsonValue> FNiagaraHandlers::AddModule(const TSharedPtr<FJsonObject>
|
|
|
1504
1622
|
return MCPResult(Res);
|
|
1505
1623
|
}
|
|
1506
1624
|
|
|
1625
|
+
TSharedPtr<FJsonValue> FNiagaraHandlers::RemoveEmitterFromSystem(const TSharedPtr<FJsonObject>& Params)
|
|
1626
|
+
{
|
|
1627
|
+
FString SystemPath;
|
|
1628
|
+
if (auto Err = RequireString(Params, TEXT("systemPath"), SystemPath)) return Err;
|
|
1629
|
+
FString EmitterName = OptionalString(Params, TEXT("emitterName"), TEXT(""));
|
|
1630
|
+
int32 EmitterIndex = OptionalInt(Params, TEXT("emitterIndex"), -1);
|
|
1631
|
+
|
|
1632
|
+
UNiagaraSystem* System = Cast<UNiagaraSystem>(UEditorAssetLibrary::LoadAsset(SystemPath));
|
|
1633
|
+
if (!System) return MCPError(FString::Printf(TEXT("System not found: %s"), *SystemPath));
|
|
1634
|
+
|
|
1635
|
+
const TArray<FNiagaraEmitterHandle>& Handles = System->GetEmitterHandles();
|
|
1636
|
+
int32 TargetIdx = -1;
|
|
1637
|
+
if (!EmitterName.IsEmpty())
|
|
1638
|
+
{
|
|
1639
|
+
for (int32 i = 0; i < Handles.Num(); ++i)
|
|
1640
|
+
{
|
|
1641
|
+
if (Handles[i].GetName().ToString().Equals(EmitterName, ESearchCase::IgnoreCase)) { TargetIdx = i; break; }
|
|
1642
|
+
}
|
|
1643
|
+
}
|
|
1644
|
+
else if (EmitterIndex >= 0 && EmitterIndex < Handles.Num())
|
|
1645
|
+
{
|
|
1646
|
+
TargetIdx = EmitterIndex;
|
|
1647
|
+
}
|
|
1648
|
+
if (TargetIdx < 0)
|
|
1649
|
+
{
|
|
1650
|
+
return MCPError(FString::Printf(TEXT("Emitter not found (name='%s', index=%d) in %s"), *EmitterName, EmitterIndex, *SystemPath));
|
|
1651
|
+
}
|
|
1652
|
+
|
|
1653
|
+
const FString RemovedName = Handles[TargetIdx].GetName().ToString();
|
|
1654
|
+
const FGuid RemovedId = Handles[TargetIdx].GetId();
|
|
1655
|
+
|
|
1656
|
+
System->Modify();
|
|
1657
|
+
System->RemoveEmitterHandlesById({ RemovedId });
|
|
1658
|
+
System->RequestCompile(false);
|
|
1659
|
+
System->PostEditChange();
|
|
1660
|
+
UEditorAssetLibrary::SaveLoadedAsset(System);
|
|
1661
|
+
|
|
1662
|
+
TSharedPtr<FJsonObject> Res = MCPSuccess();
|
|
1663
|
+
MCPSetUpdated(Res);
|
|
1664
|
+
Res->SetStringField(TEXT("systemPath"), SystemPath);
|
|
1665
|
+
Res->SetStringField(TEXT("removedEmitter"), RemovedName);
|
|
1666
|
+
Res->SetNumberField(TEXT("remainingEmitters"), System->GetEmitterHandles().Num());
|
|
1667
|
+
return MCPResult(Res);
|
|
1668
|
+
}
|
|
1669
|
+
|
|
1507
1670
|
TSharedPtr<FJsonValue> FNiagaraHandlers::ListStaticSwitches(const TSharedPtr<FJsonObject>& Params)
|
|
1508
1671
|
{
|
|
1509
1672
|
FString SystemPath;
|
|
@@ -39,6 +39,8 @@ private:
|
|
|
39
39
|
static TSharedPtr<FJsonValue> SetModuleInput(const TSharedPtr<FJsonObject>& Params);
|
|
40
40
|
// Add a stock /Niagara/Modules script to an emitter's stack context.
|
|
41
41
|
static TSharedPtr<FJsonValue> AddModule(const TSharedPtr<FJsonObject>& Params);
|
|
42
|
+
// Remove an emitter handle from a system (CRUD delete).
|
|
43
|
+
static TSharedPtr<FJsonValue> RemoveEmitterFromSystem(const TSharedPtr<FJsonObject>& Params);
|
|
42
44
|
static TSharedPtr<FJsonValue> ListStaticSwitches(const TSharedPtr<FJsonObject>& Params);
|
|
43
45
|
static TSharedPtr<FJsonValue> SetStaticSwitch(const TSharedPtr<FJsonObject>& Params);
|
|
44
46
|
static TSharedPtr<FJsonValue> CreateModuleFromHlsl(const TSharedPtr<FJsonObject>& Params);
|