1个稳定版本
1.0.0 | 2023年2月18日 |
---|
#1000 在 游戏开发
5KB
52 行
使用抓取设置
这个crate是Rust中bevy的实用工具。
示例
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);
错误,StateError::StateAlreadyQueued和StateError::AlreadyInState将被忽略。
当发生其他错误时,宏将抛出panic。
详情
这个crate提供了一个宏。这个宏在内部将一个变体设置到传递的状态。
为什么是内部操作?——因为要忽略几个错误。
但是不要害怕这个crate。这些被忽略的错误即使在更好的代码中也很常见,因为bevy的系统是并行调用的。因此状态的变化不会在某些线程上同步,并且两个错误,StateError::StateAlreadyQueued和StateError::AlreadyInState,会频繁发生。
此外,错误处理非常无聊。所以,当你喜欢这样的时候,你可以使用这个crate!
顺便说一句,忽略错误在日语中被称为“にぎりつぶす”。这种调用可以翻译成英语中的“抓取崩溃”。这是crate名称的由来。
许可协议
MIT
依赖项
~1.5MB
~36K SLoC