public Plant(Terrain terrain, Point position) {
    	this.nodeRenderer = new NodeRenderer();
        this.terrain = terrain;
        this.nodeConnectors = new ArrayList<>();
        this.growths = new ArrayList<>();
        this.removals = new ArrayList<>();
        this.rootRemovals = new ArrayList<>();
        this.root = new Node(position);
        this.nodes = new ArrayList<>();
        addNode(this.root);
        
        for (int i = 0; i < Constants.PLANT_START_ARM_COUNT; ++i) {
            for (int j = 0; j < Constants.PLANT_START_ARM_LENGTH; ++j) {
                Node last = j == 0 ? this.root : this.nodes.get(this.nodes.size() - 1);
                Node next = new Node(new Point(
                        position.x + (j + 1) * Constants.PLANT_NODE_DISTANCE * Math.cos((double) i / Constants.PLANT_START_ARM_COUNT * 2.0 * Math.PI + Constants.PLANT_START_ARM_SPIRAL * j),
                        position.y + (j + 1) * Constants.PLANT_NODE_DISTANCE * Math.sin((double) i / Constants.PLANT_START_ARM_COUNT * 2.0 * Math.PI + Constants.PLANT_START_ARM_SPIRAL * j)));
                addNode(next);
                addConnection(last, next);
            }
        }
    }