proxisim/src/entity_registry.rs

50 lines
1.3 KiB
Rust

use std::collections::HashMap;
use bevy_ecs::prelude::*;
use proxisim_models::{
bundle::{
Id, Name,
player::{Attacker, Player},
weapon::Weapon,
},
dto::metrics::EntityInfo,
};
use crate::Stages;
#[derive(Resource, Default)]
pub struct EntityRegistry(pub HashMap<Entity, EntityInfo>);
fn read_entities(
player_q: Query<(Entity, &Name, &Id, Has<Attacker>), With<Player>>,
weapon_q: Query<(Entity, &ChildOf, &Name, &Id), With<Weapon>>,
mut registry: ResMut<EntityRegistry>,
) {
for (player, name, id, is_attacker) in player_q.iter() {
registry.0.insert(
player,
EntityInfo::Player {
name: name.0.clone(),
id: id.0,
is_attacker,
},
);
}
for (weapon, player, name, id) in weapon_q.iter() {
let (_, _, player_id, _) = player_q.get(player.parent()).unwrap();
registry.0.insert(
weapon,
EntityInfo::Weapon {
name: name.0.clone(),
owner: player_id.0,
id: id.0,
},
);
}
}
pub(crate) fn configure(stages: &mut Stages) {
stages.world.init_resource::<EntityRegistry>();
stages.snapshot.add_systems(read_entities);
}