Skip to content

Commit

Permalink
foxes shouldn't march in sync (bevyengine#10070)
Browse files Browse the repository at this point in the history
# 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
  • Loading branch information
mockersf authored and Thomas Wilgenbus committed Oct 13, 2023
1 parent bca8398 commit a305675
Showing 1 changed file with 23 additions and 5 deletions.
28 changes: 23 additions & 5 deletions examples/stress_tests/many_foxes.rs
Original file line number Diff line number Diff line change
Expand Up @@ -4,21 +4,37 @@
use std::f32::consts::PI;
use std::time::Duration;

use argh::FromArgs;
use bevy::{
diagnostic::{FrameTimeDiagnosticsPlugin, LogDiagnosticsPlugin},
pbr::CascadeShadowConfigBuilder,
prelude::*,
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 {
Expand All @@ -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,
Expand Down Expand Up @@ -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;
}
Expand Down

0 comments on commit a305675

Please sign in to comment.