beet_examples 0.0.8

Bits and pieces for substantial beet examples
use beet_core::prelude::*;

#[derive(Clone, Component, Reflect)]
#[reflect(Component, Default)]
pub struct RandomizePosition {
	pub offset: Vec3,
	pub scale: Vec3,
}
impl Default for RandomizePosition {
	fn default() -> Self {
		Self {
			offset: Vec3::ZERO,
			scale: Vec3::ONE,
		}
	}
}


pub fn randomize_position(
	mut commands: Commands,
	mut rand: ResMut<RandomSource>,
	mut query: Populated<
		(Entity, &mut Transform, &RandomizePosition),
		Added<RandomizePosition>,
	>,
) {
	for (entity, mut transform, pos) in query.iter_mut() {
		let mut position = Vec3::random_in_cube(&mut rand.0);
		position.x *= pos.scale.x;
		position.y *= pos.scale.y;
		position.z *= pos.scale.z;
		transform.translation = pos.offset + position;
		commands.entity(entity).remove::<RandomizePosition>();
	}
}