Skip to content
Closed
49 changes: 22 additions & 27 deletions examples/2d/contributors.rs
Original file line number Diff line number Diff line change
@@ -1,11 +1,13 @@
use bevy::{prelude::*, utils::HashSet};
use rand::{prelude::SliceRandom, Rng};
use std::{
env::VarError,
io::{self, BufRead, BufReader},
process::Stdio,
};

use rand::{prelude::SliceRandom, Rng};

use bevy::{prelude::*, utils::HashSet};

fn main() {
App::new()
.add_plugins(DefaultPlugins)
Expand Down Expand Up @@ -69,7 +71,7 @@ fn setup_contributor_selection(mut commands: Commands, asset_server: Res<AssetSe
let texture_handle = asset_server.load("branding/icon.png");

let mut contributor_selection = ContributorSelection {
order: vec![],
order: Vec::with_capacity(contribs.len()),
idx: 0,
};

Expand Down Expand Up @@ -163,40 +165,34 @@ fn select_system(
mut query: Query<(&Contributor, &mut Sprite, &mut Transform)>,
time: Res<Time>,
) {
let mut timer_fired = false;
for mut timer in timer_query.iter_mut() {
if !timer.tick(time.delta()).just_finished() {
continue;
}
timer.reset();
timer_fired = true;
}

if !timer_fired {
let mut timer = timer_query.single_mut();
if !timer.tick(time.delta()).just_finished() {
return;
}

let prev = contributor_selection.idx;

if (contributor_selection.idx + 1) < contributor_selection.order.len() {
contributor_selection.idx += 1;
} else {
contributor_selection.idx = 0;
if timer.times_finished() == 1 {
let mut text = text_query.single_mut();
text.sections[0].value.clear();
text.sections[0].value.push_str("Contributor: ");
}

{
let (_, entity) = &contributor_selection.order[prev];
let (_, entity) = &contributor_selection.order[contributor_selection.idx];
if let Ok((contributor, mut sprite, mut transform)) = query.get_mut(*entity) {
deselect(&mut sprite, contributor, &mut *transform);
}
}

if (contributor_selection.idx + 1) < contributor_selection.order.len() {
contributor_selection.idx += 1;
} else {
contributor_selection.idx = 0;
}

let (name, entity) = &contributor_selection.order[contributor_selection.idx];

if let Ok((contributor, mut sprite, mut transform)) = query.get_mut(*entity) {
if let Some(mut text) = text_query.iter_mut().next() {
select(&mut sprite, contributor, &mut *transform, &mut *text, name);
}
let mut text = text_query.single_mut();
select(&mut sprite, contributor, &mut *transform, &mut *text, name);
}
}

Expand All @@ -207,7 +203,7 @@ fn select(
contributor: &Contributor,
transform: &mut Transform,
text: &mut Text,
name: &str,
#[allow(clippy::ptr_arg)] name: &String,
) {
sprite.color = Color::hsla(
contributor.hue,
Expand All @@ -218,8 +214,7 @@ fn select(

transform.translation.z = 100.0;

text.sections[0].value = "Contributor: ".to_string();
text.sections[1].value = name.to_string();
text.sections[1].value.clone_from(name);
text.sections[1].style.color = sprite.color;
}

Expand Down