private NodeTree(Genes genes)
					{
						boolean finishedReading = false;
						baseNode.growUp();
						Node currentNode = baseNode;

						while (!finishedReading)
							{
								metabolism += 0.1;
								switch (genes.nextInstruction())
									{
										case Genes.ADD_NODE:
											Node newNode = new Node(currentNode);
											currentNode.addNode(newNode);
											currentNode = newNode;
											currentNode.growUp();
											break;
										case Genes.CLIMB_NODE_TREE:
											currentNode = currentNode.getDaughterNode();
											break;
										case Genes.DESCEND_NODE_TREE:
											currentNode = currentNode.getParentNode();
											break;
										case Genes.NODE_CAN_SEED:
											currentNode.canSeed = !currentNode.canSeed;
											break;
										case Genes.GROW_UP:
											metabolism++;
											currentNode.growUp();
											break;
										case Genes.GROW_LEFT:
											currentNode.growLeft();
											break;
										case Genes.GROW_RIGHT:
											currentNode.growRight();
											break;
										case Genes.GROW_DOWN:
											metabolism += 0.5;
											currentNode.growDown();
											break;
										case Genes.SKIP:
											metabolism += 0.75;
											break;
										case Genes.END_ALL:
											lastSelectedNode = currentNode;
											finishedReading = true;
									}
							}

						baseNode.calculateLean();
						baseNode.setLeaves();
						baseNode.parentNode = new Node(plantX, plantY);
					}