# Source: objects/node/NodeGraph.js

    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};