euv_engine/particle/
struct.rs1use super::*;
2
3#[derive(Clone, Copy, Data, Debug, New, PartialEq, PartialOrd)]
11pub struct ParticleRng {
12 #[get(type(copy))]
14 #[get_mut(pub(crate))]
15 #[set(pub(crate))]
16 pub state: u64,
17}
18
19#[derive(Clone, Copy, Data, Debug, New, PartialEq, PartialOrd)]
26pub struct ParticleConfig {
27 #[get(pub(crate), type(copy))]
29 #[get_mut(pub(crate))]
30 pub emission_rate: f64,
31 #[get(pub(crate), type(copy))]
33 pub max_particles: usize,
34 #[get(type(copy))]
36 pub lifetime_min: f64,
37 #[get(type(copy))]
39 #[get_mut(pub(crate))]
40 pub lifetime_max: f64,
41 #[get(pub(crate), type(copy))]
43 #[get_mut(pub(crate))]
44 pub speed_min: f64,
45 #[get(pub(crate), type(copy))]
47 #[get_mut(pub(crate))]
48 pub speed_max: f64,
49 #[get(pub(crate), type(copy))]
51 #[new(skip)]
52 #[set(pub(crate))]
53 #[get_mut(pub(crate))]
54 pub(crate) angle: f64,
55 #[get(pub(crate), type(copy))]
58 #[new(skip)]
59 #[set(pub(crate))]
60 #[get_mut(pub(crate))]
61 pub(crate) spread: f64,
62 #[get(pub(crate), type(copy))]
64 #[new(skip)]
65 #[get_mut(pub(crate))]
66 pub gravity: Vector2D,
67 #[get(pub(crate), type(copy))]
69 #[new(skip)]
70 #[set(pub(crate))]
71 #[get_mut(pub(crate))]
72 pub(crate) color_start: Color,
73 #[get(pub(crate), type(copy))]
75 #[new(skip)]
76 #[set(pub(crate))]
77 #[get_mut(pub(crate))]
78 pub(crate) color_end: Color,
79 #[get(pub(crate), type(copy))]
81 #[new(skip)]
82 #[get_mut(pub(crate))]
83 pub size_start: f64,
84 #[get(pub(crate), type(copy))]
86 #[new(skip)]
87 #[get_mut(pub(crate))]
88 pub size_end: f64,
89}
90
91#[derive(Clone, Copy, Data, Debug, New, PartialEq, PartialOrd)]
93pub struct Particle {
94 #[get(type(copy))]
96 #[get_mut(pub(crate))]
97 pub position: Vector2D,
98 #[get(type(clone))]
99 #[get_mut(pub(crate))]
100 pub velocity: Vector2D,
101 #[get(pub(crate), type(copy))]
103 #[get_mut(pub(crate))]
104 #[set(pub(crate))]
105 pub(crate) age: f64,
106 #[get(type(copy))]
108 #[set(pub(crate))]
109 #[get_mut(pub(crate))]
110 pub lifetime: f64,
111}
112
113#[derive(Clone, Data, Debug, New, PartialEq)]
117pub struct ParticleEmitter {
118 #[get(type(copy))]
120 #[get_mut(pub(crate))]
121 pub position: Vector2D,
122 #[get(type(clone))]
124 #[get_mut(pub(crate))]
125 pub config: ParticleConfig,
126 #[get(type(clone))]
128 #[get_mut(pub(crate))]
129 #[set(pub(crate))]
130 #[new(skip)]
131 pub particles: Vec<Particle>,
132 #[get(type(copy))]
134 #[get_mut(pub(crate))]
135 #[set(pub(crate))]
136 #[new(skip)]
137 pub emit_accumulator: f64,
138 #[get(pub(crate), type(copy))]
140 #[new(skip)]
141 #[get_mut(pub(crate))]
142 pub active: bool,
143 #[get(type(copy), pub(crate))]
145 #[get_mut(pub(crate))]
146 #[set(pub(crate))]
147 #[new(skip)]
148 pub(crate) rng: ParticleRng,
149}