mirror of
https://github.com/bevyengine/bevy
synced 2024-12-19 17:43:07 +00:00
Clarify inheritance behavior of required components (#16546)
Co-authored by: @BenjaminBrienen # Objective Fixes #16494. Closes #16539, which this replaces. Suggestions alone weren't enough, so now we have a new PR! --------- Co-authored-by: Joona Aalto <jondolf.dev@gmail.com>
This commit is contained in:
parent
696c00641f
commit
75c92fb47b
1 changed files with 3 additions and 3 deletions
|
@ -226,9 +226,9 @@ use derive_more::derive::{Display, Error};
|
|||
/// assert_eq!(2, world.entity(id).get::<X>().unwrap().0);
|
||||
/// ```
|
||||
///
|
||||
/// In general, this shouldn't happen often, but when it does the algorithm is simple and predictable:
|
||||
/// 1. Use all of the constructors (including default constructors) directly defined in the spawned component's require list
|
||||
/// 2. In the order the requires are defined in `#[require()]`, recursively visit the require list of each of the components in the list (this is a Depth First Search). When a constructor is found, it will only be used if one has not already been found.
|
||||
/// In general, this shouldn't happen often, but when it does the algorithm for choosing the constructor from the tree is simple and predictable:
|
||||
/// 1. A constructor from a direct `#[require()]`, if one exists, is selected with priority.
|
||||
/// 2. Otherwise, perform a Depth First Search on the tree of requirements and select the first one found.
|
||||
///
|
||||
/// From a user perspective, just think about this as the following:
|
||||
/// 1. Specifying a required component constructor for Foo directly on a spawned component Bar will result in that constructor being used (and overriding existing constructors lower in the inheritance tree). This is the classic "inheritance override" behavior people expect.
|
||||
|
|
Loading…
Reference in a new issue