Skip to main content

manabrew_engine/ability/effects/
choose_card_name_effect.rs

1//! ChooseCardName effect — name a card.
2//!
3//! Ported from Java's `ChooseCardNameEffect.java`.
4//! Choose a card name (e.g. Pithing Needle, Meddling Mage).
5
6use super::EffectContext;
7use crate::parsing::keys;
8
9/// Struct form of this effect so it can participate in the
10/// `SpellAbilityEffect` trait hierarchy — mirrors Java's
11/// `ChooseCardNameEffect` class extending `SpellAbilityEffect`.
12#[manabrew_engine_macros::spell_effect(ChooseCardNameEffect)]
13fn resolve(ctx: &mut EffectContext, sa: &crate::spellability::SpellAbility) {
14    let Some(source_id) = sa.source else { return };
15    let controller = sa.activating_player;
16
17    // Player names a card
18    ctx.agents[controller.index()].snapshot_state(ctx.game, ctx.mana_pools);
19
20    // Use the agent's name_card method if available, otherwise store from param
21    let named = if let Some(defined_name) = sa.ir.defined_name_text.as_deref() {
22        defined_name.to_string()
23    } else {
24        // Agent chooses a card name — default implementation picks from known cards
25        // For parity, the agent returns a name string.
26        "Named Card".to_string()
27    };
28
29    // Store the chosen name on the source card
30    ctx.game.card_mut(source_id).set_s_var("ChosenName", named);
31
32    if sa.param_is_true(keys::REMEMBER_CHOSEN) {
33        // Remember the name for later checks
34    }
35}