// Generated from {{template_path}} template. Edit the template, not the generated file.
use crate::float::FloatExt;
impl FloatExt for {{ scalar_t }} {
#[inline]
fn lerp(self, rhs: Self, t: Self) -> Self {
self + (rhs - self) * t
}
#[inline]
fn inverse_lerp(a: Self, b: Self, v: Self) -> Self {
(v - a) / (b - a)
}
#[inline]
fn smoothstep(self, edge0: Self, edge1: Self) -> Self {
let t = ((self - edge0) / (edge1 - edge0)).clamp(0.0, 1.0);
t * t * (3.0 - 2.0 * t)
}
#[inline]
fn remap(self, in_start: Self, in_end: Self, out_start: Self, out_end: Self) -> Self {
let t = Self::inverse_lerp(in_start, in_end, self);
Self::lerp(out_start, out_end, t)
}
#[inline]
fn fract_gl(self) -> Self {
self - crate::{{ scalar_t }}::math::floor(self)
}
#[inline]
fn step(self, value: Self) -> Self {
if value < self {
0.0
} else {
1.0
}
}
#[inline]
fn saturate(self) -> Self {
self.clamp(0.0, 1.0)
}
#[inline]
fn move_towards(self, rhs: Self, d: Self) -> Self {
let a = rhs - self;
if a.abs() <= d {
rhs
} else {
self + a.signum() * d
}
}
}