public final void tick(double secondsPassed)
			{
				if (!alive)
					return;

				if (fractionGrown < 1) // Growing
					{
						fractionGrown += (1.75 / metabolism) * secondsPassed;
					}
				else if (fractionGrown > 1) // full grown - only called once
					{
						double leafOpacity = 1.0 - (Hub.simWindow.leafOpacitySlider.getValue() / 100.0);
						int r = (int) ((255 - genes.leafColour.getRed()) * leafOpacity);
						int g = (int) ((255 - genes.leafColour.getGreen()) * leafOpacity);
						int b = (int) ((255 - genes.leafColour.getBlue()) * leafOpacity);
						shadowColour = new Color(r, g, b);
						nodeTree.setShadows();
						shadowsSet = true;
						fractionGrown = 1;
					}
				else
					// fully grown, called every tick once full grown
					{
						// every second that the plant is alive have 1 offspring
						if (timeToNextSeed < 0 && energy > genes.seedEnergy)
							{
								Hub.simWindow.sim.plantsToAdd.add(new Plant(this, Rand.int_(minX - 40, maxX + 40)));
								energy -= genes.seedEnergy;
								timeToNextSeed = 5;
							}
						else
							timeToNextSeed -= secondsPassed;
					}
				if (alive && energy > 0) // Alive
					{
						metabolism += secondsPassed * 2;
						energy -= metabolism * secondsPassed;
						nodeTree.baseNode.tick(secondsPassed);
					}
				else
					{
						if (shadowsSet)
							nodeTree.removeShadows();
						alive = false;
					}
			}