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>());
}
}