ursus_core/render/extract/
mod.rs1mod camera;
2pub mod meshes;
3
4use crate::render::extract::camera::CameraExtract;
5use crate::render::extract::meshes::MeshExtract;
6use crate::render::world::RWorld;
7use ursus_ecs::World;
8
9pub trait ExtractSystem: Send + Sync {
10 fn extract(&self, world: &World, r_world: &mut RWorld);
11 fn name(&self) -> &'static str;
12}
13
14pub struct ExtractSchedule {
15 systems: Vec<Box<dyn ExtractSystem>>,
16}
17
18impl ExtractSchedule {
19 pub fn add(&mut self, system: impl ExtractSystem + 'static) {
20 self.systems.push(Box::new(system));
21 }
22
23 pub fn run(&self, world: &World, r_world: &mut RWorld) {
24 for system in &self.systems {
25 puffin::profile_scope!("extract_system", system.name());
26 system.extract(world, r_world);
27 }
28 }
29}
30
31impl Default for ExtractSchedule {
32 fn default() -> Self {
33 let mut schedule = ExtractSchedule { systems: Vec::new() };
34 schedule.add(CameraExtract);
35 schedule.add(MeshExtract);
36 schedule
37 }
38}