use bevy::prelude::*;
use bevy_sprinkles::prelude::*;
use crate::ui::widgets::inspector_field::InspectorFieldProps;
use crate::ui::widgets::variant_edit::{VariantDefinition, VariantEditProps};
use crate::ui::widgets::vector_edit::VectorSuffixes;
use super::utils::{VariantConfig, variants_from_reflect};
use super::{InspectorItem, InspectorSection};
use crate::ui::icons::{
ICON_CUBE, ICON_EMPTY_AXIS, ICON_MESH_TORUS, ICON_MESH_UVSPHERE, ICON_SPHERE,
};
pub fn plugin(_app: &mut App) {}
pub fn emission_section() -> (impl Bundle, InspectorSection) {
(
(),
InspectorSection::new(
"Emission",
vec![
vec![
InspectorFieldProps::new("emission.offset")
.vector(VectorSuffixes::XYZ)
.into(),
],
vec![
InspectorFieldProps::new("emission.scale")
.vector(VectorSuffixes::XYZ)
.into(),
],
vec![InspectorItem::Variant {
path: "emission.shape".into(),
props: VariantEditProps::new("emission.shape")
.with_variants(emission_shape_variants()),
}],
vec![
InspectorFieldProps::new("emission.particles_amount")
.u32()
.into(),
],
],
),
)
}
fn emission_shape_variants() -> Vec<VariantDefinition> {
variants_from_reflect::<EmissionShape>(&[
(
"Point",
VariantConfig::default()
.icon(ICON_EMPTY_AXIS)
.default_value(EmissionShape::Point),
),
(
"Sphere",
VariantConfig::default()
.icon(ICON_SPHERE)
.default_value(EmissionShape::default_sphere()),
),
(
"SphereSurface",
VariantConfig::default()
.icon(ICON_MESH_UVSPHERE)
.default_value(EmissionShape::default_sphere_surface()),
),
(
"Box",
VariantConfig::default()
.icon(ICON_CUBE)
.default_value(EmissionShape::default_box()),
),
(
"Ring",
VariantConfig::default()
.icon(ICON_MESH_TORUS)
.override_rows(vec![
vec!["axis"],
vec!["height"],
vec!["radius", "inner_radius"],
])
.default_value(EmissionShape::default_ring()),
),
])
}