bevy icon indicating copy to clipboard operation
bevy copied to clipboard

SystemParamBuilder - Allow deriving a SystemParamBuilder struct when deriving SytemParam.

Open chescock opened this issue 1 year ago • 0 comments

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());

chescock avatar Aug 19 '24 18:08 chescock