boseiju/ability_tree/imperative/
generate_continuous_effect_imperative.rs

1use crate::ability_tree::AbilityTreeNode;
2use crate::ability_tree::MAX_CHILDREN_PER_NODE;
3
4/// Imperative to draw cards or make a player draw cards.
5#[derive(serde::Serialize, serde::Deserialize)]
6#[derive(Debug, Clone, PartialEq, Eq)]
7pub struct GenerateContinuousEffectImperative {
8    pub effect: crate::ability_tree::ability::statik::continuous_effect::ContinuousEffect,
9    pub duration: crate::ability_tree::time::ForwardDuration,
10    #[cfg(feature = "spanned_tree")]
11    pub span: crate::ability_tree::span::TreeSpan,
12}
13
14impl crate::ability_tree::AbilityTreeNode for GenerateContinuousEffectImperative {
15    fn node_id(&self) -> usize {
16        use idris::Idris;
17        crate::ability_tree::NodeKind::GenerateContinuousEffectImperative.id()
18    }
19
20    fn children(&self) -> arrayvec::ArrayVec<&dyn AbilityTreeNode, MAX_CHILDREN_PER_NODE> {
21        let mut children = arrayvec::ArrayVec::new_const();
22        children.push(&self.effect as &dyn AbilityTreeNode);
23        children.push(&self.duration as &dyn AbilityTreeNode);
24        children
25    }
26
27    fn display(&self, out: &mut crate::utils::TreeFormatter<'_>) -> std::io::Result<()> {
28        use std::io::Write;
29        write!(out, "generate continuous effect:")?;
30        out.push_inter_branch()?;
31        self.effect.display(out)?;
32        out.next_final_branch()?;
33        write!(out, "for duration:")?;
34        out.push_final_branch()?;
35        self.duration.display(out)?;
36        out.pop_branch();
37        out.pop_branch();
38        Ok(())
39    }
40
41    fn node_tag(&self) -> &'static str {
42        "generate continuous effect"
43    }
44
45    #[cfg(feature = "spanned_tree")]
46    fn node_span(&self) -> crate::ability_tree::span::TreeSpan {
47        self.span
48    }
49}
50
51#[cfg(feature = "parser")]
52impl crate::utils::DummyInit for GenerateContinuousEffectImperative {
53    fn dummy_init() -> Self {
54        Self {
55            effect: crate::utils::dummy(),
56            duration: crate::utils::dummy(),
57            #[cfg(feature = "spanned_tree")]
58            span: Default::default(),
59        }
60    }
61}