pub struct ComponentsQueuedRegistrator<'w> { /* private fields */ }
Expand description
A type that enables queuing registration in Components
.
§Note
These queued registrations return ComponentId
s.
These ids are not yet valid, but they will become valid
when either ComponentsRegistrator::apply_queued_registrations
is called or the same registration is made directly.
In either case, the returned ComponentId
s will be correct, but they are not correct yet.
Generally, that means these ComponentId
s can be safely used for read-only purposes.
Modifying the contents of the world through these ComponentId
s directly without waiting for them to be fully registered
and without then confirming that they have been fully registered is not supported.
Hence, extra care is needed with these ComponentId
s to ensure all safety rules are followed.
As a rule of thumb, if you have mutable access to ComponentsRegistrator
, prefer to use that instead.
Use this only if you need to know the id of a component but do not need to modify the contents of the world based on that id.
Implementations§
Source§impl<'w> ComponentsQueuedRegistrator<'w>
impl<'w> ComponentsQueuedRegistrator<'w>
Sourcepub unsafe fn new(
components: &'w Components,
ids: &'w ComponentIds,
) -> ComponentsQueuedRegistrator<'w>
pub unsafe fn new( components: &'w Components, ids: &'w ComponentIds, ) -> ComponentsQueuedRegistrator<'w>
Constructs a new ComponentsQueuedRegistrator
.
§Safety
The Components
and ComponentIds
must match.
For example, they must be from the same world.
Sourcepub fn queue_register_component<T>(&self) -> ComponentIdwhere
T: Component,
pub fn queue_register_component<T>(&self) -> ComponentIdwhere
T: Component,
This is a queued version of ComponentsRegistrator::register_component
.
This will reserve an id and queue the registration.
These registrations will be carried out at the next opportunity.
If this has already been registered or queued, this returns the previous ComponentId
.
§Note
Technically speaking, the returned ComponentId
is not valid, but it will become valid later.
See type level docs for details.
Sourcepub fn queue_register_component_with_descriptor(
&self,
descriptor: ComponentDescriptor,
) -> ComponentId
pub fn queue_register_component_with_descriptor( &self, descriptor: ComponentDescriptor, ) -> ComponentId
This is a queued version of ComponentsRegistrator::register_component_with_descriptor
.
This will reserve an id and queue the registration.
These registrations will be carried out at the next opportunity.
§Note
Technically speaking, the returned ComponentId
is not valid, but it will become valid later.
See type level docs for details.
Sourcepub fn queue_register_resource<T>(&self) -> ComponentIdwhere
T: Resource,
pub fn queue_register_resource<T>(&self) -> ComponentIdwhere
T: Resource,
This is a queued version of ComponentsRegistrator::register_resource
.
This will reserve an id and queue the registration.
These registrations will be carried out at the next opportunity.
If this has already been registered or queued, this returns the previous ComponentId
.
§Note
Technically speaking, the returned ComponentId
is not valid, but it will become valid later.
See type level docs for details.
Sourcepub fn queue_register_non_send<T>(&self) -> ComponentIdwhere
T: Any,
pub fn queue_register_non_send<T>(&self) -> ComponentIdwhere
T: Any,
This is a queued version of ComponentsRegistrator::register_non_send
.
This will reserve an id and queue the registration.
These registrations will be carried out at the next opportunity.
If this has already been registered or queued, this returns the previous ComponentId
.
§Note
Technically speaking, the returned ComponentId
is not valid, but it will become valid later.
See type level docs for details.
Sourcepub fn queue_register_resource_with_descriptor(
&self,
descriptor: ComponentDescriptor,
) -> ComponentId
pub fn queue_register_resource_with_descriptor( &self, descriptor: ComponentDescriptor, ) -> ComponentId
This is a queued version of ComponentsRegistrator::register_resource_with_descriptor
.
This will reserve an id and queue the registration.
These registrations will be carried out at the next opportunity.
§Note
Technically speaking, the returned ComponentId
is not valid, but it will become valid later.
See type level docs for details.
Methods from Deref<Target = Components>§
Sourcepub fn len(&self) -> usize
pub fn len(&self) -> usize
Returns the number of components registered or queued with this instance.
Sourcepub fn is_empty(&self) -> bool
pub fn is_empty(&self) -> bool
Returns true
if there are no components registered or queued with this instance. Otherwise, this returns false
.
Sourcepub fn num_queued(&self) -> usize
pub fn num_queued(&self) -> usize
Returns the number of components registered with this instance.
Sourcepub fn any_queued(&self) -> bool
pub fn any_queued(&self) -> bool
Returns true
if there are any components registered with this instance. Otherwise, this returns false
.
Sourcepub fn num_registered(&self) -> usize
pub fn num_registered(&self) -> usize
Returns the number of components registered with this instance.
Sourcepub fn any_registered(&self) -> bool
pub fn any_registered(&self) -> bool
Returns true
if there are any components registered with this instance. Otherwise, this returns false
.
Sourcepub fn get_info(&self, id: ComponentId) -> Option<&ComponentInfo>
pub fn get_info(&self, id: ComponentId) -> Option<&ComponentInfo>
Gets the metadata associated with the given component, if it is registered.
This will return None
if the id is not regiserted or is queued.
This will return an incorrect result if id
did not come from the same world as self
. It may return None
or a garbage value.
Sourcepub fn get_descriptor<'a>(
&'a self,
id: ComponentId,
) -> Option<Cow<'a, ComponentDescriptor>>
pub fn get_descriptor<'a>( &'a self, id: ComponentId, ) -> Option<Cow<'a, ComponentDescriptor>>
Gets the ComponentDescriptor
of the component with this ComponentId
if it is present.
This will return None
only if the id is neither regisered nor queued to be registered.
Currently, the Cow
will be Cow::Owned
if and only if the component is queued. It will be Cow::Borrowed
otherwise.
This will return an incorrect result if id
did not come from the same world as self
. It may return None
or a garbage value.
Sourcepub fn get_name<'a>(&'a self, id: ComponentId) -> Option<Cow<'a, str>>
pub fn get_name<'a>(&'a self, id: ComponentId) -> Option<Cow<'a, str>>
Gets the name of the component with this ComponentId
if it is present.
This will return None
only if the id is neither regisered nor queued to be registered.
This will return an incorrect result if id
did not come from the same world as self
. It may return None
or a garbage value.
Sourcepub unsafe fn get_info_unchecked(&self, id: ComponentId) -> &ComponentInfo
pub unsafe fn get_info_unchecked(&self, id: ComponentId) -> &ComponentInfo
Gets the metadata associated with the given component.
§Safety
id
must be a valid and fully registered ComponentId
.
Sourcepub fn is_id_valid(&self, id: ComponentId) -> bool
pub fn is_id_valid(&self, id: ComponentId) -> bool
Returns true if the ComponentId
is fully registered and valid.
Ids may be invalid if they are still queued to be registered.
Those ids are still correct, but they are not usable in every context yet.
Sourcepub fn get_valid_id(&self, type_id: TypeId) -> Option<ComponentId>
pub fn get_valid_id(&self, type_id: TypeId) -> Option<ComponentId>
Type-erased equivalent of Components::valid_component_id()
.
Sourcepub fn valid_component_id<T>(&self) -> Option<ComponentId>where
T: Component,
pub fn valid_component_id<T>(&self) -> Option<ComponentId>where
T: Component,
Returns the ComponentId
of the given Component
type T
if it is fully registered.
If you want to include queued registration, see Components::component_id()
.
use bevy_ecs::prelude::*;
let mut world = World::new();
#[derive(Component)]
struct ComponentA;
let component_a_id = world.register_component::<ComponentA>();
assert_eq!(component_a_id, world.components().valid_component_id::<ComponentA>().unwrap())
§See also
Sourcepub fn get_valid_resource_id(&self, type_id: TypeId) -> Option<ComponentId>
pub fn get_valid_resource_id(&self, type_id: TypeId) -> Option<ComponentId>
Type-erased equivalent of Components::valid_resource_id()
.
Sourcepub fn valid_resource_id<T>(&self) -> Option<ComponentId>where
T: Resource,
pub fn valid_resource_id<T>(&self) -> Option<ComponentId>where
T: Resource,
Returns the ComponentId
of the given Resource
type T
if it is fully registered.
If you want to include queued registration, see Components::resource_id()
.
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().valid_resource_id::<ResourceA>().unwrap())
§See also
Sourcepub fn get_id(&self, type_id: TypeId) -> Option<ComponentId>
pub fn get_id(&self, type_id: TypeId) -> Option<ComponentId>
Type-erased equivalent of Components::component_id()
.
Sourcepub fn component_id<T>(&self) -> Option<ComponentId>where
T: Component,
pub fn component_id<T>(&self) -> Option<ComponentId>where
T: Component,
Returns the ComponentId
of the given Component
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 Component
type has not
yet been initialized using ComponentsRegistrator::register_component()
or ComponentsQueuedRegistrator::queue_register_component()
.
use bevy_ecs::prelude::*;
let mut world = World::new();
#[derive(Component)]
struct ComponentA;
let component_a_id = world.register_component::<ComponentA>();
assert_eq!(component_a_id, world.components().component_id::<ComponentA>().unwrap())
§See also
Sourcepub fn get_resource_id(&self, type_id: TypeId) -> Option<ComponentId>
pub fn get_resource_id(&self, type_id: TypeId) -> Option<ComponentId>
Type-erased equivalent of Components::resource_id()
.
Sourcepub fn resource_id<T>(&self) -> Option<ComponentId>where
T: Resource,
pub fn resource_id<T>(&self) -> Option<ComponentId>where
T: Resource,
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 ComponentsRegistrator::register_resource()
or ComponentsQueuedRegistrator::queue_register_resource()
.
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())
§See also
Sourcepub fn iter_registered(&self) -> impl Iterator<Item = &ComponentInfo>
pub fn iter_registered(&self) -> impl Iterator<Item = &ComponentInfo>
Gets an iterator over all components fully registered with this instance.
Trait Implementations§
Source§impl<'w> Clone for ComponentsQueuedRegistrator<'w>
impl<'w> Clone for ComponentsQueuedRegistrator<'w>
Source§fn clone(&self) -> ComponentsQueuedRegistrator<'w>
fn clone(&self) -> ComponentsQueuedRegistrator<'w>
1.0.0 · Source§fn clone_from(&mut self, source: &Self)
fn clone_from(&mut self, source: &Self)
source
. Read moreSource§impl Deref for ComponentsQueuedRegistrator<'_>
impl Deref for ComponentsQueuedRegistrator<'_>
Source§type Target = Components
type Target = Components
impl<'w> Copy for ComponentsQueuedRegistrator<'w>
Auto Trait Implementations§
impl<'w> Freeze for ComponentsQueuedRegistrator<'w>
impl<'w> !RefUnwindSafe for ComponentsQueuedRegistrator<'w>
impl<'w> !Send for ComponentsQueuedRegistrator<'w>
impl<'w> !Sync for ComponentsQueuedRegistrator<'w>
impl<'w> Unpin for ComponentsQueuedRegistrator<'w>
impl<'w> !UnwindSafe for ComponentsQueuedRegistrator<'w>
Blanket Implementations§
Source§impl<T, U> AsBindGroupShaderType<U> for T
impl<T, U> AsBindGroupShaderType<U> for T
Source§fn as_bind_group_shader_type(&self, _images: &RenderAssets<GpuImage>) -> U
fn as_bind_group_shader_type(&self, _images: &RenderAssets<GpuImage>) -> U
T
ShaderType
for self
. When used in AsBindGroup
derives, it is safe to assume that all images in self
exist.Source§impl<T> BorrowMut<T> for Twhere
T: ?Sized,
impl<T> BorrowMut<T> for Twhere
T: ?Sized,
Source§fn borrow_mut(&mut self) -> &mut T
fn borrow_mut(&mut self) -> &mut T
Source§impl<T> CloneToUninit for Twhere
T: Clone,
impl<T> CloneToUninit for Twhere
T: Clone,
Source§impl<T> Downcast for Twhere
T: Any,
impl<T> Downcast for Twhere
T: Any,
Source§fn into_any(self: Box<T>) -> Box<dyn Any>
fn into_any(self: Box<T>) -> Box<dyn Any>
Box<dyn Trait>
(where Trait: Downcast
) to Box<dyn Any>
, which can then be
downcast
into Box<dyn ConcreteType>
where ConcreteType
implements Trait
.Source§fn into_any_rc(self: Rc<T>) -> Rc<dyn Any>
fn into_any_rc(self: Rc<T>) -> Rc<dyn Any>
Rc<Trait>
(where Trait: Downcast
) to Rc<Any>
, which can then be further
downcast
into Rc<ConcreteType>
where ConcreteType
implements Trait
.Source§fn as_any(&self) -> &(dyn Any + 'static)
fn as_any(&self) -> &(dyn Any + 'static)
&Trait
(where Trait: Downcast
) to &Any
. This is needed since Rust cannot
generate &Any
’s vtable from &Trait
’s.Source§fn as_any_mut(&mut self) -> &mut (dyn Any + 'static)
fn as_any_mut(&mut self) -> &mut (dyn Any + 'static)
&mut Trait
(where Trait: Downcast
) to &Any
. This is needed since Rust cannot
generate &mut Any
’s vtable from &mut Trait
’s.Source§impl<T> Downcast for Twhere
T: Any,
impl<T> Downcast for Twhere
T: Any,
Source§fn into_any(self: Box<T>) -> Box<dyn Any>
fn into_any(self: Box<T>) -> Box<dyn Any>
Box<dyn Trait>
(where Trait: Downcast
) to Box<dyn Any>
. Box<dyn Any>
can
then be further downcast
into Box<ConcreteType>
where ConcreteType
implements Trait
.Source§fn into_any_rc(self: Rc<T>) -> Rc<dyn Any>
fn into_any_rc(self: Rc<T>) -> Rc<dyn Any>
Rc<Trait>
(where Trait: Downcast
) to Rc<Any>
. Rc<Any>
can then be
further downcast
into Rc<ConcreteType>
where ConcreteType
implements Trait
.Source§fn as_any(&self) -> &(dyn Any + 'static)
fn as_any(&self) -> &(dyn Any + 'static)
&Trait
(where Trait: Downcast
) to &Any
. This is needed since Rust cannot
generate &Any
’s vtable from &Trait
’s.Source§fn as_any_mut(&mut self) -> &mut (dyn Any + 'static)
fn as_any_mut(&mut self) -> &mut (dyn Any + 'static)
&mut Trait
(where Trait: Downcast
) to &Any
. This is needed since Rust cannot
generate &mut Any
’s vtable from &mut Trait
’s.Source§impl<T> Instrument for T
impl<T> Instrument for T
Source§fn instrument(self, span: Span) -> Instrumented<Self> ⓘ
fn instrument(self, span: Span) -> Instrumented<Self> ⓘ
Source§fn in_current_span(self) -> Instrumented<Self> ⓘ
fn in_current_span(self) -> Instrumented<Self> ⓘ
Source§impl<T> IntoEither for T
impl<T> IntoEither for T
Source§fn into_either(self, into_left: bool) -> Either<Self, Self> ⓘ
fn into_either(self, into_left: bool) -> Either<Self, Self> ⓘ
self
into a Left
variant of Either<Self, Self>
if into_left
is true
.
Converts self
into a Right
variant of Either<Self, Self>
otherwise. Read moreSource§fn into_either_with<F>(self, into_left: F) -> Either<Self, Self> ⓘ
fn into_either_with<F>(self, into_left: F) -> Either<Self, Self> ⓘ
self
into a Left
variant of Either<Self, Self>
if into_left(&self)
returns true
.
Converts self
into a Right
variant of Either<Self, Self>
otherwise. Read more