Exemplo n.º 1
0
 public IStatBuilder AddStat(IStatBuilder stat) =>
 new StatBuilder(_statFactory,
                 new BuffCoreStatBuilder(_buffs, b => b.AddStatForSource(stat, _source), _restrictionsBuilder))
 .For(_target);
Exemplo n.º 2
0
 public IModifierBuilder WithStat(IStatBuilder stat)
 => WithSingle(stat, (e, s) => e.WithStat(s));
Exemplo n.º 3
0
 private static Modifier CreateModifier(
     IStatBuilder statBuilder, IFormBuilder formBuilder, IValueBuilder valueBuilder,
     IConditionBuilder conditionBuilder)
 {
     return(CreateModifier(statBuilder.WithCondition(conditionBuilder), formBuilder, valueBuilder));
 }
Exemplo n.º 4
0
 public void AddGlobal(IStatBuilder stat, Form form, IValueBuilder value, IConditionBuilder condition = null)
 => Add(stat, form, value, condition, _globalModifierSource);
 /// <summary>
 /// Adds a matcher with a form, value, stat and optionally a condition.
 /// </summary>
 public void Add([RegexPattern] string regex, IFormBuilder form, double value, IStatBuilder stat,
                 IConditionBuilder condition = null)
 {
     Add(regex, form, _valueFactory.Create(value), stat, condition);
 }
Exemplo n.º 6
0
 public virtual IStatBuilder AddStat(IStatBuilder stat) =>
 stat.WithCondition(IsOn(new ModifierSourceEntityBuilder()));
 protected static ValueBuilder DamageTakenMultiplier(IStatBuilder resistance, IStatBuilder damageReduction, IStatBuilder damageTaken)
 => (1 - resistance.Value.AsPercentage) * (1 - damageReduction.Value.AsPercentage) * damageTaken.Value;
Exemplo n.º 8
0
 public static Func <ValueBuilder, ValueBuilder> PerStatAfterFirst(IStatBuilder stat)
 => v => v *stat.Value.Select(d => Math.Max(d - 1, 0), d => $"Max({d} - 1, 0)");
Exemplo n.º 9
0
 /// <summary>
 /// Returns <c>value.AsPercentage * stat.Value</c>.
 /// </summary>
 public static ValueBuilder PercentOf(this ValueBuilder value, IStatBuilder stat) =>
 value.AsPercentage * stat.Value;
Exemplo n.º 10
0
 /// <summary>
 /// Returns a value converter multiplying values by <c>(stat.Value / divideBy).Floor</c>.
 /// </summary>
 public static Func <ValueBuilder, ValueBuilder> PerStat(IStatBuilder stat, ValueBuilder divideBy) =>
 PerStat(stat.Value, divideBy);
Exemplo n.º 11
0
 /// <summary>
 /// Returns a value converter multiplying values by <c>(stat.Value / divideBy).Ceiling</c>.
 /// </summary>
 public static Func <ValueBuilder, ValueBuilder> PerStatCeiled(IStatBuilder stat, ValueBuilder divideBy) =>
 v => v * (stat.Value / divideBy).Ceiling();
 public static ValueBuilder PerStat(this ValueBuilder value, IStatBuilder multiplier, ValueBuilder divideBy) =>
 value.PerStat(multiplier.Value, divideBy);
Exemplo n.º 13
0
 public IModifierBuilder WithStat(IStatBuilder stat)
 {
     return(WithSingle(stat, (e, s) => e.WithStat(s), e => e.Stat, "Stat"));
 }
 public void Add([RegexPattern] string regex, IStatBuilder stat)
 {
     Add(regex, ModifierBuilder.WithStat(stat));
 }
 private IValue BuildInModifierSourceJewelRadiusValue(
     BuildParameters parameters, IStatBuilder stat, Func <IValue, IValue> condition) =>
 BuildInModifierSourceJewelRadiusValue(parameters, d => stat.AsPassiveNodePropertyFor(d.Id).Value, condition);
Exemplo n.º 16
0
 public static ValueBuilder LinearScale(this IValueBuilders valueFactory,
                                        IStatBuilder xStat,
                                        params (double x, double y)[] points)
 public IStatBuilder MultipliedAttributeForNodesInModifierSourceJewelRadius(
     IStatBuilder sourceAttribute, IStatBuilder targetAttribute)
 => new StatBuilder(StatFactory,
                    new MultipliedAttributeForEachNodeInRadiusStatBuilder(GetNodesInRadius, sourceAttribute, targetAttribute));
Exemplo n.º 18
0
        // Convenience methods

        /// <summary>
        /// Returns a stat whose modifiers apply to all given stats, but only once.
        /// (no multiple application if one of the stats is converted to another)
        /// </summary>
        protected static IStatBuilder ApplyOnce(IStatBuilder first, params IStatBuilder[] stats) =>
        stats.Aggregate(first, (s1, s2) => s1.CombineWith(s2));
Exemplo n.º 19
0
 public override IStatBuilder AddStat(IStatBuilder stat) => AddStatForSource(stat, EntityBuilder.AllEntities);
        /// <summary>
        /// Adds a substituting matcher with a form, value and stat.
        /// </summary>
        public void Add([RegexPattern] string regex, IFormBuilder form, IValueBuilder value, IStatBuilder stat,
                        string substitution)
        {
            var builder = ModifierBuilder
                          .WithForm(form)
                          .WithValue(value)
                          .WithStat(stat);

            Add(regex, builder, substitution);
        }
Exemplo n.º 21
0
 public void AddGlobal(IStatBuilder stat, Form form, bool value, IConditionBuilder condition = null)
 => AddGlobal(stat, form, _builderFactories.ValueBuilders.Create(value), condition);
 public StatBuilderAdapter(IStatBuilder statBuilder, IConditionBuilder?conditionBuilder = null)
     : this(statBuilder, conditionBuilder, Funcs.Identity)
 {
 }
        /// <summary>
        /// Adds a matcher with a form, value, stat and optionally a condition.
        /// </summary>
        public void Add([RegexPattern] string regex, IFormBuilder form, IValueBuilder value, IStatBuilder stat,
                        IConditionBuilder condition = null)
        {
            var builder = ModifierBuilder
                          .WithForm(form)
                          .WithStat(stat)
                          .WithValue(value);

            if (condition != null)
            {
                builder = builder.WithCondition(condition);
            }

            Add(regex, builder);
        }
 public ValueBuilder TotalInModifierSourceJewelRadius(IStatBuilder stat)
 => new ValueBuilder(new ValueBuilderImpl(
                         ps => BuildInModifierSourceJewelRadiusValue(ps, stat, _ => new Constant(true)),
                         c => TotalInModifierSourceJewelRadius(stat.Resolve(c))));
Exemplo n.º 25
0
 private static ValueBuilder PerStat(IStatBuilder stat, double divideBy)
 => (stat.Value / divideBy).Floor();
 public ValueBuilder AllocatedInModifierSourceJewelRadius(IStatBuilder stat)
 => new ValueBuilder(new ValueBuilderImpl(
                         ps => BuildInModifierSourceJewelRadiusValue(ps, stat, Funcs.Identity),
                         c => AllocatedInModifierSourceJewelRadius(stat.Resolve(c))));
 private static IReadOnlyList <IStat> Build(IStatBuilder builder)
 => builder.Build(default).SelectMany(r => r.Stats).ToList();
 public ValueBuilder UnallocatedInModifierSourceJewelRadius(IStatBuilder stat)
 => new ValueBuilder(new ValueBuilderImpl(
                         ps => BuildInModifierSourceJewelRadiusValue(ps, stat,
                                                                     v => new ConditionalValue(c => !v.Calculate(c).IsTrue(), $"!{v}")),
                         c => UnallocatedInModifierSourceJewelRadius(stat.Resolve(c))));
Exemplo n.º 29
0
 /// <summary>
 /// Returns a value converter multiplying values by <paramref name="stat"/>'s value.
 /// </summary>
 public static Func <ValueBuilder, ValueBuilder> PerStat(IStatBuilder stat) =>
 v => v * stat.Value;
Exemplo n.º 30
0
 public IStatBuilder GainAs(IStatBuilder stat) =>
 WithUntyped(new ConversionStatBuilder(StatFactory.GainAs,
                                       new StatBuilderAdapter(this), new StatBuilderAdapter(stat)));