motion_content/particles/
events.rs1use super::*;
4
5pub use crate::{Inherit, ParticleEventKind};
6
7#[derive(Clone, Copy, Debug, PartialEq)]
9pub struct ParticleEvent {
10 pub time: Time,
12 pub particle: Particle,
14 pub kind: ParticleEventKind,
16}
17
18#[derive(Clone)]
20pub struct SubEmitter {
21 pub on: ParticleEventKind,
23 pub emitter: Arc<dyn ParticleEmitter>,
25 pub inherit: Inherit,
27 pub probability: f32,
29}
30
31impl SubEmitter {
32 pub(super) fn validate(&self) -> Result<(), ValidationError> {
33 if !self.probability.is_finite() || !(0.0..=1.0).contains(&self.probability) {
34 return Err(invalid(
35 "sub_emitter",
36 "Probability must be finite in 0..=1",
37 ));
38 }
39 if let ParticleEventKind::AgeReached(age) = self.on
40 && (!age.is_finite() || age <= 0.0 || age > 3600.0)
41 {
42 return Err(invalid(
43 "sub_emitter",
44 "Age threshold must be finite in (0,3600]",
45 ));
46 }
47 Ok(())
48 }
49}