1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
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());
}
}
}
|