public GameObject GenerateLevel() { var level_obj = new GameObject("Level"); var empty = new bool[25]; Array.Clear(empty, 0, empty.Length); var hole_count = HoleCountProbabilityMap[m_rand.Next(HoleCountProbabilityMap.Length)]; for (var i = 0; i < hole_count; ++i) { var hole_start = HolePositionProbabilityMap[m_rand.Next(HolePositionProbabilityMap.Length)]; var hole_size = HoleSizeProbabilityMap[m_rand.Next(HoleSizeProbabilityMap.Length)]; for (var j = 0; j < hole_size; ++j) { empty[hole_start * 5 + j] = true; } } bool generateItem = false; if (--m_levelsBeforeItemGeneration == 0) { generateItem = true; m_levelsBeforeItemGeneration = m_rand.Next(3, 6); } var generateItemCount = m_rand.Next(2, 4); var itemCd = m_rand.Next(4, 8); for (var i = 0; i < 25; ++i) { if (empty[i]) { continue; } var gm = m_blockPool.Claim(); gm.transform.SetParent(level_obj.transform); gm.transform.localPosition += new Vector3Int(i, 0, 0); if (generateItem && (--itemCd == 0) && (generateItemCount--) > 0) { var items = FallingDownSession.Instance.ItemList; if (items.Length != 0) { var item = GameObject.Instantiate(items[m_rand.Next(items.Length)], Vector3.zero, Quaternion.identity); item.transform.SetParent(level_obj.transform, false); item.transform.localPosition += new Vector3(i, 1.2f, 0); } itemCd = m_rand.Next(6, 10); } //gm.AddComponent<ShatteredBlockBehaviour>(); } RecycleLevels(); m_levelQueue.Enqueue(level_obj); return(level_obj); }