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}