pub struct ParticleConfig {
pub init_pos: Vec2,
pub init_vel: Vec2,
pub trail_length: usize,
pub life_time: Duration,
pub color: (u8, u8, u8),
}
Expand description
Struct that defines the configuration of Particle
Fields§
§init_pos: Vec2
§init_vel: Vec2
§trail_length: usize
§life_time: Duration
Duration
from Particle
’s initialization to its Dead
color: (u8, u8, u8)
Color in RGB (from 0 to 255)
Implementations§
Source§impl ParticleConfig
impl ParticleConfig
Sourcepub fn new(
init_pos: Vec2,
init_vel: Vec2,
trail_length: usize,
life_time: Duration,
color: (u8, u8, u8),
) -> Self
pub fn new( init_pos: Vec2, init_vel: Vec2, trail_length: usize, life_time: Duration, color: (u8, u8, u8), ) -> Self
Create a new ParticleConfig
Examples found in repository?
examples/fountain.rs (lines 85-91)
74fn gen_fountain_firework(center: Vec2) -> Firework {
75 let colors = vec![(226, 196, 136), (255, 245, 253), (208, 58, 99)];
76 let mut particles = Vec::new();
77 for v in gen_points_fan(
78 300.,
79 45,
80 5 as f32 / 12 as f32 * PI,
81 7 as f32 / 12 as f32 * PI,
82 )
83 .iter()
84 {
85 particles.push(ParticleConfig::new(
86 center,
87 *v,
88 thread_rng().gen_range(28..38),
89 Duration::from_secs_f32(thread_rng().gen_range(2.5..3.8)),
90 *colors.iter().choose(&mut thread_rng()).unwrap(),
91 ));
92 }
93 let mut config = FireworkConfig::default()
94 .with_ar_scale(0.15)
95 .with_gravity_scale(0.5)
96 .with_gradient_scale(gradient);
97 config.set_enable_gradient(true);
98 Firework {
99 init_time: SystemTime::now(),
100 spawn_after: Duration::ZERO,
101 center,
102 particles,
103 config,
104 form: ExplosionForm::Sustained {
105 lasts: Duration::from_secs(5),
106 time_interval: Duration::from_secs_f32(0.08),
107 timer: Duration::ZERO,
108 },
109 ..Default::default()
110 }
111}
More examples
examples/vortex.rs (lines 83-89)
73fn gen_vortex_firework(center: Vec2) -> Firework {
74 let colors = vec![
75 (6, 55, 63),
76 (24, 90, 96),
77 (47, 123, 119),
78 (92, 174, 166),
79 (200, 255, 255),
80 ];
81 let mut particles = Vec::new();
82 for p in gen_points_circle(30, 45).iter() {
83 particles.push(ParticleConfig::new(
84 center + *p,
85 Vec2::new((*p).y, -(*p).x).normalize() * 15.,
86 thread_rng().gen_range(28..40),
87 Duration::from_secs_f32(thread_rng().gen_range(4.5..7.0)),
88 *colors.iter().choose(&mut thread_rng()).unwrap(),
89 ));
90 }
91 let mut config = FireworkConfig::default()
92 .with_ar_scale(0.05)
93 .with_gravity_scale(0.)
94 .with_gradient_scale(gradient)
95 .with_additional_force(move |particle| {
96 (center - particle.pos).normalize() * (1. / center.distance(particle.pos)) * 150.
97 });
98 config.set_enable_gradient(true);
99 Firework {
100 init_time: SystemTime::now(),
101 spawn_after: Duration::ZERO,
102 center,
103 particles,
104 config,
105 form: ExplosionForm::Sustained {
106 lasts: Duration::from_secs(10),
107 time_interval: Duration::from_secs_f32(0.01),
108 timer: Duration::ZERO,
109 },
110 ..Default::default()
111 }
112}
examples/heart.rs (lines 86-92)
74fn gen_heart_firework(center: Vec2) -> Firework {
75 let colors = vec![
76 (233, 232, 237),
77 (254, 142, 130),
78 (200, 27, 72),
79 (86, 18, 31),
80 ];
81 let mut particles = Vec::new();
82 let trail_length = thread_rng().gen_range(100..105);
83 let life_time = Duration::from_secs_f32(thread_rng().gen_range(3.0..3.2));
84 let init_pos = center - Vec2::NEG_Y * 15.;
85 for v in gen_points_fan(300., 45, 0.2 * PI, 0.3 * PI).iter() {
86 particles.push(ParticleConfig::new(
87 init_pos,
88 *v,
89 trail_length,
90 life_time,
91 *colors.iter().choose(&mut thread_rng()).unwrap(),
92 ));
93 }
94 for v in gen_points_fan(300., 45, 0.7 * PI, 0.8 * PI).iter() {
95 particles.push(ParticleConfig::new(
96 init_pos,
97 *v,
98 trail_length,
99 life_time,
100 *colors.iter().choose(&mut thread_rng()).unwrap(),
101 ));
102 }
103 let mut config = FireworkConfig::default()
104 .with_ar_scale(0.1)
105 .with_gravity_scale(0.1)
106 .with_gradient_scale(gradient)
107 .with_additional_force(move |particle| (center - particle.pos) * 2.);
108 config.set_enable_gradient(true);
109 Firework {
110 init_time: SystemTime::now(),
111 spawn_after: Duration::ZERO,
112 center,
113 particles,
114 config,
115 form: ExplosionForm::Instant { used: false },
116 ..Default::default()
117 }
118}
Trait Implementations§
Source§impl Clone for ParticleConfig
impl Clone for ParticleConfig
Source§fn clone(&self) -> ParticleConfig
fn clone(&self) -> ParticleConfig
Returns a copy of the value. Read more
1.0.0 · Source§fn clone_from(&mut self, source: &Self)
fn clone_from(&mut self, source: &Self)
Performs copy-assignment from
source
. Read moreSource§impl Debug for ParticleConfig
impl Debug for ParticleConfig
Source§impl Default for ParticleConfig
impl Default for ParticleConfig
Source§impl PartialEq for ParticleConfig
impl PartialEq for ParticleConfig
impl Copy for ParticleConfig
impl StructuralPartialEq for ParticleConfig
Auto Trait Implementations§
impl Freeze for ParticleConfig
impl RefUnwindSafe for ParticleConfig
impl Send for ParticleConfig
impl Sync for ParticleConfig
impl Unpin for ParticleConfig
impl UnwindSafe for ParticleConfig
Blanket Implementations§
Source§impl<T> BorrowMut<T> for Twhere
T: ?Sized,
impl<T> BorrowMut<T> for Twhere
T: ?Sized,
Source§fn borrow_mut(&mut self) -> &mut T
fn borrow_mut(&mut self) -> &mut T
Mutably borrows from an owned value. Read more