diff --git a/crates/bevy_reflect/src/impls/smallvec.rs b/crates/bevy_reflect/src/impls/smallvec.rs index 918f74d40cc09..11f3c80012110 100644 --- a/crates/bevy_reflect/src/impls/smallvec.rs +++ b/crates/bevy_reflect/src/impls/smallvec.rs @@ -54,6 +54,10 @@ where }); SmallVec::push(self, value); } + + fn pop(&mut self) -> Option> { + self.pop().map(|value| Box::new(value) as Box) + } } impl Reflect for SmallVec diff --git a/crates/bevy_reflect/src/impls/std.rs b/crates/bevy_reflect/src/impls/std.rs index f89c4855ccb36..2252c90cb4115 100644 --- a/crates/bevy_reflect/src/impls/std.rs +++ b/crates/bevy_reflect/src/impls/std.rs @@ -127,6 +127,10 @@ impl List for Vec { }); Vec::push(self, value); } + + fn pop(&mut self) -> Option> { + self.pop().map(|value| Box::new(value) as Box) + } } impl Reflect for Vec { diff --git a/crates/bevy_reflect/src/list.rs b/crates/bevy_reflect/src/list.rs index 9e8c0c65f651b..26c8840c7f06f 100644 --- a/crates/bevy_reflect/src/list.rs +++ b/crates/bevy_reflect/src/list.rs @@ -15,6 +15,9 @@ pub trait List: Reflect + Array { /// Appends an element to the list. fn push(&mut self, value: Box); + /// Removes the last element from the list (highest index in the array) and returns it, or [`None`] if it is empty. + fn pop(&mut self) -> Option>; + /// Clones the list, producing a [`DynamicList`]. fn clone_dynamic(&self) -> DynamicList { DynamicList { @@ -151,6 +154,10 @@ impl List for DynamicList { DynamicList::push_box(self, value); } + fn pop(&mut self) -> Option> { + self.values.pop() + } + fn clone_dynamic(&self) -> DynamicList { DynamicList { name: self.name.clone(),