manabrew_engine/ability/effects/
shuffle_effect.rs1use super::{resolve_defined_players, EffectContext};
2use crate::event::RunParams;
3use crate::trigger::TriggerType;
4
5#[manabrew_engine_macros::spell_effect(ShuffleEffect)]
19fn resolve(ctx: &mut EffectContext, sa: &crate::spellability::SpellAbility) {
20 let defined = sa.defined().unwrap_or("You");
21 let players = resolve_defined_players(defined, sa.activating_player, ctx.game);
22 let optional = sa.ir.optional;
23 let source_name = sa.source.map(|cid| ctx.game.card(cid).card_name.clone());
24
25 for pid in players {
26 if optional {
27 let accepted = ctx.agents[sa.activating_player.index()].confirm_action(
28 sa.activating_player,
29 None,
30 &format!("Have player {} shuffle their library?", pid.0),
31 &[],
32 sa.source,
33 Some(crate::ability::api_type::ApiType::Shuffle),
34 );
35 if !accepted {
36 continue;
37 }
38 }
39 ctx.game
40 .shuffle_zone_cards(forge_foundation::ZoneType::Library, pid, ctx.rng);
41 ctx.trigger_handler.run_trigger(
43 TriggerType::Shuffled,
44 RunParams {
45 player: Some(pid),
46 ..Default::default()
47 },
48 false,
49 );
50 }
51}