#![allow(clippy::type_complexity)]
use bevy::prelude::*;
pub mod shapes;
use shapes::*;
pub mod render;
use render::{ShapeRenderPlugin, ShapeType3dPlugin, ShapeTypePlugin};
pub mod painter;
use painter::*;
pub mod prelude {
pub use crate::painter::{
BuildShapeChildren, Canvas, CanvasCommands, CanvasConfig, CanvasMode, ShapeChildBuilder,
ShapeCommands, ShapeConfig, ShapeEntityCommands, ShapePainter, ShapeSpawner,
};
pub use crate::{shapes::*, BaseShapeConfig, Shape2dPlugin, ShapePlugin};
}
#[derive(Resource, Clone)]
pub struct BaseShapeConfig(pub ShapeConfig);
pub struct Shape2dPlugin {
pub base_config: ShapeConfig,
}
impl Default for Shape2dPlugin {
fn default() -> Self {
Self {
base_config: ShapeConfig::default_2d(),
}
}
}
impl Shape2dPlugin {
pub fn new(base_config: ShapeConfig) -> Self {
Self { base_config }
}
}
impl Plugin for Shape2dPlugin {
fn build(&self, app: &mut App) {
app.insert_resource(BaseShapeConfig(self.base_config.clone()))
.add_plugins(PainterPlugin)
.add_plugins(ShapeRenderPlugin)
.add_plugins(ShapeTypePlugin::<LineComponent>::default())
.add_plugins(ShapeTypePlugin::<DiscComponent>::default())
.add_plugins(ShapeTypePlugin::<RectangleComponent>::default())
.add_plugins(ShapeTypePlugin::<RegularPolygonComponent>::default())
.add_plugins(ShapeTypePlugin::<TriangleComponent>::default());
}
}
pub struct ShapePlugin {
pub base_config: ShapeConfig,
pub exclude_2d: bool,
}
impl ShapePlugin {
pub fn new(base_config: ShapeConfig) -> Self {
Self {
base_config,
..default()
}
}
}
impl Default for ShapePlugin {
fn default() -> Self {
Self {
base_config: ShapeConfig::default_3d(),
exclude_2d: false,
}
}
}
impl Plugin for ShapePlugin {
fn build(&self, app: &mut App) {
if !self.exclude_2d {
app.add_plugins(Shape2dPlugin::new(self.base_config.clone()));
}
app.add_plugins(ShapeType3dPlugin::<LineComponent>::default())
.add_plugins(ShapeType3dPlugin::<DiscComponent>::default())
.add_plugins(ShapeType3dPlugin::<RectangleComponent>::default())
.add_plugins(ShapeType3dPlugin::<RegularPolygonComponent>::default())
.add_plugins(ShapeType3dPlugin::<TriangleComponent>::default());
}
}