manabrew_engine/trigger/
trigger_class_level_gained.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 TriggerClassLevelGained {
12 pub valid_card: Option<crate::parsing::CompiledSelector>,
13 pub class_level: Option<i32>,
14}
15
16impl TriggerClassLevelGained {
17 pub fn parse(
18 valid_card: Option<crate::parsing::CompiledSelector>,
19 class_level: Option<i32>,
20 ) -> Box<dyn TriggerBehavior> {
21 Box::new(Self {
22 valid_card,
23 class_level,
24 })
25 }
26}
27
28#[typetag::serde]
29impl TriggerBehavior for TriggerClassLevelGained {
30 fn trigger_type(&self) -> TriggerType {
31 TriggerType::ClassLevelGained
32 }
33
34 fn perform_test(
35 &self,
36 trigger: &super::trigger::Trigger,
37 params: &RunParams,
38 game: &GameState,
39 ) -> bool {
40 let _host_card = trigger.base.card_trait_base.host_card_id();
41 let _host_controller = trigger.base.card_trait_base.host_controller(game);
42 if !trigger.matches_optional_valid_card_filter(&self.valid_card, params.card, game) {
43 return false;
44 }
45 if let Some(expected) = self.class_level {
46 return params.class_level == Some(expected);
47 }
48 true
49 }
50
51 fn set_triggering_objects(
52 &self,
53 _trigger: &super::trigger::Trigger,
54 sa: &mut SpellAbility,
55 params: &RunParams,
56 _game: &GameState,
57 ) {
58 if let Some(level) = params.class_level {
59 sa.set_triggering_object(crate::ability::AbilityKey::ClassLevel, level.to_string());
60 }
61 }
62
63 fn get_important_stack_objects(
64 &self,
65 _trigger: &super::trigger::Trigger,
66 sa: &SpellAbility,
67 ) -> String {
68 format!(
69 "Class Level: {}",
70 sa.trigger_objects
71 .get(&crate::ability::AbilityKey::ClassLevel)
72 .cloned()
73 .unwrap_or_default()
74 )
75 }
76}