예제 #1
0
        protected override void UpdateDeseaseProcess(IDiseaseProcess diseaseProcess)
        {
            if (diseaseProcess is null)
            {
                throw new ArgumentNullException(nameof(diseaseProcess));
            }

            diseaseProcess.Update();

            // Если есть болезнь, то назначаем эффекты на симпомы этой болезни.

            // Первые 25% силы болезнь себя не проявляет.
            // Оставшиеся 75% делим на равные отрезки между всеми симптомами.
            // По мере увеличения силы болезни добавляем по эффекту на каждый симптом за каждый пройденный
            // рассчитанный отрезок на симптом.
            // Если эффект на такой симптом уже есть, то добавляем к этому симптому новую болезнь.
            // После 50% прогресса болезни (то есть когда прошёл пик силы) начинаем обратный процесс - убираем эффекты
            // за каждый симптом.
            // Если для эффекта симптома указано несколько болезней, то эффект уходит только после удаления последней болезни.

            var disease  = diseaseProcess.Disease;
            var symptoms = disease.GetSymptoms();

            var currentPower = diseaseProcess.CurrentPower;

            // Рассчитываем отрезок силы на один симптом.
            var symptomPowerSegment = 0.75f / symptoms.Length;

            // 0.5 длительности обрабатываем нарастание силы болезни.
            // Затем, остаток, обрабатываем, как спад (выздоровление).
            if (diseaseProcess.Value < 0.5f)
            {
                UpdatePowerUp(_сonditionModule, disease, symptoms, currentPower, symptomPowerSegment);
            }
            else
            {
                UpdatePowerDown(_сonditionModule, disease, symptoms, currentPower, symptomPowerSegment);
            }

            // Если процесс болезни прошёл, то удаляем болезнь из модуля персонажа.
            // Счтаетс, что он её перетерпел.
            if (diseaseProcess.Value >= 1)
            {
                RemoveDisease(diseaseProcess.Disease);
            }
        }
예제 #2
0
 protected abstract void UpdateDeseaseProcess(IDiseaseProcess diseaseProcess);
예제 #3
0
 protected override void UpdateDeseaseProcess(IDiseaseProcess diseaseProcess)
 {
     // Do nothing.
     // Disease progress is not calculated.
     // In fact, the sick monster does not receive any penalties and is sick for life.
 }