bevy_ecs::change_detection

Struct MutUntyped

Source
pub struct MutUntyped<'w> { /* private fields */ }
Expand description

Unique mutable borrow of resources or an entity’s component.

Similar to Mut, but not generic over the component type, instead exposing the raw pointer as a *mut ().

Usually you don’t need to use this and can instead use the APIs returning a Mut, but in situations where the types are not known at compile time or are defined outside of rust this can be used.

Implementations§

Source§

impl<'w> MutUntyped<'w>

Source

pub fn into_inner(self) -> PtrMut<'w>

Returns the pointer to the value, marking it as changed.

In order to avoid marking the value as changed, you need to call bypass_change_detection.

Source

pub fn reborrow(&mut self) -> MutUntyped<'_>

Returns a MutUntyped with a smaller lifetime. This is useful if you have &mut MutUntyped, but you need a MutUntyped.

Source

pub fn has_changed_since(&self, tick: Tick) -> bool

Returns true if this value was changed or mutably dereferenced either since a specific change tick.

Source

pub fn as_mut(&mut self) -> PtrMut<'_>

Returns a pointer to the value without taking ownership of this smart pointer, marking it as changed.

In order to avoid marking the value as changed, you need to call bypass_change_detection.

Source

pub fn as_ref(&self) -> Ptr<'_>

Returns an immutable pointer to the value without taking ownership.

Source

pub fn map_unchanged<T: ?Sized>( self, f: impl FnOnce(PtrMut<'w>) -> &'w mut T, ) -> Mut<'w, T>

Turn this MutUntyped into a Mut by mapping the inner PtrMut to another value, without flagging a change. This function is the untyped equivalent of Mut::map_unchanged.

You should never modify the argument passed to the closure – if you want to modify the data without flagging a change, consider using bypass_change_detection to make your intent explicit.

If you know the type of the value you can do

// SAFETY: ptr is of type `u8`
mut_untyped.map_unchanged(|ptr| unsafe { ptr.deref_mut::<u8>() });

If you have a ReflectFromPtr that you know belongs to this MutUntyped, you can do

// SAFETY: from the context it is known that `ReflectFromPtr` was made for the type of the `MutUntyped`
mut_untyped.map_unchanged(|ptr| unsafe { reflect_from_ptr.as_reflect_mut(ptr) });
Source

pub unsafe fn with_type<T>(self) -> Mut<'w, T>

Transforms this MutUntyped into a Mut<T> with the same lifetime.

§Safety
  • T must be the erased pointee type for this MutUntyped.

Trait Implementations§

Source§

impl Debug for MutUntyped<'_>

Source§

fn fmt(&self, f: &mut Formatter<'_>) -> Result

Formats the value using the given formatter. Read more
Source§

impl<'w> DetectChanges for MutUntyped<'w>

Source§

fn is_added(&self) -> bool

Returns true if this value was added after the system last ran.
Source§

fn is_changed(&self) -> bool

Returns true if this value was added or mutably dereferenced either since the last time the system ran or, if the system never ran, since the beginning of the program. Read more
Source§

fn last_changed(&self) -> Tick

Returns the change tick recording the time this data was most recently changed. Read more
Source§

impl<'w> DetectChangesMut for MutUntyped<'w>

Source§

type Inner = PtrMut<'w>

The type contained within this smart pointer Read more
Source§

fn set_changed(&mut self)

Flags this value as having been changed. Read more
Source§

fn set_last_changed(&mut self, last_changed: Tick)

Manually sets the change tick recording the time when this data was last mutated. Read more
Source§

fn bypass_change_detection(&mut self) -> &mut Self::Inner

Manually bypasses change detection, allowing you to mutate the underlying value without updating the change tick. Read more
Source§

fn set_if_neq(&mut self, value: Self::Inner) -> bool
where Self::Inner: Sized + PartialEq,

Overwrites this smart pointer with the given value, if and only if *self != value. Returns true if the value was overwritten, and returns false if it was not. Read more
Source§

fn replace_if_neq(&mut self, value: Self::Inner) -> Option<Self::Inner>
where Self::Inner: Sized + PartialEq,

Overwrites this smart pointer with the given value, if and only if *self != value, returning the previous value if this occurs. Read more
Source§

impl<'w, T> From<Mut<'w, T>> for MutUntyped<'w>

Source§

fn from(value: Mut<'w, T>) -> Self

Converts to this type from the input type.

Auto Trait Implementations§

§

impl<'w> Freeze for MutUntyped<'w>

§

impl<'w> RefUnwindSafe for MutUntyped<'w>

§

impl<'w> !Send for MutUntyped<'w>

§

impl<'w> !Sync for MutUntyped<'w>

§

impl<'w> Unpin for MutUntyped<'w>

§

impl<'w> !UnwindSafe for MutUntyped<'w>

Blanket Implementations§

Source§

impl<T> Any for T
where T: 'static + ?Sized,

Source§

fn type_id(&self) -> TypeId

Gets the TypeId of self. Read more
Source§

impl<T> Borrow<T> for T
where T: ?Sized,

Source§

fn borrow(&self) -> &T

Immutably borrows from an owned value. Read more
Source§

impl<T> BorrowMut<T> for T
where T: ?Sized,

Source§

fn borrow_mut(&mut self) -> &mut T

Mutably borrows from an owned value. Read more
Source§

impl<T> Downcast for T
where T: Any,

Source§

fn into_any(self: Box<T>) -> Box<dyn Any>

Convert 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>

Convert 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)

Convert &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)

Convert &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> From<T> for T

Source§

fn from(t: T) -> T

Returns the argument unchanged.

Source§

impl<T> Instrument for T

Source§

fn instrument(self, span: Span) -> Instrumented<Self>

Instruments this type with the provided Span, returning an Instrumented wrapper. Read more
Source§

fn in_current_span(self) -> Instrumented<Self>

Instruments this type with the current Span, returning an Instrumented wrapper. Read more
Source§

impl<T, U> Into<U> for T
where U: From<T>,

Source§

fn into(self) -> U

Calls U::from(self).

That is, this conversion is whatever the implementation of From<T> for U chooses to do.

Source§

impl<T, U> TryFrom<U> for T
where U: Into<T>,

Source§

type Error = Infallible

The type returned in the event of a conversion error.
Source§

fn try_from(value: U) -> Result<T, <T as TryFrom<U>>::Error>

Performs the conversion.
Source§

impl<T, U> TryInto<U> for T
where U: TryFrom<T>,

Source§

type Error = <U as TryFrom<T>>::Error

The type returned in the event of a conversion error.
Source§

fn try_into(self) -> Result<U, <U as TryFrom<T>>::Error>

Performs the conversion.
Source§

impl<V, T> VZip<V> for T
where V: MultiLane<T>,

Source§

fn vzip(self) -> V

Source§

impl<T> WithSubscriber for T

Source§

fn with_subscriber<S>(self, subscriber: S) -> WithDispatch<Self>
where S: Into<Dispatch>,

Attaches the provided Subscriber to this type, returning a WithDispatch wrapper. Read more
Source§

fn with_current_subscriber(self) -> WithDispatch<Self>

Attaches the current default Subscriber to this type, returning a WithDispatch wrapper. Read more