/// <summary> /// Переодическое открытие закрытых окон (появление пожара) /// </summary> private IEnumerator OpenWindows() { // Пока в пуле есть доступные окна и активен игровой режим while (PoolsManager.QuantityObjects(ListingPools.Pools.Windows.ToString()) > 0 && LevelManager.GameMode == LevelManager.GameModes.Play) { var seconds = Random.Range(5, 12); yield return(new WaitForSeconds(seconds)); // Определяем номер случайного окна (из всех окон в пуле) var number = Random.Range(0, PoolsManager.QuantityObjects(gameObject.name)); // Получаем объект из пула и получаем его компонент var window = PoolsManager.GetObjectFromPool(ListingPools.Pools.Windows.ToString(), number).GetComponent <Window>(); // Активируем объект window.ActivateObject(); } }
/// <summary> /// Получение персонажа из пула объектов /// </summary> public void ShowVictims() { // Если в указанном пуле есть персонажи if (PoolsManager.QuantityObjects(_victims.ToString()) > 0) { Twinkle = false; //Получаем объект персонажа из пула и получаем его компонент var victim = PoolsManager.GetObjectFromPool(_victims.ToString()).GetComponent <Victims>(); // Перемещаем персонажа в текущее окно (с указанным смещением) victim.transform.position = transform.position + new Vector3(0, victim.Offset, 0); // Записываем персонажу его окно victim.Window = this; // Активируем объект victim.ActivateObject(); } }
/// <summary> /// Создание огненных капель в горящем окне /// </summary> private IEnumerator DropsFalling() { // Если окно открыто и активен игровой режим while (OpenWindow && LevelManager.GameMode == LevelManager.GameModes.Play) { yield return(new WaitForSeconds(Random.Range(_minSeconds, _maxSeconds))); // Вероятность падения капли var probability = Random.Range(1, 3); if (Twinkle && probability == 1) { // Получаем объект из пула и получаем его компонент var drop = PoolsManager.GetObjectFromPool(ListingPools.Pools.Twinkle.ToString()).GetComponent <Drop>(); // Перемещаем каплю к горящему окну (с небольшим горизонтальным смещением) drop.transform.position = _fireFX.transform.position + new Vector3(-0.15f, Random.Range(-0.2f, 0.2f), 0); // Активируем объект drop.ActivateObject(); } } }
private void Start() { // Определяем количество окон с пожаром при старте var amount = Random.Range(2, _maximum + 1); for (int i = 0; i < amount; i++) { // Определяем номер случайного окна (из всех окон в пуле) var number = Random.Range(0, PoolsManager.QuantityObjects(ListingPools.Pools.Windows.ToString())); // Получаем объект из пула и получаем его компонент var window = PoolsManager.GetObjectFromPool(ListingPools.Pools.Windows.ToString(), number).GetComponent <Window>(); // Открываем данное окно window.OpenWindow = true; // Активируем объект window.ActivateObject(); } // Запускаем открытие других окон _ = StartCoroutine(OpenWindows()); // Запускаем появление жителей в окнах _ = StartCoroutine(CharacterJumping()); }