public ConfigEntryDescriptionWrapper <T> BindConfig <T>(string key, T defaultVal,
                                                                string description)
        {
            ConfigEntryDescriptionWrapper <T> entry =
                new ConfigEntryDescriptionWrapper <T>(Config.Bind(CharacterName, key, defaultVal, description));

            MarkdownConfigEntries.Add(entry);
            return(entry);
        }
        public ConfigEntryDescriptionWrapper <T> BindConfig <T>(string key, T defaultVal,
                                                                string description)
        {
            var entry =
                new ConfigEntryDescriptionWrapper <T>(Config.Bind(CommonName, key, defaultVal, description),
                                                      UpdateVanillaValues.Value);

            MarkdownConfigEntries.Add(entry);
            return(entry);
        }
        public ConfigEntryDescriptionWrapper <T> BindConfig <T>(string key, T defaultVal,
                                                                string description)
        {
            // Vanilla values need to be updated every time in the description when the game starts, only the boolean values don't need to be overwritten anymore, so tell that the config wrapper with the boolean
            ConfigEntryDescriptionWrapper <T> entry =
                new ConfigEntryDescriptionWrapper <T>(Config.Bind(CharacterName, key, defaultVal, description),
                                                      _updateVanillaValues);

            MarkdownConfigEntries.Add(entry);
            return(entry);
        }
        public override void InitConfigValues()
        {
            // Pistol
            DoubleTapDamageCoefficient = new FieldConfigWrapper <float>(BindConfigFloat("DoubleTapDamageCoefficient",
                                                                                        "Damage coefficient for the Double Tap, in percent."), "damageCoefficient", true);

            DoubleTapBaseDuration =
                new FieldConfigWrapper <float>(BindConfigFloat("DoubleTapBaseDuration",
                                                               "Base duration for the Double Tap shot, in percent. (Attack Speed)"), "baseDuration", true);

            DoubleTapFields = new List <IFieldChanger>
            {
                DoubleTapBaseDuration,
                DoubleTapDamageCoefficient
            };

            DoubleTapHitLowerSpecialCooldownPercent = BindConfigFloat("DoubleTapHitLowerSpecialCooldownPercent",
                                                                      "The amount in percent that the current cooldown of the Barrage Skill should be lowered by. Needs to have DoubleTapHitLowerSpecialCooldown set.");


            DoubleTapHitLowerSpecialCooldown =
                BindConfigBool("DoubleTapHitLowerSpecialCooldown",
                               "If the pistol hit should lower the Special Skill cooldown. Needs to have DoubleTapHitLowerSpecialCooldownPercent set to work");

            // Laser

            PhaseRoundDamageCoefficient = new FieldConfigWrapper <float>(BindConfigFloat("PhaseRoundDamageCoefficient",
                                                                                         "Damage coefficient for the secondary phase round, in percent."), "damageCoefficient");

            PhaseRoundFields = new List <IFieldChanger>
            {
                PhaseRoundDamageCoefficient
            };

            // Barrage

            SuppressiveFireBaseShotAmount =
                new FieldConfigWrapper <int>(
                    BindConfigInt("SuppressiveFireBaseShotAmount", "How many shots the Suppressive Fire skill should when ATKSP = 1"),
                    "baseBulletCount", true);


            SuppressiveFireBaseDurationBetweenShots =
                new FieldConfigWrapper <float>(BindConfigFloat("SuppressiveFireBaseDurationBetweenShots",
                                                               "Base duration between shots in the Suppressive Fire skill."), "baseDurationBetweenShots", true);

            SuppressiveFireFields = new List <IFieldChanger> {
                SuppressiveFireBaseShotAmount, SuppressiveFireBaseDurationBetweenShots
            };
        }
        public override void InitConfigValues()
        {
            TurretMaxDeployCount = BindConfigInt("TurretMaxDeployCount",
                                                 "The maximum number of turrets the Engineer can place.");

            ShieldMaxDeployCount = BindConfigInt("ShieldMaxDeployCount",
                                                 "The maximum number of shields the Engineer can place.");

            ShieldDuration = new FieldConfigWrapper <float>(
                BindConfigFloat("ShieldDuration", "The number of seconds the shield is active."), "lifetime", true);

            ShieldDeployedFields = new List <IFieldChanger> {
                ShieldDuration
            };

            ShieldEndlessDuration = BindConfigBool("ShieldEndlessDuration",
                                                   "If the duration of the shield should be endless.");


            GrenadeMaxFireAmount = new FieldConfigWrapper <int>(BindConfigInt("GrenadeMaxFireAmount",
                                                                              "The maximum number of grenades the Engineer can fire."), "maxGrenadeCount", true);


            GrenadeMinFireAmount = new FieldConfigWrapper <int>(BindConfigInt("GrenadeMinFireAmount",
                                                                              "The minimum number of grenades the Engineer fires."), "minGrenadeCount", true);


            GrenadeSetChargeCountToFireAmount = BindConfigBool("GrenadeSetChargeCountToFireAmount",
                                                               "Set the number of \"clicks\" you hear in the charging animation to the maximum grenade count.");


            GrenadeMaxChargeTime =
                new FieldConfigWrapper <float>(BindConfigFloat("GrenadeMaxChargeTime",
                                                               "Maximum charge time (animation) for grenades, in seconds."), "baseMaxChargeTime", true);


            GrenadeTotalChargeDuration =
                new FieldConfigWrapper <float>(BindConfigFloat("GrenadeTotalChargeDuration",
                                                               "Maximum charge duration (logic) for grenades, in seconds."), "baseTotalDuration", true);

            ChargeGrenadesFields = new List <IFieldChanger>
            {
                GrenadeMaxChargeTime, GrenadeMaxFireAmount, GrenadeMinFireAmount, GrenadeTotalChargeDuration
            };
        }
        protected override void InitConfigValues()
        {
            // Pistol

            _doubleTapFields.AddFieldConfig <float>("DoubleTapDamageCoefficient",
                                                    "Damage coefficient for the Double Tap, in percent.",
                                                    "damageCoefficient",
                                                    true);

            _doubleTapFields.AddFieldConfig <float>("DoubleTapBaseDuration",
                                                    "Base duration for the Double Tap shot, in percent. (Attack Speed)",
                                                    "baseDuration",
                                                    true);

            DoubleTapHitLowerSpecialCooldownPercent = BindConfig <float>("DoubleTapHitLowerSpecialCooldownPercent",
                                                                         "The amount in percent that the current cooldown of the Barrage Skill should be lowered by. Needs to have DoubleTapHitLowerSpecialCooldown set.");


            DoubleTapHitLowerSpecialCooldown =
                BindConfig <bool>("DoubleTapHitLowerSpecialCooldown",
                                  "If the pistol hit should lower the Special Skill cooldown. Needs to have DoubleTapHitLowerSpecialCooldownPercent set to work");
        }
        protected override void InitConfigValues()
        {
            TurretBody = new CustomBodyDefinition(this, "GaussTurret");

            GaussTurretBulletCount = BindConfig <int>("GaussTurretBulletCount",
                                                      "How many bullets the GaussTurret fires.");

            TurretMaxDeployCount = BindConfig <int>("TurretMaxDeployCount",
                                                    "The maximum number of turrets the Engineer can place.");

            ShieldMaxDeployCount = BindConfig <int>("ShieldMaxDeployCount",
                                                    "The maximum number of shields the Engineer can place.");

            _shieldDeployedFields.AddFieldConfig <float>(
                "ShieldDuration", "The number of seconds the shield is active.", "lifetime", true);

            ShieldEndlessDuration = BindConfig <bool>("ShieldEndlessDuration",
                                                      "If the duration of the shield should be endless.");


            _chargeGrenadesFields.AddFieldConfig <int>("GrenadeMaxFireAmount",
                                                       "The maximum number of grenades the Engineer can fire.", "maxGrenadeCount", true);

            _chargeGrenadesFields.AddFieldConfig <int>("GrenadeMinFireAmount",
                                                       "The minimum number of grenades the Engineer fires.", "minGrenadeCount", true);


            _chargeGrenadesFields.AddFieldConfig <float>("GrenadeMaxChargeTime",
                                                         "Maximum charge time (animation) for grenades, in seconds.", "baseMaxChargeTime", true);

            _chargeGrenadesFields.AddFieldConfig <float>("GrenadeTotalChargeDuration",
                                                         "Maximum charge duration (logic) for grenades, in seconds.", "baseTotalDuration", true);

            GrenadeSetChargeCountToFireAmount = BindConfig <bool>("GrenadeSetChargeCountToFireAmount",
                                                                  "Set the number of \"clicks\" you hear in the charging animation to the maximum grenade count.");
        }