manabrew_engine/ability/effects/
choose_player_effect.rs1use super::{resolve_defined_players, EffectContext};
2
3#[manabrew_engine_macros::spell_effect(ChoosePlayerEffect)]
16fn resolve(ctx: &mut EffectContext, sa: &crate::spellability::SpellAbility) {
17 let controller = sa.activating_player;
18 let defined = sa.defined().unwrap_or("You");
19 let choosers = resolve_defined_players(defined, controller, ctx.game);
20
21 let valid_players: Vec<_> = if let Some(choices) = sa.ir.choices.as_deref() {
22 resolve_defined_players(choices, controller, ctx.game)
23 .into_iter()
24 .filter(|&pid| ctx.game.player(pid).is_alive())
25 .collect()
26 } else {
27 ctx.game
30 .player_order
31 .iter()
32 .copied()
33 .filter(|&pid| ctx.game.player(pid).is_alive())
34 .collect()
35 };
36
37 for chooser in choosers {
38 if !ctx.game.player(chooser).is_alive() {
39 continue;
40 }
41 let chosen =
42 ctx.agents[chooser.index()].choose_target_player(chooser, &valid_players, None);
43
44 if let Some(chosen_pid) = chosen {
45 if let Some(source_id) = sa.source {
46 ctx.game.card_mut(source_id).set_chosen_player(
47 Some(chosen_pid),
48 Some(chooser),
49 !sa.ir.secretly,
50 );
51 }
52 }
53 }
54}