manabrew_engine/replacement/
replace_proliferate.rs1use crate::card::Card;
6use crate::game::GameState;
7use crate::ids::CardId;
8
9use super::replacement_effect::ReplacementEffect;
10use super::replacement_handler::ReplacementEvent;
11use super::replacement_result::ReplacementResult;
12use super::replacement_type::ReplacementType;
13use crate::card_trait_base::CardTrait;
14
15pub fn can_replace(
17 effect: &ReplacementEffect,
18 event: &ReplacementEvent,
19 _game: &GameState,
20 source_card: &Card,
21) -> bool {
22 if effect.event != ReplacementType::Proliferate {
23 return false;
24 }
25 let (player, count) = match event {
26 ReplacementEvent::Proliferate { player, count } => (*player, *count),
27 _ => return false,
28 };
29 if count <= 0 {
30 return false;
31 }
32 if let Some(valid) = effect.ir.valid_player_selector.as_ref() {
33 if !effect.matches_compiled_valid_player(valid, player, source_card) {
34 return false;
35 }
36 }
37 true
38}
39
40pub fn execute(
42 effect: &ReplacementEffect,
43 event: &mut ReplacementEvent,
44 _game: &GameState,
45 _source_card_id: CardId,
46) -> ReplacementResult {
47 let count = match event {
48 ReplacementEvent::Proliferate { count, .. } => count,
49 _ => return ReplacementResult::NotReplaced,
50 };
51 if effect.prevents() {
52 *count = 0;
53 return ReplacementResult::Prevented;
54 }
55 ReplacementResult::Replaced
56}