mirror of
https://github.com/bevyengine/bevy
synced 2024-11-10 07:04:33 +00:00
Make the field of ParamSetBuilder
pub so it's actually usable. (#14896)
# Objective `ParamSetBuilder` is supposed to be used as a tuple constructor, but the field was not marked `pub` so it's not actually usable outside of its module. ## Solution Mark the field `pub`. Realize one advantage of doc tests over unit tests is that they test the public API. Add a doc test example that uses the field so that this would have been caught.
This commit is contained in:
parent
48bd810451
commit
01cce9b11c
2 changed files with 41 additions and 1 deletions
|
@ -212,7 +212,7 @@ all_tuples!(impl_system_param_builder_tuple, 0, 16, P, B);
|
|||
/// A [`SystemParamBuilder`] for a [`ParamSet`].
|
||||
/// To build a [`ParamSet`] with a tuple of system parameters, pass a tuple of matching [`SystemParamBuilder`]s.
|
||||
/// To build a [`ParamSet`] with a `Vec` of system parameters, pass a `Vec` of matching [`SystemParamBuilder`]s.
|
||||
pub struct ParamSetBuilder<T>(T);
|
||||
pub struct ParamSetBuilder<T>(pub T);
|
||||
|
||||
macro_rules! impl_param_set_builder_tuple {
|
||||
($(($param: ident, $builder: ident, $meta: ident)),*) => {
|
||||
|
|
|
@ -390,6 +390,46 @@ fn assert_component_access_compatibility(
|
|||
/// }
|
||||
/// # bevy_ecs::system::assert_is_system(event_system);
|
||||
/// ```
|
||||
///
|
||||
/// If you want to use `ParamSet` with a [`SystemParamBuilder`](crate::system::SystemParamBuilder), use [`ParamSetBuilder`](crate::system::ParamSetBuilder) and pass a builder for each param.
|
||||
/// ```
|
||||
/// # use bevy_ecs::{prelude::*, system::*};
|
||||
/// #
|
||||
/// # #[derive(Component)]
|
||||
/// # struct Health;
|
||||
/// #
|
||||
/// # #[derive(Component)]
|
||||
/// # struct Enemy;
|
||||
/// #
|
||||
/// # #[derive(Component)]
|
||||
/// # struct Ally;
|
||||
/// #
|
||||
/// let mut world = World::new();
|
||||
///
|
||||
/// let system = (ParamSetBuilder((
|
||||
/// QueryParamBuilder::new(|builder| {
|
||||
/// builder.with::<Enemy>();
|
||||
/// }),
|
||||
/// QueryParamBuilder::new(|builder| {
|
||||
/// builder.with::<Ally>();
|
||||
/// }),
|
||||
/// ParamBuilder,
|
||||
/// )),)
|
||||
/// .build_state(&mut world)
|
||||
/// .build_system(buildable_system);
|
||||
///world.run_system_once(system);
|
||||
///
|
||||
/// fn buildable_system(mut set: ParamSet<(Query<&mut Health>, Query<&mut Health>, &World)>) {
|
||||
/// // The first parameter is built from the first builder,
|
||||
/// // so this will iterate over enemies.
|
||||
/// for mut health in set.p0().iter_mut() {}
|
||||
/// // And the second parameter is built from the second builder,
|
||||
/// // so this will iterate over allies.
|
||||
/// for mut health in set.p1().iter_mut() {}
|
||||
/// // Parameters that don't need special building can use `ParamBuilder`.
|
||||
/// let entities = set.p2().entities();
|
||||
/// }
|
||||
/// ```
|
||||
pub struct ParamSet<'w, 's, T: SystemParam> {
|
||||
param_states: &'s mut T::State,
|
||||
world: UnsafeWorldCell<'w>,
|
||||
|
|
Loading…
Reference in a new issue