manabrew_engine/replacement/
replace_mill.rs1use crate::card::Card;
6use crate::game::GameState;
7use crate::ids::CardId;
8
9use super::replacement_effect::ReplacementEffect;
10use super::replacement_handler::{execute_replace_with_numeric_update, 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::Mill {
23 return false;
24 }
25 let player = match event {
26 ReplacementEvent::Mill { player, .. } => *player,
27 _ => return false,
28 };
29 if let Some(valid) = effect.ir.valid_player_selector.as_ref() {
30 if !effect.matches_compiled_valid_player(valid, player, source_card) {
31 return false;
32 }
33 }
34 true
35}
36
37pub fn execute(
39 effect: &ReplacementEffect,
40 event: &mut ReplacementEvent,
41 _game: &GameState,
42 _source_card_id: CardId,
43) -> ReplacementResult {
44 match event {
45 ReplacementEvent::Mill { .. } => {}
46 _ => return ReplacementResult::NotReplaced,
47 }
48 if effect.prevents() {
49 if let ReplacementEvent::Mill { count, .. } = event {
50 *count = 0;
51 }
52 return ReplacementResult::Prevented;
53 }
54 if let Some(result) =
55 execute_replace_with_numeric_update(effect, event, _game, _source_card_id, "Number")
56 {
57 return result;
58 }
59 ReplacementResult::Replaced
60}