Newer
Older
use std::collections::HashMap;
use bevy::prelude::*;
use crate::assets::{LevelIndex, TileMetadata, TilesetIndex};
use crate::{LdtkLevel, LevelDataUpdated};
pub fn handle_ldtk_project_events(
mut events: EventReader<AssetEvent<Project>>,
assets: Res<Assets<Project>>,
mut level_index: ResMut<LevelIndex>,
mut tilset_index: ResMut<TilesetIndex>,
mut update_events: EventWriter<LevelDataUpdated>,
) {
for event in events.iter() {
match event {
AssetEvent::Created { handle } | AssetEvent::Modified { handle } => {
if let Some(project) = assets.get(handle) {
for level in project.get_all_levels() {
if level.external_rel_path.is_none() {
level_index
.insert(level.identifier.clone(), LdtkLevel::from(level.clone()));
update_events.send(LevelDataUpdated(level.identifier.clone()));
}
}
for tileset in &project.defs.tilesets {
let mut tile_meta = HashMap::new();
for custom in &tileset.custom_data {
tile_meta.insert(
custom.tile_id,
serde_json::from_str(&custom.data).unwrap(),
);
}
tilset_index.insert(tileset.identifier.clone(), TileMetadata(tile_meta));
}
}
}
_ => {}
}
}
}
pub fn handle_ldtk_level_events(
mut events: EventReader<AssetEvent<Level>>,
assets: Res<Assets<Level>>,
mut level_index: ResMut<LevelIndex>,
mut update_events: EventWriter<LevelDataUpdated>,
) {
for event in events.iter() {
match event {
AssetEvent::Created { handle } | AssetEvent::Modified { handle } => {
if let Some(level) = assets.get(handle) {
level_index.insert(level.identifier.clone(), LdtkLevel::from(level.clone()));
update_events.send(LevelDataUpdated(level.identifier.clone()));
}
}
_ => {}
}
}
}