use bevy::{
camera::{Camera, Camera2d},
ecs::{
entity::Entity,
query::With,
system::{Local, Query, ResMut},
},
platform::collections::HashSet,
render::{Extract, render_phase::ViewSortedRenderPhases, view::RetainedViewEntity},
};
use crate::sprite_depth::prelude::*;
pub(super) fn extract_sprite_depth_view_entities(
mut sprite_depth_phases: ResMut<ViewSortedRenderPhases<SpriteDepthPhase>>,
cameras: Extract<Query<(Entity, &Camera), With<Camera2d>>>,
mut live_entities: Local<HashSet<RetainedViewEntity>>,
) {
live_entities.clear();
for (main_entity, camera) in &cameras {
if !camera.is_active {
continue;
}
let retained_view_entity = RetainedViewEntity::new(main_entity.into(), None, 0);
sprite_depth_phases.insert_or_clear(retained_view_entity);
live_entities.insert(retained_view_entity);
}
sprite_depth_phases.retain(|camera_entity, _| live_entities.contains(camera_entity));
}