use crate::util::Vec2; use std::marker::Destruct; pub const trait UiNum { fn to_f32(self) -> f32; } impl const UiNum for f32 { fn to_f32(self) -> f32 { self } } impl const UiNum for u32 { fn to_f32(self) -> f32 { self as f32 } } impl const UiNum for i32 { fn to_f32(self) -> f32 { self as f32 } } pub const fn vec2(x: impl const UiNum, y: impl const UiNum) -> Vec2 { Vec2::new(x.to_f32(), y.to_f32()) } impl const From for Vec2 { fn from(v: T) -> Self { Self { x: v.to_f32(), y: v.to_f32(), } } } impl const From<(T, U)> for Vec2 where (T, U): const Destruct, { fn from((x, y): (T, U)) -> Self { Self { x: x.to_f32(), y: y.to_f32(), } } }