50 lines
1.3 KiB
Rust
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);
|
|
}
|