Add Blueprint-style execution flow with white arrow pins - #33
Merged
Conversation
📊 Test Coverage Report✅ Coverage report generated successfully Coverage Statistics
|
- Removed dead code: currentNodeIndex was declared but never used - Added override keyword to GetType() methods in test classes
- Remove existing execution connections before adding new ones - Prevents invalid graphs from API calls and deserialization - Makes cycles mathematically impossible - Data connections maintain 1:N behavior (one input, many outputs)
- Acquire graphMutex to prevent race conditions - Ensures safe access to nodes and connections during plan compilation - Uses recursive_mutex so nesting with Execute() is safe
- Change storage from vector to unordered_set - Replace std::find with count() for lookups - Use insert() instead of push_back() - Get methods convert back to vector for API compatibility
- Verify execution order size matches expected node count - Provides fail-safe even if 1:1 enforcement has bugs - Catches edge cases and regressions early
- Test execution flow follows execution connections not data dependencies - Test 1:1 enforcement for both input and output execution pins - Test entry point detection (nodes with output but no input) - Test data connections still allow 1:N (multiple outputs) - Test error when execution pins are unconnected - Test cycle prevention through 1:1 enforcement - Test defensive cycle detection validation - Test mixed graphs with legacy nodes still work - 11 new test cases covering all critical execution flow scenarios
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
Summary
Implements Unreal Engine Blueprint-style execution flow system with visual white execution pins (rendered as arrows) to control node execution order, separate from data flow connections.
Key Changes
Core Infrastructure
CreateExecutionInputPin/OutputPin,GetExecutionInputPins/OutputPins)PinTypeenum (Execution/Data) andPinDataType::Executionfor proper type differentiationVisual Rendering
RenderExecutionPinRow()for horizontal arrow layout,RenderPinsInColumn()for vertical data pinsFindPinAtPosition()andGetPinWorldPosition()to handle execution pins in horizontal row vs data pins in columnsNode Integration
Technical Details
Execution Flow Logic (NodeEditor.cpp):
Rendering Architecture:
(nodeX ± padding, titleY + padding + rowHeight/2)executionRowHeight + spacingwhen execution pins present(x+size/2, y),(x-size/2, y-size/2),(x-size/2, y+size/2)Visual Consistency:
Testing
Breaking Changes
None. Existing graphs without execution connections continue to work via data-only topological execution.
Future Work