Advertisement
Farliam

Untitled

Apr 23rd, 2022
1,148
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C# 4.83 KB | None | 0 0
  1.  IEnumerator NextGeneration()
  2.     {
  3.         DeleteZells();
  4.         List<Vector3> NextGeneration = new List<Vector3>();
  5.  
  6.         List<Vector3> DeadCells = new List<Vector3>();
  7.  
  8.         foreach (var pk in AktiveZellen)
  9.         {
  10.             int living = 0;
  11.             int death = 0;
  12.  
  13.             for (int x = (int)pk.x - 1; x <= pk.x + 1; x++)
  14.             {
  15.                 for (int z = (int)pk.z - 1; z <= pk.z + 1; z++)
  16.                 {
  17.                     Vector3 zelle_O = new Vector3(x, pk.y + 1, z);
  18.                     Vector3 zelle_U = new Vector3(x, pk.y - 1, z);
  19.                     Vector3 zelle_m = new Vector3(x, transform.position.y, z);
  20.  
  21.                     if (AktiveZellen.Contains(zelle_O)) living++;
  22.                     if (!AktiveZellen.Contains(zelle_O))
  23.                     {
  24.                         death++;
  25.                         if(!DeadCells.Contains(zelle_O))DeadCells.Add(zelle_O);
  26.                     }
  27.  
  28.                     if (AktiveZellen.Contains(zelle_U)) living++;
  29.                     if (!AktiveZellen.Contains(zelle_U))
  30.                     {
  31.                         death++;
  32.                         if(!DeadCells.Contains(zelle_U))DeadCells.Add(zelle_U);
  33.                     }
  34.                     if (!(zelle_m == pk))
  35.                     {
  36.                         if (AktiveZellen.Contains(zelle_m)) living++;
  37.                         if (!AktiveZellen.Contains(zelle_m))
  38.                         {
  39.                             death++;
  40.                            if(!DeadCells.Contains(zelle_m)) DeadCells.Add(zelle_m);
  41.                         }
  42.                     }
  43.                 }
  44.             }
  45.  
  46.  
  47.             //Jetzt haben wir die Lebenden und Toten Zellen um die Nachbarn rum.
  48.             //Sollte der Nachbar tot sein, wird er später durchgegangen.
  49.  
  50.             //Die Aktuelle Zelle ist definitiv am Leben. Es geht also darum, ob sie stirbt, oder am Leben bleibt.
  51.             // Wir gehen einmal das Stay Alive array durch, sollte die Zahl der Lebenden, darin vorkommen, adden wir die Zelle zur NextGeneration.
  52.             //Anderfalls verfällt sie
  53.  
  54.  
  55.             if (RegelSet[living] == RuleSeed.Live)
  56.             {
  57.                 NextGeneration.Add(pk);
  58.                 GameObject tmp = Instantiate(ZellPrefab, Zellen.transform.transform, true);
  59.                 tmp.transform.position = pk;
  60.                 yield return null;
  61.             }
  62.             //Hier das überarbeiten wir nochmal !
  63.  
  64.  
  65.             //Nun sind wir am der Überprüfung der Lebendige Zelle, sollte der Count der Nachbarn größer sein, wird sie sterben. Da sie nicht
  66.             //in der Liste der Next Generation ist.
  67.         }
  68.  
  69.  
  70.         //Nun gehen wir die Toten Zellen durch, die nahe bei den Lebenden Standen, und wiederholen die Funktion fast gleich wie oben.
  71.         //Nur verwenden wir diemsal die BornRule
  72.  
  73.         foreach (Vector3 DeadZelle in DeadCells)
  74.         {
  75.             int living = 0;
  76.             int death = 0;
  77.  
  78.  
  79.             for (int x = (int)DeadZelle.x - 1; x <= DeadZelle.x + 1; x++)
  80.             {
  81.                 for (int z = (int)DeadZelle.z - 1; z <= DeadZelle.z + 1; z++)
  82.                 {
  83.                     Vector3 zelle_O = new Vector3(x, DeadZelle.y + 1, z);
  84.                     Vector3 zelle_U = new Vector3(x, DeadZelle.y - 1, z);
  85.                     Vector3 zelle_m = new Vector3(x, transform.position.y, z);
  86.  
  87.                     if (AktiveZellen.Contains(zelle_O)) living++;
  88.                     if (!AktiveZellen.Contains(zelle_O))
  89.                     {
  90.                         death++;
  91.                     }
  92.  
  93.                     if (AktiveZellen.Contains(zelle_U)) living++;
  94.                     if (!AktiveZellen.Contains(zelle_U))
  95.                     {
  96.                         death++;
  97.                     }
  98.                     if (!(zelle_m == DeadZelle))
  99.                     {
  100.                         if (AktiveZellen.Contains(zelle_m)) living++;
  101.                         if (!AktiveZellen.Contains(zelle_m))
  102.                         {
  103.                             death++;
  104.  
  105.                         }
  106.                     }
  107.                 }
  108.             }
  109.  
  110.             //Nun haben wir die Nachbarn der Toten Zelle
  111.             //Und schauen wieviele Lebenden und Toten Nachbarn die Zelle hat
  112.  
  113.  
  114.  
  115.             if (RegelSet[living] == RuleSeed.Birth)
  116.             {
  117.                 NextGeneration.Add(DeadZelle);
  118.                 GameObject tmp = Instantiate(ZellPrefab, Zellen.transform.transform, true);
  119.                 tmp.transform.position = DeadZelle;
  120.                 yield return null;
  121.             }
  122.         }
  123.  
  124.         //Nun haben wir die komplette Nächste Generation in der Liste.
  125.         //Wir löschen alle Aktuellen Zellen
  126.  
  127.        
  128.  
  129.         //Und fügen alle neuen Zellen zur Scene
  130.  
  131.  
  132.         AktiveZellen = NextGeneration;
  133.         yield return null;
  134.     }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement