Skip to main content

manabrew_engine/ability/effects/
roll_planar_dice_effect.rs

1//! RollPlanarDice — roll the planar die (Planechase).
2//! Ported from Java's RollPlanarDiceEffect: rolls the planar die which
3//! can result in Planeswalk, Chaos, or blank.
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/// `RollPlanarDiceEffect` class extending `SpellAbilityEffect`.
14#[manabrew_engine_macros::spell_effect(RollPlanarDiceEffect)]
15fn resolve(ctx: &mut EffectContext, sa: &crate::spellability::SpellAbility) {
16    // Run RollPlanarDice replacement effects before rolling.
17    let mut event = ReplacementEvent::RollPlanarDice {
18        player: sa.activating_player,
19    };
20    let repl_result = apply_replacements(ctx.game, &mut event);
21    if repl_result == ReplacementResult::Skipped || repl_result == ReplacementResult::Replaced {
22        return;
23    }
24
25    // Roll 1-6: 1 = Planeswalk, 2 = Chaos, 3-6 = Blank
26    let result = ctx.rng.next_int(6) + 1;
27
28    match result {
29        1 => {
30            // Planeswalk trigger
31            ctx.trigger_handler.run_trigger(
32                TriggerType::Planeswalk,
33                RunParams {
34                    player: Some(sa.activating_player),
35                    ..Default::default()
36                },
37                false,
38            );
39        }
40        2 => {
41            // Chaos trigger
42            ctx.trigger_handler.run_trigger(
43                TriggerType::ChaosEnsues,
44                RunParams {
45                    player: Some(sa.activating_player),
46                    ..Default::default()
47                },
48                false,
49            );
50        }
51        _ => {
52            // Blank — nothing happens
53        }
54    }
55}