aboutsummaryrefslogtreecommitdiff
path: root/src/observers.rs
diff options
context:
space:
mode:
Diffstat (limited to 'src/observers.rs')
-rw-r--r--src/observers.rs18
1 files changed, 14 insertions, 4 deletions
diff --git a/src/observers.rs b/src/observers.rs
index b321c53..44edb50 100644
--- a/src/observers.rs
+++ b/src/observers.rs
@@ -12,16 +12,17 @@ use crate::{
resources::{
DirworldCache, DirworldCodecs, DirworldCurrentDir, DirworldObservers, DirworldRootDir,
},
- utils::{despawn_entity_by_path, spawn_entity},
+ utils::{despawn_entity_by_path, extract_entity_payload, spawn_entity},
DirworldWatcherEvent,
};
/// On navigation from a room, insert modified payloads into the cache
pub fn navigate_from_room(
- _: Trigger<DirworldLeaveRoom>,
+ trigger: Trigger<DirworldLeaveRoom>,
entities: Query<(Entity, Ref<DirworldEntity>), Without<Persist>>,
mut cache: ResMut<DirworldCache>,
mut commands: Commands,
+ mut event_writer: EventWriter<DirworldLeaveRoom>,
) {
for (entity, dirworld_entity) in entities.iter() {
if let Some(payload) = &dirworld_entity.payload {
@@ -30,6 +31,7 @@ pub fn navigate_from_room(
}
commands.entity(entity).despawn_recursive();
}
+ event_writer.send(trigger.event().clone());
}
pub fn navigate_to_room(
@@ -39,9 +41,16 @@ pub fn navigate_to_room(
observers: Res<DirworldObservers>,
codecs: Res<DirworldCodecs>,
mut commands: Commands,
+ mut event_writer: EventWriter<DirworldEnterRoom>,
+ mut current_dir: ResMut<DirworldCurrentDir>,
) {
let path = &trigger.event().0;
+ let room_payload = extract_entity_payload(&path.join(".door"), &codecs).0;
+ *current_dir = DirworldCurrentDir {
+ path: path.to_path_buf(),
+ payload: room_payload,
+ };
let entries = match path.read_dir() {
Ok(entries) => entries
.flatten()
@@ -74,6 +83,7 @@ pub fn navigate_to_room(
for entry in entries {
spawn_entity(&entry, &mut cache, &codecs, &observers, &mut commands);
}
+ event_writer.send(trigger.event().clone());
}
pub fn handle_changes(
@@ -83,6 +93,7 @@ pub fn handle_changes(
observers: Res<DirworldObservers>,
codecs: Res<DirworldCodecs>,
mut cache: ResMut<DirworldCache>,
+ mut event_writer: EventWriter<DirworldWatcherEvent>,
) {
let event = &trigger.event().0;
info!("Watcher Event: {event:?}");
@@ -121,12 +132,12 @@ pub fn handle_changes(
// warn!("Not Processed.")
}
}
+ event_writer.send(trigger.event().clone());
}
pub fn change_root(
trigger: Trigger<DirworldChangeRoot>,
mut root_dir: ResMut<DirworldRootDir>,
- mut current_dir: ResMut<DirworldCurrentDir>,
mut commands: Commands,
) {
if let DirworldRootDir(Some(old_dir)) = root_dir.deref() {
@@ -136,7 +147,6 @@ pub fn change_root(
let new_root = &trigger.event().0;
info!("Changing Root to {}", new_root.display());
**root_dir = Some(new_root.to_path_buf());
- **current_dir = Some(new_root.to_path_buf());
commands.trigger(DirworldEnterRoom(new_root.to_path_buf()));
}