use bevy_app::{App, Plugin, Update};
use bevy_ecs::schedule::{IntoScheduleConfigs, SystemSet};
use bevy_sprite_render::Material2dPlugin;
pub mod components;
pub mod config;
pub mod events;
mod flicker;
mod systems;
use config::FlickerPluginConfig;
use events::FlickerStartEvent;
use flicker::FlickerMaterial;
use systems::{flicker_start, flicker_tick, repeating_flicker_tick};
use std::path::{Path, PathBuf};
#[derive(Default)]
pub struct FlickerPlugin;
#[derive(SystemSet, Debug, Hash, PartialEq, Eq, Clone, Copy)]
pub struct FlickerSet;
impl Plugin for FlickerPlugin {
fn build(&self, app: &mut App) {
let embedded = app
.world_mut()
.resource_mut::<::bevy_asset::io::embedded::EmbeddedAssetRegistry>();
let path = Path::new("flicker_material.wgsl");
embedded.insert_asset(
PathBuf::new(),
&path,
include_bytes!("flicker_material.wgsl"),
);
app.add_plugins(Material2dPlugin::<FlickerMaterial>::default())
.register_type::<FlickerMaterial>();
app.add_message::<FlickerStartEvent>();
app.add_systems(Update, flicker_start.in_set(FlickerSet));
app.add_systems(Update, flicker_tick.in_set(FlickerSet));
app.add_systems(Update, repeating_flicker_tick.in_set(FlickerSet));
app.init_resource::<FlickerPluginConfig>();
}
}
pub mod prelude {
pub use super::{
components::RepeatingFlicker,
config::{FlickerOverlapAction, FlickerPluginConfig},
events::*,
FlickerPlugin, FlickerSet,
};
}