Skip to main content

manabrew_engine/ability/effects/
claim_the_prize_effect.rs

1//! ClaimThePrize — Unfinity prize mechanic.
2//! Ported from Java's ClaimThePrizeEffect: fires ClaimPrize trigger for
3//! each defined attraction.
4
5use super::EffectContext;
6use crate::ability::ability_ir::DefinedRef;
7use crate::event::RunParams;
8use crate::trigger::TriggerType;
9
10/// Struct form of this effect so it can participate in the
11/// `SpellAbilityEffect` trait hierarchy — mirrors Java's
12/// `ClaimThePrizeEffect` class extending `SpellAbilityEffect`.
13#[manabrew_engine_macros::spell_effect(ClaimThePrizeEffect)]
14fn resolve(ctx: &mut EffectContext, sa: &crate::spellability::SpellAbility) {
15    let source = match sa.source {
16        Some(s) => s,
17        None => return,
18    };
19
20    // Get defined cards (attractions) — defaults to Self
21    let attractions = if let Some(def) = sa.defined_ref() {
22        if matches!(def, DefinedRef::SelfCard) {
23            vec![source]
24        } else {
25            ctx.game.card(source).remembered_cards.clone()
26        }
27    } else {
28        vec![source]
29    };
30
31    for card_id in attractions {
32        ctx.trigger_handler.run_trigger(
33            TriggerType::ClaimPrize,
34            RunParams {
35                card: Some(card_id),
36                player: Some(sa.activating_player),
37                ..Default::default()
38            },
39            false,
40        );
41    }
42}