boseiju/ability_tree/event/replacement/
token_creation.rs1use crate::ability_tree::AbilityTreeNode;
2use crate::ability_tree::MAX_CHILDREN_PER_NODE;
3
4#[derive(serde::Serialize, serde::Deserialize)]
6#[derive(Debug, Clone, PartialEq, Eq)]
7pub struct TokenCreationReplacement {
8 pub source_ref: super::source_ref::EventSourceReference,
9 pub create_tokens: crate::ability_tree::imperative::CreateTokenImperative,
10 #[cfg(feature = "spanned_tree")]
11 pub span: crate::ability_tree::span::TreeSpan,
12}
13
14impl AbilityTreeNode for TokenCreationReplacement {
15 fn node_id(&self) -> usize {
16 use idris::Idris;
17 crate::ability_tree::NodeKind::TokenCreationReplacement.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.source_ref as &dyn AbilityTreeNode);
23 children.push(&self.create_tokens 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, "token creation replacement:")?;
30 out.push_inter_branch()?;
31 write!(out, "effect source:")?;
32 out.push_final_branch()?;
33 self.source_ref.display(out)?;
34 out.pop_branch();
35 out.next_final_branch()?;
36 write!(out, "token creation:")?;
37 out.next_final_branch()?;
38 self.create_tokens.display(out)?;
39 out.pop_branch();
40 out.pop_branch();
41 Ok(())
42 }
43
44 fn node_tag(&self) -> &'static str {
45 "token creation replacement"
46 }
47
48 #[cfg(feature = "spanned_tree")]
49 fn node_span(&self) -> crate::ability_tree::span::TreeSpan {
50 self.span
51 }
52}
53
54#[cfg(feature = "parser")]
55impl crate::utils::DummyInit for TokenCreationReplacement {
56 fn dummy_init() -> Self {
57 Self {
58 source_ref: crate::utils::dummy(),
59 create_tokens: crate::utils::dummy(),
60 #[cfg(feature = "spanned_tree")]
61 span: Default::default(),
62 }
63 }
64}