unreal-engine-mcp-server 0.6.0-beta-c → 0.6.0-beta-e
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/CHANGELOG.md +148 -9
- package/README.md +2 -2
- package/dist/gateway/gateway-manifest.generated.json +838 -133
- package/dist/proxy/native-proxy.js +6 -5
- package/dist/server/gateway/gateway-execute-dispatch.js +2 -1
- package/dist/server/gateway/gateway-execute-envelope.js +5 -1
- package/dist/server/gateway/gateway-execute-lookup.js +1 -1
- package/dist/server/gateway/gateway-execute.js +17 -4
- package/dist/server/gateway/gateway-schema-validate.js +13 -2
- package/dist/server/gateway/gateway-task-results.d.ts +6 -0
- package/dist/server/gateway/gateway-task-results.js +40 -0
- package/dist/server/tool-registry-manage-tools.js +4 -1
- package/dist/tools/catalog/capabilities/generated/canonical-registry.generated.d.ts +2 -2
- package/dist/tools/catalog/capabilities/generated/canonical-registry.generated.js +2 -2
- package/dist/tools/catalog/capabilities/generated/canonical-registry.generated.json +4079 -618
- package/dist/tools/catalog/capabilities/generated/capability-cost-index.generated.d.ts +1 -1
- package/dist/tools/catalog/capabilities/generated/capability-cost-index.generated.js +18 -1
- package/dist/tools/catalog/capabilities/generated/parent-tool-definitions.generated.js +1546 -212
- package/dist/tools/catalog/capabilities/records/aggregate.d.ts +1 -1
- package/dist/tools/catalog/capabilities/records/aggregate.js +1 -1
- package/dist/tools/catalog/capabilities/records/build-environment/spline.data.js +4 -3
- package/dist/tools/catalog/capabilities/records/build-environment/water.data.js +8 -5
- package/dist/tools/catalog/capabilities/records/control-actor/advanced-records.js +29 -8
- package/dist/tools/catalog/capabilities/records/control-actor/search-records.js +2 -2
- package/dist/tools/catalog/capabilities/records/control-actor/spawn-records.js +13 -5
- package/dist/tools/catalog/capabilities/records/control-actor/state-records.js +2 -1
- package/dist/tools/catalog/capabilities/records/control-actor/transform-records.js +27 -9
- package/dist/tools/catalog/capabilities/records/control-editor/asset.js +4 -1
- package/dist/tools/catalog/capabilities/records/control-editor/camera.js +5 -1
- package/dist/tools/catalog/capabilities/records/control-editor/command.js +5 -1
- package/dist/tools/catalog/capabilities/records/control-editor/input.js +2 -1
- package/dist/tools/catalog/capabilities/records/control-editor/screenshot.js +2 -1
- package/dist/tools/catalog/capabilities/records/control-editor/session.js +8 -1
- package/dist/tools/catalog/capabilities/records/control-editor/timing.js +5 -3
- package/dist/tools/catalog/capabilities/records/core/builder.d.ts +1 -0
- package/dist/tools/catalog/capabilities/records/core/builder.js +1 -0
- package/dist/tools/catalog/capabilities/records/folds/build-environment.folds.js +2 -2
- package/dist/tools/catalog/capabilities/records/folds/control-actor.folds.js +2 -2
- package/dist/tools/catalog/capabilities/records/folds/manage-asset.folds.js +8 -8
- package/dist/tools/catalog/capabilities/records/folds/manage-audio.folds.js +5 -5
- package/dist/tools/catalog/capabilities/records/folds/manage-blueprint.folds.js +2 -2
- package/dist/tools/catalog/capabilities/records/folds/manage-effect.folds.js +3 -3
- package/dist/tools/catalog/capabilities/records/folds/manage-sequence.folds.js +6 -6
- package/dist/tools/catalog/capabilities/records/folds/system-control.folds.js +2 -2
- package/dist/tools/catalog/capabilities/records/gameplay/animation-physics/animation-properties.js +7 -5
- package/dist/tools/catalog/capabilities/records/gameplay/animation-physics/authoring-1.data.js +86 -1
- package/dist/tools/catalog/capabilities/records/gameplay/animation-physics/authoring-2.data.js +7 -2
- package/dist/tools/catalog/capabilities/records/gameplay/manage-effect/effect-properties.js +7 -6
- package/dist/tools/catalog/capabilities/records/gameplay/manage-effect/effect.data.js +38 -27
- package/dist/tools/catalog/capabilities/records/inspect/component-actor.data.js +1 -1
- package/dist/tools/catalog/capabilities/records/inspect/object-property.data.js +188 -10
- package/dist/tools/catalog/capabilities/records/inspect/properties.d.ts +1 -0
- package/dist/tools/catalog/capabilities/records/inspect/properties.js +2 -1
- package/dist/tools/catalog/capabilities/records/inspect/runtime.data.js +2 -1
- package/dist/tools/catalog/capabilities/records/inspect/stats.data.js +6 -2
- package/dist/tools/catalog/capabilities/records/manage-asset/asset-advanced.js +46 -0
- package/dist/tools/catalog/capabilities/records/manage-asset/asset-lifecycle.js +2 -2
- package/dist/tools/catalog/capabilities/records/manage-asset/asset-query.js +4 -3
- package/dist/tools/catalog/capabilities/records/manage-asset/builder.d.ts +3 -0
- package/dist/tools/catalog/capabilities/records/manage-asset/builder.js +3 -0
- package/dist/tools/catalog/capabilities/records/manage-asset/content-sources.js +3 -1
- package/dist/tools/catalog/capabilities/records/manage-asset/material-create.js +17 -2
- package/dist/tools/catalog/capabilities/records/manage-asset/material-graph.js +7 -5
- package/dist/tools/catalog/capabilities/records/manage-asset/material-params.js +5 -5
- package/dist/tools/catalog/capabilities/records/manage-audio/authoring.data.js +15 -5
- package/dist/tools/catalog/capabilities/records/manage-audio/runtime.data.js +1 -0
- package/dist/tools/catalog/capabilities/records/manage-blueprint/functions-events.js +3 -2
- package/dist/tools/catalog/capabilities/records/manage-blueprint/graph-batch.js +2 -2
- package/dist/tools/catalog/capabilities/records/manage-blueprint/graph-pins.js +6 -2
- package/dist/tools/catalog/capabilities/records/manage-blueprint/properties.js +4 -2
- package/dist/tools/catalog/capabilities/records/manage-blueprint/scs-components.js +7 -2
- package/dist/tools/catalog/capabilities/records/manage-blueprint/variables-metadata.js +8 -2
- package/dist/tools/catalog/capabilities/records/manage-blueprint/widget-animation.js +14 -4
- package/dist/tools/catalog/capabilities/records/manage-blueprint/widget-lifecycle.js +13 -5
- package/dist/tools/catalog/capabilities/records/manage-blueprint/widget-panels.js +1 -1
- package/dist/tools/catalog/capabilities/records/manage-sequence/cinematic.js +12 -3
- package/dist/tools/catalog/capabilities/records/manage-sequence/helpers.js +2 -2
- package/dist/tools/catalog/capabilities/records/manage-sequence/mrq.js +23 -4
- package/dist/tools/catalog/capabilities/records/manage-sequence/timeline-bindings.js +2 -2
- package/dist/tools/catalog/capabilities/records/manage-sequence/timeline-lifecycle.js +7 -2
- package/dist/tools/catalog/capabilities/records/manage-sequence/timeline-playback.js +9 -5
- package/dist/tools/catalog/capabilities/records/manage-sequence/timeline-state-ranges.js +19 -0
- package/dist/tools/catalog/capabilities/records/manage-sequence/timeline-tracks.js +10 -5
- package/dist/tools/catalog/capabilities/records/manage-tools/index.js +30 -2
- package/dist/tools/catalog/capabilities/records/system-control/console.js +3 -1
- package/dist/tools/catalog/capabilities/records/system-control/system-ops.js +122 -10
- package/dist/tools/catalog/capabilities/records/utility/output-glossary.js +11 -0
- package/dist/tools/catalog/capabilities/records/utility/utility-schema-pins.js +6 -3
- package/dist/tools/catalog/capabilities/records/world/manage-geometry.optimize.data.js +29 -0
- package/dist/tools/catalog/capabilities/records/world/manage-geometry.primitives.data.js +2 -1
- package/dist/tools/catalog/capabilities/records/world/properties.js +2 -2
- package/dist/tools/catalog/capabilities/semantic/envelope.d.ts +1 -1
- package/dist/tools/catalog/capabilities/semantic/errors.d.ts +1 -1
- package/dist/tools/catalog/unreal-gateway-definition.js +2 -2
- package/dist/utils/responses/gateway-reply-compaction.d.ts +6 -0
- package/dist/utils/responses/gateway-reply-compaction.js +264 -0
- package/dist/utils/responses/response-content.d.ts +0 -1
- package/dist/utils/responses/response-content.js +0 -172
- package/dist/utils/responses/response-validator.d.ts +1 -1
- package/dist/utils/responses/response-validator.js +39 -8
- package/package.json +2 -2
- package/server.json +2 -2
|
@@ -3,6 +3,8 @@ import { P } from './properties.js';
|
|
|
3
3
|
const F = 'timing';
|
|
4
4
|
const D = 'editor';
|
|
5
5
|
const RUNNING = ['pie', 'simulate'];
|
|
6
|
+
const STEP_GAME_SECONDS = { type: 'number', description: 'Game seconds the steps advanced, when a fixed delta time is set (set_game_speed fixed_delta_time): steps x deltaTime x game speed.' };
|
|
7
|
+
const STEP_DILATION = { type: 'number', description: 'The game speed the steps ran at, present when it is not 1: a step keeps the slow motion that was set, so at speed 0.1 each step advances a tenth of its frame of game time.' };
|
|
6
8
|
export const TIMING_RECORDS = [
|
|
7
9
|
buildCoreRecord({
|
|
8
10
|
parentTool: 'control_editor', action: 'set_game_speed', domain: D, family: F,
|
|
@@ -28,7 +30,7 @@ export const TIMING_RECORDS = [
|
|
|
28
30
|
}),
|
|
29
31
|
buildCoreRecord({
|
|
30
32
|
parentTool: 'control_editor', action: 'step_frame', domain: D, family: F,
|
|
31
|
-
summary: 'Advance the PIE simulation by one or more frames.',
|
|
33
|
+
summary: 'Advance the PIE simulation by one or more frames, each at the current game speed (slow motion makes each step shorter; timeDilation says so).',
|
|
32
34
|
whenToUse: ['The simulation must advance a fixed number of frames.'],
|
|
33
35
|
whenNotToUse: ['Real-time simulation is preferred.'],
|
|
34
36
|
inputProps: { steps: P.steps },
|
|
@@ -36,7 +38,7 @@ export const TIMING_RECORDS = [
|
|
|
36
38
|
effect: 'write', editorStates: RUNNING,
|
|
37
39
|
exampleInput: { action: 'step_frame', steps: 1 },
|
|
38
40
|
exampleOutput: { success: true, message: 'Stepped 1 frame(s)', steps: 1 },
|
|
39
|
-
outputProps: { steps: P.steps },
|
|
41
|
+
outputProps: { steps: P.steps, gameSeconds: STEP_GAME_SECONDS, timeDilation: STEP_DILATION },
|
|
40
42
|
outputRequired: ['steps'],
|
|
41
43
|
}),
|
|
42
44
|
buildCoreRecord({
|
|
@@ -50,7 +52,7 @@ export const TIMING_RECORDS = [
|
|
|
50
52
|
effect: 'write', editorStates: RUNNING,
|
|
51
53
|
exampleInput: { action: 'single_frame_step', steps: 1 },
|
|
52
54
|
exampleOutput: { success: true, message: 'Stepped 1 frame(s)', steps: 1 },
|
|
53
|
-
outputProps: { steps: P.steps },
|
|
55
|
+
outputProps: { steps: P.steps, gameSeconds: STEP_GAME_SECONDS, timeDilation: STEP_DILATION },
|
|
54
56
|
outputRequired: ['steps'],
|
|
55
57
|
}),
|
|
56
58
|
];
|
|
@@ -1,6 +1,7 @@
|
|
|
1
1
|
import type { CapabilityBehaviorSource, CapabilityPolicy, CapabilityRecordSource, JsonObject } from '../../model.js';
|
|
2
2
|
type EffectType = 'read' | 'write' | 'destructive';
|
|
3
3
|
type EditorState = 'edit' | 'pie' | 'simulate';
|
|
4
|
+
export declare const ANY_EDITOR_STATE: readonly EditorState[];
|
|
4
5
|
export type CoreRecordSpec = {
|
|
5
6
|
readonly parentTool: string;
|
|
6
7
|
readonly action: string;
|
|
@@ -1,5 +1,6 @@
|
|
|
1
1
|
import { CapabilityAliasSchema, CapabilityIdSchema, LegacyActionNameSchema, LegacyToolNameSchema } from '../../identifiers.js';
|
|
2
2
|
import { actionInputSchema, behavior, EMPTY_OUTPUT, outputSchema, policy, schema } from '../shared/record-presets.js';
|
|
3
|
+
export const ANY_EDITOR_STATE = ['edit', 'pie', 'simulate'];
|
|
3
4
|
function availability(requiredPlugins = [], editorStates = ['edit']) {
|
|
4
5
|
return {
|
|
5
6
|
requiredPlugins: [...requiredPlugins],
|
|
@@ -151,13 +151,13 @@ export const BUILD_ENVIRONMENT_FOLDS = [
|
|
|
151
151
|
},
|
|
152
152
|
{
|
|
153
153
|
primary: 'create_water_body', selector: 'kind',
|
|
154
|
-
summary: 'Create a water body
|
|
154
|
+
summary: 'Create a water body (ocean, lake, river or custom) with the Water plugin: real water that takes the editor\'s default materials and, for an ocean or lake, its default waves, as placing one in the editor does (listed under defaultsApplied).',
|
|
155
155
|
topics: ['water body', 'ocean', 'lake', 'river', 'add a lake or ocean', 'add a river', 'create a river', 'make a river'],
|
|
156
156
|
members: byTarget('create_water_body_', ['create_water_body_ocean', 'create_water_body_lake', 'create_water_body_river', 'create_water_body_custom']),
|
|
157
157
|
},
|
|
158
158
|
{
|
|
159
159
|
primary: 'configure_water', selector: 'setting',
|
|
160
|
-
summary: 'Configure water: waves,
|
|
160
|
+
summary: 'Configure a water body: its Gerstner waves (height, wavelength, steepness, direction), material or collision.',
|
|
161
161
|
topics: ['water waves', 'water material', 'water collision'],
|
|
162
162
|
members: byTarget('configure_water_', ['configure_water_waves', 'configure_water_material', 'configure_water_collision']),
|
|
163
163
|
},
|
|
@@ -15,8 +15,8 @@ export const CONTROL_ACTOR_FOLDS = [
|
|
|
15
15
|
},
|
|
16
16
|
{
|
|
17
17
|
primary: 'get_transform', selector: 'readMode',
|
|
18
|
-
summary: 'Read where an actor is (the player\'s pawn too): its transform now, or watch it over game time in PIE (motion): location, velocity
|
|
19
|
-
topics: ['actor location', 'where is the actor', 'where is the player', 'player location', 'actor position', 'sample motion', 'record trajectory', 'track actor over time'],
|
|
18
|
+
summary: 'Read where an actor is (the player\'s pawn too): its transform now, or watch it over game time in PIE (motion): location, velocity, rotation, chosen properties and points on it (bones, sockets, components, with their height over the ground) at every interval, to prove a jump, launch, patrol, fall, foot plant or a rocking hull in one call.',
|
|
19
|
+
topics: ['actor location', 'where is the actor', 'where is the player', 'player location', 'actor position', 'sample motion', 'record trajectory', 'track actor over time', 'foot sliding', 'feet slide', 'foot contact', 'bone position over time'],
|
|
20
20
|
members: { transform: 'get_transform', motion: 'sample_motion' },
|
|
21
21
|
aliasMembers: ['get_actor_transform'],
|
|
22
22
|
},
|
|
@@ -56,8 +56,8 @@ export const MANAGE_ASSET_FOLDS = [
|
|
|
56
56
|
},
|
|
57
57
|
{
|
|
58
58
|
primary: 'query_asset', selector: 'lookup',
|
|
59
|
-
summary: 'Query assets: existence, search by name/class, find by tag, find where a text appears inside assets, the node graph inside a material or Blueprint, material stats, source-control state.',
|
|
60
|
-
topics: ['find assets', 'search assets', 'asset exists', 'find by tag', 'find assets by tag', 'find text', 'where is text used', 'analyze graph', 'material stats', 'source control state', 'list all widget blueprints', 'asset name', 'project assets', 'list all meshes', 'is asset checked out'],
|
|
59
|
+
summary: 'Query assets: existence, search by name/class, find by tag, find where a text appears inside assets (graph nodes by title too, so every call of a function), the node graph inside a material or Blueprint, material stats, source-control state.',
|
|
60
|
+
topics: ['find assets', 'search assets', 'asset exists', 'find by tag', 'find assets by tag', 'find text', 'where is text used', 'where is function called', 'find function calls', 'analyze graph', 'material stats', 'source control state', 'list all widget blueprints', 'asset name', 'project assets', 'list all meshes', 'is asset checked out'],
|
|
61
61
|
members: {
|
|
62
62
|
exists: 'exists', search: 'search_assets', by_tag: 'find_by_tag', text: 'find_text', graph: 'analyze_graph',
|
|
63
63
|
material_stats: 'get_material_stats', source_control_state: 'get_source_control_state',
|
|
@@ -83,9 +83,9 @@ export const MANAGE_ASSET_FOLDS = [
|
|
|
83
83
|
},
|
|
84
84
|
{
|
|
85
85
|
primary: 'process_asset', selector: 'process',
|
|
86
|
-
summary: 'Process an asset: render a thumbnail, generate mesh LODs,
|
|
87
|
-
topics: ['thumbnail', 'generate lods', 'material thumbnail'],
|
|
88
|
-
members: { thumbnail: 'create_thumbnail', lods: 'generate_lods', mesh_materials: 'set_mesh_materials' },
|
|
86
|
+
summary: 'Process an asset: render a thumbnail, generate mesh LODs, set the materials in the slots of a static or skeletal mesh asset (mesh_materials), or set a static mesh asset\'s collision (mesh_collision), so every placement shows or uses them.',
|
|
87
|
+
topics: ['thumbnail', 'generate lods', 'material thumbnail', 'mesh collision', 'static mesh collision'],
|
|
88
|
+
members: { thumbnail: 'create_thumbnail', lods: 'generate_lods', mesh_materials: 'set_mesh_materials', mesh_collision: 'set_mesh_collision' },
|
|
89
89
|
},
|
|
90
90
|
{
|
|
91
91
|
primary: 'inspect_asset', selector: 'lookup',
|
|
@@ -146,9 +146,9 @@ export const MANAGE_ASSET_FOLDS = [
|
|
|
146
146
|
},
|
|
147
147
|
{
|
|
148
148
|
primary: 'create_material', selector: 'kind',
|
|
149
|
-
summary: 'Create a material asset: a standard material, a decal, landscape or post-process material, or a material
|
|
150
|
-
topics: ['create material', 'decal material', 'landscape material', 'post process material', 'material function'],
|
|
151
|
-
members: { material: 'create_material', decal: 'create_decal_material', landscape: 'create_landscape_material', post_process: 'create_post_process_material', function: 'create_material_function' },
|
|
149
|
+
summary: 'Create a material asset: a standard material, a decal, landscape or post-process material, a material function, or a Material Parameter Collection (values every material reading it shares).',
|
|
150
|
+
topics: ['create material', 'decal material', 'landscape material', 'post process material', 'material function', 'material parameter collection'],
|
|
151
|
+
members: { material: 'create_material', decal: 'create_decal_material', landscape: 'create_landscape_material', post_process: 'create_post_process_material', function: 'create_material_function', parameter_collection: 'create_parameter_collection' },
|
|
152
152
|
},
|
|
153
153
|
{ primary: 'connect_nodes', topics: ['connect texture to base color', 'connect node to base color'], summary: 'Connect two material graph pins.', members: ['connect_material_pins'] },
|
|
154
154
|
{ primary: 'disconnect_nodes', summary: 'Disconnect a material graph pin or node.', members: ['break_material_connections'] },
|
|
@@ -1,9 +1,9 @@
|
|
|
1
1
|
export const MANAGE_AUDIO_FOLDS = [
|
|
2
2
|
{
|
|
3
3
|
primary: 'play_sound', selector: 'playback',
|
|
4
|
-
summary: 'Play a sound: 2D, at a location (played or spawned), attached to an actor, or prime it for playback. A 2D sound (looping music too) plays until stop_sound.',
|
|
5
|
-
topics: ['play sound', 'play sound 2d', 'play sound at location', 'attached sound', 'prime sound', 'preview sound', 'preload sound'],
|
|
6
|
-
members: { '2d': 'play_sound_2d', at_location: 'play_sound_at_location', spawn_at_location: 'spawn_sound_at_location', attached: 'play_sound_attached', prime: 'prime_sound' },
|
|
4
|
+
summary: 'Play a sound: 2D, at a location (played or spawned), attached to an actor, or prime it for playback. A 2D sound (looping music too) plays until stop_sound. measure plays it 2D and reports how loud it played (peak and average dB, silent).',
|
|
5
|
+
topics: ['play sound', 'play sound 2d', 'play sound at location', 'attached sound', 'prime sound', 'preview sound', 'preload sound', 'measure sound', 'is sound audible'],
|
|
6
|
+
members: { '2d': 'play_sound_2d', at_location: 'play_sound_at_location', spawn_at_location: 'spawn_sound_at_location', attached: 'play_sound_attached', prime: 'prime_sound', measure: 'play_sound_measure' },
|
|
7
7
|
},
|
|
8
8
|
{
|
|
9
9
|
primary: 'fade_sound', selector: 'fade',
|
|
@@ -47,8 +47,8 @@ export const MANAGE_AUDIO_FOLDS = [
|
|
|
47
47
|
},
|
|
48
48
|
{
|
|
49
49
|
primary: 'configure_sound_attenuation', selector: 'setting',
|
|
50
|
-
summary: 'Configure sound attenuation: distance falloff, spatialization, occlusion, reverb send, or a named attenuation preset.',
|
|
51
|
-
topics: ['attenuation', 'spatialization', 'occlusion', 'reverb send', 'falloff distance', 'make sound 3d', 'sound blocked by walls'],
|
|
50
|
+
summary: 'Configure sound attenuation: distance falloff and air absorption, spatialization, occlusion, reverb send, or a named attenuation preset.',
|
|
51
|
+
topics: ['attenuation', 'spatialization', 'occlusion', 'reverb send', 'falloff distance', 'make sound 3d', 'sound blocked by walls', 'air absorption', 'muffled with distance'],
|
|
52
52
|
members: {
|
|
53
53
|
distance: 'configure_distance_attenuation', spatialization: 'configure_spatialization', occlusion: 'configure_occlusion', reverb_send: 'configure_reverb_send',
|
|
54
54
|
audio_occlusion: 'set_audio_occlusion', preset: 'set_sound_attenuation',
|
|
@@ -43,7 +43,7 @@ export const MANAGE_BLUEPRINT_FOLDS = [
|
|
|
43
43
|
},
|
|
44
44
|
{
|
|
45
45
|
primary: 'add_function', selector: 'kind',
|
|
46
|
-
summary: 'Add a function or an event to a Blueprint; an event can be bound to a component\'s or a Widget Blueprint widget\'s delegate (OnClicked).',
|
|
46
|
+
summary: 'Add a function or an event to a Blueprint; an event can be bound to a component\'s or a Widget Blueprint widget\'s delegate (OnClicked), and a function named after one the parent lets a Blueprint override (a widget\'s OnKeyDown) is made as that override.',
|
|
47
47
|
topics: ['add function', 'add event', 'custom event', 'blueprint function', 'pure function'],
|
|
48
48
|
members: { function: 'add_function', event: 'add_event' },
|
|
49
49
|
},
|
|
@@ -55,7 +55,7 @@ export const MANAGE_BLUEPRINT_FOLDS = [
|
|
|
55
55
|
{
|
|
56
56
|
primary: 'inspect_graph', selector: 'info',
|
|
57
57
|
summary: 'Inspect a Blueprint graph: its nodes (every one, or those whose title, pin default, text or object path matches a filter), node details, pin details, or the available node types.',
|
|
58
|
-
topics: ['graph details', 'node details', 'pin details', 'node types', 'find nodes', 'search graph nodes'],
|
|
58
|
+
topics: ['graph details', 'node details', 'pin details', 'node types', 'find nodes', 'search graph nodes', 'filter graph nodes'],
|
|
59
59
|
members: { graph: 'get_graph_details', node: 'get_node_details', pins: 'get_pin_details', node_types: 'list_node_types' },
|
|
60
60
|
},
|
|
61
61
|
{
|
|
@@ -37,7 +37,7 @@ export const MANAGE_EFFECT_FOLDS = [
|
|
|
37
37
|
{
|
|
38
38
|
primary: 'edit_niagara_system', selector: 'edit',
|
|
39
39
|
summary: 'Edit a Niagara system: add an emitter, user parameters or parameter bindings, set parameter values or dynamic inputs, emitter properties, GPU simulation, connect pins.',
|
|
40
|
-
topics: ['niagara parameter', 'user parameter', 'emitter properties', 'dynamic input', 'gpu simulation', 'add emitter', 'gpu particles', 'particle lifetime'],
|
|
40
|
+
topics: ['niagara parameter', 'user parameter', 'emitter properties', 'dynamic input', 'gpu simulation', 'add emitter', 'gpu particles', 'particle lifetime', 'static switch', 'ribbon width'],
|
|
41
41
|
members: {
|
|
42
42
|
add_emitter: 'add_emitter_to_system', add_user_parameter: 'add_user_parameter', bind_parameter: 'bind_parameter_to_source', set_parameter_value: 'set_parameter_value',
|
|
43
43
|
set_parameter: 'set_niagara_parameter', set_dynamic_input: 'set_niagara_dynamic_input', set_emitter_properties: 'set_emitter_properties',
|
|
@@ -51,8 +51,8 @@ export const MANAGE_EFFECT_FOLDS = [
|
|
|
51
51
|
},
|
|
52
52
|
{
|
|
53
53
|
primary: 'get_niagara_info', selector: 'info',
|
|
54
|
-
summary: 'Read a Niagara system: each emitter (enabled, CPU or GPU, stack modules, current module input values) and its user parameters; an emitter asset gives its name and CPU or GPU target. info=validate lists errors and warnings.',
|
|
55
|
-
topics: ['emitter list', 'stack modules', 'user parameters'],
|
|
54
|
+
summary: 'Read a Niagara system: each emitter (enabled, CPU or GPU, stack modules, current module input values, an input that reads a parameter or a dynamic input as {linkedTo}, the static switches such as Ribbon Width Mode that gate them, and its renderers with the object path inspect.set_property writes and their material) and its user parameters; an emitter asset gives its name and CPU or GPU target. info=validate lists errors and warnings.',
|
|
55
|
+
topics: ['emitter list', 'stack modules', 'user parameters', 'static switches'],
|
|
56
56
|
members: { info: 'get_niagara_info', validate: 'validate_niagara_system' },
|
|
57
57
|
},
|
|
58
58
|
];
|
|
@@ -19,9 +19,9 @@ export const MANAGE_SEQUENCE_FOLDS = [
|
|
|
19
19
|
},
|
|
20
20
|
{
|
|
21
21
|
primary: 'edit_sequence_tracks', selector: 'edit',
|
|
22
|
-
summary: 'Edit sequence tracks: add a track, section or keyframe; lock, mute or solo a track.',
|
|
23
|
-
topics: ['sequence track', 'add track', 'add section', 'keyframe', 'mute track', 'solo track', 'lock track', 'keyframe actor location'],
|
|
24
|
-
members: { add_track: 'add_track', add_section: 'add_section', add_keyframe: 'add_keyframe', set_locked: 'set_track_locked', set_muted: 'set_track_muted', set_solo: 'set_track_solo' },
|
|
22
|
+
summary: 'Edit sequence tracks: add a track, section or keyframe; move, trim or ease a section; lock, mute or solo a track.',
|
|
23
|
+
topics: ['sequence track', 'add track', 'add section', 'keyframe', 'mute track', 'solo track', 'lock track', 'keyframe actor location', 'crossfade clips', 'ease section', 'trim section'],
|
|
24
|
+
members: { add_track: 'add_track', add_section: 'add_section', add_keyframe: 'add_keyframe', set_locked: 'set_track_locked', set_muted: 'set_track_muted', set_solo: 'set_track_solo', set_section: 'set_section' },
|
|
25
25
|
},
|
|
26
26
|
{
|
|
27
27
|
primary: 'set_properties', selector: 'sequenceProperty',
|
|
@@ -64,9 +64,9 @@ export const MANAGE_SEQUENCE_FOLDS = [
|
|
|
64
64
|
},
|
|
65
65
|
{
|
|
66
66
|
primary: 'create_render_job', selector: 'control',
|
|
67
|
-
summary: 'Movie Render Queue: create a render job, queue it, or
|
|
68
|
-
topics: ['movie render queue', 'render job', 'queue render', 'start render', 'mrq', 'render video'],
|
|
69
|
-
members: { create: 'create_render_job', queue: 'queue_render', start: 'start_render' },
|
|
67
|
+
summary: 'Movie Render Queue: create a render job, queue it, start rendering, or remove jobs from the queue.',
|
|
68
|
+
topics: ['movie render queue', 'render job', 'queue render', 'start render', 'mrq', 'render video', 'remove render job', 'clear render queue'],
|
|
69
|
+
members: { create: 'create_render_job', queue: 'queue_render', start: 'start_render', remove: 'remove_render_job' },
|
|
70
70
|
},
|
|
71
71
|
{
|
|
72
72
|
primary: 'configure_render_job', selector: 'setting',
|
|
@@ -42,8 +42,8 @@ export const SYSTEM_CONTROL_FOLDS = [
|
|
|
42
42
|
},
|
|
43
43
|
{
|
|
44
44
|
primary: 'run_build', selector: 'kind',
|
|
45
|
-
summary: 'Run automation tests, or run UnrealBuildTool for a target.',
|
|
46
|
-
topics: ['automation tests', 'run tests', 'ubt', 'unreal build tool', 'build target'],
|
|
45
|
+
summary: 'Run automation tests and answer with each one\'s result (passed or not, its errors and warnings), or run UnrealBuildTool for a target.',
|
|
46
|
+
topics: ['automation tests', 'run tests', 'test results', 'ubt', 'unreal build tool', 'build target'],
|
|
47
47
|
members: { tests: 'run_tests', ubt: 'run_ubt' },
|
|
48
48
|
},
|
|
49
49
|
{
|
package/dist/tools/catalog/capabilities/records/gameplay/animation-physics/animation-properties.js
CHANGED
|
@@ -32,10 +32,13 @@ export const A = {
|
|
|
32
32
|
layerSetup: objectList('Layered blend-per-bone branch filter descriptors.'),
|
|
33
33
|
boneTracks: objectList('Bone tracks to key: [{ boneName, frames: [{ frame, rotationDelta?: {pitch,yaw,roll}, '
|
|
34
34
|
+ 'rotation?: {pitch,yaw,roll}|{x,y,z,w}, location?: {x,y,z}, scale?: {x,y,z} }] }]. '
|
|
35
|
-
+ '
|
|
36
|
-
+ '
|
|
37
|
-
+ '
|
|
38
|
-
+ '
|
|
35
|
+
+ 'frame runs 0 to numFrames inclusive. Only the poses that matter need keys: frames between '
|
|
36
|
+
+ 'two keys of a channel are blended (rotation slerped), frames before its first key or '
|
|
37
|
+
+ 'after its last hold that key. Channels left out keep the reference pose of that bone, so '
|
|
38
|
+
+ 'a rotation-only track poses without collapsing the skeleton. Prefer rotationDelta, which '
|
|
39
|
+
+ 'bends the bone relative to its rest orientation; plain rotation replaces the local '
|
|
40
|
+
+ 'rotation outright and needs the rest orientation to already be known. Calling it again with '
|
|
41
|
+
+ 'the name of an existing clip re-keys that clip from empty (its additive settings are kept).'),
|
|
39
42
|
weights: objectList('Per-vertex skin weight descriptors with bone influences.'),
|
|
40
43
|
deltas: objectList('Per-vertex morph target position deltas.'),
|
|
41
44
|
pitch: num('Aim offset pitch in degrees.'),
|
|
@@ -44,7 +47,6 @@ export const A = {
|
|
|
44
47
|
endFrame: num('Last frame of the notify state range.'),
|
|
45
48
|
trackIndex: num('Notify track index within the animation sequence.'),
|
|
46
49
|
notifyClass: str('AnimNotify (or AnimNotifyState) class name; prefixed with AnimNotify_/AnimNotifyState_ automatically when missing.'),
|
|
47
|
-
basePoseType: str('Additive base pose type (RefPose, AnimScaled, AnimFrame).'),
|
|
48
50
|
basePoseFrame: num('Frame used as the additive base pose.'),
|
|
49
51
|
forceRootLock: bool('Whether root motion is force-locked to the reference pose.'),
|
|
50
52
|
bodyType: str('Physics body primitive type (Sphere, Box, Capsule).'),
|
package/dist/tools/catalog/capabilities/records/gameplay/animation-physics/authoring-1.data.js
CHANGED
|
@@ -1,7 +1,8 @@
|
|
|
1
1
|
import { buildRecord } from '../helpers.js';
|
|
2
|
+
import { ANY_EDITOR_STATE } from '../../core/builder.js';
|
|
2
3
|
import { P } from '../properties.js';
|
|
3
4
|
import { A } from './animation-properties.js';
|
|
4
|
-
import { bool, num, str } from '../../shared/schema-props.js';
|
|
5
|
+
import { bool, num, str, vec3 } from '../../shared/schema-props.js';
|
|
5
6
|
const T = 'animation_physics';
|
|
6
7
|
const F = 'animation';
|
|
7
8
|
const W = ['An animation asset or graph must be authored.'];
|
|
@@ -135,5 +136,89 @@ export const ANIM_AUTHORED_1 = [
|
|
|
135
136
|
inputProps: { name: P.name, path: P.path, skeletonPath: P.skeletonPath, skeletalMeshPath: str('Skeletal mesh to build the rig from; wins over skeletonPath.'), modularRig: bool('Create a Modular Rig (UE 5.5+; older engines report modularRig false).'), save: A.save }, required: ['name'],
|
|
136
137
|
effect: 'write', latency: 'interactive', resources: 'medium', plugins: ['ControlRig', 'RigVM', 'EditorScriptingUtilities'],
|
|
137
138
|
exampleInput: { action: 'create_control_rig', name: 'CR_Char', skeletonPath: '/Game/SK_Char' } }),
|
|
139
|
+
buildRecord({ parentTool: T, id: `${T}.edit_control_rig`, action: 'edit_control_rig', family: F,
|
|
140
|
+
topics: ['control rig graph', 'rig unit', 'add rig node', 'connect rig pins', 'wire control rig pins', 'control rig hierarchy', 'add control', 'rig bones'],
|
|
141
|
+
summary: 'Edit a Control Rig: add a unit node (list_rig_units finds them), connect or disconnect pins, set a pin value, remove a node, import the skeleton\'s bones, add a bone, null or control, or remove an element; one edit or many steps, then one compile and save. The reply lists what each edit made (a new node with its pins).',
|
|
142
|
+
whenToUse: ['A Control Rig needs its logic built: units such as Get Transform, Two Bone IK or Set Transform wired from the Forwards Solve event (a new rig may have none: add_unit BeginExecution adds it).', 'A rig needs bones from its skeleton, or controls and nulls to drive them.'],
|
|
143
|
+
whenNotToUse: ['The rig asset does not exist yet (use create_control_rig).', 'Only reading the rig (use get_control_rig).', 'An IK Rig or retargeter (use create_ik_rig, setup_ik).'],
|
|
144
|
+
inputProps: {
|
|
145
|
+
assetPath: str('Control Rig asset path, e.g. /Game/Rigs/CR_Arm.'),
|
|
146
|
+
edit: { type: 'string', enum: ['add_unit', 'connect', 'disconnect', 'set_pin', 'remove_node', 'import_bones', 'add_bone', 'add_null', 'add_control', 'remove_element'], description: 'The edit to make (each step of steps names its own).' },
|
|
147
|
+
unit: str('add_unit: the unit, as an object path (/Script/ControlRig.RigUnit_SetTransform), its struct name with or without RigUnit_ (SetTransform), or its display name.'),
|
|
148
|
+
name: str('add_unit: the new node\'s name (default the unit\'s, made unique); add_bone, add_null, add_control, remove_element: the element\'s name.'),
|
|
149
|
+
position: { type: 'array', items: { type: 'number' }, minItems: 2, maxItems: 2, description: 'add_unit: graph position [x, y] (default right of the last node).' },
|
|
150
|
+
from: str('connect, disconnect: the output pin, Node.Pin as get_control_rig lists it; execution runs from the event\'s execute pin to each unit\'s (ExecutePin in UE 5.8).'),
|
|
151
|
+
to: str('connect, disconnect: the input pin, Node.Pin.'),
|
|
152
|
+
pin: str('set_pin: the pin, Node.Pin; a struct member has its own pin (SetTransform.Item.Name, SetTransform.Transform.Translation.X).'),
|
|
153
|
+
value: { type: ['string', 'number', 'boolean'], description: 'set_pin: the value as text (Bone, foot_l), a number, or true/false.' },
|
|
154
|
+
node: str('remove_node: the node\'s name.'),
|
|
155
|
+
skeletonPath: str('import_bones: the skeleton whose bones are imported (default the skeleton of the rig\'s preview mesh).'),
|
|
156
|
+
parent: str('add_bone, add_null, add_control: the parent element\'s name (a bone, null or control); omitted, the top of the hierarchy.'),
|
|
157
|
+
location: vec3('add_bone, add_null, add_control: location [x, y, z] in cm (a control\'s offset), relative to the parent unless global.'),
|
|
158
|
+
rotation: vec3('add_bone, add_null, add_control: rotation [pitch, yaw, roll] in degrees.'),
|
|
159
|
+
scale: vec3('add_bone, add_null, add_control: scale [x, y, z] (default 1).'),
|
|
160
|
+
global: bool('add_bone, add_null: location, rotation and scale are in rig space, not relative to the parent.'),
|
|
161
|
+
controlType: { type: 'string', enum: ['transform', 'float', 'bool', 'position', 'rotator'], description: 'add_control: the value the control drives (default transform).' },
|
|
162
|
+
steps: { type: 'array', items: { type: 'object', additionalProperties: true, 'x-unreal-reflection-boundary': true }, description: 'Several edits in order, each an object with edit and its own fields as above; the first that fails stops the rest, and those before it stay (failedStep names it).' },
|
|
163
|
+
save: A.save,
|
|
164
|
+
},
|
|
165
|
+
required: ['assetPath'],
|
|
166
|
+
effect: 'write', latency: 'interactive', resources: 'medium', plugins: CR_ESU,
|
|
167
|
+
exampleInput: { action: 'edit_control_rig', assetPath: '/Game/Rigs/CR_Arm', steps: [{ edit: 'add_unit', unit: 'BeginExecution', name: 'ForwardsSolve' }, { edit: 'add_unit', unit: 'SetTransform', name: 'SetHand' }, { edit: 'set_pin', pin: 'SetHand.Item.Name', value: 'hand_r' }, { edit: 'connect', from: 'ForwardsSolve.ExecutePin', to: 'SetHand.ExecutePin' }] },
|
|
168
|
+
exampleOutput: { success: true, message: 'Applied 4 edit(s) to CR_Arm.', assetPath: '/Game/Rigs/CR_Arm.CR_Arm', applied: 4, compiled: true, saved: true,
|
|
169
|
+
made: [{ node: 'SetHand', unit: '/Script/ControlRig.RigUnit_SetTransform', pins: [{ pin: 'SetHand.Item', direction: 'Input', type: 'FRigElementKey' }] }, { pin: 'SetHand.Item.Name', value: 'hand_r' }] },
|
|
170
|
+
outputProps: {
|
|
171
|
+
assetPath: str('The rig edited.'),
|
|
172
|
+
applied: num('Edits applied.'),
|
|
173
|
+
made: { type: 'array', items: { type: 'object', additionalProperties: true, 'x-unreal-reflection-boundary': true }, description: 'What the edits made: {node, unit, pins} for an added unit, {pin, value} for a set pin (the value as stored), {element} for an added element, {importedFrom, bones} for a skeleton\'s bones imported (bones the rig already had are matched in place).' },
|
|
174
|
+
compiled: bool('Whether the rig compiled after the edits.'),
|
|
175
|
+
compileErrors: { type: 'array', items: { type: 'string' }, description: 'The compile errors, when there were any.' },
|
|
176
|
+
saved: bool('Whether the rig was saved.'),
|
|
177
|
+
failedStep: num('steps: the step that failed (0-based); the ones before it were applied, compiled and saved.'),
|
|
178
|
+
},
|
|
179
|
+
outputRequired: ['assetPath', 'applied'] }),
|
|
180
|
+
buildRecord({ parentTool: T, id: `${T}.get_control_rig`, action: 'get_control_rig', family: F,
|
|
181
|
+
topics: ['read control rig', 'control rig nodes', 'rig pins', 'rig hierarchy'],
|
|
182
|
+
summary: 'Read a Control Rig: each node of its graph with its unit and pins (path, direction, type, default, linked), the links between pins, its hierarchy (bones, nulls, controls with their parents) and whether it compiled; node names one node with every struct member pin.',
|
|
183
|
+
whenToUse: ['Before editing a rig: the exact pin paths connect and set_pin take, and what is already wired.', 'To check a rig after edits: links, hierarchy, compile state.'],
|
|
184
|
+
whenNotToUse: ['Finding a unit to add (use list_rig_units).'],
|
|
185
|
+
inputProps: {
|
|
186
|
+
assetPath: str('Control Rig asset path, e.g. /Game/Rigs/CR_Arm.'),
|
|
187
|
+
node: str('One node\'s name: only that node, with every struct member pin by its full path.'),
|
|
188
|
+
},
|
|
189
|
+
required: ['assetPath'],
|
|
190
|
+
effect: 'read', editorStates: ANY_EDITOR_STATE, latency: 'instant', resources: 'low', plugins: CR_ESU,
|
|
191
|
+
exampleInput: { action: 'get_control_rig', assetPath: '/Game/Rigs/CR_Arm' },
|
|
192
|
+
exampleOutput: { success: true, message: 'CR_Arm: 2 node(s), 1 link(s), 3 hierarchy element(s).', assetPath: '/Game/Rigs/CR_Arm.CR_Arm',
|
|
193
|
+
nodes: [{ name: 'ForwardsSolve', title: 'Forwards Solve', unit: '/Script/ControlRig.RigUnit_BeginExecution', position: [0, 0], pins: [{ pin: 'ForwardsSolve.ExecutePin', direction: 'Output', type: 'FRigVMExecuteContext', linked: true }] }],
|
|
194
|
+
links: [{ from: 'ForwardsSolve.ExecutePin', to: 'SetHand.ExecutePin' }], elements: [{ type: 'Bone', name: 'root' }, { type: 'Bone', name: 'hand_r', parent: 'root' }], elementCount: 3, compiled: true },
|
|
195
|
+
outputProps: {
|
|
196
|
+
assetPath: str('The rig read.'),
|
|
197
|
+
nodes: { type: 'array', items: { type: 'object', additionalProperties: true, 'x-unreal-reflection-boundary': true }, description: 'Each node: name, title, unit (struct path), position [x, y] and pins [{pin, direction, type, default, linked}].' },
|
|
198
|
+
links: { type: 'array', items: { type: 'object', additionalProperties: true, 'x-unreal-reflection-boundary': true }, description: 'Each link: from (output pin) and to (input pin).' },
|
|
199
|
+
elements: { type: 'array', items: { type: 'object', additionalProperties: true, 'x-unreal-reflection-boundary': true }, description: 'Hierarchy elements in order (up to 500): type (Bone, Null, Control, Curve ...), name and parent.' },
|
|
200
|
+
elementCount: num('All hierarchy elements.'),
|
|
201
|
+
compiled: bool('Whether the rig is compiled and up to date.'),
|
|
202
|
+
nodeNames: { type: 'array', items: { type: 'string' }, description: 'With a node that is not there: the nodes there are.' },
|
|
203
|
+
},
|
|
204
|
+
outputRequired: ['assetPath', 'nodes'] }),
|
|
205
|
+
buildRecord({ parentTool: T, id: `${T}.list_rig_units`, action: 'list_rig_units', family: F,
|
|
206
|
+
topics: ['rig units', 'find rig unit', 'control rig node types'],
|
|
207
|
+
summary: 'Find the units a Control Rig graph can hold (Get Transform, Two Bone IK, Aim, math and more): each unit\'s object path, name and category, for edit_control_rig add_unit.',
|
|
208
|
+
whenToUse: ['A unit is needed for add_unit and its name is not known.'],
|
|
209
|
+
whenNotToUse: ['Reading what a rig already holds (use get_control_rig).'],
|
|
210
|
+
inputProps: {
|
|
211
|
+
query: str('Words to match in the unit\'s name, display name, category or keywords (spaces ignored), e.g. two bone, aim, set transform.'),
|
|
212
|
+
limit: num('Most units to list (default 50, up to 500); matched counts them all.'),
|
|
213
|
+
},
|
|
214
|
+
required: [],
|
|
215
|
+
effect: 'read', editorStates: ANY_EDITOR_STATE, latency: 'instant', resources: 'low', plugins: CR_ESU,
|
|
216
|
+
exampleInput: { action: 'list_rig_units', query: 'two bone' },
|
|
217
|
+
exampleOutput: { success: true, message: '2 rig unit(s) match.', matched: 2, units: [{ unit: '/Script/ControlRig.RigUnit_TwoBoneIKSimplePerItem', name: 'Basic IK', category: 'Hierarchy' }] },
|
|
218
|
+
outputProps: {
|
|
219
|
+
units: { type: 'array', items: { type: 'object', additionalProperties: true, 'x-unreal-reflection-boundary': true }, description: 'Matching units sorted by struct name: unit (the object path add_unit takes), name and category.' },
|
|
220
|
+
matched: num('Units that match.'),
|
|
221
|
+
},
|
|
222
|
+
outputRequired: ['units', 'matched'] }),
|
|
138
223
|
];
|
|
139
224
|
//# sourceMappingURL=authoring-1.data.js.map
|
package/dist/tools/catalog/capabilities/records/gameplay/animation-physics/authoring-2.data.js
CHANGED
|
@@ -116,8 +116,13 @@ export const ANIM_AUTHORED_2 = [
|
|
|
116
116
|
plugins: ESU, exampleInput: { action: 'set_root_motion_settings', assetPath: '/Game/A_Run', enableRootMotion: true, rootMotionRootLock: 'RefPose' },
|
|
117
117
|
exampleOutput: { success: true, message: 'Root motion settings set' } }),
|
|
118
118
|
buildRecord({ parentTool: T, id: `${T}.set_additive_settings`, action: 'set_additive_settings', family: F,
|
|
119
|
-
summary: 'Configure additive animation settings.', whenToUse: ['Additive layering needed.'], whenNotToUse: ['Absolute pose.'],
|
|
120
|
-
inputProps: {
|
|
119
|
+
summary: 'Configure additive animation settings.', whenToUse: ['Additive layering needed.', 'A hand-keyed move (an arm raise, a head turn) must play on top of a mocap clip: key it as a procedural clip relative to the reference pose, then make it LocalSpaceAdditive with basePoseType RefPose.'], whenNotToUse: ['Absolute pose.'],
|
|
120
|
+
inputProps: {
|
|
121
|
+
assetPath: P.assetPath, animationPath: P.animationPath,
|
|
122
|
+
additiveAnimType: { type: 'string', enum: ['NoAdditive', 'LocalSpaceAdditive', 'MeshSpaceAdditive'], description: 'NoAdditive (default) plays the clip as a full pose. LocalSpaceAdditive keeps only its difference from the base pose and adds that on top of whatever plays under it (a Sequencer section on another row, Apply Additive in an Animation Blueprint). MeshSpaceAdditive adds rotations in mesh space, for aim offsets; Sequencer cannot play it.' },
|
|
123
|
+
basePoseType: { type: 'string', enum: ['RefPose', 'AnimScaled', 'AnimFrame'], description: 'What the additive difference is taken from (default RefPose): RefPose = the skeleton reference pose, AnimScaled = basePoseAnimation frame by frame, AnimFrame = one frame (basePoseFrame) of basePoseAnimation.' },
|
|
124
|
+
basePoseFrame: A.basePoseFrame, basePoseAnimation: str('Animation sequence to take the additive base pose from.'), save: A.save,
|
|
125
|
+
}, required: [],
|
|
121
126
|
effect: 'write', behavior: { idempotency: 'idempotent' }, latency: 'interactive', resources: 'low', plugins: ESU,
|
|
122
127
|
exampleInput: { action: 'set_additive_settings', assetPath: '/Game/A_Run', additiveAnimType: 'NoAdditive', basePoseType: 'RefPose', basePoseFrame: 0 } }),
|
|
123
128
|
buildRecord({ parentTool: T, id: `${T}.create_montage`, action: 'create_montage', family: F,
|
|
@@ -21,11 +21,11 @@ export const E = {
|
|
|
21
21
|
emitterProperties: {
|
|
22
22
|
type: 'object',
|
|
23
23
|
additionalProperties: true,
|
|
24
|
-
description: 'Emitter settings to change
|
|
24
|
+
description: 'Emitter settings to change: enabled (boolean) turns the emitter on or off; moduleEnabled ({ModuleName: boolean}, names as get_niagara_info lists them) turns stack modules on or off, so a template module that works against the values set (a size curve, wind) can be switched off. Any other key is refused. Module inputs are set with set_parameter_value.',
|
|
25
25
|
'x-unreal-reflection-boundary': true,
|
|
26
26
|
},
|
|
27
27
|
savePath: str('Canonical /Game directory for the created asset.'),
|
|
28
|
-
scriptType: str('
|
|
28
|
+
scriptType: str('Which script the graph edit works in: Spawn (default) or Update. With emitterName that is the particle spawn or particle update stack of that emitter; without it, the system spawn or update script.'),
|
|
29
29
|
modulePath: str('Canonical /Niagara module script path to insert.'),
|
|
30
30
|
nodeId: str('Niagara graph node identifier.'),
|
|
31
31
|
targetNodeId: str('Niagara graph node the dynamic input is attached to.'),
|
|
@@ -34,13 +34,14 @@ export const E = {
|
|
|
34
34
|
inputName: str('Module input name receiving the dynamic input.'),
|
|
35
35
|
replaceExisting: bool('Whether an existing dynamic input is replaced.'),
|
|
36
36
|
parameterName: str('Niagara parameter name.'),
|
|
37
|
-
parameterType: str('Niagara parameter type (Float, Vector, Color, ...).'),
|
|
37
|
+
parameterType: str('Niagara parameter type (Float, Vector, Color or LinearColor, ...).'),
|
|
38
38
|
parameterValue: { description: 'Niagara parameter value (any type).' },
|
|
39
39
|
sourceBinding: str('Data source the parameter binds to.'),
|
|
40
40
|
forceType: str('Force module type (Gravity, Drag, Wind, Curl, Vortex, PointAttraction).'),
|
|
41
41
|
velocityMode: str('Velocity module mode (Linear, Cone, FromPoint).'),
|
|
42
42
|
color: { description: 'Color as an {r, g, b, a} object or an [r, g, b, a] array: 0 to 255 channels for debug_shape, 0 to 1 for a light.' },
|
|
43
|
-
materialPath: str('Canonical /Game material asset path for the renderer.'),
|
|
43
|
+
materialPath: str('Canonical /Game material asset path for the renderer; its Niagara sprite or ribbon usage flag is set and the material saved, so the renderer never falls back to the default material.'),
|
|
44
|
+
meshPath: str('Canonical /Game static mesh for the mesh renderer; its materials get their Niagara mesh-particle usage flag set and saved, so the particles never fall back to the default material.'),
|
|
44
45
|
lightRadius: num('Multiplier on each particle\'s light radius (the renderer RadiusScale, engine default 1). Left unchanged when omitted.'),
|
|
45
46
|
eventName: str('Niagara event name.'),
|
|
46
47
|
eventType: str('Niagara event generator type (Location, Death, Collision).'),
|
|
@@ -52,8 +53,8 @@ export const E = {
|
|
|
52
53
|
fixedBoundsEnabled: bool('Whether fixed system bounds are enabled.'),
|
|
53
54
|
attachToActor: str('Name of the actor the spawned system attaches to.'),
|
|
54
55
|
reset: bool('Whether the effect restarts from its initial state.'),
|
|
55
|
-
deltaTime: num('
|
|
56
|
-
steps: num('
|
|
56
|
+
deltaTime: num('Seconds per step (default 0.1); steps of about a frame (0.02) simulate the way the game does.'),
|
|
57
|
+
steps: num('Steps to run (default 1): the system ages steps x deltaTime seconds.'),
|
|
57
58
|
filter: str('Actor name prefix selecting which transient effects are cleaned up.'),
|
|
58
59
|
preset: str('Particle preset name or canonical /Game particle asset path.'),
|
|
59
60
|
shapeType: str('Debug shape type (Sphere, Box, Line, Capsule).'),
|