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; }