private void Update()
    {
        if (Input.GetMouseButtonDown(0))
        {
            lastSegmentPosition   = Camera.main.ScreenToWorldPoint(Input.mousePosition);
            lastSegmentPosition.z = 0;

            var stemPositions = new List <Vector3>();
            stemPositions.Add(lastSegmentPosition);

            mainStem.SetStemPositions(stemPositions);
        }
        else if (Input.GetMouseButton(0))
        {
            var newPosition = Camera.main.ScreenToWorldPoint(Input.mousePosition);
            newPosition.z = 0;

            var delta = newPosition - lastSegmentPosition;

            if (delta.magnitude > segmentLength)
            {
                lastSegmentPosition = newPosition;
                mainStem.AddStemPosition(newPosition);
            }
        }

        if (Input.GetMouseButtonDown(1))
        {
            mainStem.RemoveStemPosition();
        }
    }
Exemple #2
0
    void Update()
    {
        Vector3 newHeadPosition = head.transform.position;

        if (Vector3.Distance(lastHeadPosition, newHeadPosition) > growthThreashold)
        {
            lastHeadPosition = newHeadPosition;
            stem.AddStemPosition(newHeadPosition);
        }

        int expectedLeavesCount = stem.Length() / spawnLeafEverySegments;

        if (expectedLeavesCount > leaves.Count)
        {
            // There should be more leaves. Spawn a new one
            Leaf leaf = Instantiate(leafPrefab);
            leaf.name = "Leaf " + leaves.Count;
            leaf.transform.position = stem.GetHeadPosition();
            leaf.transform.parent   = transform;
            leaf.flip = leaves.Count % 2 != 0;

            Vector3 growDirection = stem.GetGrowthDirection();
            Vector3 leafDirection = new Vector3(growDirection.y, -growDirection.x, growDirection.z);
            leaf.transform.right = leafDirection;
            leaf.Spawn(stem.Length());

            leaves.Add(leaf);
        }
        else if (expectedLeavesCount < leaves.Count && leaves.Count > 0)
        {
            // There is too many leaves. Remove the last one
            int last = leaves.Count - 1;
            Destroy(leaves[last]);
            leaves.RemoveAt(last);
        }

        foreach (var l in leaves)
        {
            l.Grow(stem.Length());
        }
    }