1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36
use crate::{ component::{CompositeCamera, CompositeTransform}, composite_renderer::CompositeRenderer, resource::CompositeCameraCache, }; use core::ecs::{Comp, Universe, WorldRef}; use std::collections::HashMap; pub type CompositeCameraCacheSystemResources<'a, CR> = ( WorldRef, &'a CR, &'a mut CompositeCameraCache, Comp<&'a CompositeCamera>, Comp<&'a CompositeTransform>, ); pub fn composite_camera_cache_system<CR>(universe: &mut Universe) where CR: CompositeRenderer + 'static, { let (world, renderer, mut cache, ..) = universe.query_resources::<CompositeCameraCacheSystemResources<CR>>(); let view_size = renderer.view_size(); cache.last_view_size = view_size; cache.world_transforms = world .query::<(&CompositeCamera, &CompositeTransform)>() .iter() .map(|(entity, (camera, transform))| (entity, camera.view_matrix(transform, view_size))) .collect::<HashMap<_, _>>(); cache.world_inverse_transforms = cache .world_transforms .iter() .filter_map(|(k, v)| v.inverse().map(|v| (*k, v))) .collect::<HashMap<_, _>>(); }