diff options
Diffstat (limited to 'src/observers.rs')
-rw-r--r-- | src/observers.rs | 31 |
1 files changed, 25 insertions, 6 deletions
diff --git a/src/observers.rs b/src/observers.rs index bd1d1a6..faa4749 100644 --- a/src/observers.rs +++ b/src/observers.rs @@ -7,9 +7,17 @@ use notify::{ }; use crate::{ - cache::DirworldCache, components::{DirworldEntity, Persist}, events::{DirworldChangeRoot, DirworldEnterRoom, DirworldLeaveRoom}, preload::{load_entity, PreloadState, RoomAssets}, resources::{ - DirworldCodecs, DirworldCurrentDir, DirworldObservers, DirworldRootDir, - }, utils::{despawn_entity_by_path, extract_entity_payload}, DirworldWatcherEvent + cache::DirworldCache, + components::{DirworldEntity, Persist}, + events::{ + DirworldChangeRoot, DirworldEnterRoom, DirworldLeaveRoom, DirworldNavigationComplete, + }, + preload::{load_entity, DirworldPreloadBegin, PreloadState, RoomAssets}, + resources::{ + DirworldCodecs, DirworldCurrentDir, DirworldObservers, DirworldRootDir, DirworldTasks, + }, + utils::{despawn_entity_by_path, extract_entity_payload}, + DirworldWatcherEvent, }; /// On navigation from a room, insert modified payloads into the cache @@ -35,11 +43,16 @@ pub fn navigate_to_room( codecs: Res<DirworldCodecs>, mut commands: Commands, mut event_writer: EventWriter<DirworldEnterRoom>, + mut preload_event_writer: EventWriter<DirworldPreloadBegin>, mut current_dir: ResMut<DirworldCurrentDir>, mut next_preload_state: ResMut<NextState<PreloadState>>, mut room_assets: ResMut<RoomAssets>, + mut dirworld_tasks: ResMut<DirworldTasks>, ) { - let path = &trigger.event().0; + let DirworldEnterRoom { + exited: old_path, + entered: path, + } = &trigger.event(); let room_payload = extract_entity_payload(&path.join(".door"), &codecs).0; *current_dir = DirworldCurrentDir { @@ -60,6 +73,7 @@ pub fn navigate_to_room( root_dir .clone() .map(|root_dir| { + info!("Root: {root_dir:?}, Path: {path:?}"); if root_dir == *path { None } else { @@ -75,6 +89,7 @@ pub fn navigate_to_room( } }; + dirworld_tasks.insert("Loading Room".into(), None); for entry in entries { load_entity( &entry, @@ -86,6 +101,7 @@ pub fn navigate_to_room( &mut room_assets, ); } + preload_event_writer.send(DirworldPreloadBegin { old_path: old_path.clone(), path: path.clone() }); event_writer.send(trigger.event().clone()); } @@ -161,9 +177,12 @@ pub fn change_root( commands.trigger(DirworldLeaveRoom(old_dir.to_path_buf())); }; - let new_root = &trigger.event().0; + let new_root = &trigger.event().0.canonicalize().unwrap(); info!("Changing Root to {}", new_root.display()); **root_dir = Some(new_root.to_path_buf()); - commands.trigger(DirworldEnterRoom(new_root.to_path_buf())); + commands.trigger(DirworldEnterRoom { + exited: new_root.to_path_buf(), + entered: new_root.to_path_buf(), + }); } |