pub struct Hovered(pub bool);
Expand description
A component that allows users to use regular Bevy change detection to determine when the pointer enters or leaves an entity. Users should insert this component on an entity to indicate interest in knowing about hover state changes.
The component’s boolean value will be true
whenever the pointer is currently directly hovering
over the entity, or any of the entity’s descendants (as defined by the ChildOf
relationship). This is consistent with the behavior of the CSS :hover
pseudo-class, which
applies to the element and all of its descendants.
The contained boolean value is guaranteed to only be mutated when the pointer enters or leaves
the entity, allowing Bevy change detection to be used efficiently. This is in contrast to the
HoverMap
resource, which is updated every frame.
Typically, a simple hoverable entity or widget will have this component added to it. More complex widgets can have this component added to each hoverable part.
The computational cost of keeping the Hovered
components up to date is relatively cheap, and
linear in the number of entities that have the Hovered
component inserted.
Tuple Fields§
§0: bool
Implementations§
Source§impl Hovered
impl Hovered
Sourcepub fn get(&self) -> bool
pub fn get(&self) -> bool
Get whether the entity is currently hovered.
Examples found in repository?
210fn update_button_style(
211 mut buttons: Query<
212 (
213 Has<Pressed>,
214 &Hovered,
215 Has<InteractionDisabled>,
216 &mut BackgroundColor,
217 &mut BorderColor,
218 &Children,
219 ),
220 (
221 Or<(
222 Changed<Pressed>,
223 Changed<Hovered>,
224 Added<InteractionDisabled>,
225 )>,
226 With<DemoButton>,
227 ),
228 >,
229 mut text_query: Query<&mut Text>,
230) {
231 for (pressed, hovered, disabled, mut color, mut border_color, children) in &mut buttons {
232 let mut text = text_query.get_mut(children[0]).unwrap();
233 set_button_style(
234 disabled,
235 hovered.get(),
236 pressed,
237 &mut color,
238 &mut border_color,
239 &mut text,
240 );
241 }
242}
243
244/// Supplementary system to detect removed marker components
245fn update_button_style2(
246 mut buttons: Query<
247 (
248 Has<Pressed>,
249 &Hovered,
250 Has<InteractionDisabled>,
251 &mut BackgroundColor,
252 &mut BorderColor,
253 &Children,
254 ),
255 With<DemoButton>,
256 >,
257 mut removed_depressed: RemovedComponents<Pressed>,
258 mut removed_disabled: RemovedComponents<InteractionDisabled>,
259 mut text_query: Query<&mut Text>,
260) {
261 removed_depressed
262 .read()
263 .chain(removed_disabled.read())
264 .for_each(|entity| {
265 if let Ok((pressed, hovered, disabled, mut color, mut border_color, children)) =
266 buttons.get_mut(entity)
267 {
268 let mut text = text_query.get_mut(children[0]).unwrap();
269 set_button_style(
270 disabled,
271 hovered.get(),
272 pressed,
273 &mut color,
274 &mut border_color,
275 &mut text,
276 );
277 }
278 });
279}
More examples
161fn button_on_interaction<E: EntityEvent, C: Component>(
162 event: On<E, C>,
163 mut buttons: Query<
164 (
165 &Hovered,
166 Has<InteractionDisabled>,
167 Has<Pressed>,
168 &mut BackgroundColor,
169 &mut BorderColor,
170 &Children,
171 ),
172 With<DemoButton>,
173 >,
174 mut text_query: Query<&mut Text>,
175) {
176 if let Ok((hovered, disabled, pressed, mut color, mut border_color, children)) =
177 buttons.get_mut(event.event_target())
178 {
179 if children.is_empty() {
180 return;
181 }
182 let Ok(mut text) = text_query.get_mut(children[0]) else {
183 return;
184 };
185 let hovered = hovered.get();
186 // These "removal event checks" exist because the `Remove` event is triggered _before_ the component is actually
187 // removed, meaning it still shows up in the query. We're investigating the best way to improve this scenario.
188 let pressed = pressed && !(E::is::<Remove>() && C::is::<Pressed>());
189 let disabled = disabled && !(E::is::<Remove>() && C::is::<InteractionDisabled>());
190 match (disabled, hovered, pressed) {
191 // Disabled button
192 (true, _, _) => {
193 **text = "Disabled".to_string();
194 *color = NORMAL_BUTTON.into();
195 border_color.set_all(GRAY);
196 }
197
198 // Pressed and hovered button
199 (false, true, true) => {
200 **text = "Press".to_string();
201 *color = PRESSED_BUTTON.into();
202 border_color.set_all(RED);
203 }
204
205 // Hovered, unpressed button
206 (false, true, false) => {
207 **text = "Hover".to_string();
208 *color = HOVERED_BUTTON.into();
209 border_color.set_all(WHITE);
210 }
211
212 // Unhovered button (either pressed or not).
213 (false, false, _) => {
214 **text = "Button".to_string();
215 *color = NORMAL_BUTTON.into();
216 border_color.set_all(BLACK);
217 }
218 }
219 }
220}
221
222/// Create a demo slider
223fn slider(min: f32, max: f32, value: f32) -> impl Bundle {
224 (
225 Node {
226 display: Display::Flex,
227 flex_direction: FlexDirection::Column,
228 justify_content: JustifyContent::Center,
229 align_items: AlignItems::Stretch,
230 justify_items: JustifyItems::Center,
231 column_gap: px(4),
232 height: px(12),
233 width: percent(30),
234 ..default()
235 },
236 Name::new("Slider"),
237 Hovered::default(),
238 DemoSlider,
239 Slider::default(),
240 SliderValue(value),
241 SliderRange::new(min, max),
242 TabIndex(0),
243 Children::spawn((
244 // Slider background rail
245 Spawn((
246 Node {
247 height: px(6),
248 ..default()
249 },
250 BackgroundColor(SLIDER_TRACK), // Border color for the checkbox
251 BorderRadius::all(px(3)),
252 )),
253 // Invisible track to allow absolute placement of thumb entity. This is narrower than
254 // the actual slider, which allows us to position the thumb entity using simple
255 // percentages, without having to measure the actual width of the slider thumb.
256 Spawn((
257 Node {
258 display: Display::Flex,
259 position_type: PositionType::Absolute,
260 left: px(0),
261 // Track is short by 12px to accommodate the thumb.
262 right: px(12),
263 top: px(0),
264 bottom: px(0),
265 ..default()
266 },
267 children![(
268 // Thumb
269 DemoSliderThumb,
270 SliderThumb,
271 Node {
272 display: Display::Flex,
273 width: px(12),
274 height: px(12),
275 position_type: PositionType::Absolute,
276 left: percent(0), // This will be updated by the slider's value
277 ..default()
278 },
279 BorderRadius::MAX,
280 BackgroundColor(SLIDER_THUMB),
281 )],
282 )),
283 )),
284 )
285}
286
287fn slider_on_interaction<E: EntityEvent, C: Component>(
288 event: On<E, C>,
289 sliders: Query<(Entity, &Hovered, Has<InteractionDisabled>), With<DemoSlider>>,
290 children: Query<&Children>,
291 mut thumbs: Query<(&mut BackgroundColor, Has<DemoSliderThumb>), Without<DemoSlider>>,
292) {
293 if let Ok((slider_ent, hovered, disabled)) = sliders.get(event.event_target()) {
294 // These "removal event checks" exist because the `Remove` event is triggered _before_ the component is actually
295 // removed, meaning it still shows up in the query. We're investigating the best way to improve this scenario.
296 let disabled = disabled && !(E::is::<Remove>() && C::is::<InteractionDisabled>());
297 for child in children.iter_descendants(slider_ent) {
298 if let Ok((mut thumb_bg, is_thumb)) = thumbs.get_mut(child)
299 && is_thumb
300 {
301 thumb_bg.0 = thumb_color(disabled, hovered.0);
302 }
303 }
304 }
305}
306
307fn slider_on_change_value<C: Component>(
308 insert: On<Insert, C>,
309 sliders: Query<(Entity, &SliderValue, &SliderRange), With<DemoSlider>>,
310 children: Query<&Children>,
311 mut thumbs: Query<(&mut Node, Has<DemoSliderThumb>), Without<DemoSlider>>,
312) {
313 if let Ok((slider_ent, value, range)) = sliders.get(insert.entity) {
314 for child in children.iter_descendants(slider_ent) {
315 if let Ok((mut thumb_node, is_thumb)) = thumbs.get_mut(child)
316 && is_thumb
317 {
318 thumb_node.left = percent(range.thumb_position(value.0) * 100.0);
319 }
320 }
321 }
322}
323
324fn thumb_color(disabled: bool, hovered: bool) -> Color {
325 match (disabled, hovered) {
326 (true, _) => GRAY.into(),
327
328 (false, true) => SLIDER_THUMB.lighter(0.3),
329
330 _ => SLIDER_THUMB,
331 }
332}
333
334/// Create a demo checkbox
335fn checkbox(asset_server: &AssetServer, caption: &str) -> impl Bundle {
336 (
337 Node {
338 display: Display::Flex,
339 flex_direction: FlexDirection::Row,
340 justify_content: JustifyContent::FlexStart,
341 align_items: AlignItems::Center,
342 align_content: AlignContent::Center,
343 column_gap: px(4),
344 ..default()
345 },
346 Name::new("Checkbox"),
347 Hovered::default(),
348 DemoCheckbox,
349 Checkbox,
350 TabIndex(0),
351 Children::spawn((
352 Spawn((
353 // Checkbox outer
354 Node {
355 display: Display::Flex,
356 width: px(16),
357 height: px(16),
358 border: UiRect::all(px(2)),
359 ..default()
360 },
361 BorderColor::all(CHECKBOX_OUTLINE), // Border color for the checkbox
362 BorderRadius::all(px(3)),
363 children![
364 // Checkbox inner
365 (
366 Node {
367 display: Display::Flex,
368 width: px(8),
369 height: px(8),
370 position_type: PositionType::Absolute,
371 left: px(2),
372 top: px(2),
373 ..default()
374 },
375 BackgroundColor(Srgba::NONE.into()),
376 ),
377 ],
378 )),
379 Spawn((
380 Text::new(caption),
381 TextFont {
382 font: asset_server.load("fonts/FiraSans-Bold.ttf"),
383 font_size: 20.0,
384 ..default()
385 },
386 )),
387 )),
388 )
389}
390
391fn checkbox_on_interaction<E: EntityEvent, C: Component>(
392 event: On<E, C>,
393 checkboxes: Query<
394 (&Hovered, Has<InteractionDisabled>, Has<Checked>, &Children),
395 With<DemoCheckbox>,
396 >,
397 mut borders: Query<(&mut BorderColor, &mut Children), Without<DemoCheckbox>>,
398 mut marks: Query<&mut BackgroundColor, (Without<DemoCheckbox>, Without<Children>)>,
399) {
400 if let Ok((hovered, disabled, checked, children)) = checkboxes.get(event.event_target()) {
401 let hovered = hovered.get();
402 // These "removal event checks" exist because the `Remove` event is triggered _before_ the component is actually
403 // removed, meaning it still shows up in the query. We're investigating the best way to improve this scenario.
404 let checked = checked && !(E::is::<Remove>() && C::is::<Checked>());
405 let disabled = disabled && !(E::is::<Remove>() && C::is::<InteractionDisabled>());
406
407 let Some(border_id) = children.first() else {
408 return;
409 };
410
411 let Ok((mut border_color, border_children)) = borders.get_mut(*border_id) else {
412 return;
413 };
414
415 let Some(mark_id) = border_children.first() else {
416 warn!("Checkbox does not have a mark entity.");
417 return;
418 };
419
420 let Ok(mut mark_bg) = marks.get_mut(*mark_id) else {
421 warn!("Checkbox mark entity lacking a background color.");
422 return;
423 };
424
425 let color: Color = if disabled {
426 // If the checkbox is disabled, use a lighter color
427 CHECKBOX_OUTLINE.with_alpha(0.2)
428 } else if hovered {
429 // If hovering, use a lighter color
430 CHECKBOX_OUTLINE.lighter(0.2)
431 } else {
432 // Default color for the checkbox
433 CHECKBOX_OUTLINE
434 };
435
436 // Update the background color of the check mark
437 border_color.set_all(color);
438
439 let mark_color: Color = match (disabled, checked) {
440 (true, true) => CHECKBOX_CHECK.with_alpha(0.5),
441 (false, true) => CHECKBOX_CHECK,
442 (_, false) => Srgba::NONE.into(),
443 };
444
445 if mark_bg.0 != mark_color {
446 // Update the color of the check mark
447 mark_bg.0 = mark_color;
448 }
449 }
450}
Trait Implementations§
Source§impl Component for Hovered
impl Component for Hovered
Source§const STORAGE_TYPE: StorageType = bevy_ecs::component::StorageType::Table
const STORAGE_TYPE: StorageType = bevy_ecs::component::StorageType::Table
Source§type Mutability = Immutable
type Mutability = Immutable
Component<Mutability = Mutable>
,
while immutable components will instead have Component<Mutability = Immutable>
. Read moreSource§fn register_required_components(
_requiree: ComponentId,
required_components: &mut RequiredComponentsRegistrator<'_, '_>,
)
fn register_required_components( _requiree: ComponentId, required_components: &mut RequiredComponentsRegistrator<'_, '_>, )
Source§fn clone_behavior() -> ComponentCloneBehavior
fn clone_behavior() -> ComponentCloneBehavior
Source§fn on_add() -> Option<for<'w> fn(DeferredWorld<'w>, HookContext)>
fn on_add() -> Option<for<'w> fn(DeferredWorld<'w>, HookContext)>
Source§fn on_insert() -> Option<for<'w> fn(DeferredWorld<'w>, HookContext)>
fn on_insert() -> Option<for<'w> fn(DeferredWorld<'w>, HookContext)>
Source§fn on_replace() -> Option<for<'w> fn(DeferredWorld<'w>, HookContext)>
fn on_replace() -> Option<for<'w> fn(DeferredWorld<'w>, HookContext)>
Source§fn on_remove() -> Option<for<'w> fn(DeferredWorld<'w>, HookContext)>
fn on_remove() -> Option<for<'w> fn(DeferredWorld<'w>, HookContext)>
Source§fn on_despawn() -> Option<for<'w> fn(DeferredWorld<'w>, HookContext)>
fn on_despawn() -> Option<for<'w> fn(DeferredWorld<'w>, HookContext)>
Source§fn map_entities<E>(_this: &mut Self, _mapper: &mut E)where
E: EntityMapper,
fn map_entities<E>(_this: &mut Self, _mapper: &mut E)where
E: EntityMapper,
EntityMapper
. This is used to remap entities in contexts like scenes and entity cloning.
When deriving Component
, this is populated by annotating fields containing entities with #[entities]
Read moreSource§impl FromReflect for Hovered
impl FromReflect for Hovered
Source§fn from_reflect(reflect: &(dyn PartialReflect + 'static)) -> Option<Hovered>
fn from_reflect(reflect: &(dyn PartialReflect + 'static)) -> Option<Hovered>
Self
from a reflected value.Source§fn take_from_reflect(
reflect: Box<dyn PartialReflect>,
) -> Result<Self, Box<dyn PartialReflect>>
fn take_from_reflect( reflect: Box<dyn PartialReflect>, ) -> Result<Self, Box<dyn PartialReflect>>
Self
using,
constructing the value using from_reflect
if that fails. Read moreSource§impl GetOwnership for Hovered
impl GetOwnership for Hovered
Source§impl GetTypeRegistration for Hovered
impl GetTypeRegistration for Hovered
Source§fn get_type_registration() -> TypeRegistration
fn get_type_registration() -> TypeRegistration
TypeRegistration
for this type.Source§fn register_type_dependencies(registry: &mut TypeRegistry)
fn register_type_dependencies(registry: &mut TypeRegistry)
Source§impl IntoReturn for Hovered
impl IntoReturn for Hovered
Source§impl PartialReflect for Hovered
impl PartialReflect for Hovered
Source§fn get_represented_type_info(&self) -> Option<&'static TypeInfo>
fn get_represented_type_info(&self) -> Option<&'static TypeInfo>
Source§fn try_apply(
&mut self,
value: &(dyn PartialReflect + 'static),
) -> Result<(), ApplyError>
fn try_apply( &mut self, value: &(dyn PartialReflect + 'static), ) -> Result<(), ApplyError>
Source§fn reflect_kind(&self) -> ReflectKind
fn reflect_kind(&self) -> ReflectKind
Source§fn reflect_ref(&self) -> ReflectRef<'_>
fn reflect_ref(&self) -> ReflectRef<'_>
Source§fn reflect_mut(&mut self) -> ReflectMut<'_>
fn reflect_mut(&mut self) -> ReflectMut<'_>
Source§fn reflect_owned(self: Box<Hovered>) -> ReflectOwned
fn reflect_owned(self: Box<Hovered>) -> ReflectOwned
Source§fn try_into_reflect(
self: Box<Hovered>,
) -> Result<Box<dyn Reflect>, Box<dyn PartialReflect>>
fn try_into_reflect( self: Box<Hovered>, ) -> Result<Box<dyn Reflect>, Box<dyn PartialReflect>>
Source§fn try_as_reflect(&self) -> Option<&(dyn Reflect + 'static)>
fn try_as_reflect(&self) -> Option<&(dyn Reflect + 'static)>
Source§fn try_as_reflect_mut(&mut self) -> Option<&mut (dyn Reflect + 'static)>
fn try_as_reflect_mut(&mut self) -> Option<&mut (dyn Reflect + 'static)>
Source§fn into_partial_reflect(self: Box<Hovered>) -> Box<dyn PartialReflect>
fn into_partial_reflect(self: Box<Hovered>) -> Box<dyn PartialReflect>
Source§fn as_partial_reflect(&self) -> &(dyn PartialReflect + 'static)
fn as_partial_reflect(&self) -> &(dyn PartialReflect + 'static)
Source§fn as_partial_reflect_mut(&mut self) -> &mut (dyn PartialReflect + 'static)
fn as_partial_reflect_mut(&mut self) -> &mut (dyn PartialReflect + 'static)
Source§fn reflect_partial_eq(
&self,
value: &(dyn PartialReflect + 'static),
) -> Option<bool>
fn reflect_partial_eq( &self, value: &(dyn PartialReflect + 'static), ) -> Option<bool>
Source§fn debug(&self, f: &mut Formatter<'_>) -> Result<(), Error>
fn debug(&self, f: &mut Formatter<'_>) -> Result<(), Error>
Source§fn reflect_clone(&self) -> Result<Box<dyn Reflect>, ReflectCloneError>
fn reflect_clone(&self) -> Result<Box<dyn Reflect>, ReflectCloneError>
Self
using reflection. Read moreSource§fn apply(&mut self, value: &(dyn PartialReflect + 'static))
fn apply(&mut self, value: &(dyn PartialReflect + 'static))
Source§fn to_dynamic(&self) -> Box<dyn PartialReflect>
fn to_dynamic(&self) -> Box<dyn PartialReflect>
Source§fn reflect_clone_and_take<T>(&self) -> Result<T, ReflectCloneError>
fn reflect_clone_and_take<T>(&self) -> Result<T, ReflectCloneError>
PartialReflect
, combines reflect_clone
and
take
in a useful fashion, automatically constructing an appropriate
ReflectCloneError
if the downcast fails. Read moreSource§fn reflect_hash(&self) -> Option<u64>
fn reflect_hash(&self) -> Option<u64>
Source§fn is_dynamic(&self) -> bool
fn is_dynamic(&self) -> bool
Source§impl Reflect for Hovered
impl Reflect for Hovered
Source§fn into_any(self: Box<Hovered>) -> Box<dyn Any>
fn into_any(self: Box<Hovered>) -> Box<dyn Any>
Box<dyn Any>
. Read moreSource§fn as_any_mut(&mut self) -> &mut (dyn Any + 'static)
fn as_any_mut(&mut self) -> &mut (dyn Any + 'static)
&mut dyn Any
. Read moreSource§fn into_reflect(self: Box<Hovered>) -> Box<dyn Reflect>
fn into_reflect(self: Box<Hovered>) -> Box<dyn Reflect>
Source§fn as_reflect(&self) -> &(dyn Reflect + 'static)
fn as_reflect(&self) -> &(dyn Reflect + 'static)
Source§fn as_reflect_mut(&mut self) -> &mut (dyn Reflect + 'static)
fn as_reflect_mut(&mut self) -> &mut (dyn Reflect + 'static)
Source§impl TupleStruct for Hovered
impl TupleStruct for Hovered
Source§fn field(&self, index: usize) -> Option<&(dyn PartialReflect + 'static)>
fn field(&self, index: usize) -> Option<&(dyn PartialReflect + 'static)>
index
as a
&dyn Reflect
.Source§fn field_mut(
&mut self,
index: usize,
) -> Option<&mut (dyn PartialReflect + 'static)>
fn field_mut( &mut self, index: usize, ) -> Option<&mut (dyn PartialReflect + 'static)>
index
as a &mut dyn Reflect
.Source§fn iter_fields(&self) -> TupleStructFieldIter<'_> ⓘ
fn iter_fields(&self) -> TupleStructFieldIter<'_> ⓘ
Source§fn to_dynamic_tuple_struct(&self) -> DynamicTupleStruct
fn to_dynamic_tuple_struct(&self) -> DynamicTupleStruct
DynamicTupleStruct
from this tuple struct.Source§fn get_represented_tuple_struct_info(&self) -> Option<&'static TupleStructInfo>
fn get_represented_tuple_struct_info(&self) -> Option<&'static TupleStructInfo>
None
if TypeInfo
is not available.Source§impl TypePath for Hovered
impl TypePath for Hovered
Source§fn type_path() -> &'static str
fn type_path() -> &'static str
Source§fn short_type_path() -> &'static str
fn short_type_path() -> &'static str
Source§fn type_ident() -> Option<&'static str>
fn type_ident() -> Option<&'static str>
Source§fn crate_name() -> Option<&'static str>
fn crate_name() -> Option<&'static str>
impl Copy for Hovered
impl Eq for Hovered
impl StructuralPartialEq for Hovered
Auto Trait Implementations§
impl Freeze for Hovered
impl RefUnwindSafe for Hovered
impl Send for Hovered
impl Sync for Hovered
impl Unpin for Hovered
impl UnwindSafe for Hovered
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<C> Bundle for Cwhere
C: Component,
impl<C> Bundle for Cwhere
C: Component,
fn component_ids( components: &mut ComponentsRegistrator<'_>, ids: &mut impl FnMut(ComponentId), )
Source§fn get_component_ids(
components: &Components,
ids: &mut impl FnMut(Option<ComponentId>),
)
fn get_component_ids( components: &Components, ids: &mut impl FnMut(Option<ComponentId>), )
Source§impl<C> BundleFromComponents for Cwhere
C: Component,
impl<C> BundleFromComponents for Cwhere
C: Component,
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> DowncastSend for T
impl<T> DowncastSend for T
Source§impl<T> DowncastSync for T
impl<T> DowncastSync for T
Source§impl<C> DynamicBundle for Cwhere
C: Component,
impl<C> DynamicBundle for Cwhere
C: Component,
Source§unsafe fn get_components(
ptr: MovingPtr<'_, C>,
func: &mut impl FnMut(StorageType, OwningPtr<'_>),
) -> <C as DynamicBundle>::Effect
unsafe fn get_components( ptr: MovingPtr<'_, C>, func: &mut impl FnMut(StorageType, OwningPtr<'_>), ) -> <C as DynamicBundle>::Effect
Source§unsafe fn apply_effect(
_ptr: MovingPtr<'_, MaybeUninit<C>>,
_entity: &mut EntityWorldMut<'_>,
)
unsafe fn apply_effect( _ptr: MovingPtr<'_, MaybeUninit<C>>, _entity: &mut EntityWorldMut<'_>, )
Source§impl<T> DynamicTypePath for Twhere
T: TypePath,
impl<T> DynamicTypePath for Twhere
T: TypePath,
Source§fn reflect_type_path(&self) -> &str
fn reflect_type_path(&self) -> &str
TypePath::type_path
.Source§fn reflect_short_type_path(&self) -> &str
fn reflect_short_type_path(&self) -> &str
Source§fn reflect_type_ident(&self) -> Option<&str>
fn reflect_type_ident(&self) -> Option<&str>
TypePath::type_ident
.Source§fn reflect_crate_name(&self) -> Option<&str>
fn reflect_crate_name(&self) -> Option<&str>
TypePath::crate_name
.Source§fn reflect_module_path(&self) -> Option<&str>
fn reflect_module_path(&self) -> Option<&str>
Source§impl<T> DynamicTyped for Twhere
T: Typed,
impl<T> DynamicTyped for Twhere
T: Typed,
Source§fn reflect_type_info(&self) -> &'static TypeInfo
fn reflect_type_info(&self) -> &'static TypeInfo
Typed::type_info
.Source§impl<Q, K> Equivalent<K> for Q
impl<Q, K> Equivalent<K> for Q
Source§fn equivalent(&self, key: &K) -> bool
fn equivalent(&self, key: &K) -> bool
key
and return true
if they are equal.Source§impl<Q, K> Equivalent<K> for Q
impl<Q, K> Equivalent<K> for Q
Source§impl<T> FmtForward for T
impl<T> FmtForward for T
Source§fn fmt_binary(self) -> FmtBinary<Self>where
Self: Binary,
fn fmt_binary(self) -> FmtBinary<Self>where
Self: Binary,
self
to use its Binary
implementation when Debug
-formatted.Source§fn fmt_display(self) -> FmtDisplay<Self>where
Self: Display,
fn fmt_display(self) -> FmtDisplay<Self>where
Self: Display,
self
to use its Display
implementation when
Debug
-formatted.Source§fn fmt_lower_exp(self) -> FmtLowerExp<Self>where
Self: LowerExp,
fn fmt_lower_exp(self) -> FmtLowerExp<Self>where
Self: LowerExp,
self
to use its LowerExp
implementation when
Debug
-formatted.Source§fn fmt_lower_hex(self) -> FmtLowerHex<Self>where
Self: LowerHex,
fn fmt_lower_hex(self) -> FmtLowerHex<Self>where
Self: LowerHex,
self
to use its LowerHex
implementation when
Debug
-formatted.Source§fn fmt_octal(self) -> FmtOctal<Self>where
Self: Octal,
fn fmt_octal(self) -> FmtOctal<Self>where
Self: Octal,
self
to use its Octal
implementation when Debug
-formatted.Source§fn fmt_pointer(self) -> FmtPointer<Self>where
Self: Pointer,
fn fmt_pointer(self) -> FmtPointer<Self>where
Self: Pointer,
self
to use its Pointer
implementation when
Debug
-formatted.Source§fn fmt_upper_exp(self) -> FmtUpperExp<Self>where
Self: UpperExp,
fn fmt_upper_exp(self) -> FmtUpperExp<Self>where
Self: UpperExp,
self
to use its UpperExp
implementation when
Debug
-formatted.Source§fn fmt_upper_hex(self) -> FmtUpperHex<Self>where
Self: UpperHex,
fn fmt_upper_hex(self) -> FmtUpperHex<Self>where
Self: UpperHex,
self
to use its UpperHex
implementation when
Debug
-formatted.Source§impl<S> FromSample<S> for S
impl<S> FromSample<S> for S
fn from_sample_(s: S) -> S
Source§impl<T> FromWorld for Twhere
T: Default,
impl<T> FromWorld for Twhere
T: Default,
Source§fn from_world(_world: &mut World) -> T
fn from_world(_world: &mut World) -> T
Creates Self
using default()
.
Source§impl<T> GetPath for T
impl<T> GetPath for T
Source§fn reflect_path<'p>(
&self,
path: impl ReflectPath<'p>,
) -> Result<&(dyn PartialReflect + 'static), ReflectPathError<'p>>
fn reflect_path<'p>( &self, path: impl ReflectPath<'p>, ) -> Result<&(dyn PartialReflect + 'static), ReflectPathError<'p>>
path
. Read moreSource§fn reflect_path_mut<'p>(
&mut self,
path: impl ReflectPath<'p>,
) -> Result<&mut (dyn PartialReflect + 'static), ReflectPathError<'p>>
fn reflect_path_mut<'p>( &mut self, path: impl ReflectPath<'p>, ) -> Result<&mut (dyn PartialReflect + 'static), ReflectPathError<'p>>
path
. Read moreSource§fn path<'p, T>(
&self,
path: impl ReflectPath<'p>,
) -> Result<&T, ReflectPathError<'p>>where
T: Reflect,
fn path<'p, T>(
&self,
path: impl ReflectPath<'p>,
) -> Result<&T, ReflectPathError<'p>>where
T: Reflect,
path
. Read moreSource§fn path_mut<'p, T>(
&mut self,
path: impl ReflectPath<'p>,
) -> Result<&mut T, ReflectPathError<'p>>where
T: Reflect,
fn path_mut<'p, T>(
&mut self,
path: impl ReflectPath<'p>,
) -> Result<&mut T, ReflectPathError<'p>>where
T: Reflect,
path
. Read moreSource§impl<S> GetTupleStructField for Swhere
S: TupleStruct,
impl<S> GetTupleStructField for Swhere
S: TupleStruct,
Source§impl<T, W> HasTypeWitness<W> for Twhere
W: MakeTypeWitness<Arg = T>,
T: ?Sized,
impl<T, W> HasTypeWitness<W> for Twhere
W: MakeTypeWitness<Arg = T>,
T: ?Sized,
Source§impl<T> Identity for Twhere
T: ?Sized,
impl<T> Identity for Twhere
T: ?Sized,
Source§impl<T> InitializeFromFunction<T> for T
impl<T> InitializeFromFunction<T> for T
Source§fn initialize_from_function(f: fn() -> T) -> T
fn initialize_from_function(f: fn() -> T) -> T
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 moreSource§impl<T> IntoResult<T> for T
impl<T> IntoResult<T> for T
Source§fn into_result(self) -> Result<T, RunSystemError>
fn into_result(self) -> Result<T, RunSystemError>
Source§impl<F, T> IntoSample<T> for Fwhere
T: FromSample<F>,
impl<F, T> IntoSample<T> for Fwhere
T: FromSample<F>,
fn into_sample(self) -> T
Source§impl<T> Pipe for Twhere
T: ?Sized,
impl<T> Pipe for Twhere
T: ?Sized,
Source§fn pipe<R>(self, func: impl FnOnce(Self) -> R) -> Rwhere
Self: Sized,
fn pipe<R>(self, func: impl FnOnce(Self) -> R) -> Rwhere
Self: Sized,
Source§fn pipe_ref<'a, R>(&'a self, func: impl FnOnce(&'a Self) -> R) -> Rwhere
R: 'a,
fn pipe_ref<'a, R>(&'a self, func: impl FnOnce(&'a Self) -> R) -> Rwhere
R: 'a,
self
and passes that borrow into the pipe function. Read moreSource§fn pipe_ref_mut<'a, R>(&'a mut self, func: impl FnOnce(&'a mut Self) -> R) -> Rwhere
R: 'a,
fn pipe_ref_mut<'a, R>(&'a mut self, func: impl FnOnce(&'a mut Self) -> R) -> Rwhere
R: 'a,
self
and passes that borrow into the pipe function. Read moreSource§fn pipe_borrow<'a, B, R>(&'a self, func: impl FnOnce(&'a B) -> R) -> R
fn pipe_borrow<'a, B, R>(&'a self, func: impl FnOnce(&'a B) -> R) -> R
Source§fn pipe_borrow_mut<'a, B, R>(
&'a mut self,
func: impl FnOnce(&'a mut B) -> R,
) -> R
fn pipe_borrow_mut<'a, B, R>( &'a mut self, func: impl FnOnce(&'a mut B) -> R, ) -> R
Source§fn pipe_as_ref<'a, U, R>(&'a self, func: impl FnOnce(&'a U) -> R) -> R
fn pipe_as_ref<'a, U, R>(&'a self, func: impl FnOnce(&'a U) -> R) -> R
self
, then passes self.as_ref()
into the pipe function.Source§fn pipe_as_mut<'a, U, R>(&'a mut self, func: impl FnOnce(&'a mut U) -> R) -> R
fn pipe_as_mut<'a, U, R>(&'a mut self, func: impl FnOnce(&'a mut U) -> R) -> R
self
, then passes self.as_mut()
into the pipe
function.Source§fn pipe_deref<'a, T, R>(&'a self, func: impl FnOnce(&'a T) -> R) -> R
fn pipe_deref<'a, T, R>(&'a self, func: impl FnOnce(&'a T) -> R) -> R
self
, then passes self.deref()
into the pipe function.Source§impl<T> Pointable for T
impl<T> Pointable for T
Source§impl<R, P> ReadPrimitive<R> for P
impl<R, P> ReadPrimitive<R> for P
Source§fn read_from_little_endian(read: &mut R) -> Result<Self, Error>
fn read_from_little_endian(read: &mut R) -> Result<Self, Error>
ReadEndian::read_from_little_endian()
.Source§impl<Ret> SpawnIfAsync<(), Ret> for Ret
impl<Ret> SpawnIfAsync<(), Ret> for Ret
Source§impl<T, O> SuperFrom<T> for Owhere
O: From<T>,
impl<T, O> SuperFrom<T> for Owhere
O: From<T>,
Source§fn super_from(input: T) -> O
fn super_from(input: T) -> O
Source§impl<T, O, M> SuperInto<O, M> for Twhere
O: SuperFrom<T, M>,
impl<T, O, M> SuperInto<O, M> for Twhere
O: SuperFrom<T, M>,
Source§fn super_into(self) -> O
fn super_into(self) -> O
Source§impl<T> Tap for T
impl<T> Tap for T
Source§fn tap_borrow<B>(self, func: impl FnOnce(&B)) -> Self
fn tap_borrow<B>(self, func: impl FnOnce(&B)) -> Self
Borrow<B>
of a value. Read moreSource§fn tap_borrow_mut<B>(self, func: impl FnOnce(&mut B)) -> Self
fn tap_borrow_mut<B>(self, func: impl FnOnce(&mut B)) -> Self
BorrowMut<B>
of a value. Read moreSource§fn tap_ref<R>(self, func: impl FnOnce(&R)) -> Self
fn tap_ref<R>(self, func: impl FnOnce(&R)) -> Self
AsRef<R>
view of a value. Read moreSource§fn tap_ref_mut<R>(self, func: impl FnOnce(&mut R)) -> Self
fn tap_ref_mut<R>(self, func: impl FnOnce(&mut R)) -> Self
AsMut<R>
view of a value. Read moreSource§fn tap_deref<T>(self, func: impl FnOnce(&T)) -> Self
fn tap_deref<T>(self, func: impl FnOnce(&T)) -> Self
Deref::Target
of a value. Read moreSource§fn tap_deref_mut<T>(self, func: impl FnOnce(&mut T)) -> Self
fn tap_deref_mut<T>(self, func: impl FnOnce(&mut T)) -> Self
Deref::Target
of a value. Read moreSource§fn tap_dbg(self, func: impl FnOnce(&Self)) -> Self
fn tap_dbg(self, func: impl FnOnce(&Self)) -> Self
.tap()
only in debug builds, and is erased in release builds.Source§fn tap_mut_dbg(self, func: impl FnOnce(&mut Self)) -> Self
fn tap_mut_dbg(self, func: impl FnOnce(&mut Self)) -> Self
.tap_mut()
only in debug builds, and is erased in release
builds.Source§fn tap_borrow_dbg<B>(self, func: impl FnOnce(&B)) -> Self
fn tap_borrow_dbg<B>(self, func: impl FnOnce(&B)) -> Self
.tap_borrow()
only in debug builds, and is erased in release
builds.Source§fn tap_borrow_mut_dbg<B>(self, func: impl FnOnce(&mut B)) -> Self
fn tap_borrow_mut_dbg<B>(self, func: impl FnOnce(&mut B)) -> Self
.tap_borrow_mut()
only in debug builds, and is erased in release
builds.Source§fn tap_ref_dbg<R>(self, func: impl FnOnce(&R)) -> Self
fn tap_ref_dbg<R>(self, func: impl FnOnce(&R)) -> Self
.tap_ref()
only in debug builds, and is erased in release
builds.Source§fn tap_ref_mut_dbg<R>(self, func: impl FnOnce(&mut R)) -> Self
fn tap_ref_mut_dbg<R>(self, func: impl FnOnce(&mut R)) -> Self
.tap_ref_mut()
only in debug builds, and is erased in release
builds.Source§fn tap_deref_dbg<T>(self, func: impl FnOnce(&T)) -> Self
fn tap_deref_dbg<T>(self, func: impl FnOnce(&T)) -> Self
.tap_deref()
only in debug builds, and is erased in release
builds.