1
1
//! Shows a tilemap chunk rendered with a single draw call.
2
2
3
+ use core:: num:: NonZero ;
4
+
3
5
use bevy:: {
6
+ image:: ImageLoaderSettings ,
4
7
prelude:: * ,
5
8
sprite:: { TileData , TilemapChunk , TilemapChunkTileData } ,
6
9
} ;
@@ -11,7 +14,7 @@ fn main() {
11
14
App :: new ( )
12
15
. add_plugins ( DefaultPlugins . set ( ImagePlugin :: default_nearest ( ) ) )
13
16
. add_systems ( Startup , setup)
14
- . add_systems ( Update , ( update_tileset_image , update_tilemap) )
17
+ . add_systems ( Update , update_tilemap)
15
18
. run ( ) ;
16
19
}
17
20
@@ -39,12 +42,18 @@ fn setup(mut commands: Commands, assets: Res<AssetServer>) {
39
42
} )
40
43
. collect ( ) ;
41
44
45
+ let layers = 4 ;
42
46
commands. spawn ( (
43
47
TilemapChunk {
44
48
chunk_size,
45
49
tile_display_size,
46
- tileset : assets. load ( "textures/array_texture.png" ) ,
47
- ..default ( )
50
+ tileset : assets. load_with_settings (
51
+ "textures/array_texture.png" ,
52
+ move |settings : & mut ImageLoaderSettings | {
53
+ settings. layers = NonZero :: new ( layers) ;
54
+ } ,
55
+ ) ,
56
+ ..Default :: default ( )
48
57
} ,
49
58
TilemapChunkTileData ( tile_data) ,
50
59
UpdateTimer ( Timer :: from_seconds ( 0.1 , TimerMode :: Repeating ) ) ,
@@ -55,20 +64,6 @@ fn setup(mut commands: Commands, assets: Res<AssetServer>) {
55
64
commands. insert_resource ( SeededRng ( rng) ) ;
56
65
}
57
66
58
- fn update_tileset_image (
59
- chunk_query : Single < & TilemapChunk > ,
60
- mut events : EventReader < AssetEvent < Image > > ,
61
- mut images : ResMut < Assets < Image > > ,
62
- ) {
63
- let chunk = * chunk_query;
64
- for event in events. read ( ) {
65
- if event. is_loaded_with_dependencies ( chunk. tileset . id ( ) ) {
66
- let image = images. get_mut ( & chunk. tileset ) . unwrap ( ) ;
67
- image. reinterpret_stacked_2d_as_array ( 4 ) ;
68
- }
69
- }
70
- }
71
-
72
67
fn update_tilemap (
73
68
time : Res < Time > ,
74
69
mut query : Query < ( & mut TilemapChunkTileData , & mut UpdateTimer ) > ,
0 commit comments