use crate::{ camera, config::GameConfig, world::generation::{ generate_chunk_fauna, generate_chunk_foliage, generate_chunk_forrestry, generate_chunk_weathering_and_precipitation, apply_terrain_blobs, spawn_terrain_tasks, TerrainBlobStorage, }, }; use bevy::prelude::*; pub mod chunks; pub mod generation; pub mod textures; pub mod tiles; pub use chunks::management::*; pub use textures::management::*; pub use tiles::{prefabs::*, rendering::*, visibility::*}; pub struct WorldPlugin; impl Plugin for WorldPlugin { fn build(&self, app: &mut App) { app.init_resource::() .init_resource::() .init_resource::() .init_resource::() .init_resource::() .add_message::() .add_message::() .add_message::() .add_message::() .add_message::() .add_message::() .add_message::() .add_systems(Startup, (setup_chunk_system, setup_initial_chunks).chain()) .add_systems( FixedUpdate, ( handle_chunk_events, update_chunk_connectivity, tiles::despawn_tilemap_chunks, spawn_terrain_tasks, apply_terrain_blobs, generate_chunk_weathering_and_precipitation, generate_chunk_forrestry, generate_chunk_foliage, generate_chunk_fauna, ), ) .add_systems( Update, ( compute_visibility_of_game_entities .after(crate::entities::item::item_tile_management_system), tiles::track_benchmark, tiles::render_bench_report_system, handle_tile_occlusion_updates, tiles::spawn_tilemap_chunks, tiles::on_camera_z_changed, tiles::update_tilemap_chunk_visibility, tiles::populate_tilemap_chunk_data, ), ); } } fn setup_initial_chunks( mut event_writer: MessageWriter, config: Res, ) { let radius = config.initial_chunk_radius; for x in -radius..=radius { for y in -radius..=radius { event_writer.write(GenerateChunkEvent { chunk_position: IVec2::new(x, y), }); } } }