use std::collections::HashMap; use bevy::prelude::*; use crate::assets::{LevelIndex, TileMetadata, TilesetIndex}; use crate::ldtk::Project; 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.levels { 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)); } } } _ => {} } } }