示例#1
0
    public Maybe <ProposedReaction> OnEffectResolved(EffectResolved e)
    {
        var maybeEffect = _createMaybeEffect(e);

        if (maybeEffect.IsPresent)
        {
            _remainingUses--;
        }
        return(maybeEffect);
    }
    protected override void Execute(ApplyBattleEffect msg)
    {
        var battleSnapshotBefore = state.GetSnapshot();

        AllEffects.Apply(msg.Effect, new EffectContext(msg.Source, msg.Target, state.PlayerState, state.Members));
        var battleSnapshotAfter = state.GetSnapshot();
        var effectResolved      = new EffectResolved(msg.Effect, msg.Source, msg.Target, battleSnapshotBefore, battleSnapshotAfter);

        var reactions = state.Members.Values.SelectMany(v => v.State.GetReactions(effectResolved));

        reactions.ForEach(r => _reactions.Enqueue(r));
        Message.Publish(new Finished <ApplyBattleEffect>());
    }
示例#3
0
    public static void ApplyEffectAndReactions(EffectData e, Member source, Member target)
    {
        var battleSnapshotBefore = new BattleStateSnapshot(target.GetSnapshot());

        AllEffects.Apply(e, source, target);
        var battleSnapshotAfter = new BattleStateSnapshot(target.GetSnapshot());

        var effectResolved = new EffectResolved(e, source, new Single(target), battleSnapshotBefore, battleSnapshotAfter);

        var reactions = target.State.GetReactions(effectResolved);

        reactions.ForEach(r => r.Reaction.ActionSequence.CardActions.Actions.Where(a => a.Type == CardBattleActionType.Battle)
                          .ForEach(be => AllEffects.Apply(be.BattleEffect, r.Source, r.Target)));
    }
示例#4
0
 // Reaction Commands
 public ProposedReaction[] GetReactions(EffectResolved e) =>
 _reactiveStates
 .Select(x => x.OnEffectResolved(e))
 .Where(x => x.IsPresent)
 .Select(x => x.Value)
 .ToArray();