aboutsummaryrefslogtreecommitdiff
path: root/src/preload/systems.rs
diff options
context:
space:
mode:
authorLibravatar Silas Bartha <silas@exvacuum.dev>2024-12-24 00:54:31 -0500
committerLibravatar Silas Bartha <silas@exvacuum.dev>2024-12-24 00:54:31 -0500
commita1e9304dc31980703446bdb33246e314bafd3b15 (patch)
tree47c9dd32398a6d84050f39fac17d52d0a5d9ad4e /src/preload/systems.rs
parentf3a7c2139cb3f9074d28dd99fa1bbd10d752547e (diff)
Switched to bevy_mod_scripting, bevy 0.15 updatev0.4.0
Diffstat (limited to 'src/preload/systems.rs')
-rw-r--r--src/preload/systems.rs41
1 files changed, 41 insertions, 0 deletions
diff --git a/src/preload/systems.rs b/src/preload/systems.rs
new file mode 100644
index 0000000..ec867ae
--- /dev/null
+++ b/src/preload/systems.rs
@@ -0,0 +1,41 @@
+use bevy::prelude::*;
+
+use crate::{components::DirworldEntity, events::DirworldSpawn, resources::{DirworldObservers, EntryType}, Extensions};
+
+use super::{PreloadState, RoomAssets};
+
+pub fn handle_preload(
+ asset_server: Res<AssetServer>,
+ room_assets: Res<RoomAssets>,
+ mut next_state: ResMut<NextState<PreloadState>>,
+) {
+ if room_assets.is_empty()
+ || room_assets
+ .values()
+ .flat_map(|v| v.values())
+ .all(|a| asset_server.is_loaded_with_dependencies(a))
+ {
+ info!("Preload Done.");
+ next_state.set(PreloadState::Done);
+ }
+}
+
+pub fn handle_spawn(
+ dirworld_entity_query: Query<(Entity, &DirworldEntity)>,
+ mut commands: Commands,
+ observers: Res<DirworldObservers>,
+) {
+ info!("Spawning");
+ for (entity, DirworldEntity { path, .. }) in dirworld_entity_query.iter() {
+ let entry_type = if path.is_dir() {
+ EntryType::Folder
+ } else {
+ EntryType::File(path.extensions())
+ };
+ if let Some(observer) = observers.get(&entry_type) {
+ info!("Found observer {observer:?} for {entry_type:?}");
+ commands.trigger_targets(DirworldSpawn(entity), observer.clone());
+ }
+ }
+}
+