Skip to main content

bevy_feronia/asset/
plugin.rs

1use crate::asset::backend::systems::{insert_parts, insert_requests};
2use crate::asset::systems::process_requests;
3use crate::prelude::*;
4use bevy_app::{App, Plugin, PostUpdate, Update};
5use bevy_ecs::prelude::*;
6use bevy_pbr::prelude::*;
7use bevy_state::prelude::*;
8use std::marker::PhantomData;
9
10pub struct ScatterAssetRequestPlugin<T = StandardMaterial>
11where
12    T: ScatterMaterial,
13{
14    _marker: PhantomData<T>,
15}
16
17impl<T> ScatterAssetRequestPlugin<T>
18where
19    T: ScatterMaterial,
20{
21    pub fn new() -> Self {
22        Self {
23            _marker: PhantomData,
24        }
25    }
26}
27
28impl<T> Default for ScatterAssetRequestPlugin<T>
29where
30    T: ScatterMaterial,
31{
32    fn default() -> Self {
33        Self::new()
34    }
35}
36
37impl<T> Plugin for ScatterAssetRequestPlugin<T>
38where
39    T: ScatterMaterial,
40{
41    fn build(&self, app: &mut App) {
42        app.add_systems(
43            PostUpdate,
44            (insert_parts::<T>, insert_requests::<T>).run_if(in_state(ScatterState::Collecting)),
45        )
46        .add_systems(
47            Update,
48            process_requests::<T>.run_if(in_state(ScatterState::Collecting)),
49        );
50    }
51}