public IStatBuilder AddStat(IStatBuilder stat) => new StatBuilder(_statFactory, new BuffCoreStatBuilder(_buffs, b => b.AddStatForSource(stat, _source), _restrictionsBuilder)) .For(_target);
public IModifierBuilder WithStat(IStatBuilder stat) => WithSingle(stat, (e, s) => e.WithStat(s));
private static Modifier CreateModifier( IStatBuilder statBuilder, IFormBuilder formBuilder, IValueBuilder valueBuilder, IConditionBuilder conditionBuilder) { return(CreateModifier(statBuilder.WithCondition(conditionBuilder), formBuilder, valueBuilder)); }
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); }
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;
public static Func <ValueBuilder, ValueBuilder> PerStatAfterFirst(IStatBuilder stat) => v => v *stat.Value.Select(d => Math.Max(d - 1, 0), d => $"Max({d} - 1, 0)");
/// <summary> /// Returns <c>value.AsPercentage * stat.Value</c>. /// </summary> public static ValueBuilder PercentOf(this ValueBuilder value, IStatBuilder stat) => value.AsPercentage * stat.Value;
/// <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);
/// <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);
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);
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));
// 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));
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); }
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))));
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))));
/// <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;
public IStatBuilder GainAs(IStatBuilder stat) => WithUntyped(new ConversionStatBuilder(StatFactory.GainAs, new StatBuilderAdapter(this), new StatBuilderAdapter(stat)));