manabrew_engine/ability/effects/
choose_even_odd_effect.rs1use super::{resolve_defined_players, EffectContext};
2use crate::agent::BinaryChoiceKind;
3use crate::ids::PlayerId;
4
5#[manabrew_engine_macros::spell_effect(ChooseEvenOddEffect)]
12fn resolve(ctx: &mut EffectContext, sa: &crate::spellability::SpellAbility) {
13 let Some(source_id) = sa.source else { return };
14 let source_name = ctx.game.card(source_id).card_name.clone();
15
16 let players: Vec<PlayerId> = if let Some(pid) = sa.target_chosen.target_player {
17 vec![pid]
18 } else if let Some(defined) = sa.defined() {
19 resolve_defined_players(defined, sa.activating_player, ctx.game)
20 } else {
21 vec![sa.activating_player]
22 };
23
24 for pid in players {
25 if !ctx.game.player(pid).is_alive() {
26 continue;
27 }
28 let odd = ctx.agents[pid.index()].choose_binary(
29 pid,
30 "Odd or even?",
31 BinaryChoiceKind::OddsOrEvens,
32 None,
33 Some(source_id),
34 sa.api,
35 );
36 ctx.game
37 .card_mut(source_id)
38 .set_s_var("ChosenEvenOdd", if odd { "Odd" } else { "Even" });
39 }
40}