43 lines
956 B
Rust
43 lines
956 B
Rust
use bevy::prelude::*;
|
|
|
|
pub fn lerp(a: f32, b: f32, t: f32) -> f32 {
|
|
a * (1.0 - t) + b * t
|
|
}
|
|
|
|
pub fn inverse_lerp(a: f32, b: f32, value: f32) -> f32 {
|
|
(value - a) / (b - a)
|
|
}
|
|
|
|
pub fn vec2_lerp(a: Vec2, b: Vec2, t: f32) -> Vec2 {
|
|
Vec2 {
|
|
x: lerp(a.x, b.x, t),
|
|
y: lerp(a.y, b.y, t),
|
|
}
|
|
}
|
|
|
|
pub fn vec3_lerp(a: Vec3, b: Vec3, t: f32) -> Vec3 {
|
|
Vec3 {
|
|
x: lerp(a.x, b.x, t),
|
|
y: lerp(a.y, b.y, t),
|
|
z: lerp(a.z, b.z, t),
|
|
}
|
|
}
|
|
|
|
pub fn move_towards_vec2(from: Vec2, to: Vec2, amount: f32) -> Vec2 {
|
|
let diff = to - from;
|
|
let length = diff.length();
|
|
if length <= f32::EPSILON {
|
|
return from;
|
|
}
|
|
from + diff.normalize() * length.min(amount)
|
|
}
|
|
|
|
pub fn move_towards_vec3(from: Vec3, to: Vec3, amount: f32) -> Vec3 {
|
|
let diff = to - from;
|
|
let length = diff.length();
|
|
if length <= f32::EPSILON {
|
|
return from;
|
|
}
|
|
from + diff.normalize() * length.min(amount)
|
|
}
|