aboutsummaryrefslogtreecommitdiff
path: root/src/preload/mod.rs
diff options
context:
space:
mode:
Diffstat (limited to 'src/preload/mod.rs')
-rw-r--r--src/preload/mod.rs38
1 files changed, 30 insertions, 8 deletions
diff --git a/src/preload/mod.rs b/src/preload/mod.rs
index b90db38..266cb37 100644
--- a/src/preload/mod.rs
+++ b/src/preload/mod.rs
@@ -13,8 +13,8 @@ mod systems;
mod resources;
pub use resources::*;
-mod events;
-pub use events::DirworldPreload;
+pub mod events;
+pub use events::*;
pub(crate) struct DirworldPreloadPlugin;
@@ -22,9 +22,17 @@ impl Plugin for DirworldPreloadPlugin {
fn build(&self, app: &mut App) {
app.add_systems(
PostUpdate,
- systems::handle_preload.run_if(in_state(PreloadState::Loading)),
+ (
+ systems::cache_preload_paths,
+ systems::handle_preload.run_if(in_state(PreloadState::Loading)),
+ ),
)
.add_systems(OnEnter(PreloadState::Done), systems::handle_spawn)
+ .add_event::<DirworldPreloadBegin>()
+ .insert_resource(PreloadPaths {
+ src: PathBuf::new(),
+ dst: PathBuf::new(),
+ })
.init_resource::<RoomAssets>()
.init_state::<PreloadState>();
}
@@ -52,6 +60,7 @@ pub fn load_entity(
preload_state: &mut NextState<PreloadState>,
room_assets: &mut RoomAssets,
) {
+ info!("Entity: {entry:?}");
let (mut payload, data) = extract_entity_payload(&entry, &codecs);
payload = payload.map(|p| cache.get_entity_cache(&entry).unwrap_or(p));
let entry_type = if entry.is_dir() {
@@ -59,13 +68,26 @@ pub fn load_entity(
} else {
EntryType::File(entry.extensions())
};
- let transform = payload
- .as_ref()
- .map(|payload| payload.transform.clone())
- .unwrap_or_default();
+ let transform = if entry.file_name().is_none() {
+ payload
+ .as_ref()
+ .map(|payload| {
+ payload
+ .door_destination
+ .as_ref()
+ .expect("Door destination missing from payload!")
+ .0
+ })
+ .unwrap_or_default()
+ } else {
+ payload
+ .as_ref()
+ .map(|payload| payload.transform.0)
+ .unwrap_or_default()
+ };
let entity = commands
.spawn((
- *transform,
+ transform,
Visibility::Inherited,
DirworldEntity {
path: entry.clone(),