Skip to main content

steel_registry/
particle_type.rs

1use rustc_hash::FxHashMap;
2use steel_utils::Identifier;
3
4/// Built-in particle type registry entry used by vanilla particle option codecs.
5#[derive(Debug)]
6pub struct ParticleType {
7    pub key: Identifier,
8    pub override_limiter: bool,
9}
10
11pub type ParticleTypeRef = &'static ParticleType;
12
13pub struct ParticleTypeRegistry {
14    particle_types_by_id: Vec<ParticleTypeRef>,
15    particle_types_by_key: FxHashMap<Identifier, usize>,
16    allows_registering: bool,
17}
18
19impl ParticleTypeRegistry {
20    #[must_use]
21    pub fn new() -> Self {
22        Self {
23            particle_types_by_id: Vec::new(),
24            particle_types_by_key: FxHashMap::default(),
25            allows_registering: true,
26        }
27    }
28}
29
30crate::impl_standard_methods!(
31    ParticleTypeRegistry,
32    ParticleTypeRef,
33    particle_types_by_id,
34    particle_types_by_key,
35    allows_registering
36);
37
38crate::impl_registry!(
39    ParticleTypeRegistry,
40    ParticleType,
41    particle_types_by_id,
42    particle_types_by_key,
43    particle_types
44);