1use bevy::prelude::*;
2use wde_renderer::prelude::*;
3
4mod extract;
5mod material;
6mod selection_area;
7mod stencil_write;
8mod transparent_outline;
9
10use extract::{ExtractedOutlineInstances, extract_outline_instances};
11use selection_area::extract::{ExtractedSelectionAreaInstances, extract_selection_area_instances};
12
13pub use material::OutlineMaterial;
14pub use selection_area::SelectionAreaMaterial;
15
16use crate::{
17 selection_area::DrawSelectionAreaPlugin, stencil_write::StencilWritePlugin,
18 transparent_outline::DrawOutlinePlugin
19};
20
21pub mod prelude {
22 pub use crate::OutlineMaterial;
23 pub use crate::SelectionAreaMaterial;
24}
25
26pub struct PbrOutlinePlugin;
27impl Plugin for PbrOutlinePlugin {
28 fn build(&self, app: &mut App) {
29 app.add_plugins((
30 DrawOutlinePlugin,
31 DrawSelectionAreaPlugin,
32 StencilWritePlugin,
33 RenderBindingRegisterPlugin::<OutlineMaterial>::default(),
34 RenderBindingRegisterPlugin::<SelectionAreaMaterial>::default()
35 ));
36
37 app.get_sub_app_mut(RenderApp)
38 .unwrap()
39 .init_resource::<ExtractedOutlineInstances>()
40 .init_resource::<ExtractedSelectionAreaInstances>()
41 .add_systems(
42 Extract,
43 (extract_outline_instances, extract_selection_area_instances)
44 );
45 }
46}