use bevy::prelude::*;
use crate::prelude::*;
#[derive(Debug, Hash, PartialEq, Eq, Clone, SystemSet)]
pub struct RoundUiAutosizeSet;
pub(crate) struct RoundUiAutosizePlugin;
impl Plugin for RoundUiAutosizePlugin {
fn build(&self, app: &mut App) {
app.add_systems(
Update,
(update_material_size, update_node_padding, update_node_size)
.in_set(RoundUiAutosizeSet),
);
}
}
#[derive(Component)]
pub struct RoundUiAutosizeMaterial;
#[derive(Component)]
pub struct RoundUiAutosizeNodePadding;
#[derive(Component, Default)]
pub struct RoundUiAutosizeNode;
#[allow(clippy::type_complexity)]
fn update_material_size(
query: Query<(&Node, &Handle<RoundUiMaterial>), (With<RoundUiAutosizeMaterial>, Changed<Node>)>,
mut materials: ResMut<Assets<RoundUiMaterial>>,
) {
for (node, material_handle) in query.iter() {
if let Some(material) = materials.get_mut(material_handle.id()) {
material.size = node.size();
}
}
}
#[allow(clippy::type_complexity)]
fn update_node_padding(
mut query: Query<
(&mut Style, &Handle<RoundUiMaterial>),
(
With<RoundUiAutosizeNodePadding>,
Changed<Handle<RoundUiMaterial>>,
),
>,
materials: Res<Assets<RoundUiMaterial>>,
) {
for (mut style, material_handle) in query.iter_mut() {
if let Some(material) = materials.get(material_handle.id()) {
style.padding = material.get_padding();
}
}
}
#[allow(clippy::type_complexity)]
fn update_node_size(
materials: Res<Assets<RoundUiMaterial>>,
mut query: Query<
(&mut Style, &Handle<RoundUiMaterial>),
(Changed<Handle<RoundUiMaterial>>, With<RoundUiAutosizeNode>),
>,
) {
for (mut style, handle) in query.iter_mut() {
if let Some(material) = materials.get(handle.id()) {
style.width = Val::Px(material.size.x);
style.height = Val::Px(material.size.y);
}
}
}