maplibre/tcs/system/
stage.rs

1use crate::{
2    context::MapContext,
3    schedule::{Stage, StageResult},
4    tcs::system::{IntoSystemContainer, SystemContainer},
5};
6
7#[derive(Default)]
8pub struct SystemStage {
9    systems: Vec<SystemContainer>,
10}
11
12impl SystemStage {
13    #[must_use]
14    pub fn with_system(mut self, system: impl IntoSystemContainer) -> Self {
15        self.add_system(system);
16        self
17    }
18
19    pub fn add_system(&mut self, system: impl IntoSystemContainer) -> &mut Self {
20        self.systems.push(system.into_container());
21        self
22    }
23}
24
25impl Stage for SystemStage {
26    fn run(&mut self, context: &mut MapContext) -> StageResult {
27        for container in &mut self.systems {
28            #[cfg(feature = "trace")]
29            let _span =
30                tracing::info_span!("system", name = container.system.name().as_ref()).entered();
31            container.system.run(context)?
32        }
33        Ok(())
34    }
35}