Run cargo fmt before merging branch

This commit is contained in:
2024-07-16 09:31:15 -05:00
parent e09399cc23
commit b75c05940d
2 changed files with 37 additions and 96 deletions

View File

@@ -1,4 +1,3 @@
use bevy::{prelude::*, sprite::MaterialMesh2dBundle};
use bevy_spatial::{
kdtree::KDTree2, AutomaticUpdate, SpatialAccess, SpatialStructure, TransformMode,
@@ -146,10 +145,7 @@ fn turn_if_edge(
}
}
fn apply_velocity(
mut query: Query<(&mut Transform, &Velocity, &mut Force)>,
time: Res<Time>,
) {
fn apply_velocity(mut query: Query<(&mut Transform, &Velocity, &mut Force)>, time: Res<Time>) {
for (mut transform, velocity, mut acceleration) in &mut query {
let delta_v = **acceleration * time.delta_seconds();
**acceleration = Vec3::ZERO;
@@ -197,10 +193,7 @@ fn cohesion(
for (transform, mut acceleration) in &mut boids {
let neighbors = spatial_tree.within_distance(transform.translation.xy(), BOID_VIEW_RANGE);
if let Some(center_mass) = center_of_boids(neighbors.iter().map(|boid| boid.0)) {
let force = cohesive_force(
center_mass,
transform.translation.xy()
).unwrap_or_default();
let force = cohesive_force(center_mass, transform.translation.xy()).unwrap_or_default();
acceleration.0 += *force * COHESION_FACTOR;
}
}
@@ -220,10 +213,8 @@ fn separation(
let accel = neighbors.iter().map(|(pos, _)| pos.extend(0.0)).fold(
Vec3::ZERO,
|accumulator, neighbor| {
let force = separation_force(
boid_transform.translation.xy(),
neighbor.xy()
).unwrap_or_default();
let force = separation_force(boid_transform.translation.xy(), neighbor.xy())
.unwrap_or_default();
accumulator + *force * SEPARATION_FACTOR
},
);
@@ -335,17 +326,12 @@ fn separation_force(boid: Vec2, target: Vec2) -> Option<Force> {
}
#[cfg(test)]
mod tests{
mod tests {
use bevy::prelude::*;
use crate::birdoids_plugin::{
cohesive_force, separation_force
};
use crate::birdoids_plugin::{cohesive_force, separation_force};
use super::{
BOID_VIEW_RANGE,
Force,
};
use super::{Force, BOID_VIEW_RANGE};
// forces are relative to the boid's view range, so all
// distances need to be fractions of that
@@ -361,26 +347,20 @@ mod tests{
// *********************
#[test]
fn check_cohesion_midpoint_x_positive(){
fn check_cohesion_midpoint_x_positive() {
// Pull right 0.5 units
assert_eq!(
Some(Force(Vec3::new(0.5, 0.0, 0.0))),
cohesive_force(
Vec2::new(0.0, 0.0),
Vec2::new(0.5 * BOID_VIEW_RANGE, 0.0),
)
cohesive_force(Vec2::new(0.0, 0.0), Vec2::new(0.5 * BOID_VIEW_RANGE, 0.0),)
);
}
#[test]
fn check_cohesion_midpoint_x_negative(){
fn check_cohesion_midpoint_x_negative() {
// Pull left 0.5 units
assert_eq!(
Some(Force(Vec3::new(-0.5, 0.0, 0.0))),
cohesive_force(
Vec2::new(0.0, 0.0),
Vec2::new(-0.5 * BOID_VIEW_RANGE, 0.0),
)
cohesive_force(Vec2::new(0.0, 0.0), Vec2::new(-0.5 * BOID_VIEW_RANGE, 0.0),)
);
}
@@ -389,10 +369,7 @@ mod tests{
// pull left 1.0 units
assert_eq!(
Some(Force(Vec3::new(1.0, 0.0, 0.0))),
cohesive_force(
Vec2::new(0.0, 0.0),
Vec2::new(1.0 * BOID_VIEW_RANGE, 0.0),
)
cohesive_force(Vec2::new(0.0, 0.0), Vec2::new(1.0 * BOID_VIEW_RANGE, 0.0),)
);
}
@@ -401,10 +378,7 @@ mod tests{
// pull left 1.0 units
assert_eq!(
Some(Force(Vec3::new(-1.0, 0.0, 0.0))),
cohesive_force(
Vec2::new(0.0, 0.0),
Vec2::new(-1.0 * BOID_VIEW_RANGE, 0.0),
)
cohesive_force(Vec2::new(0.0, 0.0), Vec2::new(-1.0 * BOID_VIEW_RANGE, 0.0),)
);
}
@@ -413,26 +387,20 @@ mod tests{
// *********************
#[test]
fn check_cohesion_midpoint_y_positive(){
fn check_cohesion_midpoint_y_positive() {
// Pull up 0.5 units
assert_eq!(
Some(Force(Vec3::new(0.0, 0.5, 0.0))),
cohesive_force(
Vec2::new(0.0, 0.0),
Vec2::new(0.0, 0.5 * BOID_VIEW_RANGE),
)
cohesive_force(Vec2::new(0.0, 0.0), Vec2::new(0.0, 0.5 * BOID_VIEW_RANGE),)
);
}
#[test]
fn check_cohesion_midpoint_y_negative(){
fn check_cohesion_midpoint_y_negative() {
// Pull down 0.5 units
assert_eq!(
Some(Force(Vec3::new(0.0, -0.5, 0.0))),
cohesive_force(
Vec2::new(0.0, 0.0),
Vec2::new(0.0, -0.5 * BOID_VIEW_RANGE),
)
cohesive_force(Vec2::new(0.0, 0.0), Vec2::new(0.0, -0.5 * BOID_VIEW_RANGE),)
);
}
@@ -441,10 +409,7 @@ mod tests{
// Pull up 1.0 units
assert_eq!(
Some(Force(Vec3::new(0.0, 1.0, 0.0))),
cohesive_force(
Vec2::new(0.0, 0.0),
Vec2::new(0.0, 1.0 * BOID_VIEW_RANGE)
)
cohesive_force(Vec2::new(0.0, 0.0), Vec2::new(0.0, 1.0 * BOID_VIEW_RANGE))
);
}
@@ -453,20 +418,14 @@ mod tests{
// pull down 0.2 units
assert_eq!(
Some(Force(Vec3::new(0.0, -1.0, 0.0))),
cohesive_force(
Vec2::new(0.0, 0.0),
Vec2::new(0.0, -1.0 * BOID_VIEW_RANGE),
)
cohesive_force(Vec2::new(0.0, 0.0), Vec2::new(0.0, -1.0 * BOID_VIEW_RANGE),)
);
}
// Separation 0,0 test
#[test]
fn check_separation_zero_zero() {
let force = separation_force(
Vec2::ZERO,
Vec2::ZERO
);
let force = separation_force(Vec2::ZERO, Vec2::ZERO);
assert!(force.is_none());
}
@@ -474,35 +433,32 @@ mod tests{
// Separation x-axis tests
// *********************
#[test]
fn check_separation_midpoint_x_positive(){
fn check_separation_midpoint_x_positive() {
assert_eq!(
Some(Force(Vec3::new(0.75, 0.0, 0.0))), // expected force
Some(Force(Vec3::new(0.75, 0.0, 0.0))), // expected force
separation_force(
Vec2::new(0.5 * BOID_VIEW_RANGE, 0.0), // boid position
Vec2::ZERO, // obstacle position
Vec2::new(0.5 * BOID_VIEW_RANGE, 0.0), // boid position
Vec2::ZERO, // obstacle position
)
);
}
#[test]
fn check_separation_midpoint_x_negative(){
fn check_separation_midpoint_x_negative() {
assert_eq!(
Some(Force(Vec3::new(-0.75, 0.0, 0.0))), // expected force
Some(Force(Vec3::new(-0.75, 0.0, 0.0))), // expected force
separation_force(
Vec2::new(-0.5 * BOID_VIEW_RANGE, 0.0), // boid position
Vec2::ZERO, // obstacle position
)
);
}
#[test]
fn check_separation_edge_x_positive() {
assert_eq!(
Some(Force(Vec3::ZERO)),
separation_force(
Vec2::new(1.0 * BOID_VIEW_RANGE, 0.0),
Vec2::ZERO,
),
separation_force(Vec2::new(1.0 * BOID_VIEW_RANGE, 0.0), Vec2::ZERO,),
);
}
@@ -510,10 +466,7 @@ mod tests{
fn check_separation_edge_x_negative() {
assert_eq!(
Some(Force(Vec3::ZERO)),
separation_force(
Vec2::new(-1.0 * BOID_VIEW_RANGE, 0.0),
Vec2::ZERO,
),
separation_force(Vec2::new(-1.0 * BOID_VIEW_RANGE, 0.0), Vec2::ZERO,),
);
}
@@ -521,24 +474,18 @@ mod tests{
// Separation y-axis tests
// *********************
#[test]
fn check_separation_midpoint_y_positive(){
fn check_separation_midpoint_y_positive() {
assert_eq!(
Some(Force(Vec3::new(0.0, 0.75, 0.0))),
separation_force(
Vec2::new(0.0, 0.5 * BOID_VIEW_RANGE),
Vec2::ZERO,
)
separation_force(Vec2::new(0.0, 0.5 * BOID_VIEW_RANGE), Vec2::ZERO,)
);
}
#[test]
fn check_separation_midpoint_y_negative(){
fn check_separation_midpoint_y_negative() {
assert_eq!(
Some(Force(Vec3::new(0.0, -0.75, 0.0))),
separation_force(
Vec2::new(0.0, -0.5 * BOID_VIEW_RANGE),
Vec2::ZERO,
)
separation_force(Vec2::new(0.0, -0.5 * BOID_VIEW_RANGE), Vec2::ZERO,)
);
}
@@ -546,10 +493,7 @@ mod tests{
fn check_separation_edge_y_positive() {
assert_eq!(
Some(Force(Vec3::ZERO)),
separation_force(
Vec2::new(0.0, 1.0 * BOID_VIEW_RANGE),
Vec2::ZERO,
)
separation_force(Vec2::new(0.0, 1.0 * BOID_VIEW_RANGE), Vec2::ZERO,)
)
}
@@ -557,10 +501,7 @@ mod tests{
fn check_separation_edge_y_negative() {
assert_eq!(
Some(Force(Vec3::ZERO)),
separation_force(
Vec2::new(0.0, -1.0 * BOID_VIEW_RANGE),
Vec2::ZERO,
)
separation_force(Vec2::new(0.0, -1.0 * BOID_VIEW_RANGE), Vec2::ZERO,)
)
}
}

View File

@@ -2,7 +2,7 @@ use bevy::{prelude::*, sprite::MaterialMesh2dBundle, window::PrimaryWindow};
use bevy_spatial::{kdtree::KDTree2, SpatialAccess};
use crate::birdoids_plugin::{
center_of_boids, velocity_of_boids, Force, Boid, TrackedByKdTree, Velocity,
center_of_boids, velocity_of_boids, Boid, Force, TrackedByKdTree, Velocity,
};
const SCANRADIUS: f32 = 50.0;