diff --git a/src/main.rs b/src/main.rs index faa7820..bb78c4f 100644 --- a/src/main.rs +++ b/src/main.rs @@ -102,7 +102,7 @@ fn main() -> AppExit { OnEnter(View::LoadingGame), (player::startup, statue::startup, map::spawn), ) - .add_systems(OnEnter(View::InGame), (map::finalize)) + .add_systems(OnEnter(View::InGame), map::finalize) .add_systems( OnExit(View::InGame), (player::exit, statue::exit, map::exit), diff --git a/src/map.rs b/src/map.rs index 17477fc..e303406 100644 --- a/src/map.rs +++ b/src/map.rs @@ -18,7 +18,7 @@ pub struct Tilemap; #[derive(Component)] struct MapGenTask(Task); -#[derive(Resource, Deref)] +#[derive(Resource, Deref, DerefMut)] struct TileStorageHandle(TileStorage); pub fn spawn(mut commands: Commands, assets: Res) { @@ -41,8 +41,7 @@ pub fn spawn(mut commands: Commands, assets: Res) { let task = pool.spawn(async move { let mut command_queue = CommandQueue::default(); command_queue.push(move |world: &mut World| { - let mut state = SystemState::>::new(world); - let storage = state.get_mut(world); + let mut state = SystemState::>::new(world); let entity = world .spawn(( HideFromInspector, @@ -54,10 +53,13 @@ pub fn spawn(mut commands: Commands, assets: Res) { }, )) .id(); + + let mut storage = state.get_mut(world); storage.set(&position, entity); }); command_queue }); + commands.entity(tilemap).insert(MapGenTask(task)); } } } @@ -73,19 +75,25 @@ fn load(mut commands: Commands, mut tasks: Query<&mut MapGenTask>) { } pub fn finalize( - mut commands: Commands, - mut storage: Res, - tilemap: Query>, - assets: Res, + // mut commands: Commands, + // mut storage: Res, + // tilemap: Query>, + // assets: Res, + world: &mut World, ) { + let storage = world.remove_resource::().unwrap(); + // TODO: dedupe with load let size = TilemapSize::new(1024, 1024); - let texture = TilemapTexture::Single(assets.load("img/Tileset Grass.png")); let tile_size = TilemapTileSize::new(16., 16.); let grid_size = TilemapGridSize::new(16., 16.); let map_type = TilemapType::Square; let storage = storage.0; - let tilemap = tilemap.single(); + let mut query = world.query_filtered::>(); + let tilemap = query.single(world); + let assets = world.resource::(); + let texture = TilemapTexture::Single(assets.load("img/Tileset Grass.png")); + let mut commands = world.commands(); commands.entity(tilemap).insert(TilemapBundle { grid_size, map_type,