private void AddSegment(float currentSeed, Leaf.LeafSide addLeaf) { var newSegment = new VineSegment(); vineSegments.Add(newSegment); //set angle based on perlin noise? newSegment.angle = (Mathf.PerlinNoise(plantSeed, currentSeed) - 0.5f) * maxAngle; newSegment.maxWidth = stemThickness; newSegment.leafSide = addLeaf; switch (addLeaf) { case Leaf.LeafSide.left: case Leaf.LeafSide.right: var newLeaf = Instantiate(leafPrefab, transform); //audioSource.PlayOneShot (leafSound); newLeaf.leafSide = addLeaf; newLeaf.scale = 0f; newSegment.leaf = newLeaf; newLeaf.colour = plantColour; break; } //two triangles triangles.Add(vertices.Count); triangles.Add(vertices.Count - 1); triangles.Add(vertices.Count - 2); triangles.Add(vertices.Count); triangles.Add(vertices.Count + 1); triangles.Add(vertices.Count - 1); //two vertices vertices.Add(new Vector3()); vertices.Add(new Vector3()); vertexColours.Add(plantColour); vertexColours.Add(plantColour); //two uvs uvs.Add(new Vector2(0, 0)); uvs.Add(new Vector2(1, 0)); }
private void GrowVines() { growthRate = Mathf.Max(0f, growthCurve.Evaluate(tipSeed)) * growthMult; if (growthRate == 0f) { return; } for (int i = 0; i < vineSegments.Count; i++) { var segment = vineSegments [i]; segment.StraightenStem(Time.deltaTime * growthRate * straightenCurve.Evaluate(i * 1f / vineSegments.Count), goalAngle); segment.GrowWidth(Time.deltaTime * growthRate * 0.2f); segment.GrowLength(Time.deltaTime * growthRate); segment.GrowLeaf(Time.deltaTime * growthRate * 0.7f); } tipCounter += Time.deltaTime * tipSpeed * growthRate * 0.3f; if (growthRate > 0.1f && tipCounter > 1f) { tipCounter -= 1f; Leaf.LeafSide newLeaf = Leaf.LeafSide.none; leafCounter++; if (leafCounter == 6) { newLeaf = Leaf.LeafSide.left; } if (leafCounter == 7) { newLeaf = Leaf.LeafSide.right; leafCounter = Random.Range(-4, 0); } AddSegment(tipSeed * seedMult, newLeaf); //if leaf counter>1f ?? } tipSeed += Time.deltaTime * seedSpeed; //growthRate *= 1f - Time.deltaTime * 0.05f; }