This commit is contained in:
Kristoffer Søholm 2025-07-16 19:05:28 -04:00 committed by GitHub
commit f7f47a42f9
No known key found for this signature in database
GPG Key ID: B5690EEEBB952194
2 changed files with 35 additions and 20 deletions

View File

@ -91,8 +91,8 @@ fn on_insert_tilemap_chunk(mut world: DeferredWorld, HookContext { entity, .. }:
"Invalid indices length for tilemap chunk {} of size {}. Expected {}, got {}", "Invalid indices length for tilemap chunk {} of size {}. Expected {}, got {}",
entity, entity,
chunk_size, chunk_size,
expected_indices_length,
indices.len(), indices.len(),
expected_indices_length
); );
return; return;
} }

View File

@ -28,21 +28,32 @@ fn setup(mut commands: Commands, assets: Res<AssetServer>) {
let chunk_size = UVec2::splat(64); let chunk_size = UVec2::splat(64);
let tile_display_size = UVec2::splat(8); let tile_display_size = UVec2::splat(8);
let indices: Vec<Option<u16>> = (0..chunk_size.element_product())
.map(|_| rng.gen_range(0..5))
.map(|i| if i == 0 { None } else { Some(i - 1) })
.collect();
commands.spawn(( let tileset = assets.load("textures/array_texture.png");
TilemapChunk {
chunk_size, for x in 0..2 {
tile_display_size, for y in 0..2 {
tileset: assets.load("textures/array_texture.png"), let indices: Vec<Option<u16>> = (0..chunk_size.element_product())
..default() .map(|_| rng.gen_range(0..5))
}, .map(|i| if i == 0 { None } else { Some(i - 1) })
TilemapChunkIndices(indices), .collect();
UpdateTimer(Timer::from_seconds(0.1, TimerMode::Repeating)), commands.spawn((
)); TilemapChunk {
chunk_size,
tile_display_size,
tileset: tileset.clone(),
..default()
},
TilemapChunkIndices(indices),
Transform::from_translation(Vec3::new(
x as f32 * 512.0 - 256.0,
y as f32 * 512.0 - 256.0,
0.0,
)),
UpdateTimer(Timer::from_seconds(0.1, TimerMode::Repeating)),
));
}
}
commands.spawn(Camera2d); commands.spawn(Camera2d);
@ -50,15 +61,19 @@ fn setup(mut commands: Commands, assets: Res<AssetServer>) {
} }
fn update_tileset_image( fn update_tileset_image(
chunk_query: Single<&TilemapChunk>, chunk_query: Query<&TilemapChunk>,
mut events: EventReader<AssetEvent<Image>>, mut events: EventReader<AssetEvent<Image>>,
mut images: ResMut<Assets<Image>>, mut images: ResMut<Assets<Image>>,
) { ) {
let chunk = *chunk_query;
for event in events.read() { for event in events.read() {
if event.is_loaded_with_dependencies(chunk.tileset.id()) { if let AssetEvent::LoadedWithDependencies { id } = event {
let image = images.get_mut(&chunk.tileset).unwrap(); for chunk in chunk_query.iter() {
image.reinterpret_stacked_2d_as_array(4); if chunk.tileset.id() == *id {
let image = images.get_mut(&chunk.tileset).unwrap();
image.reinterpret_stacked_2d_as_array(4);
break;
}
}
} }
} }
} }