Skip to content

feat: demo showcase redesign + UE 5.7 Blueprint API compatibility - #107

Merged
atomantic merged 10 commits into
mainfrom
feat/demo-showcase-ue57-compat
Apr 2, 2026
Merged

atomantic merged 10 commits into
mainfrom
feat/demo-showcase-ue57-compat

Conversation

@atomantic

Copy link
Copy Markdown
Owner

Summary

  • Demo Showcase: Redesigned Demo project from a simple calibration grid into a walkable linear corridor with 9 themed zones demonstrating all MCP tool categories (Actor, Material, Niagara VFX, Blueprint, Audio/MetaSound, Widget/UMG, Animation/AI, Data Systems)
  • UE 5.7 Compatibility: Fixed blueprint_add_component, blueprint_compile, and blueprint_modify_component which were broken on UE 5.7 due to removal of simple_construction_script and KismetEditorUtilities from the Python API
  • Hot-reload fix: restart_listener() now clears utils.* modules alongside ops.* to prevent stale cached imports

Demo Layout

PlayerStart → Hub → Actor → Material → Niagara → Blueprint → Audio → Widget → Anim → Data
X: -1500      0     2500    5000       7500      10000      12500   15000   17500   20000

Each zone has: colored platform, title labels, feature sub-labels, demo objects, and a dedicated E2E test area cleaned by reset_demo_scene.

UE 5.7 API Changes

Old API (UE 5.4-5.6) New API (UE 5.7+)
Blueprint.simple_construction_script SubobjectDataSubsystem.add_new_subobject()
KismetEditorUtilities.compile_blueprint() BlueprintEditorLibrary.compile_blueprint()
KismetEditorUtilities.add_blueprint_variable() BlueprintEditorLibrary.add_member_variable()
Blueprint.mark_package_dirty() (removed, not needed with proper compile)

Compatibility layer auto-detects UE version via hasattr checks and uses the appropriate API.

Test plan

  • 327 unit tests pass
  • 9 e2e/integration tests pass
  • blueprint_add_component creates components on UE 5.7 (tested with CameraComponent)
  • blueprint_compile compiles blueprints on UE 5.7
  • reset_demo_scene removes test actors and cleans /Game/Tests + /Game/TestBlueprints/CoverageTest
  • All text labels face correct direction (readable walking East along corridor)
  • Niagara effects spawn on pedestals in VFX zone

Redesign Demo project from calibration grid into a walkable linear
corridor showcasing all 9 MCP tool categories with themed zones,
materials, Niagara VFX, labels, and navigation signs.

Fix blueprint_add_component, blueprint_compile, and
blueprint_modify_component for UE 5.7 where simple_construction_script
and KismetEditorUtilities were removed from the Python API. New
compatibility layer uses SubobjectDataSubsystem + BlueprintEditorLibrary
with automatic fallback to legacy SCS API on older UE versions.
Test assets from comprehensive MCP tests (structs, datatables, input
mappings, materials, animation, statetree) were left in /Game/Tests/
after test runs. Now cleaned up alongside /Game/TestBlueprints/.
… git

Test assets (structs, datatables) created by comprehensive test runs
should not be tracked. Updated .gitignore to exclude Demo/Content/Tests/
and saved level after reset_demo_scene cleanup.
- widget.py: replace KismetCompilerLibrary.compile_blueprint with
  _compile_bp wrapper in screenshot() for UE 5.7 compatibility
- animation.py: wrap KismetEditorUtilities.add_blueprint_variable with
  hasattr guard, fallback to BlueprintEditorLibrary.add_member_variable
- PLAN.md: fix stale "3x3 grid" description to "linear corridor"
Copilot AI review requested due to automatic review settings April 2, 2026 16:50

Copilot AI left a comment

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Pull request overview

This PR modernizes the Demo project into a walkable “feature showcase” corridor and updates Python Blueprint operations to work on UE 5.7’s updated editor/Python APIs (plus a small hot-reload improvement).

Changes:

  • Added UE-version compatibility helpers for Blueprint compilation and component/subobject manipulation (legacy SCS vs UE 5.7+ SubobjectDataSubsystem).
  • Updated multiple ops modules (blueprint_graph, blueprint, widget, animation) to use the compatibility layer instead of direct KismetEditorUtilities calls.
  • Reworked Demo project documentation/assets and adjusted reset behavior + repo ignore rules to support the new showcase layout and test asset cleanup.

Reviewed changes

Copilot reviewed 12 out of 37 changed files in this pull request and generated 2 comments.

Show a summary per file
File Description
server/tests/python/ops/test_blueprint_graph.py Updates unit test expectations for component modification when SCS/subobject APIs are unavailable.
plugin/Content/Python/utils/blueprint_helpers.py Adds compile + SCS/SubobjectDataSubsystem compatibility helpers for UE 5.4–5.7+.
plugin/Content/Python/uemcp_listener.py Extends hot-reload module clearing to include utils.* submodules.
plugin/Content/Python/ops/widget.py Switches widget compilation to version-compatible Blueprint compilation helper.
plugin/Content/Python/ops/level.py Updates demo reset baseline prefixes and expands test-asset cleanup directories.
plugin/Content/Python/ops/blueprint.py Updates Blueprint compilation logic to use the new compilation helper.
plugin/Content/Python/ops/blueprint_graph.py Implements UE 5.7-compatible component add/modify/list via SubobjectDataSubsystem path.
plugin/Content/Python/ops/animation.py Replaces direct Kismet compilation calls; adds UE 5.7 variable-add fallback using BlueprintEditorLibrary.
PLAN.md Documents the Demo showcase redesign in the project plan.
Demo/README_CALIBRATION.md Replaces calibration-grid documentation with the new showcase corridor guide.
Demo/Demo.uproject Bumps EngineAssociation from 5.6 to 5.7 for the demo project.
Demo/Content/Demo/Materials/Showcase/M_Demo_Rough.uasset Adds new showcase material asset (rough).
Demo/Content/Demo/Materials/Showcase/M_Demo_Neon.uasset Adds new showcase material asset (neon).
Demo/Content/Demo/Materials/Showcase/M_Demo_Emissive.uasset Adds new showcase material asset (emissive).
Demo/Content/Demo/Materials/Showcase/M_Demo_Copper.uasset Adds new showcase material asset (copper).
Demo/Content/Demo/Materials/M_Demo_TestArea.uasset Adds demo material for E2E test area platform visuals.
Demo/Content/Demo/Materials/M_Demo_Niagara.uasset Adds demo zone material for Niagara section visuals.
Demo/Content/Demo/Materials/M_Demo_Material.uasset Adds demo zone material for Material section visuals.
Demo/Content/Demo/Materials/M_Demo_Hub.uasset Adds demo hub material asset.
Demo/Content/Demo/Materials/M_Demo_Ground.uasset Adds demo ground material asset.
Demo/Content/Demo/Materials/M_Demo_Data.uasset Adds demo zone material for Data Systems section visuals.
Demo/Content/Demo/Materials/M_Demo_Blueprint.uasset Adds demo zone material for Blueprint section visuals.
Demo/Content/Demo/Materials/M_Demo_Audio.uasset Adds demo zone material for Audio/MetaSound section visuals.
Demo/Content/Demo/Materials/M_Demo_Animation.uasset Adds demo zone material for Animation/AI section visuals.
Demo/Content/Demo/Materials/M_Demo_Actor.uasset Adds demo zone material for Actor section visuals.
.gitignore Adjusts ignore rules to keep Demo showcase content while continuing to ignore generated folders.
.changelogs/NEXT.md Adds release notes for the showcase redesign, UE 5.7 compatibility changes, and hot-reload fix.

💡 Add Copilot custom instructions for smarter, more guided reviews. Learn how to get started.

Comment thread plugin/Content/Python/ops/blueprint.py Outdated
Comment thread plugin/Content/Python/uemcp_listener.py
…ll and hot-reload utils gap

- Remove incorrect unreal.BlueprintEditorLibrary.generated_class(blueprint) call
  which would raise AttributeError on UE 5.7; generated_class() is a property
  on the Blueprint object itself, not on BlueprintEditorLibrary
- Include top-level 'utils' package in hot-reload module clearing so changes to
  utils/__init__.py are picked up by restart_listener()

Copilot AI left a comment

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Pull request overview

Copilot reviewed 12 out of 37 changed files in this pull request and generated 1 comment.


💡 Add Copilot custom instructions for smarter, more guided reviews. Learn how to get started.

Comment thread plugin/Content/Python/ops/level.py
…oTestArea_

Copilot review correctly identified that reset_demo_scene only preserved
actors with the Demo_ prefix, but the showcase level also uses DemoFloor_,
DemoLabel_, and DemoTestArea_ prefixes per the naming convention in the
README. Without these, zone floors, labels, and test area platforms would
be deleted during scene reset.

Copilot AI left a comment

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Pull request overview

Copilot reviewed 12 out of 37 changed files in this pull request and generated 3 comments.


💡 Add Copilot custom instructions for smarter, more guided reviews. Learn how to get started.

Comment thread plugin/Content/Python/utils/blueprint_helpers.py Outdated
Comment thread plugin/Content/Python/ops/blueprint_graph.py
Comment thread plugin/Content/Python/ops/blueprint_graph.py Outdated
…string matching

SubobjectDataBlueprintFunctionLibrary.get_display_name() returns unreal.Text
(FText) in UE 5.7+, not a Python str. Wrap all call sites with str() to ensure
reliable string comparisons with component_name and JSON-serializable payloads
in error details and return values.

Copilot AI left a comment

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Pull request overview

Copilot reviewed 12 out of 37 changed files in this pull request and generated 1 comment.


💡 Add Copilot custom instructions for smarter, more guided reviews. Learn how to get started.

Comment thread plugin/Content/Python/utils/blueprint_helpers.py
…tEditorLibrary

If neither KismetEditorUtilities nor BlueprintEditorLibrary is available,
raise a structured ProcessingError instead of an AttributeError.

Copilot AI left a comment

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Pull request overview

Copilot reviewed 12 out of 37 changed files in this pull request and generated 3 comments.


💡 Add Copilot custom instructions for smarter, more guided reviews. Learn how to get started.

Comment thread .changelogs/NEXT.md Outdated
Comment thread Demo/README_SHOWCASE.md
Comment thread plugin/Content/Python/ops/animation.py
…ion error handling

- Update NEXT.md to list all 4 preserved prefixes (DemoFloor_, DemoLabel_, DemoTestArea_)
  instead of incorrectly claiming only Demo_ is preserved
- Rename Demo/README_CALIBRATION.md -> README_SHOWCASE.md to match content
- Raise ProcessingError in add_variable when no API is available or add call returns falsy,
  instead of silently continuing and reporting success

Copilot AI left a comment

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Pull request overview

Copilot reviewed 13 out of 38 changed files in this pull request and generated no new comments.

Comments suppressed due to low confidence (1)

plugin/Content/Python/ops/level.py:84

  • reset_demo_scene now deletes the top-level /Game/Tests directory by default when delete_test_assets=True. In non-Demo projects this path is commonly used for legitimate content, so this can cause unintended data loss. Consider narrowing deletion to a more specific, UEMCP-owned subfolder (e.g. /Game/Tests/UEMCP), gating it behind a separate explicit flag, or verifying the current project is the Demo showcase before deleting /Game/Tests.

💡 Add Copilot custom instructions for smarter, more guided reviews. Learn how to get started.

@atomantic
atomantic merged commit 1913616 into main Apr 2, 2026
8 checks passed
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

2 participants