aboutsummaryrefslogtreecommitdiff
path: root/src/preload/systems.rs
blob: ec867ae2922f67f53eb60fba240cfdfc72b44c4d (plain)
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());
        }
    }
}