What is the most effective and flexible method for defining connections between nodes in a folder of parts?
To better explain what I’m talking about here’s an image:
So as you can see the ‘start node’ would have 2 connected nodes. One path a dead end and the other branches and then branches again. Hopefully this shows what I’m going for.
What I’m unsure of is how I should ‘define’ which nodes are connected to each other. I could possibly have hundreds of these nodes and want to be able to easily change them around if need be so defining them manually in code would be way too much of a pain.
Best idea I had so far is to set an attribute for each node called ‘ConnectedNodes’ and that will be either 1,2,3,4, etc depending on how many nodes can be branched to from it. Then make a for loop that goes through all the nodes, and depending on the number of connected nodes (let’s say it’s 2) find the 2 nearest nodes and put them inside a table or something along those lines. Now the problem I see with this method is if 1 branch has nodes much closer together then the other branch it could incorrectly set 2 nodes in the same branch to it’s ‘connectednodes’ if the second one is closer then the first node of the other branch. That said I could work with this limitation if need be.
Now I don’t know if there’s a better solution then this that’s not just defining them all manually but I’d be real curious to know how others would approach this.
A hilariously simple solution would just be to put ObjectValues inside each node, call each value “Neighbour” or something, with each ObjectValue having its Value property set to the other node it’s connected to
If I were creating node trees out of parts on ROBLOX without defining them in code explicitly, I’d probably do something like that : P
You could probably design a simple plugin or command-line script to automate connecting and visualising nodes, like what Emma suggested!
If these nodes are static & aren’t dynamically created you could also use weldConstraints to connect these nodes to the adjacent nodes. That way you can call node:GetConnectedParts() and directly get the adjacent nodes as instances.
To “easily” create these weldConstraints (better than placing them by hand):
Place a part between every node that you want to be connected (basically parts instead of the red lines you drew). Make sure these part connectors touch the two nodes you want to connect. Place all the connectors in one folder then you could run a script like this to automatically create the weldConstraints:
local connectors = YOUR_FOLDER_PATH_HERE
for _, connector in pairs(connectors:GetChildren()) do
local touchingParts = connector:GetTouchingParts()
local weld = Instance.new("WeldConstraint", touchingParts)
weld.Part0 = touchingParts
weld.Part1 = touchingParts
It suffices if one part has that weld, if you created a weld in touchingPart and  then every connection would be double with :GetConnectedParts().
Make sure every connector only touches two nodes and no other part.