A bevy plugin for configuration management.
- Scalar: A non-composite config type, e.g. a number, string, color, direction, etc.
- Root field: A top-level config field directly registered to the app.
- Manager: A plugin that works on scalar config fields.
- Reader: A type derived from
#[derive(Config)]that can be used to access config values throughReadConfigin systems.
Declare one or more config hierarchies with #[derive(Config)]:
#[derive(Config)]
struct Foo {
thickness: i32,
color: Color,
}
#[derive(Config)]
#[config(expose(read))] // Expose the generated `ColorRead`
enum Color {
White,
Black,
}Initialize the root field with App::init_config:
type ManagerType = (Manager1, Manager2, ...);
bevy_mod_config::ScalarManager,
)
app.init_config::<ManagerType, Foo>("foo");Root fields can be accessed from systems using ReadConfig:
fn my_system(foo: ReadConfig<Foo>) {
let foo = foo.read();
assert_eq!(foo.thickness, 3);
assert!(matches!(foo.color, ColorRead::White));
}Note that read() returns the Reader type instead of the original type
(similar to how #[derive(QueryData)] gives XxxItem to systems).
This may have an impact on matching and passing values around.
The Reader type may be accessed as <Foo as ConfigField>::Read<'_>,
or directly exposed with #[config(expose(read))] after the derive.
Managers enable systematic management of scalar config fields.
- Storage:
bevy_mod_config::manager::Serdeexposes APIs to load/save config values to/from serialized data.
- Editors:
bevy_mod_config::manager::EguiEditorprovides an in-gameeguieditor to modify config values live.