private void RoomsObjectCreator() { for (int i = 0; i < rooms.Count; i++) //Не включает главную комнату (0) //Создаю все объекты, с которыми работаю более 1 раза за цикл { EnemyDistributor EnDist = EnemyDistributor[i].GetComponent <EnemyDistributor>(); //Стоит добавлять в каждую комнтату иначе съезжает порядок и будет ошибка выхода за пределы списка DestructibleDistributor DestDist = DestructibleDistributor[i].GetComponent <DestructibleDistributor>(); //Стоит добавлять в каждую комнтату иначе съезжает порядок и будет ошибка выхода за пределы списка ItemDistributor ItemDist = ItemDistributor[i].GetComponent <ItemDistributor>(); //Стоит добавлять в каждую комнтату иначе съезжает порядок и будет ошибка выхода за пределы списка AddRoom ARoom = rooms[i].GetComponent <AddRoom>(); if (i != rooms.Count - 1 && i != 0) { //Создаю врагов int spawnEnemyAmount = Random.Range(8, 12); for (int k = 0; k < spawnEnemyAmount / 2 + 1; k++) //Goblin Green { EnDist.SpawnEnemy(EnemyList[0], ref ARoom); } for (int k = 0; k < spawnEnemyAmount / 2 - 1; k++) //Goblin Brown { EnDist.SpawnEnemy(EnemyList[1], ref ARoom); } //Создаю разрушаемые объекты DestructibleCreator(1, 5, ref DestructibleList, ref DestDist); // Случайное кол-во разрушаемых объектов от 1 до 4 (при 5 точках) ItemCreator(1, 4, ref ItemList, ref ItemDist); //Создаю вещи if (ARoom.deadEnd == true) //rooms[i].GetComponent<AddRoom>().deadEnd { if (spawnedChest != 0) { spawnedChest--; //for (int k = 0; k < 10 ; k++){ int rand = Random.Range(0, 100); int chestNum = -1; if (rand < 80) { keyType.Add(0); //Brown key chestNum = 0; //Brown chest } else if (rand < 95) { keyType.Add(1); //Green key chestNum = 1; //Green chest } else if (rand < 100) { keyType.Add(2); //Red key chestNum = 2; //Red chest } //Создаю Сундук ItemDist.SpawnItem(ChestList[chestNum]); //Меняю цвет комнаты rooms[i].GetComponentInChildren <ItemMapOpen>().ChangeColor(new Vector3(255, 255, 0)); } else if (spawnedChestGuardian != 0) { spawnedChestGuardian--; int rand = Random.Range(0, keyType.Count); EnDist.SpawnGuardian(ref EnemyGuardianList, 1, 0, keyType[rand]); keyType.RemoveAt(rand); rooms[i].GetComponentInChildren <ItemMapOpen>().ChangeColor(new Vector3(255, 193, 0)); } } //ARoom.EnvironmentSwitсher(false); // Отключаю окружающую среду } else if (i == 0) { ItemCreator(1, 4, ref ItemList, ref ItemDist); //Создаю вещи DestructibleList[1].chanceBeCreated += 200; // Увеличиваю вероятность создания бочки с водой DestructibleCreator(3, 6, ref DestructibleList, ref DestDist); //Создаю разрушаемые объекты DestructibleList[1].chanceBeCreated -= 200; // Возвращаю вероятность создания бочки с водой } else if (i == rooms.Count - 1) //В последней комнате появится босс { spawnedBoss = true; //Чтобы не появился 2-й босс EnDist.SpawnEnemy(boss, ref ARoom); ItemCreator(1, 3, ref ItemList, ref ItemDist); //Создаю вещи DestructibleCreator(1, 5, ref DestructibleList, ref DestDist); //Создаю разрушаемые объекты rooms[i].GetComponentInChildren <ItemMapOpen>().ChangeColor(new Vector3(1, 195, 195)); //Создаю разрушаемые объекты //int destructibleAmount = Random.Range(2, 4); // Случайное кол-во разрушаемых объектов от 2 до 3 (при 5 точках) //for (int k = 0; k < destructibleAmount; k++) { // GameObject newObj = CalculateChanceToCreate(DestructibleList); // DestDist.SpawnDestructible(newObj); //} //ARoom.EnvironmentSwitсher(false); // Отключаю окружающую среду } } //Вызываем AStar после всех расстановок окружающей среды AStarScan(); }
private void DestructibleCreator(int minRand, int maxRand, ref List <ObjectsStore> DestructibleList, ref DestructibleDistributor DestDist) { int destructibleAmount = Random.Range(minRand, maxRand); // Случайное кол-во разрушаемых объектов от 3 до 5 for (int k = 0; k < destructibleAmount; k++) { GameObject newObj = CalculateChanceToCreate(ref DestructibleList); DestDist.SpawnDestructible(newObj); } }