From 26e2eddd1efeb0a5fff8ffabebefdae48c4a65dc Mon Sep 17 00:00:00 2001 From: Silas Bartha Date: Thu, 21 Nov 2024 12:17:44 -0500 Subject: Thu Nov 21 12:17:44 PM EST 2024 --- src/observers.rs | 18 ++++++++++++++---- 1 file changed, 14 insertions(+), 4 deletions(-) (limited to 'src/observers.rs') 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, + trigger: Trigger, entities: Query<(Entity, Ref), Without>, mut cache: ResMut, mut commands: Commands, + mut event_writer: EventWriter, ) { 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, codecs: Res, mut commands: Commands, + mut event_writer: EventWriter, + mut current_dir: ResMut, ) { 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, codecs: Res, mut cache: ResMut, + mut event_writer: EventWriter, ) { 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, mut root_dir: ResMut, - mut current_dir: ResMut, 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())); } -- cgit v1.2.3