bevy_mistUI 0.1.3

Procedural mist and smoke-ring borders for Bevy UI.
use crate::{particles::SmokeParticlesPlugin, plugin::MistSmokeBackend, SmokeRingPlugin};
use bevy::{app::PluginGroupBuilder, prelude::*};

pub struct MistSmokePlugin;

impl Plugin for MistSmokePlugin {
    fn build(&self, app: &mut App) {
        app.init_resource::<MistSmokeBackend>();

        if !app.is_plugin_added::<SmokeRingPlugin>() {
            app.add_plugins(SmokeRingPlugin);
        }
        if !app.is_plugin_added::<SmokeParticlesPlugin>() {
            app.add_plugins(SmokeParticlesPlugin);
        }
    }
}

pub struct MistUiPlugins;

impl PluginGroup for MistUiPlugins {
    fn build(self) -> PluginGroupBuilder {
        PluginGroupBuilder::start::<Self>()
            .add(MistSmokePlugin)
            .add(crate::widgets::MistUiPlugin)
    }
}

#[cfg(test)]
mod tests {
    use super::*;
    use crate::{MistSmokeBackend, MistSmokeBudget};
    use bevy::asset::AssetPlugin;

    #[test]
    fn plugin_group_registers_smoke_backend_and_budget() {
        let mut app = App::new();
        app.add_plugins((MinimalPlugins, AssetPlugin::default()));
        app.add_plugins(MistUiPlugins);

        assert_eq!(
            *app.world().resource::<MistSmokeBackend>(),
            MistSmokeBackend::Particles
        );
        assert!(app.world().contains_resource::<MistSmokeBudget>());
    }
}