Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

[Merged by Bors] - Many-to-many system labels #1576

Closed
wants to merge 6 commits into from

Conversation

Ratysz
Copy link
Contributor

@Ratysz Ratysz commented Mar 6, 2021

  • Systems can now have more than one label attached to them.
  • System labels no longer have to be unique in the stage.

Code like this is now possible:

SystemStage::parallel()
    .with_system(system_0.system().label("group one").label("first"))
    .with_system(system_1.system().label("group one").after("first"))
    .with_system(system_2.system().after("group one"))

I've opted to use only the system name in ambiguity reporting, which previously was only a fallback; this, obviously, is because labels aren't one-to-one with systems anymore. We could allow users to name systems to improve this; we'll then have to think about whether or not we want to allow using the name as a label (this would, effectively, introduce implicit labelling, not all implications of which are clear to me yet wrt many-to-many labels).

Dependency cycle errors are reported using the system names and only the labels that form the cycle, with each system-system "edge" in the cycle represented as one or several labels.

Slightly unrelated: .before() and .after() with a label not attached to any system no longer crashes, and logs a warning instead. This is necessary to, for example, allow plugins to specify execution order with systems of potentially missing other plugins.

made display names always resolve to systems' names, renamed relevant methods accordingly; minor rearrangements in system_container.
@Ratysz Ratysz added A-ECS Entities, components, systems, and events C-Enhancement A new feature labels Mar 6, 2021
crates/bevy_ecs/src/schedule/stage.rs Outdated Show resolved Hide resolved
@TheRawMeatball TheRawMeatball added the S-Ready-For-Final-Review This PR has been approved by the community. It's ready for a maintainer to consider merging it label Mar 7, 2021
crates/bevy_ecs/src/schedule/stage.rs Outdated Show resolved Hide resolved
Copy link
Member

@cart cart left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Looks good to me. Just some nits!

crates/bevy_ecs/src/schedule/system_descriptor.rs Outdated Show resolved Hide resolved
crates/bevy_ecs/src/schedule/stage.rs Outdated Show resolved Hide resolved
crates/bevy_ecs/src/schedule/stage.rs Outdated Show resolved Hide resolved
@cart
Copy link
Member

cart commented Mar 9, 2021

bors r+

bors bot pushed a commit that referenced this pull request Mar 9, 2021
* Systems can now have more than one label attached to them.
* System labels no longer have to be unique in the stage.

Code like this is now possible:
```rust
SystemStage::parallel()
    .with_system(system_0.system().label("group one").label("first"))
    .with_system(system_1.system().label("group one").after("first"))
    .with_system(system_2.system().after("group one"))
```

I've opted to use only the system name in ambiguity reporting, which previously was only a fallback; this, obviously, is because labels aren't one-to-one with systems anymore. We could allow users to name systems to improve this; we'll then have to think about whether or not we want to allow using the name as a label (this would, effectively, introduce implicit labelling, not all implications of which are clear to me yet wrt many-to-many labels).

Dependency cycle errors are reported using the system names and only the labels that form the cycle, with each system-system "edge" in the cycle represented as one or several labels.

Slightly unrelated: `.before()` and `.after()` with a label not attached to any system no longer crashes, and logs a warning instead. This is necessary to, for example, allow plugins to specify execution order with systems of potentially missing other plugins.
@bors
Copy link
Contributor

bors bot commented Mar 9, 2021

@bors bors bot changed the title Many-to-many system labels [Merged by Bors] - Many-to-many system labels Mar 9, 2021
@bors bors bot closed this Mar 9, 2021
@Ratysz Ratysz deleted the many-to-many_system_labels branch March 10, 2021 15:35
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
A-ECS Entities, components, systems, and events C-Enhancement A new feature S-Ready-For-Final-Review This PR has been approved by the community. It's ready for a maintainer to consider merging it
Projects
None yet
Development

Successfully merging this pull request may close these issues.

5 participants