space_editor_core/
load.rs1use bevy::{prelude::*, utils::HashMap};
2use space_shared::*;
3
4use crate::EditorLoader;
5
6pub fn load_listener(world: &mut World) {
7 let app_registry = world.resource::<AppTypeRegistry>().clone();
8 let load_server = world.resource::<EditorLoader>().clone();
9 let mut prefab;
10 {
11 let assets = world.resource::<Assets<DynamicScene>>();
12 if let Some(scene) = &load_server.scene {
13 if let Some(scene) = assets.get(scene) {
14 let mut scene = Scene::from_dynamic_scene(scene, &app_registry).unwrap();
15 scene.world.insert_resource(app_registry);
16 prefab = DynamicScene::from_scene(&scene); } else {
18 return;
19 }
20 } else {
21 return;
22 }
23 }
24 world.resource_mut::<EditorLoader>().scene = None;
25
26 let mut query = world.query_filtered::<Entity, With<PrefabMarker>>();
27 let mark_to_delete: Vec<_> = query.iter(world).collect();
28 for entity in mark_to_delete {
29 if let Some(e) = world.get_entity_mut(entity) {
30 e.despawn_recursive();
31 }
32 }
33
34 for entity in &mut prefab.entities {
35 entity.components.push(Box::new(PrefabMarker));
36 }
37
38 let mut map = HashMap::new();
39 let res = prefab.write_to_world(world, &mut map);
40 match res {
41 Ok(_) => { }
42 Err(err) => {
43 bevy::log::error!("{}", err)
44 }
45 }
46}