Skip to main content

steel_registry/
game_events.rs

1use rustc_hash::FxHashMap;
2use steel_utils::Identifier;
3
4#[derive(Debug, Clone)]
5pub struct GameEvent {
6    pub key: Identifier,
7    pub notification_radius: i32,
8}
9
10pub type GameEventRef = &'static GameEvent;
11
12impl PartialEq for GameEventRef {
13    #[expect(clippy::disallowed_methods)] // This IS the PartialEq impl; ptr::eq is correct here
14    fn eq(&self, other: &Self) -> bool {
15        std::ptr::eq(*self, *other)
16    }
17}
18
19pub struct GameEventRegistry {
20    game_events_by_id: Vec<GameEventRef>,
21    game_events_by_key: FxHashMap<Identifier, usize>,
22    allows_registering: bool,
23}
24
25// TODO: GameEventListenerRegistry per Chunk Section
26
27impl GameEventRegistry {
28    pub fn new() -> Self {
29        Self {
30            game_events_by_id: Vec::new(),
31            game_events_by_key: FxHashMap::default(),
32            allows_registering: true,
33        }
34    }
35}
36
37crate::impl_standard_methods!(
38    GameEventRegistry,
39    GameEventRef,
40    game_events_by_id,
41    game_events_by_key,
42    allows_registering
43);
44
45crate::impl_registry!(
46    GameEventRegistry,
47    GameEvent,
48    game_events_by_id,
49    game_events_by_key,
50    game_events
51);