| Crates.io | bevy_2settings_macro |
| lib.rs | bevy_2settings_macro |
| version | 0.0.1 |
| created_at | 2025-06-21 08:20:31.003422+00 |
| updated_at | 2025-06-21 08:20:31.003422+00 |
| description | A simple settings system for bevy |
| homepage | |
| repository | https://github.com/CoolSlimbo/bevy_2settings |
| max_upload_size | |
| id | 1720628 |
| size | 19,910 |
What bevy_2settings offers:
| Bevy | bevy_2settings |
|---|---|
| 0.16 | 0.0.1 |
bevy_2settings to your Cargo.toml (bevy_2settings = 0.0.1).Settings, Resource, Serialize and Reflect on your settings struct.use bevy::prelude::*;
use bevy_2settings::prelude::*;
use serde::{Deserialize, Serialize};
#[derive(Settings, Resource, Serialize, Debug, Reflect)]
struct Test {
/// Testing Description!
///
/// NEW LINE!!
#[settings(name = "Big Screen", default = test_system, predicate = pred)]
fullscreen: bool,
#[settings(name = "Nested Test", nested)]
nested: NestedTest,
}
#[derive(Settings, Serialize, Debug, Reflect)]
struct NestedTest {
#[settings(name = "No Screen")]
anti_screen: bool,
#[settings(name = "Control Selector", default = || bevy_ok(ControlSelector::Keyboard))]
control_selector: ControlSelector,
}
#[derive(Clone, Serialize, Deserialize, Debug, Reflect)]
enum ControlSelector {
Keyboard,
Mouse,
}
fn test_system() -> Result<bool, BevyError> {
Ok(true)
}
fn pred() -> Result<bool, BevyError> {
Ok(true)
}
fn main() {
App::new()
.add_plugins(DefaultPlugins)
.add_plugins(Test::with_configurator(TomlFileConfiguration::default()))
.add_systems(Update, (get_settings, space_pressed))
.run();
}
fn get_settings(settings: Res<Test>) {
println!("{settings:?}");
}
fn space_pressed(keys: Res<ButtonInput<KeyCode>>, mut settings: ResMut<Test>) {
if keys.just_pressed(KeyCode::Space) {
settings.nested.anti_screen = !settings.nested.anti_screen;
}
if keys.just_pressed(KeyCode::ArrowLeft) {
settings
.set_value("nested.control_selector", &ControlSelector::Mouse)
.unwrap();
}
if keys.just_released(KeyCode::ArrowRight) {
settings
.set_value("nested.control_selector", &ControlSelector::Keyboard)
.unwrap();
}
}
The macro can be used in the following ways:
#[derive(Settings)]
#[settings(rename = "New Internal Name", styling(...))]
struct Potato {
#[settings(
name = "",
styling(...),
default = Potatoes,
default = || bevy_ok(Potatoes),
default = false, // Allowed, given the field is a literal of some form,
predicate = false, // Shares what default does.
nested
)]
field: Potatoes
}
struct Potatoes;