Guest User

Untitled

a guest
Nov 18th, 2017
71
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 4.38 KB | None | 0 0
  1. using System.Collections;
  2. using System.Collections.Generic;
  3. using UnityEngine;
  4.  
  5. public class lSystems : MonoBehaviour {
  6.  
  7. public GameObject meteor;
  8. public GameObject diamondPrefab;
  9. public float waitTime = 3;
  10. public float framesperSecond = 4;
  11. public bool iterateBool = true;
  12. public float fractalAngley = 90;
  13.  
  14.  
  15. //Lists of Variables (the zeros and the ones etc)
  16. List<GameObject>fractalZeros = new List<GameObject> ();
  17.  
  18.  
  19.  
  20.  
  21. IEnumerator fractalTree (float fractalAngley){
  22. fractalZeros.Add (meteor);
  23. float meteorSizeY = meteor.GetComponent<Renderer> ().bounds.size.y;
  24. float meteorSizeX = meteor.GetComponent<Renderer> ().bounds.size.x; //Establish Axiom Root Object
  25. //Variable 0 = For Each 0 create a meteor object attached to a previous meteor object, this is 0
  26. //Variable 1 = For Each 1 create a meteor object attached to a previous meteor object
  27. //Variable a = push position and angle turn left 90 degrees
  28. //Variable b = push position and angle turn right 90 degrees
  29.  
  30. while (iterateBool == true) {
  31. var zeroCopy = new List<GameObject> (fractalZeros);
  32. Debug.Log ("Hi There" + fractalAngley);
  33. if (fractalZeros.Count != 0) {
  34. foreach (GameObject fractalZero in zeroCopy) {
  35. fractalZeroFunction (fractalZero,meteorSizeY, fractalAngley);
  36. }
  37. }
  38.  
  39. yield return new WaitForSeconds (waitTime + 1);
  40.  
  41. }
  42. }
  43.  
  44.  
  45. void fractalZeroFunction (GameObject fractalZero, float meteorSize, float fractalAngley) {
  46.  
  47.  
  48. //Make 0 inactive, it's a parent now, it has served it's purpose
  49. fractalZeros.Remove (fractalZero);
  50.  
  51. //Create a new static
  52. GameObject newStatic = Instantiate (diamondPrefab, fractalZero.transform.position, fractalZero.transform.rotation);
  53.  
  54. // push position of static by one
  55. StartCoroutine (OneGrowth(newStatic));
  56.  
  57. // Create Two new 0s
  58. GameObject newObject1 = Instantiate (diamondPrefab, fractalZero.transform.position, fractalZero.transform.rotation);
  59. GameObject newObject2 = Instantiate (diamondPrefab, fractalZero.transform.position, fractalZero.transform.rotation);
  60. fractalZeros.Add(newObject1);
  61. fractalZeros.Add(newObject2);
  62.  
  63. //push position by one, rotate 90 degrees and then push position by one again
  64. StartCoroutine (ZeroGrowth(newObject1, true, fractalAngley));
  65. StartCoroutine (ZeroGrowth(newObject2, false, fractalAngley));
  66. }
  67.  
  68. IEnumerator OneGrowth (GameObject newStatic){
  69. float timeElapsed = 0;
  70. float meteorSize = newStatic.GetComponent<Renderer> ().bounds.size.y;
  71. float speed = (meteorSize/(waitTime *.5f)/framesperSecond);
  72. while (timeElapsed < (waitTime/2)){
  73.  
  74. newStatic.transform.position = newStatic.transform.position + (newStatic.transform.forward * speed);
  75. timeElapsed = timeElapsed + (1f / framesperSecond);
  76.  
  77. yield return new WaitForSeconds (1f/framesperSecond);
  78. }
  79.  
  80. }
  81.  
  82. IEnumerator ZeroGrowth (GameObject newZero, bool left, float fractalAngley){
  83. Debug.Log (fractalAngley);
  84. float meteorSize = newZero.GetComponent<Renderer> ().bounds.size.y;
  85. float timeElapsed = 0f;
  86. float speed = (meteorSize/(waitTime *.5f)/framesperSecond);
  87. float speed2 = (meteorSize / (waitTime * .4f) / framesperSecond);
  88. while (timeElapsed < (waitTime * .5f)){
  89. newZero.transform.position = newZero.transform.position + (newZero.transform.forward * speed);
  90. timeElapsed = timeElapsed + (1f / framesperSecond);
  91. yield return new WaitForSeconds (1f / framesperSecond);
  92. }
  93. if (left == true){
  94. while (timeElapsed >= (waitTime* .5f) && timeElapsed < (waitTime * .6f)){
  95. newZero.transform.Rotate(0f,fractalAngley, 0f);
  96. timeElapsed = timeElapsed + (1f / framesperSecond);
  97. yield return new WaitForSeconds (1f / framesperSecond);
  98. }
  99. }
  100. if (left != true) {
  101. while (timeElapsed >= (waitTime* .5f) && timeElapsed < (waitTime * .6f)){
  102. newZero.transform.Rotate(0f,fractalAngley * -1f, 0f);
  103. timeElapsed = timeElapsed + (1f / framesperSecond);
  104. yield return new WaitForSeconds (1f / framesperSecond);
  105. }
  106. }
  107. while (timeElapsed >= (waitTime * .6f) && timeElapsed < waitTime) {
  108. newZero.transform.position = newZero.transform.position + (newZero.transform.forward * speed2);
  109. timeElapsed = timeElapsed + (1f / framesperSecond);
  110. yield return new WaitForSeconds (1f / framesperSecond);
  111. Debug.Log (timeElapsed);
  112.  
  113. }
  114. }
  115.  
  116. // Update is called once per frame
  117. void Update () {
  118.  
  119. fractalAngley = meteor.transform.eulerAngles.y/(waitTime*.1f)/framesperSecond;
  120.  
  121. if (Input.GetKeyDown(KeyCode.Space)){
  122. StartCoroutine(fractalTree(fractalAngley));
  123. }
  124.  
  125. }
  126. }
Add Comment
Please, Sign In to add comment