manabrew_engine/trigger/
trigger_becomes_saddled.rs1use serde::{Deserialize, Serialize};
2
3use super::trigger::TriggerBehavior;
4use crate::{
5 event::RunParams, game::GameState, parsing::Params, spellability::SpellAbility,
6 trigger::TriggerType,
7};
8
9#[derive(Debug, Clone, Serialize, Deserialize)]
10pub struct TriggerBecomesSaddled {
11 pub valid_saddled: Option<crate::parsing::CompiledSelector>,
12 pub first_time_saddled: bool,
13}
14
15impl TriggerBecomesSaddled {
16 pub fn parse(params: &Params) -> Box<dyn TriggerBehavior> {
17 Box::new(Self {
18 valid_saddled: params.selector_cloned("ValidSaddled"),
19 first_time_saddled: params.has("FirstTimeSaddled"),
20 })
21 }
22}
23
24#[typetag::serde]
25impl TriggerBehavior for TriggerBecomesSaddled {
26 fn trigger_type(&self) -> TriggerType {
27 TriggerType::BecomesSaddled
28 }
29
30 fn perform_test(
31 &self,
32 trigger: &super::trigger::Trigger,
33 params: &RunParams,
34 game: &GameState,
35 ) -> bool {
36 let _host_card = trigger.base.card_trait_base.host_card_id();
37 let _host_controller = trigger.base.card_trait_base.host_controller(game);
38 if !trigger.matches_optional_valid_card_filter(&self.valid_saddled, params.card, game) {
39 return false;
40 }
41
42 if self.first_time_saddled && params.first_time != Some(true) {
43 return false;
44 }
45
46 true
47 }
48
49 fn set_triggering_objects(
50 &self,
51 _trigger: &super::trigger::Trigger,
52 sa: &mut SpellAbility,
53 params: &RunParams,
54 _game: &GameState,
55 ) {
56 if let Some(card) = params.card {
57 sa.set_triggering_object(crate::ability::AbilityKey::Card, card.0.to_string());
58 }
59 if let Some(crew) = params.crew_cards.as_ref() {
60 let csv = crew
61 .iter()
62 .map(|c| c.0.to_string())
63 .collect::<Vec<_>>()
64 .join(",");
65 sa.set_triggering_object(crate::ability::AbilityKey::Crew, &csv);
66 }
67 }
68
69 fn get_important_stack_objects(
70 &self,
71 _trigger: &super::trigger::Trigger,
72 sa: &SpellAbility,
73 ) -> String {
74 format!(
75 "Saddled: {} SaddledBy: {}",
76 sa.get_triggering_object(crate::ability::AbilityKey::Card)
77 .unwrap_or(""),
78 sa.get_triggering_object(crate::ability::AbilityKey::Crew)
79 .unwrap_or("")
80 )
81 }
82}