50 lines
860 B
Rust
50 lines
860 B
Rust
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<T: const UiNum + Copy> const From<T> for Vec2 {
|
|
fn from(v: T) -> Self {
|
|
Self {
|
|
x: v.to_f32(),
|
|
y: v.to_f32(),
|
|
}
|
|
}
|
|
}
|
|
|
|
impl<T: const UiNum, U: const UiNum> 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(),
|
|
}
|
|
}
|
|
}
|