mirror of
https://github.com/bevyengine/bevy
synced 2024-11-10 15:14:50 +00:00
Added resource_id
and changed init_resource
and init_non_send_resource
to return ComponentId
(#7284)
# Objective - `Components::resource_id` doesn't exist. Like `Components::component_id` but for resources. ## Solution - Created `Components::resource_id` and added some docs. --- ## Changelog - Added `Components::resource_id`. - Changed `World::init_resource` to return the generated `ComponentId`. - Changed `World::init_non_send_resource` to return the generated `ComponentId`.
This commit is contained in:
parent
02637b609e
commit
eda3ffb0af
2 changed files with 34 additions and 5 deletions
|
@ -498,6 +498,7 @@ impl Components {
|
|||
self.get_id(TypeId::of::<T>())
|
||||
}
|
||||
|
||||
/// Type-erased equivalent of [`Components::resource_id`].
|
||||
#[inline]
|
||||
pub fn get_resource_id(&self, type_id: TypeId) -> Option<ComponentId> {
|
||||
self.resource_indices
|
||||
|
@ -505,6 +506,32 @@ impl Components {
|
|||
.map(|index| ComponentId(*index))
|
||||
}
|
||||
|
||||
/// Returns the [`ComponentId`] of the given [`Resource`] type `T`.
|
||||
///
|
||||
/// The returned `ComponentId` is specific to the `Components` instance
|
||||
/// it was retrieved from and should not be used with another `Components`
|
||||
/// instance.
|
||||
///
|
||||
/// Returns [`None`] if the `Resource` type has not
|
||||
/// yet been initialized using [`Components::init_resource`].
|
||||
///
|
||||
/// ```rust
|
||||
/// use bevy_ecs::prelude::*;
|
||||
///
|
||||
/// let mut world = World::new();
|
||||
///
|
||||
/// #[derive(Resource, Default)]
|
||||
/// struct ResourceA;
|
||||
///
|
||||
/// let resource_a_id = world.init_resource::<ResourceA>();
|
||||
///
|
||||
/// assert_eq!(resource_a_id, world.components().resource_id::<ResourceA>().unwrap())
|
||||
/// ```
|
||||
#[inline]
|
||||
pub fn resource_id<T: Resource>(&self) -> Option<ComponentId> {
|
||||
self.get_resource_id(TypeId::of::<T>())
|
||||
}
|
||||
|
||||
#[inline]
|
||||
pub fn init_resource<T: Resource>(&mut self) -> ComponentId {
|
||||
// SAFETY: The [`ComponentDescriptor`] matches the [`TypeId`]
|
||||
|
|
|
@ -769,15 +769,15 @@ impl World {
|
|||
}
|
||||
}
|
||||
|
||||
/// Inserts a new resource with standard starting values.
|
||||
/// Initializes a new resource and returns the [`ComponentId`] created for it.
|
||||
///
|
||||
/// If the resource already exists, nothing happens.
|
||||
///
|
||||
/// The value given by the [`FromWorld::from_world`] method will be used.
|
||||
/// Note that any resource with the `Default` trait automatically implements `FromWorld`,
|
||||
/// Note that any resource with the [`Default`] trait automatically implements [`FromWorld`],
|
||||
/// and those default values will be here instead.
|
||||
#[inline]
|
||||
pub fn init_resource<R: Resource + FromWorld>(&mut self) {
|
||||
pub fn init_resource<R: Resource + FromWorld>(&mut self) -> ComponentId {
|
||||
let component_id = self.components.init_resource::<R>();
|
||||
if self
|
||||
.storages
|
||||
|
@ -793,6 +793,7 @@ impl World {
|
|||
}
|
||||
});
|
||||
}
|
||||
component_id
|
||||
}
|
||||
|
||||
/// Inserts a new resource with the given `value`.
|
||||
|
@ -811,7 +812,7 @@ impl World {
|
|||
});
|
||||
}
|
||||
|
||||
/// Inserts a new non-send resource with standard starting values.
|
||||
/// Initializes a new non-send resource and returns the [`ComponentId`] created for it.
|
||||
///
|
||||
/// If the resource already exists, nothing happens.
|
||||
///
|
||||
|
@ -823,7 +824,7 @@ impl World {
|
|||
///
|
||||
/// Panics if called from a thread other than the main thread.
|
||||
#[inline]
|
||||
pub fn init_non_send_resource<R: 'static + FromWorld>(&mut self) {
|
||||
pub fn init_non_send_resource<R: 'static + FromWorld>(&mut self) -> ComponentId {
|
||||
let component_id = self.components.init_non_send::<R>();
|
||||
if self
|
||||
.storages
|
||||
|
@ -839,6 +840,7 @@ impl World {
|
|||
}
|
||||
});
|
||||
}
|
||||
component_id
|
||||
}
|
||||
|
||||
/// Inserts a new non-send resource with the given `value`.
|
||||
|
|
Loading…
Reference in a new issue