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/preload/systems.rs | 30 +++++++++++++++++++++++++++--- 1 file changed, 27 insertions(+), 3 deletions(-) (limited to 'src/preload/systems.rs') diff --git a/src/preload/systems.rs b/src/preload/systems.rs index ec867ae..330c897 100644 --- a/src/preload/systems.rs +++ b/src/preload/systems.rs @@ -1,13 +1,31 @@ use bevy::prelude::*; -use crate::{components::DirworldEntity, events::DirworldSpawn, resources::{DirworldObservers, EntryType}, Extensions}; +use crate::{ + components::DirworldEntity, + events::{DirworldNavigationComplete, DirworldSpawn}, + resources::{DirworldObservers, DirworldTasks, EntryType}, + Extensions, +}; -use super::{PreloadState, RoomAssets}; +use super::{ + DirworldPreloadBegin, PreloadPaths, PreloadState, RoomAssets, +}; + +pub fn cache_preload_paths( + mut event_reader: EventReader, + mut paths: ResMut, +) { + for DirworldPreloadBegin { old_path, path } in event_reader.read() { + paths.src = old_path.canonicalize().unwrap(); + paths.dst = path.canonicalize().unwrap(); + } +} pub fn handle_preload( asset_server: Res, room_assets: Res, mut next_state: ResMut>, + mut dirworld_tasks: ResMut, ) { if room_assets.is_empty() || room_assets @@ -17,13 +35,16 @@ pub fn handle_preload( { info!("Preload Done."); next_state.set(PreloadState::Done); + dirworld_tasks.remove("Loading Room"); } } pub fn handle_spawn( + preload_paths: Res, dirworld_entity_query: Query<(Entity, &DirworldEntity)>, mut commands: Commands, observers: Res, + mut event_writer: EventWriter, ) { info!("Spawning"); for (entity, DirworldEntity { path, .. }) in dirworld_entity_query.iter() { @@ -37,5 +58,8 @@ pub fn handle_spawn( commands.trigger_targets(DirworldSpawn(entity), observer.clone()); } } + event_writer.send(DirworldNavigationComplete { + from: preload_paths.src.clone(), + to: preload_paths.dst.clone(), + }); } - -- cgit v1.2.3