Crates.io | set-with-grab |
lib.rs | set-with-grab |
version | 1.0.0 |
source | src |
created_at | 2023-02-18 06:25:54.837769 |
updated_at | 2023-02-18 06:25:54.837769 |
description | The macro to set state with error handling in bevy. |
homepage | |
repository | |
max_upload_size | |
id | 788039 |
size | 5,432 |
The crate is util for bevy in rust.
fn setter_with_grab(mut state: ResMut<State<MockState>>) {
// This is a macro of the crate!
set_with_grab!(state, MockState::After);
// if there is the under code, it will crash with running, but on testing, an error does not occurred.
// state.set(MockState::After).unwrap();
}
#[fixture]
fn app() -> App {
let mut app = App::new();
app.add_plugins(MinimalPlugins).add_state(MockState::Before);
app
}
#[rstest]
fn change_state_with_grab(mut app: App) {
app.add_system_set(
SystemSet::on_update(MockState::Before)
.with_system(setter_with_grab),
);
app.update();
let state = app.world.resource_mut::<State<MockState>>();
match state.current() {
MockState::After => {}
MockState::Before => {
panic!("the state is before, yet.");
}
}
}
set_with_grab!(stateResourceMutable,variantOfTheState);
The errors, StateError::StateAlreadyQueued, and StateError::AlreadyInState, are ignored.
Add, when other error occurred, the macro will throw a panic.
The crate serves a macro. This set a variant to passed state internally.
Why does internally? ――Because to ignore several errors.
But do not afraid this crate. These ignored is frequent errors even better code, because a system of bevy is called parallely. So the state mutation does not sync on some thread, and two errors, StateError::StateAlreadyQueued, and StateError::AlreadyInState, is occurred frequently.
And, the error handling is very dull. So, when like this, you can use this crate!
By the way, ignoring errors is called "nigiritsubusu" in japanese. The calling can translate to "crash with grabbing" in English. This is origin of the crate name.
MIT