aboutsummaryrefslogtreecommitdiff
path: root/src/observers.rs
diff options
context:
space:
mode:
Diffstat (limited to 'src/observers.rs')
-rw-r--r--src/observers.rs31
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(),
+ });
}