Skip to main content

manabrew_engine/ability/effects/
planeswalk_effect.rs

1//! Planeswalk — move to a new plane (Planechase).
2//! Ported from Java's PlaneswalkEffect: leaves current plane, moves to new one.
3//! Planechase format support — fires trigger for plane change.
4
5use super::EffectContext;
6use crate::event::RunParams;
7use crate::replacement::replacement_handler::{apply_replacements, ReplacementEvent};
8use crate::replacement::ReplacementResult;
9use crate::trigger::TriggerType;
10
11/// Struct form of this effect so it can participate in the
12/// `SpellAbilityEffect` trait hierarchy — mirrors Java's
13/// `PlaneswalkEffect` class extending `SpellAbilityEffect`.
14#[manabrew_engine_macros::spell_effect(PlaneswalkEffect)]
15fn resolve(ctx: &mut EffectContext, sa: &crate::spellability::SpellAbility) {
16    // Run Planeswalk replacement effects before planeswalking.
17    let mut event = ReplacementEvent::Planeswalk {
18        player: sa.activating_player,
19    };
20    let result = apply_replacements(ctx.game, &mut event);
21    if result == ReplacementResult::Skipped || result == ReplacementResult::Replaced {
22        return;
23    }
24
25    // Fire Planeswalk trigger
26    ctx.trigger_handler.run_trigger(
27        TriggerType::Planeswalk,
28        RunParams {
29            player: Some(sa.activating_player),
30            ..Default::default()
31        },
32        false,
33    );
34}