diff options
Diffstat (limited to 'src/preload/mod.rs')
-rw-r--r-- | src/preload/mod.rs | 38 |
1 files changed, 30 insertions, 8 deletions
diff --git a/src/preload/mod.rs b/src/preload/mod.rs index b90db38..266cb37 100644 --- a/src/preload/mod.rs +++ b/src/preload/mod.rs @@ -13,8 +13,8 @@ mod systems; mod resources; pub use resources::*; -mod events; -pub use events::DirworldPreload; +pub mod events; +pub use events::*; pub(crate) struct DirworldPreloadPlugin; @@ -22,9 +22,17 @@ impl Plugin for DirworldPreloadPlugin { fn build(&self, app: &mut App) { app.add_systems( PostUpdate, - systems::handle_preload.run_if(in_state(PreloadState::Loading)), + ( + systems::cache_preload_paths, + systems::handle_preload.run_if(in_state(PreloadState::Loading)), + ), ) .add_systems(OnEnter(PreloadState::Done), systems::handle_spawn) + .add_event::<DirworldPreloadBegin>() + .insert_resource(PreloadPaths { + src: PathBuf::new(), + dst: PathBuf::new(), + }) .init_resource::<RoomAssets>() .init_state::<PreloadState>(); } @@ -52,6 +60,7 @@ pub fn load_entity( preload_state: &mut NextState<PreloadState>, room_assets: &mut RoomAssets, ) { + info!("Entity: {entry:?}"); let (mut payload, data) = extract_entity_payload(&entry, &codecs); payload = payload.map(|p| cache.get_entity_cache(&entry).unwrap_or(p)); let entry_type = if entry.is_dir() { @@ -59,13 +68,26 @@ pub fn load_entity( } else { EntryType::File(entry.extensions()) }; - let transform = payload - .as_ref() - .map(|payload| payload.transform.clone()) - .unwrap_or_default(); + let transform = if entry.file_name().is_none() { + payload + .as_ref() + .map(|payload| { + payload + .door_destination + .as_ref() + .expect("Door destination missing from payload!") + .0 + }) + .unwrap_or_default() + } else { + payload + .as_ref() + .map(|payload| payload.transform.0) + .unwrap_or_default() + }; let entity = commands .spawn(( - *transform, + transform, Visibility::Inherited, DirworldEntity { path: entry.clone(), |