foxes shouldn't march in sync (#10070)

# Objective

- All foxes in `many_foxes` are running in sync
- It's scary
- It can also be a source of optimisation that won't be useful in a
general case

## Solution

- Advance the animation of each fox so that they are not synced anymore
by default
- Add a cli arg to enable them running in sync
This commit is contained in:
François 2023-10-10 00:45:02 +02:00 committed by GitHub
parent e5f5ce5e97
commit a52ca170ac
No known key found for this signature in database
GPG key ID: 4AEE18F83AFDEB23

View file

@ -4,6 +4,7 @@
use std::f32::consts::PI;
use std::time::Duration;
use argh::FromArgs;
use bevy::{
diagnostic::{FrameTimeDiagnosticsPlugin, LogDiagnosticsPlugin},
pbr::CascadeShadowConfigBuilder,
@ -11,14 +12,29 @@ use bevy::{
window::{PresentMode, WindowPlugin},
};
#[derive(FromArgs, Resource)]
/// `many_foxes` stress test
struct Args {
/// wether all foxes run in sync.
#[argh(switch)]
sync: bool,
/// total number of foxes.
#[argh(option, default = "1000")]
count: usize,
}
#[derive(Resource)]
struct Foxes {
count: usize,
speed: f32,
moving: bool,
sync: bool,
}
fn main() {
let args: Args = argh::from_env();
App::new()
.add_plugins((
DefaultPlugins.set(WindowPlugin {
@ -33,11 +49,10 @@ fn main() {
LogDiagnosticsPlugin::default(),
))
.insert_resource(Foxes {
count: std::env::args()
.nth(1)
.map_or(1000, |s| s.parse::<usize>().unwrap()),
count: args.count,
speed: 2.0,
moving: true,
sync: args.sync,
})
.insert_resource(AmbientLight {
color: Color::WHITE,
@ -200,12 +215,15 @@ fn setup(
fn setup_scene_once_loaded(
animations: Res<Animations>,
foxes: Res<Foxes>,
mut player: Query<&mut AnimationPlayer>,
mut player: Query<(Entity, &mut AnimationPlayer)>,
mut done: Local<bool>,
) {
if !*done && player.iter().len() == foxes.count {
for mut player in &mut player {
for (entity, mut player) in &mut player {
player.play(animations.0[0].clone_weak()).repeat();
if !foxes.sync {
player.seek_to(entity.index() as f32 / 10.0);
}
}
*done = true;
}