public IStatBuilder Source(IDamageTypeBuilder type) { var inner = CoreStatBuilderFromIdentity("HasSource", typeof(bool)); var coreStat = new ParametrisedCoreStatBuilder <IKeywordBuilder>(inner, type, (ps, k, s) => ConcretizeSourceStat(((IDamageTypeBuilder)k).BuildDamageTypes(ps), s)); return(new StatBuilder(StatFactory, coreStat)); }
public IActionBuilder With(IDamageTypeBuilder damageType) { IActionBuilder Resolve(ResolveContext context) { var inner = _resolver(this, context); return(new ActionBuilderStub( inner.Source, inner.Target, $"{inner} (with {damageType.Resolve(context)} damage)", (c, _) => c)); } return(new ActionBuilderStub( Source, Target, $"{this} (with {damageType} damage)", (_, context) => Resolve(context))); }
public IActionBuilder HitWith(IDamageTypeBuilder damageType) { var stringBuilder = CoreBuilder.Create <IKeywordBuilder, string>(damageType, BuildHitWithIdentity); return(new ActionBuilder(_statFactory, stringBuilder, _entity)); }
public IStatBuilder Degeneration(IDamageTypeBuilder damageType) => new StatBuilder(StatFactory, new ParametrisedCoreStatBuilder <IKeywordBuilder>(CreateCoreStatBuilder("Degeneration", typeof(double)), damageType, (ps, kb, s) => StatFactory.CopyWithSuffix(s, kb.Build(ps).ToString(), typeof(double))));
public IDamageTypeBuilder Except(IDamageTypeBuilder type) => With(CoreBuilder.BinaryOperation(_coreDamageType, new ProxyDamageTypeBuilder(type), Enumerable.Except));
public IDamageTypeBuilder And(IDamageTypeBuilder type) => With(CoreBuilder.BinaryOperation(_coreDamageType, new ProxyDamageTypeBuilder(type), Enumerable.Union));
public ProxyDamageTypeBuilder(IDamageTypeBuilder proxiedBuilder) =>
private IEnumerable <IStat> ConcretizeSourceStat(IDamageTypeBuilder type, IStat stat) => type.BuildDamageTypes().Select(t => StatFactory.CopyWithSuffix(stat, t.ToString(), typeof(bool)));
public IActionBuilder With(IDamageTypeBuilder damageType) => _actionBuilder.With(damageType);
private ValueBuilder EnemyDamageTakenMultiplier( IDamageTypeBuilder resistanceType, IStatBuilder damageTaken) => DamageTakenMultiplier(resistanceType.Resistance.For(Enemy), damageTaken.For(Enemy));
public IDamageTypeBuilder Except(IDamageTypeBuilder type) => (IDamageTypeBuilder)Create( Construct, This, (IKeywordBuilder)type, (l, r) => $"({l}).Except({r})");
public IDamageTypeBuilder And(IDamageTypeBuilder type) => (IDamageTypeBuilder)Create( Construct, This, (IKeywordBuilder)type, (l, r) => $"{l}, {r}");
public IFlagStatBuilder BasedOn(IDamageTypeBuilder damageType) => CreateFlagStat(This, (IKeywordBuilder)damageType, (o1, o2) => $"{o1} recovers based on {o2} instead");
public IFlagStatBuilder Source(IDamageTypeBuilder type) => CreateFlagStat(This, (IKeywordBuilder)type, (o1, o2) => $"{type} can apply {this}");