manabrew_engine/ability/effects/
set_in_motion_effect.rs1use forge_foundation::ZoneType;
6
7use super::EffectContext;
8use crate::event::RunParams;
9use crate::replacement::replacement_handler::{apply_replacements, ReplacementEvent};
10use crate::replacement::ReplacementResult;
11use crate::trigger::TriggerType;
12
13#[manabrew_engine_macros::spell_effect(SetInMotionEffect)]
17fn resolve(ctx: &mut EffectContext, sa: &crate::spellability::SpellAbility) {
18 let controller = sa.activating_player;
19
20 let mut event = ReplacementEvent::SetInMotion { player: controller };
22 let result = apply_replacements(ctx.game, &mut event);
23 if result == ReplacementResult::Skipped || result == ReplacementResult::Replaced {
24 return;
25 }
26
27 let repeats = super::resolve_numeric_svar(ctx.game, sa, "RepeatNum", 1).max(1);
28
29 for _ in 0..repeats {
30 let scheme = ctx
32 .game
33 .cards
34 .iter()
35 .find(|c| {
36 c.owner == controller
37 && c.zone == ZoneType::Command
38 && c.type_line
39 .subtypes
40 .iter()
41 .any(|s| s.eq_ignore_ascii_case("Scheme"))
42 })
43 .map(|c| c.id);
44
45 if let Some(scheme_id) = scheme {
46 ctx.trigger_handler.run_trigger(
48 TriggerType::SetInMotion,
49 RunParams {
50 card: Some(scheme_id),
51 player: Some(controller),
52 ..Default::default()
53 },
54 false,
55 );
56 }
57 }
58}