manabrew_engine/trigger/
trigger_changes_controller.rs1use serde::{Deserialize, Serialize};
2
3use crate::event::RunParams;
4use crate::game::GameState;
5use crate::spellability::SpellAbility;
6use crate::trigger::TriggerType;
7
8use super::trigger::TriggerBehavior;
9
10#[derive(Debug, Clone, Serialize, Deserialize)]
11pub struct TriggerChangesController {
12 pub valid_card: Option<crate::parsing::CompiledSelector>,
13}
14
15impl TriggerChangesController {
16 pub fn parse(valid_card: Option<crate::parsing::CompiledSelector>) -> Box<dyn TriggerBehavior> {
17 Box::new(Self { valid_card })
18 }
19}
20
21#[typetag::serde]
22impl TriggerBehavior for TriggerChangesController {
23 fn trigger_type(&self) -> TriggerType {
24 TriggerType::ChangesController
25 }
26
27 fn perform_test(
28 &self,
29 trigger: &super::trigger::Trigger,
30 params: &RunParams,
31 game: &GameState,
32 ) -> bool {
33 let _host_card = trigger.base.card_trait_base.host_card_id();
34 let _host_controller = trigger.base.card_trait_base.host_controller(game);
35 trigger.matches_optional_valid_card_filter(&self.valid_card, params.card, game)
36 }
37
38 fn set_triggering_objects(
39 &self,
40 _trigger: &super::trigger::Trigger,
41 sa: &mut SpellAbility,
42 params: &RunParams,
43 _game: &GameState,
44 ) {
45 if let Some(card) = params.card {
46 sa.set_triggering_object(crate::ability::AbilityKey::Card, card.0.to_string());
47 }
48 if let Some(p) = params.original_controller {
49 sa.set_triggering_object(
50 crate::ability::AbilityKey::OriginalController,
51 p.0.to_string(),
52 );
53 }
54 }
55
56 fn get_important_stack_objects(
57 &self,
58 _trigger: &super::trigger::Trigger,
59 sa: &SpellAbility,
60 ) -> String {
61 format!(
62 "ChangedController: {}",
63 sa.get_triggering_object(crate::ability::AbilityKey::Card)
64 .unwrap_or_default()
65 )
66 }
67}