예제 #1
0
        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));
        }
예제 #2
0
        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));
        }
예제 #4
0
 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) =>
예제 #8
0
 private IEnumerable <IStat> ConcretizeSourceStat(IDamageTypeBuilder type, IStat stat) =>
 type.BuildDamageTypes().Select(t => StatFactory.CopyWithSuffix(stat, t.ToString(), typeof(bool)));
예제 #9
0
 public IActionBuilder With(IDamageTypeBuilder damageType) => _actionBuilder.With(damageType);
예제 #10
0
 private ValueBuilder EnemyDamageTakenMultiplier(
     IDamageTypeBuilder resistanceType, IStatBuilder damageTaken)
 => DamageTakenMultiplier(resistanceType.Resistance.For(Enemy), damageTaken.For(Enemy));
예제 #11
0
 public IDamageTypeBuilder Except(IDamageTypeBuilder type) =>
 (IDamageTypeBuilder)Create(
     Construct, This, (IKeywordBuilder)type,
     (l, r) => $"({l}).Except({r})");
예제 #12
0
 public IDamageTypeBuilder And(IDamageTypeBuilder type) =>
 (IDamageTypeBuilder)Create(
     Construct, This, (IKeywordBuilder)type,
     (l, r) => $"{l}, {r}");
예제 #13
0
 public IFlagStatBuilder BasedOn(IDamageTypeBuilder damageType) =>
 CreateFlagStat(This, (IKeywordBuilder)damageType,
                (o1, o2) => $"{o1} recovers based on {o2} instead");
예제 #14
0
 public IFlagStatBuilder Source(IDamageTypeBuilder type) =>
 CreateFlagStat(This, (IKeywordBuilder)type, (o1, o2) => $"{type} can apply {this}");