use bevy_ecs::prelude::*;
use tracing::warn;
#[derive(Component, Debug, Clone, Copy, PartialEq, Default)]
pub struct TextLayoutMetrics {
pub width: f32, pub height: f32, }
#[derive(Component, Debug, Clone, Copy, PartialEq, Default)]
pub struct Size {
pub width: f32, pub height: f32, }
impl Size {
pub fn validate(&self) {
if self.width < 0.0 {
warn!(width = self.width, "Size.width is negative");
}
if self.height < 0.0 {
warn!(height = self.height, "Size.height is negative");
}
}
}
#[derive(Component, Debug, Clone, Copy, PartialEq)]
pub struct Offset {
pub x: f32,
pub y: f32,
}
impl Default for Offset {
fn default() -> Self {
Self { x: 0.0, y: 0.0 }
}
}
#[derive(Component, Debug, Clone, Copy, PartialEq)]
pub struct LayoutScale {
pub x: f32,
pub y: f32,
}
impl LayoutScale {
pub fn validate(&self) {
if self.x == 0.0 {
warn!("LayoutScale.x is zero, which may cause layout issues");
}
if self.y == 0.0 {
warn!("LayoutScale.y is zero, which may cause layout issues");
}
}
}
impl Default for LayoutScale {
fn default() -> Self {
Self { x: 1.0, y: 1.0 }
}
}
#[derive(Component, Debug, Clone, Copy, PartialEq)]
pub struct Opacity(pub f32);
impl Opacity {
pub fn validate(&self) {
if self.0 < 0.0 || self.0 > 1.0 {
warn!(
value = self.0,
"Opacity value is outside valid range [0.0, 1.0]"
);
}
}
pub fn clamped(&self) -> f32 {
self.0.clamp(0.0, 1.0)
}
}
impl Default for Opacity {
fn default() -> Self {
Self(1.0) }
}