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); } }
protected abstract void UpdateDeseaseProcess(IDiseaseProcess diseaseProcess);
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. }