use bevy::asset::{load_internal_asset, weak_handle};
use bevy::prelude::*;
use bevy::render::render_resource::{AsBindGroup, ShaderRef};
use bevy::sprite::{AlphaMode2d, Material2d};
use pretty_text::material::PrettyTextMaterialAppExt;
use pretty_text_macros::TextMaterial2d;
const GLITCH_SHADER_HANDLE: Handle<Shader> = weak_handle!("5b5d15ce-feb7-4565-9644-1a0df1c37a40");
pub(super) fn plugin(app: &mut App) {
load_internal_asset!(
app,
GLITCH_SHADER_HANDLE,
"shaders/glitch.wgsl",
Shader::from_wgsl
);
app.register_pretty_material::<Glitch>("glitch")
.register_asset_reflect::<Glitch>()
.register_type::<Glitch>();
}
#[doc = include_str!("../docs/header.txt")]
#[doc = include_str!("../docs/footer.txt")]
#[derive(Debug, Clone, Asset, AsBindGroup, Reflect, TextMaterial2d)]
pub struct Glitch {
#[texture(0)]
#[sampler(1)]
#[pretty_text(atlas)]
pub atlas: Handle<Image>,
#[uniform(2)]
pub intensity: f32,
#[uniform(3)]
pub frequency: f32,
#[uniform(4)]
pub speed: f32,
#[uniform(5)]
pub threshold: f32,
}
impl Default for Glitch {
fn default() -> Self {
Self {
atlas: Default::default(),
intensity: 0.02,
frequency: 150.0,
speed: 8.0,
threshold: 0.85,
}
}
}
impl Material2d for Glitch {
fn vertex_shader() -> ShaderRef {
ShaderRef::Handle(GLITCH_SHADER_HANDLE)
}
fn fragment_shader() -> ShaderRef {
ShaderRef::Handle(GLITCH_SHADER_HANDLE)
}
fn alpha_mode(&self) -> AlphaMode2d {
AlphaMode2d::Blend
}
}