diff --git a/src/main.rs b/src/main.rs index 02c2c62..f364c7b 100644 --- a/src/main.rs +++ b/src/main.rs @@ -1,6 +1,7 @@ mod game; mod levels; mod menu; +mod particle_effect; use bevy::{ core_pipeline::clear_color::ClearColorConfig, diff --git a/src/particle_effect.rs b/src/particle_effect.rs new file mode 100644 index 0000000..fe922d0 --- /dev/null +++ b/src/particle_effect.rs @@ -0,0 +1,57 @@ +use bevy::{prelude::*, sprite::Mesh2dHandle}; + +pub struct ParticleEffectPlugin; + +impl Plugin for ParticleEffectPlugin { + fn build(&self, app: &mut App) { + app + .init_resource::() + .insert_resource(PoolCount(1000)) + .add_startup_system(particle_effect_startup); + } +} + +pub struct ParticleMesh { + square: Mesh2dHandle, +} + +impl FromWorld for ParticleMesh { + fn from_world(world: &mut World) -> Self { + let mut meshes = world.get_resource_mut::>().unwrap(); + Self { + square: meshes + .add(Mesh::from(shape::Quad { + size: Vec2 { x: 4.0, y: 4.0 }, + flip: false, + })) + .into(), + } + } +} + +pub struct PoolCount(usize); + +#[derive(Component)] +pub struct ParticleComponent; + +fn particle_effect_startup( + mut commands: Commands, + + particle_mesh: Res, + pool_count: ResMut, + mut materials: ResMut>, +) { + for _p in 0 .. pool_count.0 { + let color_mesh = ColorMesh2dBundle { + mesh: particle_mesh.square.clone(), + material: materials.add(ColorMaterial::from(Color::WHITE)), + // default to invisible + visibility: Visibility {is_visible: false}, + ..default() + }; + + commands + .spawn_bundle(color_mesh) + .insert(ParticleComponent); + } +} \ No newline at end of file