1个稳定版本

1.0.0 2023年2月18日

#1000游戏开发

MIT 协议

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