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>()); }
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))); }
// Reaction Commands public ProposedReaction[] GetReactions(EffectResolved e) => _reactiveStates .Select(x => x.OnEffectResolved(e)) .Where(x => x.IsPresent) .Select(x => x.Value) .ToArray();