public IEnumerator Generator() { yield return(trees.ClearTrees()); yield return(trees.SpawnTrees()); checker.goals.Clear(); yield return(ClearDungeon()); var set = levelData.levelTiles[index]; var size = new Vector2Int(set.Width, set.Height); var center = size / 2; var count = 0; for (var x = 0; x < set.Width; x++) { for (var y = 0; y < set.Height; y++) { var pos = new Vector3(x - center.x, transform.position.y, y - center.y); var objs = new List <UnityEngine.Object>(); switch (set[x, y]) { case GetLevelData.Tile.Wall: objs.Add(wall); break; case GetLevelData.Tile.Player: objs.Add(player); break; case GetLevelData.Tile.Sheep: if (Random.value < Mathf.Lerp(0.005f, 0.1f, (float)LevelChecker.sheepCount / 100)) { objs.Add(shawp); } else { objs.Add(sheep); } break; case GetLevelData.Tile.Goal: objs.Add(goal); break; case GetLevelData.Tile.PlayerGoal: objs.Add(player); objs.Add(goal); break; case GetLevelData.Tile.SheepGoal: objs.Add(sheep); objs.Add(goal); break; case GetLevelData.Tile.Empty: break; default: throw new ArgumentOutOfRangeException(); } foreach (var obj in objs) { var newObj = Instantiate(obj, pos, Quaternion.identity, transform); _scene.Add(newObj); if (newObj is Goal g) { checker.goals.Add(g); } else if (newObj is Player p) { checker.player = p; } count++; } trees.RemoveAt(pos); if (count >= 5) { count = 0; yield return(null); } } } }