add point light and use turkey model for toid

This commit is contained in:
Joe Ardent 2024-11-28 11:38:02 -08:00
parent 7d9651bca0
commit 3bf90ce674
2 changed files with 35 additions and 11 deletions

View file

@ -1,6 +1,10 @@
use argh::FromArgs; use argh::FromArgs;
use bevy::{ use bevy::{
prelude::*, prelude::{
BuildChildren, ButtonInput, Camera, ChildBuild, Color, Commands, Component, Deref,
DerefMut, Entity, Gizmos, Handle, KeyCode, Quat, Query, Res, ResMut, Resource, Scene,
SceneRoot, Time, Transform, Vec3, Visibility, With,
},
utils::{HashMap, HashSet}, utils::{HashMap, HashSet},
}; };
use bevy_spatial::{kdtree::KDTree3, SpatialAccess}; use bevy_spatial::{kdtree::KDTree3, SpatialAccess};
@ -8,12 +12,12 @@ use bevy_spatial::{kdtree::KDTree3, SpatialAccess};
pub type NNTree = KDTree3<Toid>; pub type NNTree = KDTree3<Toid>;
// toid stuff // toid stuff
const SPEED: f32 = 15.0; const SPEED: f32 = 12.0;
const SPEED_DIFF_RANGE: f32 = 0.1; // +/- 10% const SPEED_DIFF_RANGE: f32 = 0.1; // +/- 10%
const MAX_DELTA_V: f32 = std::f32::consts::PI * 2.0; // basically 360 degrees/sec const MAX_DELTA_V: f32 = std::f32::consts::PI * 2.0; // basically 360 degrees/sec
// how far from origin before really wanting to come back // how far from origin before really wanting to come back
const RADIUS: f32 = 50.0; const RADIUS: f32 = 30.0;
// how close to try to stay to your buddies // how close to try to stay to your buddies
const BUDDY_RADIUS: f32 = SPEED; const BUDDY_RADIUS: f32 = SPEED;
@ -56,7 +60,7 @@ pub fn turkey_time(
) -> Entity { ) -> Entity {
let speed_diff = r.gen_range(-SPEED_DIFF_RANGE..=SPEED_DIFF_RANGE); let speed_diff = r.gen_range(-SPEED_DIFF_RANGE..=SPEED_DIFF_RANGE);
let speed = SPEED + (SPEED * speed_diff); let speed = SPEED + (SPEED * speed_diff);
let vel = unit_vec(r) * speed; let dir = unit_vec(r) * speed;
let buddies = r.gen_range(6..=8); let buddies = r.gen_range(6..=8);
let x = r.gen_range(-10.0..=10.0); let x = r.gen_range(-10.0..=10.0);
let z = r.gen_range(-10.0..=10.0); let z = r.gen_range(-10.0..=10.0);
@ -64,12 +68,16 @@ pub fn turkey_time(
let pos = Vec3::new(x, MIN_ALTITUDE + y, z); let pos = Vec3::new(x, MIN_ALTITUDE + y, z);
let xform = Transform::from_translation(pos); let xform = Transform::from_translation(pos);
let spatial_bundle = (xform, Visibility::Visible); let spatial_bundle = (xform, Visibility::Visible);
let boid_rot = Quat::from_axis_angle(Vec3::Y, -90.0f32.to_radians());
commands commands
.spawn(spatial_bundle) .spawn(spatial_bundle)
.insert((Velocity(vel), Buddies::default(), Toid { speed, buddies })) .insert((Velocity(dir), Buddies::default(), Toid { speed, buddies }))
.with_children(|t| { .with_children(|t| {
t.spawn(SceneRoot(scene.to_owned())) t.spawn(SceneRoot(scene.to_owned()))
.insert(Transform::default()); .insert(Transform::from_rotation(boid_rot));
//.insert(Transform::default());
}) })
.id() .id()
} }

View file

@ -10,7 +10,14 @@ use bevy_spatial::{AutomaticUpdate, TransformMode};
fn main() { fn main() {
let config: audubon::Config = argh::from_env(); let config: audubon::Config = argh::from_env();
App::new() App::new()
.add_plugins(DefaultPlugins) .add_plugins(DefaultPlugins.set(WindowPlugin {
primary_window: Some(Window {
resolution: (1920.0, 1080.0).into(),
..Default::default()
}),
close_when_requested: true,
..Default::default()
}))
.add_plugins(( .add_plugins((
AutomaticUpdate::<Toid>::new() AutomaticUpdate::<Toid>::new()
.with_transform(TransformMode::GlobalTransform) .with_transform(TransformMode::GlobalTransform)
@ -44,8 +51,6 @@ fn setup(
config: Res<Config>, config: Res<Config>,
models: Res<AssetServer>, models: Res<AssetServer>,
) { ) {
let rand = &mut rand::thread_rng();
let camera = commands let camera = commands
.spawn(( .spawn((
Transform::from_xyz(0., 5.0, 25.).looking_at(Vec3::new(0.0, 5.0, 0.0), Vec3::Y), Transform::from_xyz(0., 5.0, 25.).looking_at(Vec3::new(0.0, 5.0, 0.0), Vec3::Y),
@ -53,15 +58,26 @@ fn setup(
Visibility::Hidden, Visibility::Hidden,
)) ))
.id(); .id();
// plane // ground plane
commands commands
.spawn(Mesh3d( .spawn(Mesh3d(
meshes.add(Mesh::from(Plane3d::default().mesh().size(500.0, 500.0))), meshes.add(Mesh::from(Plane3d::default().mesh().size(500.0, 500.0))),
)) ))
.insert(MeshMaterial3d(materials.add(Color::srgb(0.3, 1.0, 0.3)))); .insert(MeshMaterial3d(materials.add(Color::srgb(0.3, 1.0, 0.3))));
let toid_model = models.load("models/toid3.glb#Scene0"); // point light
commands.spawn((
Transform::from_xyz(0.0, 50.0, 0.0),
PointLight {
intensity: 8_000_000.0,
range: 100.0,
shadows_enabled: true,
..default()
},
));
let toid_model = models.load("models/boid.glb#Scene0");
let rand = &mut rand::thread_rng();
for _ in 0..config.toids { for _ in 0..config.toids {
let _ = turkey_time(&mut commands, &toid_model, rand); let _ = turkey_time(&mut commands, &toid_model, rand);
} }