Esempio n. 1
0
    private IEnumerator GrowTree()
    {
        foreach (char c in currentString)
        {
            switch (c)
            {
            case 'F':
                yield return(new WaitForSeconds(interval));

                Vector3 initialPosition = transform.position;
                transform.Translate(Vector3.up * length);

                treeSegment = Instantiate(branch);
                treeSegment.GetComponent <LineRenderer>().SetPosition(0, initialPosition);
                treeSegment.GetComponent <LineRenderer>().SetPosition(1, transform.position);

                //if (newBranch && position.Count > 10)
                //{
                //    int x = 1;

                //    while (position[position.Count - x] != transform.position && x < 10)
                //    {
                //        Debug.Log("Position[index - x] " + position[position.Count - x] + " Transform Position " + transform.position);
                //        position.Add(position[position.Count - x]);
                //        x += 2;
                //    }
                //    newBranch = false;
                //}

                //position.Add(transform.position);
                //transform.Translate(Vector3.up * length);

                //VectorLine.SetRay3D(Color.green, initialPosition, transform.up * 1);

                //TubeRenderer tube = treeSegment.GetComponent<TubeRenderer>();
                //tube.SetPositions(new Vector3[]{ Vector3.zero, new Vector3(5f, 5f, 0), Vector3.right * 20 });

                //Mesh meshTree = new Mesh();

                //treeSegment.AddComponent<MeshFilter>();
                //treeSegment.GetComponent<LineRenderer>().BakeMesh(meshTree, true);
                //treeSegment.GetComponent<MeshFilter>().sharedMesh = meshTree;
                //treeSegment.AddComponent<MeshRenderer>();
                //treeSegment.GetComponent<MeshRenderer>().sharedMaterial = mat;
                //Destroy(treeSegment);
                //Debug.Log("Hejsa");

                treeSegment.transform.SetParent(gameObject.transform);
                break;

            case 'X':
                break;

            case '+':
                transform.Rotate(Vector3.back * angle);
                break;

            case '-':
                transform.Rotate(Vector3.forward * angle);
                break;

            case '/':
                transform.Rotate(Vector3.left * angle);
                break;

            case '[':
                newBranch = true;
                transformStack.Push(new TransformInformation()
                {
                    position = transform.position,
                    rotation = transform.rotation
                });
                break;

            case ']':
                TransformInformation ti = transformStack.Pop();
                transform.position = ti.position;
                transform.rotation = ti.rotation;
                //VectorLine.SetRay3D(Color.green, transform.position, transform.up * 1);
                break;

            default:
                throw new InvalidOperationException("Invalid L-Tree operation");
            }
        }
    }
 /** Restore transform state previously saved with save, to a given transform
 **/
 public static void Load(this Transform t, TransformInformation i)
 {
     t.position = i.position;
     t.localScale = i.localScale;
     t.rotation = i.rotation;
 }