euv_engine/particle/
struct.rs1use super::*;
2
3#[derive(Clone, Copy, Data, Debug, New, PartialEq, PartialOrd)]
11pub struct ParticleRng {
12 #[get(pub(crate), type(copy))]
14 #[get_mut(pub(crate))]
15 #[set(pub(crate))]
16 pub(crate) state: u64,
17}
18
19#[derive(Clone, Copy, Data, Debug, New, PartialEq, PartialOrd)]
22pub struct ParticleConfig {
23 #[get(type(copy))]
25 #[set(pub(crate))]
26 pub(crate) emission_rate: f64,
27 #[get(type(copy))]
29 #[set(pub(crate))]
30 pub(crate) max_particles: usize,
31 #[get(type(copy))]
33 #[set(pub(crate))]
34 pub(crate) lifetime_min: f64,
35 #[get(type(copy))]
37 #[set(pub(crate))]
38 pub(crate) lifetime_max: f64,
39 #[get(type(copy))]
41 #[set(pub(crate))]
42 pub(crate) speed_min: f64,
43 #[get(type(copy))]
45 #[set(pub(crate))]
46 pub(crate) speed_max: f64,
47 #[get(type(copy))]
49 #[new(skip)]
50 pub(crate) angle: f64,
51 #[get(type(copy))]
54 #[new(skip)]
55 pub(crate) spread: f64,
56 #[get(type(copy))]
58 #[new(skip)]
59 pub(crate) gravity: Vector2D,
60 #[get(type(copy))]
62 #[new(skip)]
63 pub(crate) color_start: Color,
64 #[get(type(copy))]
66 #[new(skip)]
67 pub(crate) color_end: Color,
68 #[get(type(copy))]
70 #[new(skip)]
71 pub(crate) size_start: f64,
72 #[get(type(copy))]
74 #[new(skip)]
75 pub(crate) size_end: f64,
76}
77
78#[derive(Clone, Copy, Data, Debug, New, PartialEq, PartialOrd)]
80pub struct Particle {
81 #[get(pub(crate), type(copy))]
83 #[get_mut(pub(crate))]
84 #[set(pub(crate))]
85 pub(crate) position: Vector2D,
86 #[get(pub(crate), type(copy))]
88 #[get_mut(pub(crate))]
89 #[set(pub(crate))]
90 pub(crate) velocity: Vector2D,
91 #[get(pub(crate), type(copy))]
93 #[get_mut(pub(crate))]
94 #[set(pub(crate))]
95 pub(crate) age: f64,
96 #[get(pub(crate), type(copy))]
98 #[set(pub(crate))]
99 pub(crate) lifetime: f64,
100}
101
102#[derive(Clone, Data, Debug, New, PartialEq)]
106pub struct ParticleEmitter {
107 #[get(pub(crate), type(copy))]
109 #[get_mut(pub(crate))]
110 #[set(pub(crate))]
111 pub(crate) position: Vector2D,
112 #[get(pub(crate), type(copy))]
114 #[set(pub(crate))]
115 pub(crate) config: ParticleConfig,
116 #[get(pub(crate), type(clone))]
118 #[get_mut(pub(crate))]
119 #[set(pub(crate))]
120 #[new(skip)]
121 pub(crate) particles: Vec<Particle>,
122 #[get(pub(crate), type(copy))]
124 #[get_mut(pub(crate))]
125 #[set(pub(crate))]
126 #[new(skip)]
127 pub(crate) emit_accumulator: f64,
128 #[get(type(copy))]
130 #[set(pub(crate))]
131 #[new(skip)]
132 pub(crate) active: bool,
133 #[get(pub(crate), type(copy))]
135 #[get_mut(pub(crate))]
136 #[set(pub(crate))]
137 #[new(skip)]
138 pub(crate) rng: ParticleRng,
139}