Only attempt to copy resources that still exist from scenes (#9984)

# Objective

Avert a panic when removing resources from Scenes.

### Reproduction Steps
```rust
let mut scene = Scene::new(World::default());
scene.world.init_resource::<Time>();
scene.world.remove_resource::<Time>();
scene.clone_with(&app.resource::<AppTypeRegistry>());
```

### Panic Message
```
thread 'Compute Task Pool (10)' panicked at 'Requested resource bevy_time::time::Time does not exist in the `World`. 
                Did you forget to add it using `app.insert_resource` / `app.init_resource`? 
                Resources are also implicitly added via `app.add_event`,
                and can be added by plugins.', .../bevy/crates/bevy_ecs/src/reflect/resource.rs:203:52

```

## Solution

Check that the resource actually still exists before copying.

---

## Changelog

- resolved a panic caused by removing resources from scenes
This commit is contained in:
Ricky Taylor 2023-10-02 01:05:36 +01:00 committed by GitHub
parent 0792dde8d5
commit 0f20cfaa57
No known key found for this signature in database
GPG key ID: 4AEE18F83AFDEB23

View file

@ -63,7 +63,11 @@ impl Scene {
let type_registry = type_registry.read();
// Resources archetype
for (component_id, _) in self.world.storages().resources.iter() {
for (component_id, resource_data) in self.world.storages().resources.iter() {
if !resource_data.is_present() {
continue;
}
let component_info = self
.world
.components()