use crate::prelude::*;
use beet_core::prelude::*;
use std::f32::consts::FRAC_PI_2;
use std::f32::consts::FRAC_PI_4;
use std::f32::consts::PI;
#[derive(Debug, Clone, Copy, Reflect)]
pub struct IkSegment {
pub len: f32,
pub min_angle: Radians,
pub max_angle: f32,
}
impl Default for IkSegment {
fn default() -> Self {
Self {
len: 1.0,
min_angle: -PI,
max_angle: PI,
}
}
}
impl IkSegment {
pub const DEG_360: Self = Self {
len: 1.0,
min_angle: -PI,
max_angle: PI,
};
pub const DEG_180: Self = Self {
len: 1.0,
min_angle: -FRAC_PI_2,
max_angle: FRAC_PI_2,
};
pub const DEG_90: Self = Self {
len: 1.0,
min_angle: -FRAC_PI_4,
max_angle: FRAC_PI_4,
};
pub fn with_len(self, len: f32) -> Self { Self { len, ..self } }
pub fn with_angle(self, angle: f32) -> Self {
Self {
min_angle: -angle,
max_angle: angle,
..self
}
}
}