bevy_feronia/asset/
plugin.rs1use 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}