aboutsummaryrefslogtreecommitdiff
path: root/src/preload/systems.rs
diff options
context:
space:
mode:
Diffstat (limited to 'src/preload/systems.rs')
-rw-r--r--src/preload/systems.rs30
1 files changed, 27 insertions, 3 deletions
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<DirworldPreloadBegin>,
+ mut paths: ResMut<PreloadPaths>,
+) {
+ 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<AssetServer>,
room_assets: Res<RoomAssets>,
mut next_state: ResMut<NextState<PreloadState>>,
+ mut dirworld_tasks: ResMut<DirworldTasks>,
) {
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<PreloadPaths>,
dirworld_entity_query: Query<(Entity, &DirworldEntity)>,
mut commands: Commands,
observers: Res<DirworldObservers>,
+ mut event_writer: EventWriter<DirworldNavigationComplete>,
) {
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(),
+ });
}
-