Search Unity

Assets diamond Visual Scripting

Discussion in 'Works In Progress - Archive' started by maz_dev, Jun 17, 2017.

  1. eagleeyez

    eagleeyez

    Joined:
    Mar 21, 2013
    Posts:
    406
    Ok, thanks.

    In your screenshot at the bottom there is just true. Dows this switch to false when passed through again? How do I separate, meaning why is not true and false at the bottom. What if I want to do something else if false and something else if true. It is not clear.

    That could get too much with so many scripts flying around the project. But as said I am new since yesterday to diamond and I will have to get into it a bit more. I was hoping for methods / functions being in more or less a few scripts. It just looks nothing like how I read code at the moment, so maybe I’ll find out how I can read it all as it is.
     
  2. maz_dev

    maz_dev

    Joined:
    Sep 23, 2012
    Posts:
    261
    Image 3.png

    In this image, if your bool is true, this will do the subtract logic node, in the other case it will trigger the add logic node
     
    Last edited: Jul 25, 2017
  3. maz_dev

    maz_dev

    Joined:
    Sep 23, 2012
    Posts:
    261
    Image 4.png

    Same as the first image, but here instead of a simple bool variable you have the condition "float is greater Than",
    if the first float is greater than the second this will trigger the subtract node, if not the add node will be triggered
     
  4. eagleeyez

    eagleeyez

    Joined:
    Mar 21, 2013
    Posts:
    406
    Thanks, that helps a lot. I was not thinking that way, I am just so dam used to Playmaker.
    This has to be better explained in the docs or I think a lot of people will get confused.
    I'll carry on tomorrow.
    Cheers
     
    maz_dev likes this.
  5. maz_dev

    maz_dev

    Joined:
    Sep 23, 2012
    Posts:
    261
    Glad that you are more familiar with Diamond, and yes I will add this explanation about bool switch to the next Docs
     
  6. maz_dev

    maz_dev

    Joined:
    Sep 23, 2012
    Posts:
    261
    New version to submit this week
    Need testers

    Diamond 1.1 will be submitted this week, it contains many of new stuff, here is some of them:
    • Unity Ads
    • PBR Textures, combine your metallic, smoothness and occlusion maps in one map
    • Global broadcast event system
    • Enhanced parallax scrolling for 2D backgrounds, works also for any 3D object.
    • 3D grid generator, duplicate an object in 3D grid positions
    • Procedural Materials access, useful for manipulating substances properties and functions.
    • "Cross" multiplications, multiplicate floats with ints and ints with Vectors
    And other stuff to facilitate the navigation between Diamond window and Unity project folder.

    let me know If you want to test Diamond 1.1 while Unity Asset Store Team is reviewing it.
     
    Last edited: Jul 26, 2017
    Barada and BeautifulRiver like this.
  7. BeautifulRiver

    BeautifulRiver

    Joined:
    Sep 19, 2016
    Posts:
    47
    @maz_dev Diamond 1.1 has many new features! You amaze me again! :)
     
    Last edited: Jul 26, 2017
  8. maz_dev

    maz_dev

    Joined:
    Sep 23, 2012
    Posts:
    261
    Thank you BeautifulRiver, for your observations that help Diamond to be better and better.
     
  9. IanStanbridge

    IanStanbridge

    Joined:
    Aug 26, 2013
    Posts:
    334
    Hi I don't mind testing the Diamond 1.1 version if you want someone to test it while it is being reviewed. Might be interesting to play with procedural materials and animate them.
     
    maz_dev likes this.
  10. maz_dev

    maz_dev

    Joined:
    Sep 23, 2012
    Posts:
    261
    Okay Ian, with pleasure :)
     
  11. Barada

    Barada

    Joined:
    Apr 27, 2015
    Posts:
    99
    very interested in the Procedural Materials access
     
    maz_dev likes this.
  12. maz_dev

    maz_dev

    Joined:
    Sep 23, 2012
    Posts:
    261
    Hi, I have finished the procedural materials, we will have 17 functionalities, containing already the possibility to set procedural bool, float, color, and, Vector4. We can also get these procedural properties, and we will have the choice to set them without or with the rebuild of the textures.

    Now I am working on a 3D grid generator. to generate your objects in a 3D grid.
     
  13. maz_dev

    maz_dev

    Joined:
    Sep 23, 2012
    Posts:
    261
    Hi Barada, here is the 3D grid generator with one logic node.

    Grid_Global_Numbered.png
    1. The generated grid
    2. The new logic node, 3D grid generator
    3. Spawned objects with their one parent
    4. Prefab used as input for the 3D grid generator logic node
     
  14. Barada

    Barada

    Joined:
    Apr 27, 2015
    Posts:
    99
    Those both look great. Already thought of a use for the grid in another commercial project i`m working on that could have some very impressive visuals that may be good for your advertising (and mine) as part of that project it also occurred to me that having a random variable function with a seed so random numbers can be reproduced would be very useful. I havent been able to test this week, so some of my other ideas may be in there, but tome other things that have occurred to me that may be good and also unique:

    Logic loops. a simple way to iterate through a fix number of loops inside a logic.

    Array variables. A list of each type of variable that can be created, added to and sorted.

    Shader control. Access to shader variables.

    mesh creation. Add a polygon/vertex to an object given coordinates or vertexes. delete faces. add/compute normal / tangent normal, uv map, vertex colour.

    Place particle. Add, remove a particle from a specific position. set particle data (velocity, scale,colour)

    code/maths node. input code or just do maths functions in a node, so longer calculations can be done or entirely new functionality can be added by the user.

    sorry if any of these are duplicates or obviously not possible. they realy are just ideas that may help add to diamonds unique use for artists.
     
  15. maz_dev

    maz_dev

    Joined:
    Sep 23, 2012
    Posts:
    261
    Hi Barada,

    Thanks a lot because I am working with a friend on marketing and we need visuals from real projects. This will be good for our both advertising. I will put links in Diamonds description (on the asset store) to your works.

    For your suggestions, part of them is already in Diamond 1.0 and in the upcoming Diamond 1.1 (this week).

    • Array already exists in Diamond 1.0 (Access them by the variable type) for the majority of variable types where you can merge 2 lists and for floats and ints you can compute the Max and the Min of the list.
    • For gameobject lists, you have more options. You have a little inventory system where you can Add or Remove an element from the list, you can also make a specific element of the list ready, like for example the currently used weapon in a list of weapons the player has.
    GameObjectList.png

    • We have already in Diamond 1.0 the access of a bunch of static parameters for all shaders. I added the shader variables (properties) access in the road map (not available for Diamond 1.1); I am full time on Diamond, and have the strategy to update Diamond monthly, and when needed I can send you versions while it is reviewed by the asset store team.
    • mesh manipulations will also come later, but I will prioritize UV and vertex color because it can be very usufule.
    • particle system. The majority of the Unity particle system component is accessible via variable type Component Particle System. But You suggest having more control like adding and removing particles depending on parameters (like the position for example). A planned to put my own advanced particle system to Diamond that will have physics and a bunch of advanced functionalities, this advanced particle system will come later to Diamond.
    • For math, I will add nodes about commonly known math functions (power, exponential, logarithm etc) and let nodes do operations on these functions (multiplications, adding, and maybe integrations and derivatives). But this will be later not in Diamond 1.1
    • Logic loops will come later (not available in Diamond 1.1)
     
  16. maz_dev

    maz_dev

    Joined:
    Sep 23, 2012
    Posts:
    261
    Yeah and for Randoms, there is randoms for float and int in Diamond, manipulating seed will come later (after Diamond 1.1)
     
  17. Barada

    Barada

    Joined:
    Apr 27, 2015
    Posts:
    99
    Great. it seems like you have plans for lots of amazing things. Is you roadmap published? on the commercial project we will be needing a gpu based particle system capable of rendering as many alpha mapped particles as possible (stationary billboard only) putting such a feature under artist control would be a superb unique selling point. if you would like further details (including our current pre visuals) email me and maybe we can work together to benefit both projects.
     
  18. maz_dev

    maz_dev

    Joined:
    Sep 23, 2012
    Posts:
    261
    In the Diamond 1.1 description at the asset store, we will add a summarized road map with the main headers. The detailed road map is huge because we want Diamond to be an ultimate and cross-disciplinary tool for game developers. It's why I add your suggestions to the road map. I am preparing to put the road map publicly on trello or on my website.

    I will send you an email to talk about our projects.
    I have already done a prototype fluid project using DirectCompute for computation and SPH applied to the Navier-Stokes equation as the physical model. Here is the link
     
    Barada likes this.
  19. maz_dev

    maz_dev

    Joined:
    Sep 23, 2012
    Posts:
    261
    Diamond 1.1 Submitted
    516_389.png
    With new features:
    • Mixed multiplications (int, floats, vectors).
    • Unity Ads,
    • 3D grid generator in the variable type gameobject,
    • Procedural materials access (read and write properties and other stuff), in the variable type material.
    • Kepler orbit (in the variable type component transform).
    and other stuff that you can find here:

    Where you can find more about Diamond 1.1 features and the roadmap.

     
  20. Barada

    Barada

    Joined:
    Apr 27, 2015
    Posts:
    99
    Thank you for the update. I have started my Solar system generator again using diamond. i installed the new package over the previous and have now encountered this error:

    Assets/Mezanix/Diamond/1_Examples/PathFinder/Scripts/ExPathFinder/ExPathFinder_Idle_Logic_subtract.cs(36,44): error CS1061: Type `ScriptsCreatedByDiamond.ExPathFinder_Idle_Logic' does not contain a definition for `exPathFinder_Idle_Logic_Multiply' and no extension method `exPathFinder_Idle_Logic_Multiply' of type `ScriptsCreatedByDiamond.ExPathFinder_Idle_Logic' could be found. Are you missing an assembly reference?

    as its part of your example package i (and maybe not my own code) i thought it would be important for you to know.
     
  21. maz_dev

    maz_dev

    Joined:
    Sep 23, 2012
    Posts:
    261
    Okay I got It, in the Diamond 1.0

    we hadn't a modulo (remainder) for int and float, so I computed the modulo by many nodes.

    Now in Diamond 1.1 I changed the PathFinder graph by using the node modulo instead my old nodes.
    When you imported the Diamond 1.1 package, the importer preserved the old generated scripts of the old example and had a conflict with newly imported scripts.


    Solution:
    1) got to :
    Assets\Mezanix\Diamond\1_Examples\PathFinder\Scripts\

    and delete the entire 'ExPathFinder' folder

    2) go to preferences and choose this folder as scripts generation destination:
    Assets\Mezanix\Diamond\1_Examples\PathFinder\Scripts\

    3) Load in diamond the graph
    Assets\Mezanix\Diamond\1_Examples\PathFinder\Graphs\ExPathFinder\ExPathFinder_SM_M.asset

    Generate the scripts. And everything will be fine.
     
    Last edited: Aug 5, 2017
  22. Barada

    Barada

    Joined:
    Apr 27, 2015
    Posts:
    99
    when i was messing with the examples i did notice that the script save location isnt loaded with the graph. this caused duplicates to be written if i edited anything and wrote the scripts, and caused errors. Maybe the user should be given the option when opening a saved graph, to import its script location settings. this would also allow people to organise their projects by scene rather than asset, if they wanted.
     
  23. Barada

    Barada

    Joined:
    Apr 27, 2015
    Posts:
    99
    Sorry for the out of order posts. What i did was just remove diamond and reimport it. I hadn`t accessed the expathfinder example at all so as the user it seemed strange. i think this is realy just a issue with update instructions rather than the software. it may be safer to just make say make sure you install cleanly by removing the old installation first. Just to be safe and so users can simply see what your recomendation is.
     
  24. maz_dev

    maz_dev

    Joined:
    Sep 23, 2012
    Posts:
    261
    You are right, for now, the generations scripts path is global, in upcoming versions Diamond 1.2 and Above, the scripts generation path will be a graph property, so each graph will have its own generation path.
     
  25. maz_dev

    maz_dev

    Joined:
    Sep 23, 2012
    Posts:
    261
    This kind of error can happen only when importing older scripts having the namespace 'ScriptsGeneratedByDiamond', no risk with any other kind of scripts.
    The Unity importer does not clear older scripts because he is aware of preserving the older files of the user.

    We can modify any Diamond Graph and regenerates our scripts on top of older ones, Diamond will clear older scripts before generating new ones.

    So if we want to export/import our logic created in Diamond, it is preferable to export/import graphs and generates their scripts after importing them.

    If we want to export/import only generated scripts, we must clear the destination from older generated scripts.
     
    Last edited: Aug 5, 2017
  26. Barada

    Barada

    Joined:
    Apr 27, 2015
    Posts:
    99
    maybe regenerating the scripts (or at least informing the user to the finding of old scripts) should be automatic, in order for the the generated scripts and the scenes graphs to actually correlate with each other? maybe a regenerate all project scripts function.
     
  27. sledgeman

    sledgeman

    Joined:
    Jun 23, 2014
    Posts:
    389
    i like the new subtitle :)
     
    maz_dev likes this.
  28. maz_dev

    maz_dev

    Joined:
    Sep 23, 2012
    Posts:
    261
    Thank you sledgeman, we have noticed that you are right, only "Diamond" word is not sufficient to explain the package.
    We are not yet the apple computer ;)
     
    Kennth likes this.
  29. maz_dev

    maz_dev

    Joined:
    Sep 23, 2012
    Posts:
    261
    Hi Barada,

    I resubmitted the Diamond 1.1 package with a new PathFinder example (new graph and script names and paths), so if someone has already the Diamond 1.0 and installs the new Diamond on top of it, this will be fine, I tested it :)
    He will have the 2 versions of the PathFinder example (the 'PathFinder' without modulo and the 'PathFinder_1' with modulo)
     
    Barada likes this.
  30. maz_dev

    maz_dev

    Joined:
    Sep 23, 2012
    Posts:
    261
    Hi again Barada,

    This graph can help to do loops, this loop spawns a cube 8 times, tell me what do you think, please.

    Image 1.png
     
    Barada likes this.
  31. IanStanbridge

    IanStanbridge

    Joined:
    Aug 26, 2013
    Posts:
    334
    Hi I'm testing the new 1.1 version and it appears to work fine with procedural materials. The only thing that appears to be missing is the ability to modify int procedural properties such as random seed. Also it might be an idea to add a feature to graphs where you could specify how often they updated so you could tune them for performance. The equivalent of fixed update in unity.

    I think once you add the ability to animate variable properties with curves like you are planning it would be a much more useful tool for designers to use it to animate properties in procedural materials.

    Thanks,

    Ian
     
    maz_dev likes this.
  32. maz_dev

    maz_dev

    Joined:
    Sep 23, 2012
    Posts:
    261
    Hi Ian,
    I searched the Unity procedural materials class, I didn't found an int procedural property but I found an Enum procedural property, I think this is what do you mean, I added it to Diamonds roadmap.

    For graph performance in Unity Editor, we can play or pause our logic in the editor like in the following 2 images. Playing the logic in the editor helps to test the logic before generating the scripts (most of the logic nodes are playable in the editor).

    TicTac.png TicTac_InEditorRuning.png


    To control performance in the game the above nodes send true impulses separated by frames number or a user defined deltaTime. This post illustrates it by looping 8 times to spawn 8 cubes in the scene and every action is separated by 1.2 frames. As long as most of the logic nodes have a 'Do It' button with boolean input, we can use TicTac nodes to control the frequency of execution of any logic node.

    Like you said this is useful when I will add the animated variables by curves and apply them to procedural materials. Procedural texttures need to be rebuilt to render the animation effect, rebuilding the textures is a heavy task, so controling its frequency is usefule.
     
    Last edited: Aug 7, 2017
  33. maz_dev

    maz_dev

    Joined:
    Sep 23, 2012
    Posts:
    261
    I was wondering if we can animate substances in their own files (do the animation in the substance designer and export it with the material for example),
    The Unity procedural material class has a property named "animation update rate", which we can access by Diamond. If the class has this property it means that maybe this kind of materials can hold animations, what do you think ??
     
  34. IanStanbridge

    IanStanbridge

    Joined:
    Aug 26, 2013
    Posts:
    334
    I think you can create a function graph in substance designer that uses time as an input but I don't think it can hold animations. If someone wanted animations they would be more likely to create a substance with input parameters and then modify those input parameters in either a unity animation script or a diamond graph with curves. I think the animation update rate is simply how often it refreshes the substances cache with substance caching turned on. If you turn on substance caching for a substance in unity then they can update more frequently. Substances run much faster at runtime than they do in the unity editor as it then holds them in gpu ram and runs them as a shader rather than unity's default behavior of just turning them into a texture at scene load. Also bear in mind that a lot of artists don't make the substances they buy them instead so don't have substance designer in order to modify the animation.

    It might be an idea to get a free trial of substance designer yourself and play with the free substance files on substance share. If someone was using diamond though I don't think they would just want to play a fixed animation on a substance they would want to modify it based on unity events.

    As an example someone would make a substance in substance designer and expose an input parameter of its hue and also a float value that modified a noise function that they had created in substance designer that controlled it's surface texture


    You could then use diamond to make that substance pulse red and animate it's surface for a few seconds when something collided with the object it was on in unity.

    The idle node in diamond would do nothing but check to see if the object was being collided with and change state if it was being collided with as the substance would only change on impact.

    The collided state would have logic nodes that manipulated the input variables using project variables linked to a curve to animate the material through its exposed float value and then after the curve ended would just go back to the idle state to wait for another collision.

    By telling unity to cache the substance most of the time the substance would require no processing as unity would detect the substances input values were not changing and so unity would know it wouldn't need to reprocess the substance every frame. If instead you simply hard coded the material to animate over time in substance designer then unity would simply be blindly refreshing it every frame and of course that animation couldn't respond to gameplay.

    I've already tested diamond with substance caching turned on and then used the set procedural float and rebuild node and it appears to work fast enough for run time animation.
     
  35. maz_dev

    maz_dev

    Joined:
    Sep 23, 2012
    Posts:
    261
    Hi Ian,

    Thank you for the information you gave and for your test, I was wondering If rebuilding textures could slow the game in runtime. But after your explanation and this Unity doc, caching helps to speed up loading. Also, as long as the Substances are managed by the GPU in run time, their animation is faster.
    You are right about doing animations in Unity (not in substance designer) to let the material interact with the gameplay.

    In addition to procedural enum, I also added to Diamonds road map the possibility to set the procedural material cacheSize and the function ClearCache (), to let advanced users optimize better the memory usage of their game.

    I have used Substance designer a little bit before, it is an amazing tool, I know that procedural properties are substance properties that we have exposed in the substance designer so we can animate them in Unity, this why once I add curves to Diamonds variables, we could do amazing thing with substances in Unity without need to code.

    By the way, Diamond 1.1 is now available at the Asset Store, is the same of Diamond 1.1 that I send to you with some addition on linking nodes by introducing the "magnet linking" indicator so when you click on an input or an output to link it, all outputs/inputs in the graph that have the same variable type will change into a magnet icon telling you that can potentially connect with them.
     
    Barada likes this.
  36. maz_dev

    maz_dev

    Joined:
    Sep 23, 2012
    Posts:
    261
    Create Project ID and Activate Ads Services

    IMPORTANT_ToRead_Diamond_ Ads_Services.png
    IMPORTANT_ToRead_Diamond_ Ads_Services (1).png IMPORTANT_ToRead_Diamond_ Ads_Services (2).png
     
  37. maz_dev

    maz_dev

    Joined:
    Sep 23, 2012
    Posts:
    261
    Diamond 1.1.2 evolution - Per graph script generation path
    Diamond 1.1.2 in his way of evolution, today the per graph script generation path is done. In Diamond 1.1.1, the script generation path was global and the same for all graphs. Now every graph has its own scripts generation path that is editable.

    Diamond _1_2_Documentation_New_Features.png

     
    Last edited: Aug 16, 2017
    BeautifulRiver likes this.
  38. BeautifulRiver

    BeautifulRiver

    Joined:
    Sep 19, 2016
    Posts:
    47
    Wow, working on version 1.2 already! Thanks and keep up the good work!
     
    maz_dev likes this.
  39. maz_dev

    maz_dev

    Joined:
    Sep 23, 2012
    Posts:
    261
    Diamond 1.1.2 evolution - Curves

    zMApjqGzij.gif
    Good news, diamond 1.2 (coming soon) support curves for floats and vectors. You can animate your values or pick a value from your curve. In this example, we animated the color intensity of a wood substance material.

    As long as you can animate any float or vector, you can apply your animation on visuals like materials but you can also perform movements or animated scaling to your objects.

    Animations are performance friendly because they run in Coroutines.

    Image 1.png


     

    Attached Files:

    Last edited: Aug 15, 2017
    Kennth likes this.
  40. Barada

    Barada

    Joined:
    Apr 27, 2015
    Posts:
    99
    Curves look they are going to be fantastically useful. Sorry for my lack of interaction lately, but i now have a further 2 projects that may be utilizing diamond to some extent. i`ll keep you posted. The upgrading path still seems a bit broken, but that could be my fault. i havent had time to test on different projects yet. i have namespace definition problems with ExPathfinder_1 even if its not used.

    Also the examples seem to be fixed, and for commersial uses they should really be optionally installed or at least removable from the project.
     
  41. maz_dev

    maz_dev

    Joined:
    Sep 23, 2012
    Posts:
    261
    Thank you, Barada,

    Per graph scripts generation folder reduces doing errors, but as any developer who creates a script manually and named it with the same name of existing scripts, he will get an error. So if we change the scripts generation folder for a graph, we have to delete scripts already generated by it.

    About deleting or not the examples before building the game, I didn't test it, but I think that we can delete the examples before building our game. I will do some search on a question, because if we build the game without including the examples scenes in the build settings, maybe, in this case, Unity will not compile the scripts related to the examples.
     
  42. maz_dev

    maz_dev

    Joined:
    Sep 23, 2012
    Posts:
    261
    Could you please send me the error text or a screen shot of it.
     
  43. Barada

    Barada

    Joined:
    Apr 27, 2015
    Posts:
    99
    i fixed it now, it was the same as before, where a duplicate folder had been created in the root. when i opened up the diamond editor it defaulted to the pathfinder example and i think i must have hit the save graph or maybe even the render scripts, but as the output folder wasnt set to that examples folder it was made in the default position , and duplicated. this caused the duplicate warnings. This i think is mostly user error, but the saving and loading of the graphs output location when its opened should fix that.
     
  44. Barada

    Barada

    Joined:
    Apr 27, 2015
    Posts:
    99
    would it be beneficial to have a mode on the "do it" button that is "do it once" for an action that just needs to be done once when the FSM node is entered. slightly simpler than the bool/start event
     
  45. maz_dev

    maz_dev

    Joined:
    Sep 23, 2012
    Posts:
    261
    Do you mean, a "do it once at start" to avoid using the start event node, so we can have fewer nodes in the graph?
     
  46. Barada

    Barada

    Joined:
    Apr 27, 2015
    Posts:
    99
    yes. the graphs get very messy very quickly so anything to reduce that i think will help. The actual node tree layout make is very messy too. If i`m right that the logic nodes are actually processed in order then the node layout is unnecessary. a list is all thats needed. maybe having the nodes snap the the base of the previous node and just being able to scroll up and down would simplify that. Also having output of the project variables on the left (as it is now) and a duplicate on the right for inputs would stop the wires crossing the nodes. With this setup it may be possible to combine all the added logics on the node graph into the 1 view. it would just be another column of nodes to the right of the first. this would let the user see everything thats happening on the state machine node without needing to switch between logics.
     
    eggeuk and maz_dev like this.
  47. Barada

    Barada

    Joined:
    Apr 27, 2015
    Posts:
    99
    i`m making a 3ds/isometric game, and the make grid node makes the initial map super simple to generate, thank you so much. The node its self doesnt seem to generate the parent node game object variable. i was hoping to use this to put all the generated objects into a list and then process the names to find the edge cubes so i can add effects to them and transform them as the player moves round a larger map area. basically the player stays in the center of the screen and the map scrolls beneath his feet. i am assuming that i can iterativly add all the children and get their names and then process them to find the right ones.

     
  48. maz_dev

    maz_dev

    Joined:
    Sep 23, 2012
    Posts:
    261
    Hey Barada,

    The result of the spawn me in a grid is the empty parent game object of the grid. Use the following node, it can be useful to loop over the children:

    GetChieldOfIndex.png
     
  49. Barada

    Barada

    Joined:
    Apr 27, 2015
    Posts:
    99
    yea. i was just assuming it would appear in the project variables at run time. the next two problems i have encountered are, no lists as project variables. so i cant seem to transfer lists between sm nodes. Also there dont seem to be any way to choose characters in a string. as i`m trying to find the edges of the grid, i was hoping to be able to read the name and then extract the column/row information from that.
     
  50. maz_dev

    maz_dev

    Joined:
    Sep 23, 2012
    Posts:
    261

    Project variables may be replaced by an event system like the one existing now but with an additional feature of transferring data between graphs and logics, so we will have more workspace and avoid links crossing.

    To let the user know what happens in the graph without opening the logics each time, I liked your previous suggestion to color links and events corresponding to theire trigger logics.

    About putting connected logic nodes alongside together is a good idea to make a more proper graph visually but it may reduce the flexibility and the usability of the node as long as a logic node may connect with many other at once.