private static int GetConstitutionHpBonus(IAttributesModule attributesModule)
        {
            var constitutionAttribute = attributesModule.GetAttribute(PersonAttributeType.Constitution);
            int constitutionHpBonus;

            if (constitutionAttribute is null)
            {
                constitutionHpBonus = 0;
            }
            else
            {
                const int CONSTITUTION_HP_INFLUENCE = 2;
                const int BASE_CONSTITUTION         = 10;

                if (constitutionAttribute.Value > 10)
                {
                    constitutionHpBonus = ((int)constitutionAttribute.Value - BASE_CONSTITUTION) * CONSTITUTION_HP_INFLUENCE;
                }
                else
                {
                    constitutionHpBonus = -(BASE_CONSTITUTION - (int)constitutionAttribute.Value) * CONSTITUTION_HP_INFLUENCE;
                }
            }

            return(constitutionHpBonus);
        }
Exemple #2
0
        private static IEnumerable <SurvivalStat> GetStatsIterator([NotNull] IPersonScheme personScheme,
                                                                   IAttributesModule attributesModule)
        {
            // Устанавливаем характеристики выживания персонажа
            yield return(SetHitPointsStat(personScheme, attributesModule));

            // Выставляем сытость/упоённость
            if (personScheme.SurvivalStats != null)
            {
                yield return(CreateStatFromScheme(personScheme.SurvivalStats,
                                                  SurvivalStatType.Satiety,
                                                  PersonSurvivalStatType.Satiety));

                yield return(CreateStatFromScheme(personScheme.SurvivalStats,
                                                  SurvivalStatType.Hydration,
                                                  PersonSurvivalStatType.Hydration));

                yield return(CreateStatFromScheme(personScheme.SurvivalStats,
                                                  SurvivalStatType.Intoxication,
                                                  PersonSurvivalStatType.Intoxication));

                yield return(CreateStatFromScheme(personScheme.SurvivalStats,
                                                  SurvivalStatType.Wound,
                                                  PersonSurvivalStatType.Wound));
            }

            yield return(CreateUselessStat(SurvivalStatType.Breath));

            yield return(CreateUselessStat(SurvivalStatType.Energy));
        }
 public HumanSurvivalModule([NotNull] IPersonScheme personScheme,
                            [NotNull] ISurvivalRandomSource randomSource,
                            [NotNull] IAttributesModule attributesModule) : this(
         personScheme,
         randomSource,
         attributesModule,
         effectsModule : null,
         evolutionModule : null,
         equipmentModule : null)
 {
 }
Exemple #4
0
 public HumanSurvivalModule(IPersonScheme personScheme,
                            ISurvivalRandomSource randomSource,
                            IAttributesModule attributesModule) : this(
         personScheme,
         randomSource,
         attributesModule,
         сonditionModule : null,
         evolutionModule : null,
         equipmentModule : null)
 {
 }
Exemple #5
0
 public HumanSurvivalModule([NotNull] IPersonScheme personScheme,
                            [NotNull] ISurvivalRandomSource randomSource,
                            [NotNull] IAttributesModule attributesModule) : this(
         personScheme,
         randomSource,
         attributesModule,
         null,
         null,
         null)
 {
 }
        private static SurvivalStat SetHitPointsStat(IPersonScheme personScheme, IAttributesModule attributesModule)
        {
            var constitutionHpBonus = GetConstitutionHpBonus(attributesModule);

            // В схеме храним базовые ХП.
            // Конституция добавяет или снижает ХП.
            var totalHp = personScheme.Hp + constitutionHpBonus;
            var hpStat  = new HpSurvivalStat(totalHp, 0, totalHp)
            {
                Type = SurvivalStatType.Health
            };

            return(hpStat);
        }
Exemple #7
0
        private static IEnumerable <SurvivalStat> GetStats([NotNull] IPersonScheme personScheme,
                                                           [NotNull] IAttributesModule attributesModule)
        {
            if (personScheme is null)
            {
                throw new ArgumentNullException(nameof(personScheme));
            }

            if (attributesModule is null)
            {
                throw new ArgumentNullException(nameof(attributesModule));
            }

            return(GetStatsIterator(personScheme, attributesModule).Where(x => x != null));
        }
        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();
        }
Exemple #9
0
        public HumanSurvivalModule(IPersonScheme personScheme,
                                   ISurvivalRandomSource randomSource,
                                   IAttributesModule attributesModule,
                                   IConditionsModule?сonditionModule,
                                   IEvolutionModule?evolutionModule,
                                   IEquipmentModule?equipmentModule) : base(GetStats(personScheme, attributesModule))
        {
            _personScheme     = personScheme;
            _randomSource     = randomSource;
            _attributesModule = attributesModule;
            _сonditionModule  = сonditionModule;
            _evolutionModule  = evolutionModule;
            _equipmentModule  = equipmentModule;

            RegisterModuleEventHandlers();

            foreach (var stat in Stats)
            {
                stat.Changed += Stat_Changed;
            }

            CalcSurvivalStats();
        }
 public MovingModule(IAttributesModule attributesModule)
 {
     _attributesModule = attributesModule;
 }