manabrew_engine/ability/effects/
encode_effect.rs1use forge_foundation::ZoneType;
2
3use super::EffectContext;
4
5#[manabrew_engine_macros::spell_effect(EncodeEffect)]
24fn resolve(ctx: &mut EffectContext, sa: &crate::spellability::SpellAbility) {
25 let controller = sa.activating_player;
26
27 let spell_card = match sa.source {
28 Some(id) => id,
29 None => return,
30 };
31
32 let target = sa.target_chosen.target_card.or_else(|| {
34 let bf = ctx
35 .game
36 .cards_in_zone(ZoneType::Battlefield, controller)
37 .to_vec();
38 let creatures: Vec<_> = bf
39 .into_iter()
40 .filter(|&cid| {
41 let c = ctx.game.card(cid);
42 c.is_creature() && c.controller == controller
43 })
44 .collect();
45
46 if creatures.is_empty() {
47 return None;
48 }
49
50 let chosen =
51 ctx.agents[controller.index()].choose_cards_for_effect(controller, &creatures, 1, 1);
52 chosen.into_iter().next()
53 });
54
55 let creature_id = match target {
56 Some(id)
57 if ctx.game.card(id).zone == ZoneType::Battlefield
58 && ctx.game.card(id).is_creature() =>
59 {
60 id
61 }
62 _ => return,
63 };
64
65 let owner = ctx.game.card(spell_card).owner;
67 if ctx.game.card(spell_card).zone != ZoneType::Exile {
68 ctx.move_card(spell_card, ZoneType::Exile, owner);
69 }
70
71 ctx.game
73 .card_mut(creature_id)
74 .encoded_cards
75 .push(spell_card);
76}