diff --git a/crates/bevy_reflect/src/impls/smallvec.rs b/crates/bevy_reflect/src/impls/smallvec.rs index 918f74d40cc097..11f3c800121100 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 b79858d16c9bd2..5c48fbabca74a2 100644 --- a/crates/bevy_reflect/src/impls/std.rs +++ b/crates/bevy_reflect/src/impls/std.rs @@ -137,6 +137,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 9e8c0c65f651bb..26c8840c7f06f6 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(),