#bevy #schedules #bevy-plugin #ecs #schedule #order #plugin

bevy_schedules_ext

Bevy插件,用于扩展计划的使用

4个版本

新版本 0.14.1 2024年8月7日
0.13.2 2024年3月17日
0.13.1 2024年2月29日
0.13.0 2024年2月26日

#1 in #schedules

Download history 12/week @ 2024-07-29 114/week @ 2024-08-05

每月126次下载

MIT/Apache

21KB
283

Bevy Schedules,改进版

添加功能到Bevy现有的计划,允许嵌套并使用计划作为系统分组和排序的集合替代。

扩展Bevy现有结构,无需.add_plugin或管理新资源。

特性

嵌套

嵌套一个或多个计划

使用bevy_schedules_ext Vanilla bevy
// Schedules can be added to other schedules
app.add_schedules(Update, Child);
app.add_schedules(Child, (GrandchildOne, GrandchildTwo));

// Add systems to schedules directly, no appending `.in_set(...)` to everything!
app.add_systems(Update, update_system);
app.add_systems(Child, child_system);
app.add_systems(GrandchildOne, grandchild_system_one);
app.add_systems(GrandchildTwo, grandchild_system_two);
// Sets configured manually, Update must be prepended to everything
app.configure_sets(Update, Child);
app.configure_sets(Update, (GrandchildOne, GrandchildTwo).chain().in_set(Child));

// Adding systems to sets requires `.in_set(...)`
app.add_systems(Update, update_system);
app.add_systems(Update, child_system.in_set(Child));
app.add_systems(Update, grandchild_system_one.in_set(GrandchildOne));
app.add_systems(Update, grandchild_system_two.in_set(GrandchildTwo));

所有系统将在Bevy的更新循环中运行,无需手动在自定义计划上调用run

一个完整的示例在examples/nested_schedules.rs中。

状态

使用Bevy的状态作为计划,因此您可以将系统添加到您的状态,并在状态活动时运行它们,无需运行条件。

使用bevy_schedules_ext Vanilla bevy
// Init state and add it to our Update loop
app.init_state_to_schedule::<GameState>(Update);

// Add systems to the specific states
app.add_systems(GameState::Menu, menu_system);
app.add_systems(GameState::Playing, playing_system);
// Initialize the state, pretty much the same
app.init_state::<GameState>();

// Add systems to our update loop, but we need to check on every frame if the state is active
app.add_systems(Update, menu_system.run_if(in_state(GameState::Menu)));
app.add_systems(Update, playing_system.run_if(in_state(GameState::Playing)));

一个完整的示例在examples/states.rs中。

缺点

由于运行计划需要独占世界访问,计划无法并行运行。因此,当不同分组中的系统需要并行运行时,嵌套或使用计划状态将阻止这一点。理想情况下,您会结合使用此存储库和Vanilla Bevy,使用计划来包含较大的系统分组,而Vanilla Bevy来处理可能重叠的组。

Bevy兼容性

Bevy版本 bevy_schedules_ext版本
main分支 master分支
0.14.1 0.14.1
0.13 0.13

注意:此存储库的新版本可能适用于较旧的Bevy版本,反之亦然,但这尚未经过测试,您需要做额外的工作(例如,修补Cargo.toml以匹配版本)。

许可证

此存储库中的所有代码均在以下两者下双许可

您可以选择您喜欢的许可证。

您的贡献

除非您明确说明,否则根据Apache-2.0许可证定义的,您有意提交以包含在工作中的任何贡献都应如上所述双许可,无需任何附加条款或条件。

依赖关系

~7–10MB
~176K SLoC