basic gizmo testing

main
Zynh Ludwig 2024-09-04 02:40:25 -07:00
parent d89666b3f0
commit 94ff4edcca
2 changed files with 30 additions and 4 deletions

View File

@ -14,6 +14,7 @@ features = [
"bevy_color", "bevy_color",
"bevy_render", "bevy_render",
"bevy_winit", "bevy_winit",
"bevy_gizmos",
"multi_threaded", "multi_threaded",
"x11", "x11",
"wayland", "wayland",

View File

@ -1,3 +1,4 @@
#![allow(clippy::type_complexity)]
// #![allow(unused)] // #![allow(unused)]
mod acceleration; mod acceleration;
@ -21,6 +22,7 @@ fn main() {
Update, Update,
( (
build_local_cache, build_local_cache,
(seperation_gizmos),
(seperation, cohesion, alignment), (seperation, cohesion, alignment),
accelerate, accelerate,
move_boids, move_boids,
@ -31,6 +33,9 @@ fn main() {
.run(); .run();
} }
#[derive(Component, Default)]
struct DrawGizmos;
#[derive(Component, Default)] #[derive(Component, Default)]
struct Boid; struct Boid;
@ -82,7 +87,7 @@ fn cohesion(
accel.0 = Vec2::ZERO; accel.0 = Vec2::ZERO;
let mut count = 0; let mut count = 0;
for transform in other_boids.iter_many(&local.0[..]) { for transform in other_boids.iter_many(&local.0) {
accel.0 += transform.translation.xy(); accel.0 += transform.translation.xy();
count += 1; count += 1;
@ -93,6 +98,22 @@ fn cohesion(
}) })
} }
fn seperation_gizmos(
boids: Query<(&Transform, &LocalCache), (With<Boid>, With<DrawGizmos>)>,
other_boids: Query<&Transform, With<Boid>>,
mut gizmos: Gizmos,
) {
boids.iter().for_each(|(transform, local)| {
other_boids.iter_many(&local.0).for_each(|other_transform| {
gizmos.arrow_2d(
transform.translation.xy(),
other_transform.translation.xy(),
tailwind::ROSE_500,
);
})
});
}
fn seperation( fn seperation(
mut boids: Query<(&Transform, &LocalCache, &mut SeperationAcceleration), With<Boid>>, mut boids: Query<(&Transform, &LocalCache, &mut SeperationAcceleration), With<Boid>>,
other_boids: Query<&Transform, With<Boid>>, other_boids: Query<&Transform, With<Boid>>,
@ -110,7 +131,7 @@ fn alignment(
.for_each(|(velocity, local, mut accel)| { .for_each(|(velocity, local, mut accel)| {
accel.0 = Vec2::ZERO; accel.0 = Vec2::ZERO;
let mut count = 0; let mut count = 0;
for other_velocity in other_boids.iter_many(&local.0[..]) { for other_velocity in other_boids.iter_many(&local.0) {
accel.0 += other_velocity.0; accel.0 += other_velocity.0;
count += 1; count += 1;
@ -179,7 +200,7 @@ fn setup(
let lower_height = -half_height; let lower_height = -half_height;
let upper_height = half_height; let upper_height = half_height;
for _ in 0..1000 { for i in 0..1000 {
use std::f32::consts::TAU; use std::f32::consts::TAU;
let x = small_rng.gen_range(lower_width..=upper_width); let x = small_rng.gen_range(lower_width..=upper_width);
@ -187,7 +208,7 @@ fn setup(
let angle = small_rng.gen_range(-TAU..=TAU); let angle = small_rng.gen_range(-TAU..=TAU);
commands.spawn(BoidBundle { let mut entity_commands = commands.spawn(BoidBundle {
mesh: MaterialMesh2dBundle { mesh: MaterialMesh2dBundle {
mesh: boid_mesh.0.clone(), mesh: boid_mesh.0.clone(),
material: boid_color.clone(), material: boid_color.clone(),
@ -198,6 +219,10 @@ fn setup(
velocity: Velocity(Vec2::from_angle(angle) * 200.), velocity: Velocity(Vec2::from_angle(angle) * 200.),
..default() ..default()
}); });
if i == 0 {
entity_commands.insert(DrawGizmos);
}
} }
commands.spawn(Camera2dBundle::default()); commands.spawn(Camera2dBundle::default());