boseiju/ability_tree/conditional/
event_occured.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 ConditionEventOccured {
8 pub event: crate::ability_tree::event::Event,
9 pub timeframe: crate::ability_tree::time::BackwardDuration,
10 #[cfg(feature = "spanned_tree")]
11 pub span: crate::ability_tree::span::TreeSpan,
12}
13
14impl crate::ability_tree::AbilityTreeNode for ConditionEventOccured {
15 fn node_id(&self) -> usize {
16 use idris::Idris;
17 crate::ability_tree::NodeKind::ConditionEventOccured.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.event as &dyn AbilityTreeNode);
23 children.push(&self.timeframe 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, "event occured:")?;
30 out.push_inter_branch()?;
31 self.event.display(out)?;
32 out.next_final_branch()?;
33 write!(out, "time frame:")?;
34 out.push_final_branch()?;
35 self.timeframe.display(out)?;
36 out.pop_branch();
37 out.pop_branch();
38 Ok(())
39 }
40
41 fn node_tag(&self) -> &'static str {
42 "condition: event occured"
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 ConditionEventOccured {
53 fn dummy_init() -> Self {
54 Self {
55 event: crate::utils::dummy(),
56 timeframe: crate::utils::dummy(),
57 #[cfg(feature = "spanned_tree")]
58 span: Default::default(),
59 }
60 }
61}