use crate::prelude::*; use bevy_ecs_tilemap::prelude::*; use rand::prelude::*; use rand_pcg::Pcg64; use rand_seeder::Seeder; #[derive(Component, Debug)] pub struct Tilemap; pub fn spawn(mut commands: Commands, assets: Res) { // let task_pool = AsyncComputeTaskPool::get(); // let task = task_pool.spawn(async move {}); let mut rng: Pcg64 = Seeder::from("stripy zebra").make_rng(); let size = TilemapSize { x: 1024, y: 1024 }; let tilemap_entity = commands.spawn_empty().id(); let mut tile_storage = TileStorage::empty(size); let mut batch = Vec::::with_capacity(size.x as usize * size.y as usize); for x in 0..size.x { for y in 0..size.y { let tile_pos = TilePos { x, y }; let texture_index = TileTextureIndex(if rng.gen_range(0..1000) > 925 { rng.gen_range(0..(16 * 8)) } else { 0 }); // let texture_index = TileTextureIndex(0); // let tile_entity = commands // .spawn(TileBundle { // position: tile_pos, // tilemap_id: TilemapId(tilemap_entity), // texture_index, // ..Default::default() // }) // .id(); // let tile_entity = commands batch.push(TileBundle { position: tile_pos, tilemap_id: TilemapId(tilemap_entity), texture_index, ..Default::default() }); // .id(); // tile_storage.set(&tile_pos, tile_entity); } } commands.spawn_batch(batch); // for tb in batch { // tile_storage.set(&tile_pos, tile_entity); // } let texture_handle: Handle = assets.load("img/Tileset Grass.png"); let tile_size = TilemapTileSize { x: 16.0, y: 16.0 }; let grid_size = tile_size.into(); let map_type = TilemapType::default(); let texture = TilemapTexture::Single(texture_handle); commands.entity(tilemap_entity).insert(( Tilemap, TilemapBundle { grid_size, map_type, size, storage: tile_storage, texture, tile_size, transform: get_tilemap_center_transform(&size, &grid_size, &map_type, f32::MIN), ..default() }, )); } pub fn exit(mut commands: Commands, q: Query>) { for id in q.iter() { commands.entity(id).despawn_recursive(); } }