From 9e5f782eb228a6b050b01d5c4c82dba1399f7172 Mon Sep 17 00:00:00 2001 From: Silas Bartha Date: Sat, 15 Feb 2025 20:53:19 -0500 Subject: directory-aware navigation --- src/observers.rs | 31 +++++++++++++++++++++++++------ 1 file changed, 25 insertions(+), 6 deletions(-) (limited to 'src/observers.rs') 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, mut commands: Commands, mut event_writer: EventWriter, + mut preload_event_writer: EventWriter, mut current_dir: ResMut, mut next_preload_state: ResMut>, mut room_assets: ResMut, + mut dirworld_tasks: ResMut, ) { - 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(), + }); } -- cgit v1.2.3