use crate::prelude::*;
use beet_core::prelude::*;
#[derive(Default, Clone, Component, Reflect)]
#[reflect(Component)]
pub struct GroupSteerAgent;
#[derive(
Debug, Copy, Clone, PartialEq, Deref, DerefMut, Component, Reflect,
)]
#[reflect(Component, Default)]
#[require(Velocity, Force, Impulse)]
pub struct MaxForce(pub f32);
impl Default for MaxForce {
fn default() -> Self { Self(0.01) }
}
#[derive(
Debug, Copy, Clone, PartialEq, Deref, DerefMut, Component, Reflect,
)]
#[reflect(Component, Default)]
#[require(Velocity, Force, Impulse)]
pub struct MaxSpeed(pub f32);
impl Default for MaxSpeed {
fn default() -> Self { Self(1.) }
}
#[derive(
Debug, Copy, Clone, PartialEq, Deref, DerefMut, Component, Reflect,
)]
#[reflect(Component, Default)]
#[require(Velocity, Force, Impulse)]
pub struct ForceScalar(pub f32);
impl Default for ForceScalar {
fn default() -> Self { Self(1.) }
}
#[derive(Default, Bundle)]
pub struct SteerBundle {
pub max_force: MaxForce,
pub max_speed: MaxSpeed,
pub arrive_radius: ArriveRadius,
}
impl SteerBundle {
pub fn scaled_dist(mut self, val: f32) -> Self {
self.max_force.0 *= val;
self.max_speed.0 *= val;
self.arrive_radius.0 *= val;
self
}
}