public CombatActModule( ITacticalActScheme defaultActScheme, IEquipmentModule equipmentModule, IEffectsModule effectsModule, IEvolutionModule evolutionModule) { IsActive = true; _defaultActScheme = defaultActScheme; _equipmentModule = equipmentModule; _effectsModule = effectsModule; _evolutionModule = evolutionModule; }
private static IEnumerable <ITacticalAct> CalcActs(ITacticalActScheme defaultActScheme, IEnumerable <Equipment> equipments, IEffectsModule effects, IEnumerable <IPerk> perks) { var defaultAct = CreateTacticalAct(defaultActScheme, null, effects, perks); yield return(defaultAct); var equipmentActs = CalcActsFromEquipments(equipments, effects, perks); foreach (var act in equipmentActs) { yield return(act); } }
private static ITacticalAct CreateTacticalAct([NotNull] ITacticalActScheme scheme, [NotNull] Equipment equipment, [NotNull] IEffectsModule effects, [NotNull][ItemNotNull] IEnumerable <IPerk> perks) { var toHitModifierValue = 0; var efficientModifierValue = 0; var efficientRollUnmodified = scheme.Stats.Efficient; CalcSurvivalHazardOnTacticalAct(effects, ref toHitModifierValue, ref efficientModifierValue); CalcPerksBonusesOnTacticalAct(perks, equipment, ref toHitModifierValue, ref efficientModifierValue); var toHitRoll = CreateTacticalActRoll(6, 1, toHitModifierValue); var efficientRoll = CreateTacticalActRoll(efficientRollUnmodified.Dice, efficientRollUnmodified.Count, efficientModifierValue); return(new TacticalAct(scheme, efficientRoll, toHitRoll, equipment)); }
private static void AddDiseaseEffectForSymptom( IEffectsModule personEffects, IDisease disease, DiseaseSymptom symptom) { var currentSymptomEffect = personEffects.Items.OfType <DiseaseSymptomEffect>() .SingleOrDefault(x => x.Symptom == symptom); if (currentSymptomEffect is null) { // При создании эффекта уже фиксируется болезнь, которая его удерживает. currentSymptomEffect = new DiseaseSymptomEffect(disease, symptom); personEffects.Add(currentSymptomEffect); } else { currentSymptomEffect.HoldDisease(disease); } }
private static void UpdatePowerDown( IEffectsModule personEffects, IDisease disease, DiseaseSymptom[] symptoms, float currentPower, float symptomPowerSegment) { var activeSymptomCount = (int)Math.Floor(currentPower / symptomPowerSegment); // Начинаем снимать все эффекты, которые за пределами количества. var symptomLowerIndex = activeSymptomCount; for (var i = symptomLowerIndex; i < symptoms.Length; i++) { var currentSymptom = symptoms[i]; RemoveDiseaseEffectForSimptom(personEffects, disease, currentSymptom); } }
private static void RemoveDiseaseEffectForSimptom( IEffectsModule personEffects, IDisease disease, DiseaseSymptom symptom) { var currentSymptomEffect = personEffects.Items.OfType <DiseaseSymptomEffect>() .SingleOrDefault(x => x.Symptom == symptom); if (currentSymptomEffect is null) { // Просто игнорируем этот эффект. // Ткущий метод может вызываться несколько раз и для симптомов, которые ушли в предыдущих итерациях. return; } currentSymptomEffect.ReleaseDisease(disease); if (!currentSymptomEffect.Diseases.Any()) { personEffects.Remove(currentSymptomEffect); } }
private static void UpdatePowerUp(IEffectsModule personEffects, IDisease disease, DiseaseSymptom[] symptoms, float currentPower, float symptomPowerSegment) { if (currentPower <= 0.25f) { // Симптомы начинаю проявляться после 25% силы болезни. return; } // Рассчитываем количество симптомов, которые должны быть при текущей силе болезни. var activeSymptomCount = (int)Math.Ceiling((currentPower - 0.25f) / symptomPowerSegment); // Начинаем проверять, есть ли эффекты на все эти симптомы // или добавлены ли болезни симптомов в список болезней эффектов. for (var i = 0; i < activeSymptomCount; i++) { var currentSymptom = symptoms[i]; AddDiseaseEffectForSymptom(personEffects, disease, currentSymptom); } }
public HumanSurvivalModule([NotNull] IPersonScheme personScheme, [NotNull] ISurvivalRandomSource randomSource, [NotNull] IAttributesModule attributesModule, IEffectsModule effectsModule, IEvolutionModule evolutionModule, IEquipmentModule equipmentModule) : base(GetStats(personScheme, attributesModule)) { _personScheme = personScheme ?? throw new ArgumentNullException(nameof(personScheme)); _randomSource = randomSource ?? throw new ArgumentNullException(nameof(randomSource)); _attributesModule = attributesModule ?? throw new ArgumentNullException(nameof(attributesModule)); _effectsModule = effectsModule; _evolutionModule = evolutionModule; _equipmentModule = equipmentModule; RegisterModuleEventHandlers(); foreach (var stat in Stats) { stat.Changed += Stat_Changed; } CalcSurvivalStats(); }
private static SurvivalStatHazardEffect GetCurrentEffect(IEffectsModule currentEffects, SurvivalStatType statType) { return(currentEffects.Items .OfType <SurvivalStatHazardEffect>() .SingleOrDefault(x => x.Type == statType)); }
public DiseaseModule(IEffectsModule personEffects) { _personEffects = personEffects ?? throw new ArgumentNullException(nameof(personEffects)); }