Пример #1
0
 private void Screamer(PositionInfo positionInfo, Transform monsterTransform)
 {
     GameController.playerLose = true;
     MonsterTools.UsePositionInfo(positionInfo, monsterTransform, monsterAnim);
     meshObject.enabled = true;
     ScreamerEffect();
 }
Пример #2
0
        protected IEnumerator MonsterEmergence(PositionInfo[] positionInfo)
        {
            meshObject       = monsterModel.GetComponent <SkinnedMeshRenderer>();
            monsterTransform = gameObject.GetComponent <Transform>(); //Кешируем Transform
            monsterAnim      = monsterAnimHandler.GetComponent <Animation>();

            meshObject.enabled = !meshObject.enabled; //Выключаем модель монстра

            while (!monsterOver)
            {
                bool isForcedAppearNeeded = false;
                for (int i = 0; i < (generalTime * Tools.chekerIECoeficient); i++) //Ждем появления монстра
                {
                    if (SafeTimeCondition(ref isForcedAppearNeeded))               //Запускаем отсчет появления заново, если игрок выполнил нужное условие
                    {
                        i = 0;
                    }
                    if (isForcedAppearNeeded) //Прерываем цикл, если выполнено условие внезапного появления
                    {
                        break;
                    }
                    timeToAppear = (generalTime - i / Tools.chekerIECoeficient); //Записываем время до появление монстра в публичную переменную
                    yield return(new WaitForSeconds(1 / Tools.chekerIECoeficient));
                }

                positionKey = (monsterStadia * 3) + Random.Range(0, Tools.GetMaxValue(2)); //Умножаем на 3, ибо всего 3 стадии.
                generalTime = Random.Range(minTimeToAppear, Tools.GetMaxValue(maxTimeToAppear));

                BasicAppearEffect(positionInfo[positionKey].soundNum);              //Монстр появляется
                yield return(new WaitForSeconds(EyeBlinkController.halfTimeBlink)); //время, специально подобранное под анимацию моргания. Когда игрок ничего не видит, монстр появляется.

                MonsterTools.UsePositionInfo(positionInfo[positionKey], monsterTransform, monsterAnim);
                meshObject.enabled = !meshObject.enabled;                        //Монстр появляется

                bool pauseCycleNeeded         = false;                           //Нужна ли пауза
                bool isConditionPerformedFlag = false;                           //Выполнено ли условие безопасного выхода

                for (int i = 0; i < waitingTime * Tools.chekerIECoeficient; i++) //Время ожидания монстра
                {
                    if (StopWaitingTimeCondition(ref isConditionPerformedFlag, ref pauseCycleNeeded))
                    {
                        break;            //Прерываем счетчик
                    }
                    if (pauseCycleNeeded) //Приостанавливаем цикл ожидания, если необходима пауза
                    {
                        i = 0;
                    }
                    yield return(new WaitForSeconds(1 / Tools.chekerIECoeficient));
                }

                BasicDisappearEffect(); //Монстр исчезает
                yield return(new WaitForSeconds(EyeBlinkController.halfTimeBlink));

                meshObject.enabled = !meshObject.enabled;

                if (!isConditionPerformedFlag) //Если условие безопасного выхода не выполнено
                {
                    if (monsterStadia >= 2)    //Если стадия монстра выше/равна 2, игра закончена
                    {
                        monsterOver = !monsterOver;
                    }
                    else
                    {
                        waitingTime -= debuffWaitingTime; //В следующий раз время ожидания монстра сократится
                        monsterStadia++;
                        heartBitting.Play();              //Проигрываем звук сердцебиения
                    }
                }
            }
            yield return(new WaitForSeconds(EyeBlinkController.halfTimeBlink)); //чтобы игрок не "проморгал" скример

            Screamer(positionInfo[screamerArrayPosition], monsterTransform);
        }