bevy
bevy copied to clipboard
SystemParamBuilder - Allow deriving a SystemParamBuilder struct when deriving SytemParam.
Objective
Allow SystemParamBuilder implementations for custom system parameters created using #[derive(SystemParam)].
Solution
Extend the derive macro to accept a #[system_param(builder)] attribute. When present, emit a builder type with a field corresponding to each field of the param.
Example
#[derive(SystemParam)]
#[system_param(builder)]
struct CustomParam<'w, 's> {
query: Query<'w, 's, ()>,
local: Local<'s, usize>,
}
let system = (CustomParamBuilder {
local: LocalBuilder(100),
query: QueryParamBuilder::new(|builder| {
builder.with::<A>();
}),
},)
.build_state(&mut world)
.build_system(|param: CustomParam| *param.local + param.query.iter().count());