use bevy_camera::NormalizedRenderTarget;
use bevy_ecs::prelude::*;
use crate::{
backend::{ray::RayMap, HitData, PointerHits},
pointer::{Location, PointerLocation, PointerMap},
};
pub fn update_window_hits(
pointer_locations: Query<&PointerLocation>,
mut pointer_hits_writer: MessageWriter<PointerHits>,
ray_map: Res<RayMap>,
pointer_map: Res<PointerMap>,
) {
for (&ray_id, _) in ray_map.iter() {
if let Some((position, window_entity)) =
pointer_map
.get_entity(ray_id.pointer)
.and_then(|pointer_e| {
if let Ok(PointerLocation {
location:
Some(Location {
target: NormalizedRenderTarget::Window(window_ref),
position,
..
}),
}) = pointer_locations.get(pointer_e)
{
return Some((position, window_ref.entity()));
}
None
})
{
let hit_data = HitData::new(ray_id.camera, 0.0, Some(position.extend(0.0)), None);
pointer_hits_writer.write(PointerHits::new(
ray_id.pointer,
vec![(window_entity, hit_data)],
f32::NEG_INFINITY,
));
}
}
}