Giter VIP home page Giter VIP logo

heartgraph's Introduction

Heart Graph Plugin

A generic runtime node graph editor and viewer for Unreal Engine. Supports versions 5.3 and 5.4, with legacy branch for 5.2 with a limited feature set. Compiles on Windows and macOS.

Modules

Heart

The core of HeartGraph. Defines the core types used to build a graph: UHeartGraph, UHeartGraphNode, and UHeartGraphSchema, as well as a registry subsystem that ties them together.

Blood

What flows through a heart? Blood, of course. Blood is the data shuttler for heart graphs, a variant data type system, designed for interoperability with FProperties, as well as quick, efficient access from both c++ and BP.

HeartCore

Underlying math utilities, and generic UI classes that aren't specifically for HeartGraph, but kept here to avoid dependencies on another plugin. At some point, I might move some or all of this to a separate plugin if it becomes too much.

HeartCore implements a custom system for managing UI input, inspired mostly by UE's new EnhancedInput, that centralizes input definition into a single asset, UHeartInputBindingAsset, which functions much like an InputMappingContext. Currently, this system requires some c++ boilerplate to add it to custom widget types, but is implemented out-of-the-box for any HeartGraph widget.

HeartCanvas

A toolset for displaying and editing a UHeartGraph using entirely UMG widgets. Essentially meant to replicate Unreal's native UEdGraph editor, except with far more customization, to tailor the graph's appearance and behavior to the needs of the project.

HeartScene

An alternative visualization method using AActor and UActorComponent classes, allowing for full 3D graph visualizers.

HeartEditor (WIP)

An asset authoring tool for Heart graphs using Unreal's native UEdGraph toolset. Such a workflow allows for creating a graph inside the Unreal Engine Editor, and viewing it using HeartCanvas at runtime (such as a perk tree).

HeartJson (WIP)

Adds a Json Serializer to the Flakes API from HeartCore

HeartNet (WIP)

An addition to Heart that enables replication support of a HeartGraph.

Engine Plugin Dependencies

AssetSearch

I want to implement an asset search feature similar to Flow Graph's implementation. Not implemented yet...

EngineAssetDefinitions

Core engine module that is a plugin for some reason.

EnhancedInput

This is only used by the SceneModule to link input, but I may add support for InputActions to Canvas later.

GameplayTagsEditor

A "plugin dependency" by a technicality. I don't know why the main module is part of the core engine, but this module isn't. Anyway.

StructUtils

FInstancedStruct is used for implementing FBloodValue.

Planned Dependencies

UMG Viewmodel

#10

ControlFlows

#7 (comment)

Compatibility

CommonUI

HeartCanvas specifically doesn't use CommonUI, as its methods for defining UI input are not to my liking. However, using most CommonUI components for building Canvas widgets still works.

Links

Docs: https://heart-1.gitbook.io/heart-plugin/

Demo Project: https://github.com/Drakynfly/HeartDemoProject / https://github.com/Drakynfly/HeartDemoContent

Discord: Discord (Drakynfly's Plugins)

Acknowledgments

heartgraph's People

Contributors

crushedpixel avatar drakynfly avatar

Stargazers

 avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar

Watchers

 avatar  avatar  avatar  avatar  avatar

heartgraph's Issues

An easier to understand demo

Hey, first of all, thanks for your work on this project =)

I would like to ask you for an easier to understand and simpler demo project. I'm having a hard time to undestand how the calculator demo works.

Just for context, what I'm trying to achieve is:

  • Define a bunch of nodes using JSON. For example, node A has three inputs (ai1:string, ai2:int, ai3:bool) and one output (ao1:Vector)
  • Load the JSON containing the descriptions of theses nodes in runtime
  • Allow the player to create a graph using these nodes
  • Save the created graph as a JSON

Is it possible using this plugin?

Potentially merge this with Plato

There are some features from Plato worth pulling into Heart: better dynamic pin generation, editor features, etc
And there are some things in Heart that Plato could get.
I might just merge them at some point. At minimal, ill rewrite Heart's pin generation to more closely resemble Plato's.

Support ModelViewViewModel

Support use of this plugin either as an extension to HeartCanvas in a new module, or as an internal implementation, once it is more developed, and I learn to use it.

Drive WaveFunctionCollapse via Heart

Epic has a new experimental plugin for wave function collapse algorithms. I want to drive it with a Heart Graph if possible, for user editable generated worlds.

Duplicating nodes in the Editor is broken

Issue one: Visually they glitch out and become bright . . . . wtf
Issue two: Copying nodes from one graph to another is bugged. Something about external object being linked. Probably the node objects aren't being duplicated

Runtime Comments

Two things to consider
- generic node object type for runtime-created comments
- object may either be of the type UHeartComment_Text or UHeartComment_Image. Both would be stored in the same heart node, it's up to widgets to distinguish them.
- Copy editor authored comments into runtime as a UHeartComment_Text, and synchronize edits.

What would replication-support look like?

Determine if any kind of network support should be handled internally in Heart.
a. Replication of node connections?
b. Replication of action runners?
Or just leave all this up to implementations . . .
Likely I'll wait until a good use-case arises with internal projects to decide this.

The node graph should support gamepad navigation

Basically the title.
Not fully tho, because I don't want to interfere with people using common ui's gamepad features, so more like just having features like "select on hover" flags, and such.

Probably just keep notes on how gamepad support is done for private projects and make a writeup/documentation on how it should be done. . .

Configurable Chords to spawn nodes in the editor

FHeartSpawnNodeCommands::GetActionByChord is a mostly stub class for creating nodes from keybinds. Right now it only can spawn comments. The editor registry subsystem should read keybinds from registries and add them here.

Potential issues

  • Conflicts between registers vying to use the same chord

Add Auto-layout functionality

Node layout helpers that come in two flavors:

  • Placement aids, e.g, snap to grid functionality, place between pins, etc
    • The behavior class determines which placement aid is used.
  • An autoformatter, e.g, StraightenConnections, AlignNodes.
    • In the editor, these should be implemented the same way as normal, using UI_COMMAND
    • For runtime, everything will likely need to be rebuilt. Write these as a command function, taking in any graph/group of nodes, and dynamically re-layout'ing it/them.
      • In addition to straighten connection horizontal and vertical, make a radial layout for perk trees.

Add custom stat categories for each module

Heart, HeartCanvas, and HeartCore should all get a stat category for tracking cpu time.
Prime targets to moniter are GetPin/GetNode-type functions, Canvas draw times, and input rerouting times.

Add cleanup step to detect and remove dead nodes/pins

  1. All pin connections must be stored two-way, Eg, both nodes know about the connection,
  2. Pin connections should not contain any pin guid not found in its pin descs, or link to any node guids not contained by the graph

Unsupported 5.0 version

Hey,
I really like your plugin from what I have seen so far. Is there a version for ue 5.0 or is it ue 5.0 supported? Im having quite some compile issues with 5.0.3 atm, a lot of syntax differences too.

Thanks a lot!

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    ๐Ÿ–– Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. ๐Ÿ“Š๐Ÿ“ˆ๐ŸŽ‰

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google โค๏ธ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.