jonmo/
lib.rs

1#![doc = include_str!("../README.md")]
2//! ## feature flags
3#![cfg_attr(
4    feature = "document-features",
5    doc = document_features::document_features!()
6)]
7#![cfg_attr(not(test), no_std)]
8
9extern crate alloc;
10
11use bevy_app::prelude::*;
12use bevy_ecs::prelude::*;
13
14#[cfg(feature = "builder")]
15pub mod builder;
16pub mod graph;
17pub mod signal;
18pub mod signal_map;
19pub mod signal_vec;
20#[allow(missing_docs)]
21pub mod utils;
22
23/// Includes the systems required for [jonmo](crate) to function.
24#[derive(Default)]
25pub struct JonmoPlugin;
26
27/// [`SystemSet`] that can be used to schedule systems around signal processing.
28#[derive(SystemSet, Debug, Clone, PartialEq, Eq, Hash)]
29pub struct SignalProcessing;
30
31impl Plugin for JonmoPlugin {
32    fn build(&self, app: &mut App) {
33        app.add_systems(
34            Last,
35            (
36                (
37                    signal_vec::trigger_replays::<signal_vec::VecReplayTrigger>,
38                    signal_vec::trigger_replays::<signal_map::MapReplayTrigger>,
39                ),
40                graph::process_signal_graph,
41                (
42                    graph::despawn_stale_signals,
43                    signal_vec::despawn_stale_mutable_vecs,
44                    signal_map::despawn_stale_mutable_btree_maps,
45                ),
46            )
47                .chain()
48                .in_set(SignalProcessing),
49        );
50    }
51}
52
53/// `use jonmo::prelude::*;` imports everything one needs to use start using [jonmo](crate).
54pub mod prelude {
55    #[cfg(feature = "builder")]
56    pub use crate::builder::JonmoBuilder;
57    pub use crate::{
58        JonmoPlugin,
59        graph::SignalHandles,
60        signal::{IntoSignalEither, Signal, SignalBuilder, SignalEither, SignalExt},
61        signal_map::{MutableBTreeMap, MutableBTreeMapBuilder, MutableBTreeMapData, SignalMap, SignalMapExt},
62        signal_vec::{
63            IntoSignalVecEither, MutableVec, MutableVecBuilder, MutableVecData, SignalVec, SignalVecEither,
64            SignalVecExt,
65        },
66        utils::{LazyEntity, clone},
67    };
68    #[doc(no_inline)]
69    pub use apply::{Also, Apply};
70}