public SituationStruct Situation; // Действующая ситуация // Генерация действий для ситуации public void SituationGeneration(int id) { Situation = Situations[id]; // Выбор по Id из массива той ситуации, которая сейчас происходит Situation.TimeInterval = TimeIntervalCalculation(id); // Определенеие времнного интервала между нажатиями на экран // Сколько будет затрачиваться энергии на разгон Situation.EnergyCosts = Random.Range(Situation.EnergyCosts - 0.25f, Situation.EnergyCosts + 0.25f); // Определение количества действий, которые будут сделаны за отвдённое время для происходящей ситуации var numberOfActions = Mathf.CeilToInt(Situation.Time / Situation.TimeInterval); Situation.ActionDesignation = new int[numberOfActions]; // Создание массива действий, где 1 - разовое нажатие; 2 - удержание // Генерирование значения для каждого действия в массиве for (int action = 0; action < Situation.ActionDesignation.Length; action++) { /*Выбор, будет ли персонаж делать какое-либо действие * Иначе 0 - невыполнение каких-либо действий (По умолчанию элементы массива имют значение 0)*/ if (Random.Range(0.0f, 1.0f) <= Situation.ChancePerformAction) { // Определённое количество процентов для каждой ситуации, что выпадет 1 - разовое нажатие на экран if (Random.Range(0.0f, 1.0f) <= Situation.ChanceTouch) { Situation.ActionDesignation[action] = 1; } else // Иначе 2 - долгое нажатие на экран { Situation.ActionDesignation[action] = 2; } } } }
// Действия после старта, когда все начинают бежать public void AnimationStartAnimSpeedRun() { animator.SetFloat("speed", 1.0f); Speed = RangeSpeed.x; isRun = true; // Запуск ситуации из массива с индексм 0 (Разгон на старта) IdSituation = 0; accelerationCalculation.SituationGeneration(IdSituation); CurrentSituation = accelerationCalculation.Situation; }