Example #1
0
    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));
    }
Example #2
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;
    }