Skip to main content

ursus_core/render/extract/
mod.rs

1mod 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}