Introduce public World::register_dynamic_bundle
method (#18198)
Registering dynamic bundles was not possible for the user yet. It is alone not very useful though as there are no methods to clone, move or remove components via a `BundleId`. This could be a follow-up work if this PR is approved and such a third (besides `T: Bundle` and `ComponentId`(s)) API for structural operation is desired. I certainly would use a hypothetical `EntityClonerBuilder::allow_by_bundle_id`. I personally still would like this register method because I have a `Bundles`-like custom data structure and I would like to not reinvent the wheel. Then instead of having boxed `ComponentId` slices in my collection I could look up explicit and required components there. For reference scroll up to the typed version right above the new one.
This commit is contained in:
parent
18f543474d
commit
ca6630a24a
@ -3117,6 +3117,25 @@ impl World {
|
|||||||
// SAFETY: We just initialized the bundle so its id should definitely be valid.
|
// SAFETY: We just initialized the bundle so its id should definitely be valid.
|
||||||
unsafe { self.bundles.get(id).debug_checked_unwrap() }
|
unsafe { self.bundles.get(id).debug_checked_unwrap() }
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/// Registers the given [`ComponentId`]s as a dynamic bundle and returns both the required component ids and the bundle id.
|
||||||
|
///
|
||||||
|
/// Note that the components need to be registered first, this function only creates a bundle combining them. Components
|
||||||
|
/// can be registered with [`World::register_component`]/[`_with_descriptor`](World::register_component_with_descriptor).
|
||||||
|
///
|
||||||
|
/// **You should prefer to use the typed API [`World::register_bundle`] where possible and only use this in cases where
|
||||||
|
/// not all of the actual types are known at compile time.**
|
||||||
|
///
|
||||||
|
/// # Panics
|
||||||
|
/// This function will panic if any of the provided component ids do not belong to a component known to this [`World`].
|
||||||
|
#[inline]
|
||||||
|
pub fn register_dynamic_bundle(&mut self, component_ids: &[ComponentId]) -> &BundleInfo {
|
||||||
|
let id =
|
||||||
|
self.bundles
|
||||||
|
.init_dynamic_info(&mut self.storages, &self.components, component_ids);
|
||||||
|
// SAFETY: We just initialized the bundle so its id should definitely be valid.
|
||||||
|
unsafe { self.bundles.get(id).debug_checked_unwrap() }
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
impl World {
|
impl World {
|
||||||
|
Loading…
Reference in New Issue
Block a user