import {Object2D} from "../../Object2D"; import {Node} from "./Node"; /** * Node graph object should be used as a container for node elements. * * The node graph object specifies how the nodes are processed, each individual node can store and process data, the node graph specified how this information is processed. * * All node elements are stored as children of the node graph. * * @class * @extends {Object2D} */ function NodeGraph() { Object2D.call(this); } NodeGraph.prototype = Object.create(Object2D.prototype); NodeGraph.prototype.constructor = NodeGraph; NodeGraph.prototype.type = "NodeGraph"; Object2D.register(NodeGraph, "NodeGraph"); /** * Create and add a new node of specific node type to the graph. * * Automatically finds an empty space as close as possible to other nodes to add this new node. * * @param {Node} node Node object to be added. * @return {Node} Node created (already added to the graph). */ NodeGraph.prototype.addNode = function(node) { // Check available position on screen. var x = 0, y = 0; for(var i = 0; i < this.children.length; i++) { if(this.children[i].position.x > x) { x = this.children[i].position.x; } if(this.children[i].position.y > y) { y = this.children[i].position.y; } } // Create and add new node node.position.set(x + 200, y / 2.0); this.add(node); if(node.registerSockets !== null) { node.registerSockets(); } return node; }; export {NodeGraph};