Skip to main content

glam/f32/
float.rs

1// Generated from float.rs.tera template. Edit the template, not the generated file.
2
3use crate::{f32::math, float::FloatExt};
4
5impl crate::sealed::Sealed for f32 {}
6
7impl FloatExt for f32 {
8    #[inline]
9    fn lerp(self, rhs: Self, t: Self) -> Self {
10        self * (1.0 - t) + rhs * t
11    }
12
13    #[inline]
14    fn lerp_monotonic(self, rhs: Self, t: Self) -> Self {
15        self + (rhs - self) * t
16    }
17
18    #[inline]
19    fn inverse_lerp(a: Self, b: Self, v: Self) -> Self {
20        (v - a) / (b - a)
21    }
22
23    #[inline]
24    fn smoothstep(self, edge0: Self, edge1: Self) -> Self {
25        let t = ((self - edge0) / (edge1 - edge0)).clamp(0.0, 1.0);
26        t * t * (3.0 - 2.0 * t)
27    }
28
29    #[inline]
30    fn remap(self, in_start: Self, in_end: Self, out_start: Self, out_end: Self) -> Self {
31        let t = Self::inverse_lerp(in_start, in_end, self);
32        Self::lerp(out_start, out_end, t)
33    }
34
35    #[inline]
36    fn fract_gl(self) -> Self {
37        self - math::floor(self)
38    }
39
40    #[inline]
41    fn step(self, value: Self) -> Self {
42        if value < self { 0.0 } else { 1.0 }
43    }
44
45    #[inline]
46    fn saturate(self) -> Self {
47        self.clamp(0.0, 1.0)
48    }
49
50    #[inline]
51    fn move_towards(self, rhs: Self, d: Self) -> Self {
52        let a = rhs - self;
53        if a.abs() <= d {
54            rhs
55        } else {
56            self + a.signum() * d
57        }
58    }
59}