Add World::clear_resources & World::clear_all (#3212)
# Objective - Fixes #3158 ## Solution - clear columns My implementation of `clear_resources` do not remove the components itself but it clears the columns that keeps the resource data. I'm not sure if the issue meant to clear all resources, even the components and component ids (which I'm not sure if it's possible) Co-authored-by: 2ne1ugly <47616772+2ne1ugly@users.noreply.github.com>
This commit is contained in:
parent
b5893e570d
commit
16ff05acdf
@ -236,6 +236,12 @@ impl<const SEND: bool> Resources<SEND> {
|
||||
self.resources.get(component_id)
|
||||
}
|
||||
|
||||
/// Clears all resources.
|
||||
#[inline]
|
||||
pub fn clear(&mut self) {
|
||||
self.resources.clear();
|
||||
}
|
||||
|
||||
/// Gets mutable access to a resource, if it exists.
|
||||
#[inline]
|
||||
pub(crate) fn get_mut(&mut self, component_id: ComponentId) -> Option<&mut ResourceData<SEND>> {
|
||||
|
||||
@ -447,6 +447,12 @@ impl<I: SparseSetIndex, V> SparseSet<I, V> {
|
||||
})
|
||||
}
|
||||
|
||||
pub fn clear(&mut self) {
|
||||
self.dense.clear();
|
||||
self.indices.clear();
|
||||
self.sparse.clear();
|
||||
}
|
||||
|
||||
pub(crate) fn into_immutable(self) -> ImmutableSparseSet<I, V> {
|
||||
ImmutableSparseSet {
|
||||
dense: self.dense.into_boxed_slice(),
|
||||
|
||||
@ -1624,12 +1624,32 @@ impl World {
|
||||
self.last_check_tick = change_tick;
|
||||
}
|
||||
|
||||
/// Runs both [`clear_entities`](Self::clear_entities) and [`clear_resources`](Self::clear_resources),
|
||||
/// invalidating all [`Entity`] and resource fetches such as [`Res`](crate::system::Res), [`ResMut`](crate::system::ResMut)
|
||||
pub fn clear_all(&mut self) {
|
||||
self.clear_entities();
|
||||
self.clear_resources();
|
||||
}
|
||||
|
||||
/// Despawns all entities in this [`World`].
|
||||
pub fn clear_entities(&mut self) {
|
||||
self.storages.tables.clear();
|
||||
self.storages.sparse_sets.clear();
|
||||
self.archetypes.clear_entities();
|
||||
self.entities.clear();
|
||||
}
|
||||
|
||||
/// Clears all resources in this [`World`].
|
||||
///
|
||||
/// **Note:** Any resource fetch to this [World] will fail unless they are re-initialized,
|
||||
/// including engine-internal resources that are only initialized on app/world construction.
|
||||
///
|
||||
/// This can easily cause systems expecting certain resources to immediately start panicking.
|
||||
/// Use with caution.
|
||||
pub fn clear_resources(&mut self) {
|
||||
self.storages.resources.clear();
|
||||
self.storages.non_send_resources.clear();
|
||||
}
|
||||
}
|
||||
|
||||
impl World {
|
||||
|
||||
Loading…
Reference in New Issue
Block a user