Skip to main content

manabrew_engine/ability/effects/
becomes_blocked_effect.rs

1//! BecomesBlocked — mark attacking creatures as blocked.
2//! Ported from Java's BecomesBlockedEffect: marks attacker as blocked in combat
3//! and fires AttackerBlocked triggers.
4
5use forge_foundation::ZoneType;
6
7use super::EffectContext;
8use crate::event::RunParams;
9use crate::ids::CardId;
10use crate::trigger::TriggerType;
11
12/// Struct form of this effect so it can participate in the
13/// `SpellAbilityEffect` trait hierarchy — mirrors Java's
14/// `BecomesBlockedEffect` class extending `SpellAbilityEffect`.
15#[manabrew_engine_macros::spell_effect(BecomesBlockedEffect)]
16fn resolve(ctx: &mut EffectContext, sa: &crate::spellability::SpellAbility) {
17    // Get target cards (attackers to mark as blocked)
18    let targets: Vec<CardId> = if let Some(target) = sa.target_chosen.target_card {
19        vec![target]
20    } else if let Some(source) = sa.source {
21        // Defined cards from source's remembered
22        ctx.game.card(source).remembered_cards.clone()
23    } else {
24        return;
25    };
26
27    for card_id in &targets {
28        if ctx.game.card(*card_id).zone != ZoneType::Battlefield {
29            continue;
30        }
31        // Fire AttackerBlocked trigger for each creature that becomes blocked
32        ctx.trigger_handler.run_trigger(
33            TriggerType::AttackerBlocked,
34            RunParams {
35                card: Some(*card_id),
36                player: Some(sa.activating_player),
37                ..Default::default()
38            },
39            false,
40        );
41    }
42}