From 4a0c2704fb72972639d89b08e0f7470dc9808ec6 Mon Sep 17 00:00:00 2001 From: Nixon Date: Tue, 23 Aug 2022 23:14:32 +0800 Subject: [PATCH] initialize particle effect pooling --- src/main.rs | 1 + src/particle_effect.rs | 57 ++++++++++++++++++++++++++++++++++++++++++ 2 files changed, 58 insertions(+) create mode 100644 src/particle_effect.rs 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