The output pose layer is now correctly identified by finding the node
whose Name property is "AnimGraph" (stored on AnimGraphNode_Root),
instead of incorrectly matching any node with "Root" in ExportType.
Co-authored-by: LoogLong <86428208+LoogLong@users.noreply.github.com>
Only the AnimGraph layer (containing Root/Result nodes) is shown
when first opening the animation blueprint, instead of all layer tabs.
Co-authored-by: LoogLong <86428208+LoogLong@users.noreply.github.com>
- Dark translucent node body with gradient title bar color-coded by type
- Proper pin circles (Ellipses) on node edges replacing text bullets
- Connection wires colored by source pin type with thicker strokes
- Subtle drop shadow behind each node
- Orange selection highlight matching UE's selection color
- Darker canvas background matching UE blueprint editor
- Extract named constants for pin label offset and gradient factor
Co-authored-by: LoogLong <86428208+LoogLong@users.noreply.github.com>
The previous fix (e.OriginalSource != sender) blocked panning entirely
when clicking on nodes, making them feel like buttons. Connection Path
elements also received mouse events, potentially interfering.
Fix:
- Use a drag-threshold mechanism: clicking selects a node without
jumping, dragging from anywhere (including nodes) starts panning
after a 5px threshold is exceeded.
- Register MouseLeftButtonDown with AddHandler(handledEventsToo: true)
so the panning handler fires even when nodes set e.Handled = true.
- Set IsHitTestVisible = false on connection Path elements so they
don't interfere with mouse events.
- Check e.LeftButton state in OnCanvasMouseMove to prevent stale pan
state when the button is released unexpectedly.
Co-authored-by: LoogLong <86428208+LoogLong@users.noreply.github.com>
In WPF, MouseLeftButtonDown is a Direct routed event that fires
independently on each UIElement with a fresh Handled=false. Setting
e.Handled=true in the node's click handler does NOT prevent
OnCanvasMouseDown on the parent canvasBorder from firing. This caused
clicking a node to both select it AND start panning, making the graph
jump when the mouse moved.
Fix: check e.OriginalSource != sender in OnCanvasMouseDown so panning
only starts when clicking directly on the canvas background.
Co-authored-by: LoogLong <86428208+LoogLong@users.noreply.github.com>
- Fix OnMouseWheel: get mouse position relative to parent Border (stable
coords) instead of Canvas (transformed coords that shift during zoom);
compute canvas-local point manually and preserve it after scale change
- Fix OnCanvasMouseDown/Move: use parent Border coords for consistent
panning behavior
- Improve connection lines: thicker stroke (2px), higher opacity (0.8),
minimum bezier tangent length (50px) for smoother short-distance curves
Co-authored-by: LoogLong <86428208+LoogLong@users.noreply.github.com>
- AnimGraphViewModel: Add AnimGraphLayer class and BuildLayers() to group
nodes into connected subgraphs displayed as separate tabs
- AnimGraphViewModel: Add topological layout (LayoutLayerNodes) so nodes
flow left-to-right by dependency depth instead of grid
- AnimGraphViewer.xaml: Replace single canvas with TabControl for layers
and a right-side properties panel with GridSplitter
- AnimGraphViewer.xaml.cs: Per-layer canvas state, node selection with
property panel population, per-tab zoom/pan
Co-authored-by: LoogLong <86428208+LoogLong@users.noreply.github.com>
In cooked UE assets, UEdGraphNode objects are stripped as editor-only data
(PKG_FilterEditorOnly). The actual animation node information is stored in:
- UAnimBlueprintGeneratedClass.ChildProperties (FStructProperty entries describing node types)
- ClassDefaultObject properties (FStructFallback values with node data)
- FPoseLink/FComponentSpacePoseLink structs with LinkID for connections
Co-authored-by: LoogLong <86428208+LoogLong@users.noreply.github.com>
* Fix HTML tags in some Quests DisplayName.
* New Backups & Hotfixes API
* fix backups being null
---------
Co-authored-by: GhostScissors <79089473+GhostScissors@users.noreply.github.com>
* 'The Dark Pictures Anthology: House of Ashes' Wwise support
* AnyItemMeetsConditionConverter.ConditionMode
---------
Co-authored-by: Asval <asval.contactme@gmail.com>
+ filter by types, find by references (UE5+), and a lot of other improvements
Co-authored-by: Asval <asval.contactme@gmail.com>
Co-authored-by: LongerWarrior <LongerWarrior@gmail.com>