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